Arduino/Digitale uitvoer
De meeste pinnen van de Arduino kun je gebruiken als digitale uitvoer.
Hoe gebruik je een pin als uitvoer?
Setup
Voordat je een pin als uitvoer kunt gebruiken moet je de hardware daarvoor instellen, bijvoorbeeld:
pinMode(ledPin, OUTPUT);
Besturing (loop)
Je kunt het niveau van een pin zetten door de waarde LOW of HIGH naar deze pin te schrijven, bijvoorbeeld
digitalWrite(ledPin, HIGH);
De constanten LOW en HIGH komen overeen met 0 en 1. Op grond van deze eigenschap kun je de waarde van een variabele level
die de waarde LOW of HIGH heeft omkeren door:
level = HIGH - level;
, oflevel = 1 - level;
Hardware-eigenschappen
Spanning
De digitale waarde LOW resulteert aan de elektrische kant in een spanning van 0V op de pin, de waarde HIGH in een spanning van 5V.
- De waarde HIGH komt overeen met de voedingsspanning; bij een Atmega microcontroller die op 3,3V werkt zal de pin die spanning krijgen.
Stroom
Een pin van de Atmega microcontroller mag maximaal 40mA leveren. Maar dit kan niet voor alle pinnen tegelijk: de maximale stroom door de Atmega is beperkt tot 200 mA. In de praktijk proberen we daarom de stroom door een pin te beperken tot 20 mA of minder.
- zie Atmega Datasheet, sectie 26.1.
Als er een grotere stroom nodig is, bijvoorbeeld voor het aansturen van een motor of een relais, dan kunnen we vanuit de Arduino een transistor aansturen die deze grotere stroom schakelt. We moeten dan wel een voeding hebben die een dergelijke grote stroom kan leveren.
- een USB-poort van een computer levert maximaal 500mA (USB 3.0 mogelijk meer).
Vraag
In principe kun je de mode van een pin ook in de loop van het programma veranderen - maar het is de vraag of dit zin heeft: de hardware die eraan gekoppeld is kun je ook niet zomaar veranderen. Zijn hiervan voorbeelden te vinden, bijvoorbeeld in het geval van communicatie-protocollen?
- Een voorbeeld is het gebruik van een schakeling met een condensator: door de pin eerst als digitale output te gebruiken laad je de condensator op, door vervolgens dezelfde pin als input te gebruiken, en te timen wanneer deze van waarde verandert, kun je een bepaalde grootheid meten.
Waar moet je om denken?
Een uitvoer-pin gaat kapot door een te grote stroom
Een uitvoer-pin van een Arduino (Atmega328) kan maximaal 40mA leveren: als de stroom groter wordt, kan deze pin en/of de rest van de microcontroller kapot gaan. Kortsluiting levert een grote stroom op, en dat moet je natuurlijk altijd vermijden. Maar ook in gewone schakelingen moet je rekening houden met deze maximale stroom.
- bij het aansturen van een LED gebruik je een serieweerstand om de stroom te beperken;
- als je een grotere stroom nodig hebt, bijvoorbeeld om een motor aan te sturen, stuur je met een uitvoer-pin van de Arduino een transistor aan (of een relais?) die een grotere stroom kan verwerken.
Aansturen van elektronica met zwevende uitgang
Als een uitgang nog niet geïnitialiseerd is als digitale uitgang, dan kan deze in een "zwevende" toestand zijn. Als je deze gebruikt om andere apparaten mee aan te sturen, kan dat onvoorspelbare resultaten geven. In sommige gevallen is het daarom aan te raden om een pull-down weerstand te gebruiken, zodat de uitgang altijd een gedefinieerd niveau heeft, ook als deze nog niet geïnitaliseerd is. In dat laatste geval is het niveau 0V, voor een veilige aansturing.
Energie-overwegingen
Bij een elektronische schakeling is het verstandig om een ruwe vermogen- en energie-berekening te doen:
- de schakeling moet niet teveel energie gebruiken; in het bijzonder voor batterij-gevoede schakelingen is dit van belang;
- onderdelen kunnen door een grote warmteontwikkeling kapot gaan.