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.