Kennismaking met Arduino

Onderwerp: Elektronica, Gebruik van computer bij natuurkunde, Signaalverwerking

De Arduino Uno is een kleine computer op een bordje. Met een beetje uitleg en veel zelf proberen kun je er erg leuke schakelingen mee bouwen. Probeer maar. Dit is het derde artikel (andere twee in de links onderaan) van drie over logische schakelingen.

Hier onder zie je een afbeelding van het Arduinobordje. Aan de randen zitten verschillende connectors, waarop draden kunnen worden aangesloten. Zo kan er informatie uit de buitenwereld binnen komen via de invoerdraden en op dezelfde manier kan er invloed op de omgeving uitgeoefend worden via de uitvoerdraden. Hoe er wordt gereageerd op de binnenkomende informatie wordt bepaald door het programma in de relatief grote chip (ATmega328) op het bordje. Dat is de microcontroller, die je kunt beschouwen als het brein van het bordje.

Om de eigenschappen en de mogelijkheden van de Arduino Uno te leren kennen, voeren we de opdrachten uit die in deze handleiding zijn beschreven. Daarvoor is niet veel voorkennis nodig.

Voor de opdrachten hebben we (naast een laptop, een printerkabel en een Arduinobordje) maar een klein aantal onderdelen nodig. Een overzicht van de onderdelen zie je hier:

Wat is de Arduino Uno?

De Arduino Uno kan worden beschreven als een single-board computer, die (in Italië) is ontworpen voor mensen, die juist niet een elektronische achtergrond hebben. Deze minicomputer is eenvoudig te programmeren. Dat is één van de redenen waarom de Arduino sinds kort met veel succes wordt gebruikt in het onderwijs.

De Arduino hardware en software zijn open source: alle gegevens zijn vrij beschikbaar voor iedereen. Dat betekent ook, dat er veel informatie beschikbaar is via internet. De officiële Arduino-website is http://arduino.cc), maar als je het woord 'arduino' invoert bij een zoekmachine, dan vind je een groot aantal informatiebronnen.

stap 1: We bekijken eerst de Arduino Uno

Het 'brein' van het Arduinobord is de microcontroller, de chip ATmega328. Het Arduinobord heeft een groot aantal connectors (pins) beschikbaar voor communicatie met de buitenwereld.
Daarbij maken we onderscheid tussen analoge en digitale aansluitingen. Bij digitale aansluitingen wordt alleen onderscheid gemaakt tussen 0 V en 5V, een 0 of 1 situatie. Bij de analoge aansluitingen doet de waarde van de spanning (tussen 0 V en 5 V) er toe.

  • er zijn 6 analoge input pins, met de nummers A0, A1, …, A5 voor analoge signalen afkomstig van sensoren (voor het meten van temperatuur, lichtintensiteit, ...)
  • dan zijn er 14 digitale input / output pins, aangegeven met de nummers 0, 1, …, 13; of een bepaalde pin een input vertegenwoordigt of een output wordt vastgelegd in het programma in de ATmega328;
  • er zijn ook nog 6 analoge output pins; dat zijn 6 van de digitale IO pins (met de nummers 3, 5, 6, 9, 10 en 11), die geprogrammeerd kunnen worden voor een analoge output door het programma in de ATmega328.

Op het bordje zijn twee kleine leds, TX en RX, te onderscheiden. Die lichten op, als er de communicatie is tussen de computer en de Arduino. Een andere kleine led L is verbonden met pin 13. Die speelt een rol in deze kennismaking.

Het Arduinobord krijgt zijn spanning via de USB-poort van de computer of via een speciale USB-voeding. Op het bord zit ook een connector voor voeding via een AC-adapter (9 V, centrum positief). Die kan gebruikt worden in plaats van de USB voeding als je de Arduino los van de computer wilt gebruiken. Om te kunnen werken met Arduino moeten we eerst de integrated development environment (IDE) downloaden van www.arduino.cc/en/Main/Software naar de computer. Dat is het programma, dat wij kunnen gebruiken om informatie te sturen naar de Arduino Uno. Voor deze inleiding kiezen we de nieuwste Windows-versie (1.8.1 of hoger) in de nederlandse uitvoering. Bij deze kennismaking gaan we ervan uit, dat het programma al is gedownload. Dat kun je zien aan het Arduino-icoon op het bureaublad. Door (dubbel) te klikken op dat Arduino-icoon maken we een start met het echte werk.

stap 2 De eerste “sketch”: LAAT DE KLEINE LED L KNIPPEREN

Wat we nu nog moeten doen, is de Arduino vertellen wat er moet gebeuren. Dat doen we door een computerprogramma, dat bestaat uit een lijst van instructies, naar de microcontroller te sturen. Zo'n programma wordt een sketch genoemd.
Dubbel-klik op het Arduino icoon op het bureaublad van je computer. Op het scherm zie je dan de 'Arduino sketch editor', het werkveld waarin je de 'sketches' kunt typen. 

Als dat nodig is, kun je de Nieuwknop gebruiken om het scherm 'schoon' te maken. (Dat kan natuurlijk ook door de tekst te wissen).

Typ dan de volgende tekst:

Het eerste wat we dan gaan doen, is controleren of het programma voldoet aan de regels, die daarvoor gelden. Daarvoor klikken we op de knop 'Verifiëren' (linksboven).

Als alles goed is, zie je de melding 'Compileren voltooid' verschijnen in de blauwe balk onderaan in het venster. Als er fouten zitten in het programma, dan wordt dat (in roodbruine kleur) aangegeven in het zwarte veld onder die balk. In de regel gaat het dan om  vergeten haakjes en/of puntkomma's.

Als de fouten verbeterd zijn, hebben we een uitvoerbaar programma in de computer. Dat moeten we nu uploaden naar het Arduinobord. Daarvoor verbinden we het Arduinobord met de computer met een AB-USB-kabel. Dan klikken we op de knop 'Uploaden'.

Als dat allemaal goed gegaan is, krijgen we de melding “Upload voltooid”.

Aan de twee kleine leds RX en TX kun je ook zien of het goed gaat. Ze lichten op, elke keer als er een byte wordt verzonden of ontvangen. Tijdens het uploaden van een programma moet je ze zien knipperen. Zo niet, dan is er iets mis. Als er iets niet goed is gegaan, krijgen we een foutmelding. De foutmelding “avrdude: stk500_getsync(): not in sync : resp = 0x00” betekent dat, dat de Arduino geen antwoord geeft. Dat ligt dan waarschijnlijk aan de keuze van een verkeerde COMpoort. Dat kun je veranderen via Hulpmiddelen > Poort > COM ...

Rechts onderaan op het scherm zie je op welke COMpoort de Arduino is aangesloten. Als het uploaden lukt, dan krijg je als resultaat, dat led L knippert met een bepaalde frequentie : één seconde aan, één seconde uit. Je kunt de knipperfrequentie veranderen door de wachttijden (delay) in het programma te veranderen en dan dezelfde stappen te doorlopen. Als dat lukt,  heb je het programmeren al een beetje onder de knie. Gefeliciteerd!

Als het programma is opgeslagen in het Arduinoboard, dan is dat permanent. Resetten van het bord of het uitschakelen van de voeding, verandert daar niets aan.

stap 3 Uitbreiding met een breadboard

We kunnen de Arduino gebruiken om het gedrag van schakelingen te beïnvloeden. Om dat te laten zien, maken we een heel eenvoudige schakeling op een breadboard. Dat breadboard is al gemonteerd op dezelfde perspex grondplaat als de Arduino Uno. De schakeling is een simpele uitbreiding van de opstelling bij stap 2. 

De schakeling:
Verbind de + poot (de langste) van de led met pin 13. De andere poot van de led verbind je via een weerstand van 330 Ω met de GND van de Arduino, zie figuur.
Een led is een diode, dus let op de stroomrichting !
Laat het programma “voorbeeld 1” (stap 2) dan nog eens draaien. Als het goed is, knippert nu ook de led op het breadboard. Als dat niet het geval is, kun je de led andersom in het breadboard prikken.

stap 4 Uitleg: We bekijken het programma, regel voor regel

  • Het programma wordt regel-voor-regel uitgevoerd.
  • Elke instructie wordt afgesloten met een puntkomma ;
  • Wat achter // staat, wordt niet uitgevoerd, maar is een uitleg bij de werking van dat deel van het programma. Dat komt goed van pas als je later een deel van het programma nodig hebt, of als je tijdelijk een gedeelte van het programma wilt uitschakelen.

stap 5 Probeer eens wat!

Om na te gaan of we een en ander goed hebben begrepen, gaan we het gedrag van de schakeling beïnvloeden door veranderingen aan te brengen in het programma. Verander het programma “de LED knippert” zo, dat ...
1. de led twee keer zo snel knippert.
2. de led drie keer zo langzaam knippert.
3. de led steeds een halve seconde aan is en dan weer twee seconden uit.
4. de led een S.O.S. morsecode afgeeft : • • • ▬ ▬ ▬ • • • (enz)
5. de led knippert met een tempo, waarbij je het knipperen net niet meer kunt waarnemen.
Door met deze mogelijkheid te spelen, kun je de led ook “dimmen”. Laat zien! (Dit komt terug bij stap 7).

stap 6 Verkeerslichten

Met de drie verschillende leds kun je een verkeerslicht nabootsen en, om dat nog wat lastiger te maken, vragen we om de cyclus, die wel wordt gebruikt in Duitsland : GROEN (12 s) – ORANJE (3 s) – ROOD (10 s) – ROOD en ORANJE (1 s) – GROEN (12 s) – enz.
Opmerking: om het typwerk te beperken, kun je gebruik maken van 'knippen en plakken'.

stap 7 Regeling van de lichtintensiteit van een led

Bij het voorbeeld van de knipperende led konden we de led alleen maar aan en uit zetten. Maar we kunnen ook iets willen, dat daar tussen in zit. Dat kunnen we realiseren met een truc, die wel werkt met led aan en uit, maar dan zó snel, dat je ogen het niet meer kunnen volgen. Je neemt dan een constante lichtintensiteit waar. 

Als we bijvoorbeeld 1 (de led knippert) twee even korte wachttijden (10 ms bijvoorbeeld) invoeren, zien we het aan- en uitschakelen niet meer en nemen we 50 % van de maximale intensiteit waar.

We kunnen de tijden ook zó instellen, dat de led 25 % van de tijd aan is en 75 % uit. Je zult zien, dat de intensiteit dan ongeveer 25% van de maximale waarde is. Deze techniek wordt aangeduid met de naam pulsbreedtemodulatie (pulse width modulation, afgekort als PWM). Deze aanpak werkt ook bij andere apparaten. Een goed voorbeeld is de controle van de snelheid van een elektromotor.
Arduino kent ook een andere manier om de intensiteit van het licht te regelen. Daarvoor gebruiken we de analogWrite() instructie. Die kan worden toegepast bij de pinnen 3, 5, 6, 9, 10, en 11 (zie ~ op het Arduinobord). analogWrite() verwacht een waarde tussen 0 en 255. 255 betekent dan maximale lichtintensiteit en 0 betekent led uit. Dus analogWrite(9,128) heeft tot gevolg, dat de led, verbonden met pin 9, zal branden met 50% van de maximale lichtintensiteit.

Om dat uit te proberen gebruiken we een schakeling met een led (in serie met een weerstand van 330 Ω) verbonden met pin 9.

We kunnen daar ook een beetje mee spelen, zie de volgende sketch:

stap 8 Maak gebruik van de analoge input

De Arduino is in staat om te detecteren of er een elektrische spanning aanwezig is op een pin, of niet. Het resultaat wordt gemeld via de digitalRead() functie. Dit levert dus een ja / nee antwoord op.
Maar een LDR-lichtsensor kan ook informatie geven over de hoeveelheid licht, die op de LDR-lichtsensor valt. Daarvoor gebruiken we de analogRead() functie. Deze functie geeft een getal tussen de 0 en 1023, overeenkomend met de waarde voor de spanning tussen 0 en 5 V.

Ga uit van de schakeling bij stap 7.
Breid die uit met een serieschakeling van een LDR en een weerstand van 10 kΩ. Plaats die tussen de 5 V connector en GND (LDR aan de kant van 5 V). Dan heb je een lichtsensor. Verbind het punt tussen LDR en weerstand met analoge input pin A0.

Upload dan de sketch 'voorbeeld 3' naar de Arduino.

Bekijk wat er gebeurt als je de hoeveelheid licht, die op de LDR valt, verandert.
Geef een verklaring.

stap 9 Laat de helderheid van de led bepalen door de analoge input

Nu gaan we het elektrische schema en de sketch zó veranderen, dat niet de frequentie, maar de intensiteit van de led wordt bepaald door de analoge input. De sketch staat hieronder. Probeer daaruit af te leiden op welke manier de schakeling moet worden aangepast en doe dat.

stap 10 Seriële communicatie

We hebben gezien, dat de Arduino een USB-verbinding gebruikt om programma’s te laden in de microprocessor. Het goede nieuws is, dat deze verbinding ook gebruikt kan worden om gegevens terug te sturen naar de computer. Daarvoor gebruiken we de instructie Serial.begin(), zoals te zien is in de volgende sketch (voorbeeld 5). We gebruiken de schakeling met de LDR van stap 8 en we sturen gegevens terug naar de computer.

Daarvoor maken we gebruik van de Serial Monitor :

Hiermee sluiten we deze kennismaking met de Arduino Uno af. Zo’n kennismaking kan worden gebruikt als een opstapje voor diverse projecten. Suggesties daarvoor zijn te vinden op de volgende websites en referenties. 

www.adafruit.com Onder tabblad LEARN zijn kant-en-klare lessen te vinden (zoeken op 'arduino lessons”)
www.instructables.com Een grote verzameling van allerlei doe-het-zelf projekten. Zoeken op trefwoorden zal helpen om te vinden wat je zoekt.

 Auteur: Sieberen Idzenga

(bewerkt door redactie natuurkunde.nl)