ARDUINO
VOOR BEGINNERS
INHOUD
De Arduino IDE installeren
ARDUINO PROGRAMMEREN MET JE CHROMEBOOK (LINUX - advanced)
ARDUINO PROGRAMMEREN MET JE CHROMEBOOK (ChromeOS - beginner)
Link naar de code editor = https://create.arduino.cc/editor/
Arduino IDE voor WINDOWS of MacOS
Arduino IDE simuleren
Starten met Arduino
Bij arduino.cc vind je tutorials die je leren je Arduino te programmeren.
Onze projecten met Arduino
Heel wat van deze projecten bouwen verder op een vorige project.
Je wil niet steeds helemaal opnieuw beginnen. Start je nieuw project dus met een kopie van een vorig, gelijkaardig project!
💻 De interne led op de arduino laten knipperen
Laat de interne led van je Arduino knipperen.
Bepaal zelf het tempo waaraan de led knippert.
Wat heb je geleerd?
Een arduino is een computer die je zelf programmeert.
Je kan je arduino programmeren met de programmeertaal C++.
Een variabele definieer je met int. (Er zijn ook andere manieren om variabelen te definiëren.)
Een variabele kan je doorheen je code gebruiken. Handig!
Je moet meestal een aantal dingen vooraf instellen met deze functie: void setup()
Je arduino voert de instructies uit in void loop()
Je arduino heeft een aantal poorten. Die kan je aansturen.
met digitalWrite(poortnummer, LOW/HIGH) zet je een DIGITALE poort op 0 V of op 5 V.
met delay(tijd in ms) laat je het uivoeren van de code gedurende een aantal miliseconden pauzeren.
Opgelet!
Je code blijft in het geheugen van de arduino zitten. Ook als je hem ontkoppelt van een spanningsbron.
Goed idee: upload een lege code in je arduino vóór je start OF upload je eigen code vóór je andere componenten op je arduino aansluit.
💻 Een externe led laten knipperen
Laat een externe rode led van je Arduino knipperen.
Bepaal zelf het tempo waaraan de led knippert.
Wat heb je geleerd?
Je arduino heeft een aantal DIGITALE poorten. Die kunnen alleen op 0 V of op 5 V staan.
met digitalWrite(poortnummer, LOW/HIGH) zet je een DIGITALE poort op 0 V of op 5 V.
Aan de poorten van je arduino kan je externe dingen aansluiten.
Je zet ALTIJD een weerstand (hier: R = 220 Ω) in serie met een led. Zo beperk je de stroomsterkte door je led zodat hij niet kapot gaat.
GND wil zeggen een poort waar ALTIJD 0 V spanning op staat.
Voeg een gele en een groene led toe aan je circuit. Pas je code aan zodat de 3 leds beurtelings aan en uit gaan. Pas de tijden aan zodat je iets krijgt dat op een verkeerslicht lijkt.
💻 Verzend S.O.S. in morsecode
Laat een externe led van je Arduino knipperen.
Verzend S.O.S. in morsecode.
Wat heb je geleerd?
Je kan functies maken. Een functie is een stuk code dat je steeds kan hergebruiken. Syntax: void functieNaam() {hier_je_code}
Functies maken je code overzichtelijk.
Functies en variabelen geef je best een heldere naam. Spaties mag je daarbij niet gebruiken, (lower)CamelCase wel.
In de setup kan je óók code steken. Die wordt 1 keer uitgevoerd vóór de loop. Op die manier zorg je ervoor dat je systeem zeker start in de toestand die jij wil.
Pas je code aan zodat je circuit jouw voornaam en naam verzendt in morsecode. Maak dus een functie voor elke letter van je naam en gebruik die in de loop.
💻 Politie - zonder geluid
Laat beurtelings een blauwe en een rode led knipperen.
Wat heb je geleerd?
Je kan verschillende dingen op je adruino aansluiten en die apart aansturen.
💻 Politie - mét geluid
Laat beurtelings een blauwe en een rode led knipperen.
Laat samen met het knipperen van je leds ook het geluid van een politiewagen weerklinken.
Wat heb je geleerd?
De digitale poorten die gemerkt zijn met een ~ (tilde) zijn speciale poorten. Die kunnen pulsen van 5 V sturen. Bijvoorbeeld 440 keer per seconde van 0 V naar 5 V gaan.
met tone(poort,frequentie) kan je pulsen met een bepaalde frequentie sturen naar een poort.
Doe de leds weg. Laat je arduino de melodie van Frère Jacques spelen (LUISTER).
Optionele toevoeging: een variabele waarmee je het ritme kan veranderen.
Optionele toevoeging: koppel je arduino los van de computer en sluit hem aan op een batterij van 9 V.
Gebruik deze noten met frequenties in Hz:
lage sol (196) - do (262) - re (294) - mi(330) - fa (349) - sol (392) - la (440)
💻 Politie - AAN/UIT met schakelaar
Laat beurtelings een blauwe en een rode led knipperen.
Laat samen met het knipperen van je leds ook het geluid van een politiewagen weerklinken.
Plaats een schakelaar. Je Arduino leest de stand van je schakelaar via een digitale poort (HIGH/LOW). De arduino zet dan de "politiewagen" aan of uit.
⚠ Wat we hier NIET doen, is de schakelaar plaatsen zodat we de connectie met al onze componenten onderbreken.
Wat heb je geleerd?
Met digitale poorten kan je niet alleen een spanning sturen (0 V of 5 V). Je arduino kan ook voelen of er spanning (LOW/HIGH) staat op die poort. Dat kan je als voorwaarde gebruiken om iets te laten doen.
digitalRead(poort) leest een digitale poort en geeft de waarde HIGH of LOW aan de processor.
Met if (voorwaarde) {actie 1} else {actie 2} laat je je arduino een voorwaarde controleren en dan een welbepaalde actie uitvoeren.
Met noTone(poort) kan je de pulsen van een poort stoppen.
💻 Politie - AAN/UIT met draaiknop
I.p.v. een schakelaar, kan je ook een draaiknop plaatsen om je machine aan of uit te zetten.
Zet 1 led aan en uit door op een knop te drukken.
(Optioneel: maak een kopie van je "politiewagen" en vervang de schakelaar door een drukknop.)
Wat heb je geleerd?
digitalRead(poort) leest een digitale poort en geeft de waarde HIGH of LOW aan de processor. Als de spanning onder een bepaalde waarde is, staat de poort op LOW. Als de spanning boven een bepaalde waarde is, staat de poort op HIGH. Dat kan je als voorwaarde gebruiken om iets te laten doen.
Een draaiknop is een regelbare weerstand. Die heeft een contact voor 0 V, een contact voor 5 V, en een contact waar een spanning van 0 V tot 5 V over kan staan. Die variabele spanning hangt af van de stand van je draaiknop. Helemaal naar de ene kant geeft 0 V. Helemaal naar de andere kant geeft 5 V.
💻 AAN/UIT met een drukknop
I.p.v. een schakelaar, kan je ook een drukknop plaatsen om je machine aan of uit te zetten.
Zet 1 led aan en uit door op een knop te drukken.
(Optioneel: maak een kopie van je "politiewagen" en vervang de schakelaar door een drukknop.)
Wat heb je geleerd?
Je code kan een variabele veranderen.
Gebruik een variabele (hier: on = 0 of on = 1) om te "onthouden" wat er gebeurd is, zodat je dit als voorwaarde kan gebruiken om een welbepaalde actie uit te voeren.
Laat je arduino de melodie van Frère Jacques spelen.
Voeg een schakelaar toe waarmee je je muziek kan afzetten.
(Wanneer stopt je muziek? Waarom is het moeilijk om dit met een drukknop te doen? Zou je de muziek kunnen stoppen op het moment dat je de schakelaar op uit zet?)
💻 Politie - controleer de knippertijd
Laat beurtelings een blauwe en een rode led knipperen.
Laat samen met het knipperen van je leds ook het geluid van een politiewagen weerklinken.
Plaats een schakelaar. Je Arduino leest de stand van je schakelaar en zet "politiewagen" aan of uit.
Plaats een regelbare weerstand. Je Arduino leest de stand van je weerstand en verandert het tempo waaraan de lichten knipperen.
Wat heb je geleerd?
Een draaiknop is een regelbare weerstand. Die heeft een contact voor 0 V, een contact voor 5 V, en een contact waar een spanning van 0 V tot 5 V over kan staan. Die variabele spanning hangt af van de stand van je draaiknop.
Je arduino heeft ANALOGE poorten A0 t/m A5. De analoge poort LEEST een spanning van 0 V t/m 5 V en stuurt een overeenkomstige waarde van 0 t/m 1023 naar je processor. Je leest de ze poort met het commando analogRead(analogePoort).
Met map(nummerVanAnalogePoort, 0, 1023, eenWaarde, eenAndereWaarde) kan je de getallen die je analoge poort genereert (0 - 1023) omzetten naar andere getallen die je dan gaat gebruiken. (In dit voorbeeld mappen we het getal 0 naar onze minimumtijd, het getal 1023 naar onze maximumtijd.)
Laat je arduino de melodie van Frère Jacques spelen.
Voeg een variabele met naam "ritme" toe zodat je het ritme kan regelen. De lengte van je muzieknoten moet afhankelijk zijn van deze variabele "ritme".
Voeg tenslotte een draaiknop toe zodat je met die draaiknop het ritme van je muziek kan wijzigen.
Wil je meer arduino liedjes zonder alles zelf te programmeren?
(Opgelet! Bij deze codes zit de buzzer op poort ~11.)
💻 Reset - hardware
Laat een LED knipperen. Zorg dat er lange delays in je code zitten zodat er dan niets anders kan gebeuren.
Je kan het uitvoeren van de code tóch onderbreken! Plaats een drukknop die je toelaat om de poort RESET te verbinden met de GND.
Optioneel: vertrek van je muziek-arduino en plaats een knop die de muziek onderbreekt en de zaak herstart.
Wat heb je geleerd?
Reset is een manier om je arduino helemaal opnieuw te laten beginnen.
Reset is een manier om het uitvoeren van code te onderbreken.
Er is een poort RESET die je arduino herstart als je ze verbindt met GND (= 0 V).
Maak een schakeling en code die een LED doet knipperen. Plaats een drukknop zodat je led pas begint te knipperen nadat je op de knop drukte. Plaats een drukknop die je toelaat om je machine te herstarten.
💻 Een LED dimmen
Regel de helderheid van een rode led met een draaikop (regelbare weerstand).
Wat heb je geleerd?
De digitale poorten die gemerkt zijn met een ~ (tilde) zijn speciale poorten. Die kunnen pulsen van 5 V sturen. Met analogWrite(poortNummer,getal) kan je de lengte van die pulsen regelen. Het getal is hier een waarde van 0 t/m 255. Met dit commando regel je dus in feite de energie die uit een digitale poort komt. Je kan je led op deze maniet dimmen.
De digitale poorten die gemerkt zijn met een ~ (tilde) zijn speciale poorten. Die kunnen pulsen van 5 V sturen. Je kan die pulsen korter en langer maken met het commando analogWrite(poortNummer,getal). Het getal is hier een waarde van 0 t/m 255. Dit proces heet pulsbreedtemodulatie (pulse-width modulation, PWM).
In de figuur komt 50% Duty Cycle overeen met het getal 123. Je stuurt dan maar de helft van de beschikbare energie naar een led die erop is aangesloten.
KLEUREN MAKEN
Je kan alle kleuren licht maken door rood, groen en blauw (RGB) te mengen. (Leer met de PHET-simulatie hoe je kleuren kan combineren.)
Een computerscherm toont alle kleuren door rood, blauw en groen (RGB) te combineren.
Regel de helderheid van 1 rode, 1 blauw en 1 groene led met 3 regelbare weerstanden.
We maken het ons makkelijk. I.p.v. te werken met 3 verschillende leds, gebruiken we één RGB led.
Hoeveel verschillende kleuren kan je (theoretisch) maken met dit circuit?
START MET EEN KOPIE VAN DIT ONTWERP.
KLEUREN MAKEN
In de wereld van kleuren weergeven, zijn rood, groen, blauw en de combinaties van deze drie uiterst belangrijk.
Maak een ontwerp met een rode, een groene en een blauwe LED. De leds mogen op volle kracht branden.
Voeg een drukknop toe die je laat schakelen tussen alle mogelijk combinaties van je drie leds.
Hoeveel verschillende combinaties kan je maken met dit circuit?
💻 Een digitale waarde uitlezen met de seriële monitor
Sluit een digitale poort via een schakelaar aan op de 5V-lijn.
Lees met de seriële monitor of de schakelaar aan staat of uit.
(Handig om te weten wat er precies gebeurt met je schakeling!)
Wat heb je geleerd?
Met de serial monitor kan je controleren wat er met je arduino gebeurt.
In de serial monitor lees je data, bijvoorbeeld bepaalde getallen die je code gebruik of genereert.
In de setup geef je het tempo aan waarmee je arduino gegevens stuurt naar de serial monitor. Dat doe je met Serial.begin(boudRate). De baud rate is hier het tempo. Een boud rate van 9600 is bijvoorbeeld: Serial.begin(9600)
Met Serial.print() stuur je iets naar de serial monitor zodat je het kan lezen.
Met Serial.println() stuur je iets naar de serial monitor en daarna begint er een nieuwe lijn.
💻 Een sensor uitlezen met de seriële monitor
Zet een lichtgevoelige weerstand (fotoresistor of LDR) en een (grote) weerstand R in serie. Sluit ze aan op de 5V-lijn.
Meet met een analoge poort de spanning over de weerstand R en lees met de seriële monitor de waarde uit die de analoge poort weergeeft.
Wat heb je geleerd?
Met de serial monitor kan je controleren wat er met je arduino gebeurt.
In de serial monitor lees je data, bijvoorbeeld bepaalde getallen die je code gebruik of genereert.
In de setup geef je het tempo aan waarmee je arduino gegevens stuurt naar de serial monitor. Dat doe je met Serial.begin(boudRate). De baud rate is hier het tempo. Een boud rate van 9600 is bijvoorbeeld: Serial.begin(9600)
Met Serial.print() stuur je iets naar de serial monitor zodat je het kan lezen.
In dit voorbeeld kwamen we te weten welke getallen een analoge poort geeft als de lichtsensor licht ontvangt.
Een LDR is een weerstand waarvan de grootte afhankelijk is van de hoeveelheid licht die erop valt.
Als je de LDR en een andere, constante, weerstand (R) in serie plaatst, wordt de spanning verdeeld. Als de weerstand van de LDR verandert, verandert dus de verdeling van de spanning.
De spanning over R is nu dus óók afhankelijk van de lichtsterkte. Meet de spanning over die weerstand en koppel die aan de hoeveelheid licht. Je hebt dan een lichtsensor gemaakt!
Verbind een draaiknop met poort A3. Stuur het getal dat A3 genereert naar de seriële monitor. Zorg dat in de serële monitor ook verschijnt hoeveel spanning er op poort A3 staat. Zorg dat de betekenins van de geprinte getallen voor de lezer duidelijk zijn.
💻 Nachtlampje
Gebruik een lichtgevoelige weerstand om 1 led aan en uit te zetten.
Als het donker wordt, moet je led aangaan.
Net zoals een nachtlampje dus.
Wat heb je geleerd?
Met de serial monitor kan je controleren wat er met je arduino gebeurt.
In dit voorbeeld kwamen we te weten welke getallen een analoge poort geeft als de lichtsensor licht ontvangt.
Het getal dat een gebeurtenis genereert, kan je gebruiken om een andere gebeurtenis te besturen. In dit geval laten we de led aangaan als het getal dat analoge poort 5 genereert onder een bepaalde waarde is.
💻 Backlighting
Gebruik een lichtgevoelige weerstand om de helderheid van 1 led te regelen.
Hoe meer omgevingslicht, hoe helderder je led moet zijn.
(Denk bijvoorbeeld aan de backlighting van het scherm van een smartphone.)
Wat heb je geleerd?
De digitale poorten die gemerkt zijn met een ~ (tilde) zijn speciale poorten. Die kunnen pulsen van 5 V sturen. Met analogWrite(poortNummer,getal) kan je de lengte van die pulsen regelen. Het getal is hier een waarde van 0 t/m 255. Met dit commando regel je dus in feite de energie die uit een digitale poort komt. Je regelt dus de lichtsterkte van de led.
We meten met de seriële monitor welke getallen een analoge poort genereert. Die getallen, van 0 tot 1023, moeten we omzetten naar getallen van 0 tot 255 zodat we die kunnen gebruiken om een digitale poort aan te sturen met analogWrite(poortNummer,getal), bijvoorbeeld zó: lichtsterkte = map(nummerVanAnalogePoort, 0, 1023, 0, 255)
💻 Een LCD scherm gebruiken
Laat een tekst verschijnen op het LCD scherm.
Optioneel: experimenteer met de verschillende functies die gedefinieerd worden in de library. (Zó bijvoorbeeld.)
Optioneel: voeg een knop toe om te schakelen tussen verschillende manieren om je tekst weer te geven.
Wat heb je geleerd?
Je code hak je best in leesbare stukken door functies te definiëren met void naamVanDeFunctie() {code}
Je hoeft niet alle code zelf te schrijven. Je kan ook zgn. libraries gebruiken waarin al heel wat functies zitten die je kan gebruiken.
Je laadt een library met #include<naamVanDeLibrary>
Om de functies in de library te gebruiken, raadpleeg je de documentatie die erbij hoort.
Pas je code aan zodat het LCD scherm 5 seconden lang jouw voornaam op de bovenste lijn en je achternaam op de onderste lijn laat zien. Daarna moet er 5 seconden een andere tekst verschijnen. Loop!
Maak de ENDLESS RUNNER GAME. Je gaat de code een heel klein beetje moeten aanpassen om dit te laten werken met het materiaal dat we in de klas hebben. Zie je waar?
💻 Een thermometer maken
Laat een tekst verschijnen op het LCD scherm.
Sluit een temperatuursensor aan, ijk de temperatuursensor en laat de temperatuur op het scherm verschijnen.
Merk op dat de temperatuursensor die we gebruiken 1 component is. In de temperatuursensor zit een serieschakeling van een thermistor en een constante weerstand.
Wat heb je geleerd?
Net als bij een regelbare weerstand (de draaiknop), kan je een temperatuursensor uitlezen met een analoge poort.
Als je weet bij welke temperatuur de analoge poort welk getal (van 0 t/m 1023) genereert, kan je gaan mappen. Zo ijken we dus onze thermometer.
Vertrek van het vorige ontwerp en maak een toongenerator. Zorg dat je met een draaiknop de frequentie van de buzzer kan regelen van 220 Hz tot 880 Hz.
💻 Een voltmeter maken
Plaatse een draaiknop die je op een analoge poort aansluit. Zorg dat je met de draaiknop de spanning op die analoge poort kan wijzigen. Zorg dat het LCD scherm de spanning (in volt toont) tot op 1/100 volt nauwkeurig.
Wat heb je geleerd?
Als je met decimale getallen wil werken, gebruik je float i.p.v. int. (Je kan ook double gebruiken.)
In de code voor je arduino (C++ dus) kan je ook rekenen.
Een berekening kan mapping vervangen.
MAPPING met een FUNCTIE
Vertrek van het vorige ontwerp. We lezen de stand van een draaiknop af op een analoge poort. We laten een overeenkomstige waarde van 0 tot 10000 zien op het scherm. Die waard moet een geheel getal zijn. Dat zou je kunnen doen met map(waardePoort, 0, 1023, 0, 10000). Die mapping gebeurt dan lineair. Zó dus.
MAAR!!! Nu willen we dat dit niet lineair gebeurt maar volgens een kwadratische functie y = a x². Zó dus. Je gaat dus op zoek moeten naar de parabool door punt (1023, 10000) en met top (0,0). Het functievoorschrift van je parabool gebruik je in je code, zodat op het scherm van je arduino het vereiste getal verschijnt.
💻 Een elektromotor
Sluit een motor aan op een digitale poort. Regel de rotatiefrequentie (in rpm) met een draaiknop.
Niet vergeten:
de analoge poorten zetten een inkomende spanning om naar een getal van 0 t/m 1023.
de digitale ~ poorten stuur je met een getal van 0 t/m 255.
Vertrek van een vorig ontwerp met LCD scherm.
Sluit een motor aan op een digitale poort. Regel de rotatiefrequentie (in rpm) met een draaiknop.
Laat op een LCD scherm zien wat de rotatiefrequentie is van de motor.
Maak een circuit met een motortje. Maak van je motor een ventillator door er wieken op te monteren. Je ventilator moet opspringen bij een door jou gekozen minimum temperatuur. De snelheid van het motortje moet groter worden als de kamertemperatuur hoger wordt.
Optioneel: voeg ook een maximum temperatuur toe vanaf dewelke de ventilator op volle kracht moet draaien.
💻 Een servomotor
Sluit een servomotor aan op een digitale poort. Regel de positie van de arm met een draaiknop.
Niet vergeten:
de analoge poorten zetten een inkomende spanning om naar een getal van 0 t/m 1023.
de digitale ~ poorten stuur je met een getal van 0 t/m 255.
Laat de positie van een servomotor afhangen van de omgevingstemperatuur. Bouw een schaalverdeling zodat je dankzij de positie van je servomotor de temperatuur kan aflezen.
💻 User input
We sluiten een rode, groen en blauwe led aan.
Via de serial monitor vragen we aan de gebruiker om een keuze te maken welke led moet branden.
Probeer dit zowel met woorden als met getallen uit.
Wat heb je geleerd?
Met de serial monitor kan je woorden en getallen doorgeven aan je arduino.
User input kan je gebruiken om dingen te laten gebeuren.
Resources
Kleurencode van weerstanden
Hoe groot is de weerstand?
Dat kan je vinden met de webapp Kleurencode van weerstanden
Een led correct aansluiten
Een LED heeft een vaste polariteit. Als je hem verkeerd aansluit, dan werkt hij niet.
Je arduino zonder computer
Om je Arduino te programmeren heb je een computer nodig.
Maar Als je je code hebt opgeladen naar je Arduino, dan heb je die computer niet meer nodig.
Je moet dan wél je Arduino voorzien van een energiebron. Een batterij van 9 V bijvoorbeeld.