Arduino - ps2 controller samen met motor driver shield

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • famelraider
  • Registratie: Januari 2010
  • Laatst online: 25-09 15:55
Hallo,

Na enkele sensoren te hebben geprobeerd op de arduino wil ik nu motoren aansturen via een motor driver shield. Voor de besturing heb ik een Joy ps2 controller. Deze heb ik werkend op de standaard gpio poorten.

Hoe sluit ik nu ook nog de motor driver shield aan? Want die gebruikt dezelfde poorten.

Zie bijgevoegde afbeeldingen voor de hardware.

De analoge poorten omkatten naar digitaal, zodat de ps2 controller die kan gebruiken? Zou dat werken of is er een makkelijkere manier?

Afbeeldingslocatie: https://tweakers.net/i/vnoPUZ8O3k3nqRIsXDT3wM1MBBY=/x800/filters:strip_icc():strip_exif()/f/image/PsZHGBrs5YU0x6Pn3zxcdAvq.jpg?f=fotoalbum_large
Hier staan de vrije pins aangegeven nadat de motor driver shield is aangesloten.

Afbeeldingslocatie: https://tweakers.net/i/XxoB7RP_5Vq8DNOeRUrXxJKHJcI=/x800/filters:strip_exif()/f/image/f8Sg58cFByxHVsz4Ermw2Haz.png?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/38bWZ4aGug_xnEolvhTEJRTRH7Q=/800x/filters:strip_icc():strip_exif()/f/image/1M7ZuDxvJE18jrfkQ22SkhGL.jpg?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/GDVBRXEaJooSiLvQaKOgzMS8p0I=/x800/filters:strip_exif()/f/image/AAkLIFAcACQDwarg8yWbj5ss.png?f=fotoalbum_large

[ Voor 61% gewijzigd door famelraider op 08-07-2022 01:18 ]

Beste antwoord (via famelraider op 09-07-2022 15:35)


  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 26-09 15:02
Ik lees trouwens nu de eerdere reactie en ik lees ook opnieuw je vraag, en ik begrijp nu pas wat je eigenlijk bedoelt. De pins worden allemaal opgevuld door het motor shield, dus hoe moet je nu nog de pins van het andere apparaat aansluiten.

Het shield dat je hebt is een beetje klote, want veel shields zorgen ervoor dat op het shield zelf ook weer pin headers zitten zodat je inderdaad de pins nog kunt gebruiken:
Afbeeldingslocatie: https://www.robotshop.com/media/catalog/product/cache/image/1350x/9df78eab33525d08d6e5fb8d27136e95/a/r/arduino-motor-shield-v3-1_1.jpg

Hoe je dit nu oplost? Als je een beetje kunt solderen, soldeer je de pins van het motor shield los en dan soldeer je deze erop: https://www.amazon.nl/Sta...do-forward/dp/B00Q6Y74DA/
Dit heten shield stacking headers, mocht je ze zelf willen zoeken :)

Een andere optie is om een ander motorshield te gebruiken. Zelf ben ik altijd meer fan van losse breakout-bordjes, zoals deze:
Afbeeldingslocatie: https://cdn.webshopapp.com/shops/304271/files/332131365/2448x2138x2/l298n-motor-driver-board.jpg
Dit is een L298N dubbele H-brug motor driver.

Op deze manier kan je ook zelf bepalen welke pins je gebruikt, in plaats van dat dat al vast ligt op zo'n shield.

Alle reacties


Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 02:03

memphis

48k was toen meer dan genoeg.

Gewoon draadjes aan de soldeerzijde van de UNO of de shield solderen.....

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • famelraider
  • Registratie: Januari 2010
  • Laatst online: 25-09 15:55
Bedankt voor je reactie! En werkt dat dan zomaar? Of kan de een de ander beïnvloeden? Ik kan me zo voorstellen dat je wel een pin moet gebruiken die nog niet in gebruik is.

Onderstaande geeft de vrije pins aan, ik gebruik alleen 4x DC motoren. Maar met onderstaande kom ik volgens mij nog 2 pins tekort, die zal ik dus van analog naar digital moeten omzetten?

Pin usage with the Motorshield
---------------------------------------
Analog pins: not used at all...
A0 ... A5 are still available...
They all can also be used as digital pins.
Also, I2C (A4 = SDA and A5 = SCL) can be used.
These pins have a breadboard area on the shield.
Digital pins: used: 3,4,5,6,7,8,9,10,11,12
Pin 9 and 10 are only used for the servo motors.
Already in use: 0 (RX) and 1 (TX).
Unused: 2,13
Pin 2 has an soldering hole on the board, easy to connect a wire.
Pin 13 is also connected to the system led.
I2C is possible, but SPI is not possible since those pins are used.

[ Voor 10% gewijzigd door famelraider op 08-07-2022 08:19 ]


Acties:
  • +1 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 26-09 15:02
Welke sensoren wil je verder nog aansluiten naast het motorshield?

Er zijn legio mogelijkheden om hier een oplossing op te vinden. Als je gebruik maakt van een digitale sensor (signaal is 0V of 5V), kan je een analoge poort gebruiken met een stukje code waarmee je stelt dat een waarde van >2,5V op de analoge poort een variabele (bool) op 1 of TRUE zet, en wanneer deze <2,5V leest de variabele op 0 of FALSE zet. Dan kan je die boolean gewoon gebruiken als digitaal signaal in je code.

Als je heel veel sensoren wilt aansluiten, is het mogelijk om een mux/demux te gebruiken. Daarmee kan je 16 losse digitale inputs (1 of 0) omzetten naar een bitreeks. Op die manier kan je met 4 I/O poorten 16 ingangen of uitgangen aansturen/lezen.

Er zijn meerdere wegen die naar Rome leiden. Belangrijk is om te weten wat je precies nodig hebt.


Die groepjes pinnen die je hebt omcirkeld op je eerste foto trouwens kan je niet gebruiken voor digitale of analoge inputs en outputs. Dit zijn headers voor speciale functies.
ICSP
De ICSP header die je bijvoorbeeld hebt omcirkeld, is voor In Circuit Serial Programming, Hier kan je daar meer over lezen: https://www.dirksen.nl/it...al-Programming-ofwel-ICSP

AREF
De AREF-pin is de referentiespanning voor de conversie van analoog naar digitaal. De Arduino maakt gebruik van een ADC (Analog/Digital Converter), en die werkt door de spanning die wordt gemeten op de analoge poort te vergelijken met de spanning die op de AREF pin staat. Als er niets op de AREF-pin aangesloten is, gebruikt de Arduino automatisch de 5V die het zelf heeft (via USB bijvoorbeeld).

Als je het voorbeeld-programma van analogRead gebruikt, zul je zien dat de waardes die je in de seriële monitor uitleest varieert van 0 tot 1023. Dat is omdat de ADC de spanning omzet naar een digitale waarde. De ADC die op de Arduino is aangebracht is een 10-bit ADC, dus er zijn 2^10 = 1024 verschillende niveau's tussen 0V en AREF. Als je niets op AREF aansluit, gebruikt de Arduino dus de 5V van zichzelf, en krijg je dus een resolutie van 5V / 1024 = 0,0049 = 4,9mV per stap. Dus een waarde 1 komt overeen met een gemeten spanning van 4,9mV, een waarde 2 komt overeen met 9,8mV, enzovoorts.

AREF kan je gebruiken om een andere referentiespanning te geven. Dit is bijvoorbeeld belangrijk als je een hele nauwkeurige 5V nodig hebt die niet fluctueert. De 5V van de Arduino kan best schommelen met enkele, zoniet tientallen millivolts afhankelijk van de belasting op de spanningsbron. Als jij bijvoorbeeld heel veel verbruikers op de digitale pinnen hebt aangesloten, kan die 5V prima 20mV inzakken. In veel gevallen is dat niet direct een probleem, maar het kan voor onnauwkeurigheden zorgen. Als je betrouwbare metingen nodig hebt, is het verstandig om een betrouwbare AREF aan te sluiten.

Een andere veelgebruikte toepassing van AREF is om het bereik aan te passen. De ADC verdeelt de ruimte tussen 0V en de spanning op AREF in 1024 stapjes. Als je een sensor hebt waarvan de meetwaarden niet boven de 1V uitkomen, kan het zinvol zijn om een spanning van 1V op AREF te zetten. Daarmee verhoog je namelijk de resolutie van je meting: in plaats van een bereik van 5V op te delen in stapjes, verdeel je dan slechts een bereik van 1V op in stapjes. Dat betekent dat elk stapje niet meer ~5mV is, maar nog slechts ~1mV. Ook daarmee kan je nauwkeurigere meetwaarden verkrijgen.

IOREF
IOREF is een referentiespanning voor de I/O (Input/Output), maar deze kan je niet zelf aansturen. Voor andere microcontrollers kan dit anders zijn, maar voor de Arduino is IOREF gewoon een extra 5V-uitgang. De spanning op IOREF is (over het algemeen) gelijk aan de maximale spanning die een digitale input mag ontvangen.

Op het moment dat je bijvoorbeeld een eigen shield maakt met een drukschakelaar, is het aan te raden om gebruik te maken van IOREF als +5V, en niet de +5V zelf van de Arduino. De achterliggende gedachte is dat als je het shield dan gebruikt voor een ander type Arduino-bordje (zoals een Arduino Zero) die werkt met een andere maximale ingangsspanning van de digitale pins (in het geval van een Arduino Zero is dat 3,3V in plaats van 5V), gebruik je altijd nog de juiste maximale ingangsspanning, want IOREF is gelijk aan de maximale ingangsspanning van de digitale pins. Zou je in plaats van IOREF de +5V pin gebruiken, dan zet je 5V op een poort die maximaal 3,3V kan verdragen en sloop je dus je processor. IOREF is dus vooral bedoeld voor compatibiliteit tussen verschillende Arduino-bordjes werkend op verschillende spanningen.

Op zich is het een goede gewoonte om IOREF te gebruiken als spanningsbron voor bijvoorbeeld schakelaars, en niet de 5V en 3,3V pins daarvoor te gebruiken. De 3,3V en 5V pins zou je alleen moeten gebruiken wanneer hetgeen wat je erop aansluit in alle gevallen die spanning nodig heeft. Een 5V-servomotor heeft bijvoorbeeld altijd 5V nodig, dan gebruik je de 5V pin op je shield.


Ik heb het idee dat je nog niet heel erg veel gedaan hebt met Arduino, en misschien is bovenstaande informatie nu nog niet aan jou besteed, maar dan kan je er altijd op een later moment nog even op terug grijpen. :)

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 26-09 15:02
Ik lees trouwens nu de eerdere reactie en ik lees ook opnieuw je vraag, en ik begrijp nu pas wat je eigenlijk bedoelt. De pins worden allemaal opgevuld door het motor shield, dus hoe moet je nu nog de pins van het andere apparaat aansluiten.

Het shield dat je hebt is een beetje klote, want veel shields zorgen ervoor dat op het shield zelf ook weer pin headers zitten zodat je inderdaad de pins nog kunt gebruiken:
Afbeeldingslocatie: https://www.robotshop.com/media/catalog/product/cache/image/1350x/9df78eab33525d08d6e5fb8d27136e95/a/r/arduino-motor-shield-v3-1_1.jpg

Hoe je dit nu oplost? Als je een beetje kunt solderen, soldeer je de pins van het motor shield los en dan soldeer je deze erop: https://www.amazon.nl/Sta...do-forward/dp/B00Q6Y74DA/
Dit heten shield stacking headers, mocht je ze zelf willen zoeken :)

Een andere optie is om een ander motorshield te gebruiken. Zelf ben ik altijd meer fan van losse breakout-bordjes, zoals deze:
Afbeeldingslocatie: https://cdn.webshopapp.com/shops/304271/files/332131365/2448x2138x2/l298n-motor-driver-board.jpg
Dit is een L298N dubbele H-brug motor driver.

Op deze manier kan je ook zelf bepalen welke pins je gebruikt, in plaats van dat dat al vast ligt op zo'n shield.

Acties:
  • 0 Henk 'm!

  • famelraider
  • Registratie: Januari 2010
  • Laatst online: 25-09 15:55
@naarden 4ever wauw wat een uitgebreide en behulpzame reactie, bedankt!

Ik heb voor nu nog geen extra wensen, behalve het aansluiten van 2x 18650 batterij maar die komt volgens mij gewoon op de stroomtoevoer.

Ik zal voor nu in elk geval voor de ongebruikte pins de soldering loshalen en een uitbreiding erop solderen. Solderen en programmeren kan ik wel.

Verder moet ik dus 2 analoge poorten voor de ps2 controller omzetten naar digitaal, daarvoor moet ik dan wel die ps2 class aanpassen, want die gaat nu uit van digitale poorten.

"Dit is een L298N dubbele H-brug motor driver. "
Die is inderdaad heel mooi, maar heb nu 3 van deze motor shields en het is ook wel een uitdaging om het nu voor elkaar te krijgen.


Edit:

Ik zie dat ik mij heb vergist, de ps2 controller gebruikt 4 poorten naast de stroomtoevoer en ground.

[ Voor 64% gewijzigd door famelraider op 08-07-2022 19:29 ]


Acties:
  • 0 Henk 'm!

  • famelraider
  • Registratie: Januari 2010
  • Laatst online: 25-09 15:55
@naarden 4ever je uitleg over ioref was heel handig, bedankt. Nu zit ik met een probleem van de spanning voor de rf zender / ontvanger. De motor shield heeft alleen pins met 5v beschikbaar, de 3,3v gebruikt hij zelf zie ik aan de banen op de printplaat. Kan het kwaad als ik een extra draad op de 3,3v pin soldeer?

Acties:
  • 0 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 26-09 15:02
famelraider schreef op zaterdag 9 juli 2022 @ 15:34:
@naarden 4ever je uitleg over ioref was heel handig, bedankt. Nu zit ik met een probleem van de spanning voor de rf zender / ontvanger. De motor shield heeft alleen pins met 5v beschikbaar, de 3,3v gebruikt hij zelf zie ik aan de banen op de printplaat. Kan het kwaad als ik een extra draad op de 3,3v pin soldeer?
Nee hoor, je kunt meer apparaten op die 3,3V aansluiten. Let wel op dat je niet boven de maximale belasting uitkomt. Kan je vinden in de specificaties van de Arduino.
Pagina: 1