ARDUINO PROJECTEN
VOOR BEGINNERS
VOOR BEGINNERS
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 waarmee 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 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 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 componenten op je arduino aansluit.
Je weet immers vaak niet wat er voordien met de arduino is gebeurd.
💻 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, te vergelijken met de min-pool van een batterij.
Je gebruikt best const int i.p.v. int voor een waarde die tijdens de uitvoering niet zal veranderen.
HET VERKEERSLICHT
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 echt verkeerslicht lijkt.
💻 TWEE SETS VERKEERLICHTEN
Bouw 2 sets verkeerslichten die samen aan en uit gaan , net zoals je dat ziet gebeuren op een kruispunt. Hier regelen we dus de lichten op 1 verkeersas.
De beide groene lichten moeten samen aan en uit gaan. Hetzelfde geldt voor de oranje en de rode lichten.
Slim programeren doe je door acties te combineren in functies.
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_tussen_accolades}
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.
Je kan verschillende dingen op je adruino aansluiten en die apart aansturen.
HET KRUISPUNT - 1
Bouw 2 sets verkeerslichten die de verkeersstroom regelen, net zoals je dat ziet gebeuren op een echt kruispunt:
weg 1 heeft groen terwijl weg 2 rood heeft.
weg 1 krijgt oranje terwijl weg 2 nog rood heeft.
weg 1 krijgt rood terwijl weg 2 nog rood heeft.
beide wegen hebben even rood.
weg 1 heeft rood terwijl weg 2 nu groen krijgt.
enz...
Kies voor de eenvoud een situatie waarbij beide wegen even lang groen hebben.
Vind je daarna ook een oplossing waarbij weg 1 langer groen heeft dan weg 2?
HET KRUISPUNT - 2
Baseer je op de vorige opdracht.
Vind je ook een oplossing waarbij weg 1 (een drukke weg) langer groen krijgt dan weg 2 (een rustige weg)?
💻 DE VARIABELE FLITSLAMP
We bouwen een project waarin een flitslamp eerst 2 keer, dan 4 keer en daarna 3 keer aan en uit gaat. We gebruiken maar 1 functie voor deze drie gelijkaardige acties.
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_tussen_accolades}
Functies kunnen werken met lokale variabelen.
Syntax: void functieNaam(lokale_variabele) {hier_je_code_die_lokale_variabele_gebruikt}
In de loop kan je de functie gebruiken en de variabele invullen. Zo kan je eenzelfde functie toch andere, maar gelijkaardige dingen laten doen.Â
DE VARIABELE BELICHTING
Baseer je op de vorige opdracht.
Verander de code zodat je de lamp:
eerst 3 seconde laat aangaan en dan 2 seconde wacht,
daarna 1 seconde laat aangaan en 2 seconde wacht,
dan 2 seconde laat aangaan en 3 seconde wacht,
tenslotte 2 keer even kort flitst zodat je weet wanneer de volgend cyclus start.
Gebruik dus 2 lokale variabelen in de functie.
💻 POLITIE - ZONDER GELUID
Laat beurtelings een blauwe en een rode led knipperen.
💻 POLITIE - MET GELUID
Laat beurtelings een blauwe en een rode led knipperen.
Sluit een buzzer aan op een poort met het symbool ~ (tilde).
Laat samen met het knipperen van je leds ook het geluid van een politiewagen weerklinken.
Bestudeer de code die toelaat om het geluid te produceren.
Wat heb je geleerd?
De digitale poorten die gemerkt zijn met een ~ (tilde) zijn speciale poorten. Die kunnen korte pulsen van 5 V sturen. Bijvoorbeeld 440 keer per seconde van 0 V naar 5 V gaan.
met tone(poortnummer,frequentie) kan je pulsen met een bepaalde frequentie sturen naar een poort.
Met noTone(poortnummer) kan je de pulsen van een poort stoppen.
Doe de leds weg. Laat je arduino de eerste maat van Frère Jacques spelen (LUISTER).
Gebruik deze muzieknoten met frequenties in Hz:
do (262) - re (294) - mi (330)
Let op! De muzieknoten mogen niet "aan elkaar plakken" zoals bij de politiewagen!
Elke noot moet duidelijk afzonderlijk hoorbaar zijn.
Optionele toevoeging: koppel je arduino los van de computer en sluit hem aan op een batterij van 9 V.
Wil je meer arduino liedjes zonder alles zelf te programmeren?
(Opgelet! Bij deze codes zit de buzzer op poort ~11.)
De digitale poorten die gemerkt zijn met een ~ (tilde) 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.
💻 EEN LED DIMMEN
Regel de helderheid van een rode led. Laat de LED in kleinen stappen helderder worden en weer zwakker.
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 manier dimmen.
TWEE LEDS DIMMEN EN LATEN ALTERNEREN
Baseer je op de vorige op het vorige project.
Voeg een extra rode led toe. Pas de code aan zodat de lichtsterkte van de ene led toeneemt terwijl die van de andere led afneemt en vice versa.
💻 POLITIE - AAN/UIT MET SCHAKELAAR
Laat beurtelings een blauwe en een rode led knipperen.
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 gebeuren.
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.
💻 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 aan de knop te draaien.
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.
💻 POLITIE - AAN/UIT MET DRUKKNOP
I.p.v. een schakelaar of een draaiknop, 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.
Wat heb je geleerd?
Met een drukknop kan je de spanning op een poort veranderen.Â
Je code kan een variabele veranderen.
Gebruik een variabele (hier: control = 0 of control = 1) om te "onthouden" wat er gebeurd is, zodat je dit als voorwaarde kan gebruiken om een welbepaalde actie uit te voeren.
ALARM!
Start met een kopie van een vorig project en bouw een schakeling die een rode LED kan laten flitsen en een buzzer kan laten biepen zoals een alarm.
Het alarm moet afgaan wanneer je een draaiknop in een bepaalde stand zet.
Voeg ook een drukknop toe waarmee je je alarmfunctie aan en uit kan zetten.
Zorg voor een controlelamp zodat je kan zien of je alarm is geactiveerd of niet.
Soms wil je je code stoppen zonder de stroom naar je arduino te onderbreken. Dan kan je een "reset" doen. Je arduino start dan helemaal opnieuw.
je arduino heeft een fysieke reset-knop.
💻 RESET MET EIGEN KNOP
Laat een LED knipperen. Zorg dat er lange delays in je code zitten zodat er dan niets anders kan gebeuren.
Plaats ook een buzzer die kort 2 keer biept als de arduino start.
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.
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.
Op het moederbord van de arduino zit een RESET knop.
Er is ook een poort RESET die de arduino zal herstarten als je die 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 ook een drukknop die je toelaat om je machine te herstarten.
Een ISR (Interrupt Service Routine) is een speciale functie die de Arduino onmiddellijk laat stoppen met zijn gewone werk als er iets belangrijks gebeurt. Dit gebruik je voor dingen die niet kunnen wachten op de trage delay()-pauzes in je code. Op een Arduino Uno kun je hiervoor alleen poort 2 of poort 3 gebruiken.
💻 LAMPJE AAN EN UIT MET EEN ISR
Laat enkele leds afwisselend aan en uit gaan. Zorg ervoor dat je tijdens deze "loop" ook een andere led aan of uit kan schakelen.
Wat heb je geleerd?
Met een ISR (Interrupt Service Routine) kan je de loop() onderbreken zodat je arduino kort even iets anders kan doen. Een ISR onderbreekt altijd de normale loop(), zelfs als er een lange delay() bezig is.
Gebruik nooit delay() binnen een ISR. De interne klok van de arduino staat tijdens een interrupt stil, waardoor de pauze nooit eindigt.
Gebruik het woord volatile voor variabelen die in de ISR veranderen. Zo weet de arduino dat deze op elk moment kunnen wijzigen.
Koppel de interrupt in de setup() met het commando attachInterrupt().
REGEL HET AANTAL FLITSEN MET ISR
Start met dit project.
Elke druk op de "plus-knop" zorgt ervoor dat je het aantal flitsen per cyclus met 1 verhoogt.
Pas nu de schakeling en de code aan zodat je
een extra knop hebt waarmee je het aantal flitsen per cyclus ook weer kan verminderen tot een minimum van 1 (!).
een extra knop hebt waarmee je je Arduino kan resetten naar de beginstand.
De seriële monitor is een heel handig hulpmiddel. Je gebruikt die om te "kijken" wat je Arduino doet.
De seriële monitor is een venster in je Arduino IDE en in de simulatie bij Tinkercad waarin je tekst en getallen kunt lezen die de Arduino verstuurt
De monitor is niet alleen om te lezen. Je kunt ook zelf woorden of getallen typen en naar de Arduino sturen.
De seriële monitor bij Tinkercad.
De seriële monitor bij de Arduino IDE.
💻 EEN WAARDE UITLEZEN MET DE SERIËLE MONITOR
Verbind een digitale poort via een schakelaar met de 5V-lijn.
Lees met de seriële monitor of de schakelaar aan staat of uit.
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 gebruikt 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 waarmee de arduino en de serial monitor informatie uitwisselen. 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 WAARDE UITLEZEN MET DE SERIËLE MONITOR - ALLEEN BIJ EEN VERANDERING
Start met een kopie van het vorige project. Hierin wordt de stand van de schakelaar elke seconde opnieuw uitgelezen en geprint in de seriële monitor.
Pas de code aan zodat er alleen bij een verandering van de toestand een melding verschijnt (= State Change Detection) en niet elke keer na een pauze.
💻 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.
Wat heb je geleerd?
Met de serial monitor kan je woorden en getallen doorgeven aan je arduino.
De arduino leest je input met Serial.readString().
User input kan je gebruiken om dingen te laten gebeuren.
USER INPUT - EEN FOUTBOODSCHAP
Start met een kopie van het vorige project.
Geef de bestaande code aan een AI en ...
vraag aan een AI waarom er while (Serial.available() == 0) { }Â in de code staat.
vraag om een elegante (!!) en overzichtelijke (!!) aanpassing zodat de serial monitor ook een foutboodschap geeft als je iets verkeerds hebt getypt. Test die code ook uit.
USER INPUT - EEN LAMP LATEN FLITSEN
Bouw een project waarbij je de getallen 1, 2 of 3 moet intypen, waarna de arduino een lampje 1, 2 of 3 keer zal laten flitsen.
USER INPUT - EEN LAMP DIMMEN
Start met het project waarbij we een led hebben gedimd.
Bouw een project waarbij je een getal van 0 tot 255 moet intypen, waarna de arduino een lampje een bepaalde lichtsterkte geeft.
💻 LEES DE STAND VAN EEN DRAAIKNOP
Plaats een regelbare weerstand en verbind die met een ANALOGE POORT. Je Arduino leest elke halve seconde de stand van je weerstand en vertelt je via de seriële monotor hoe die staat.
UTBREIDING
Als je alleen getallen naar de seriële monitor stuurt, kan je die getallen ook in een grafiek zien met de serïele plotter.
De seiële plotter bij Tinkercad.
💻 POLITIE - CONTROLEER KNIPPERTIJD MET DRAAIKNOP
Laat beurtelings een blauwe en een rode led knipperen.
Plaats een regelbare weerstand. Je Arduino leest de stand van je weerstand en verandert het tempo waaraan de lichten knipperen.
💻 EEN LED DIMMEN MET EEN DRAAIKNOP
Regel de helderheid van een rode led met een draaikop (regelbare weerstand). We doen dat door PWM te gebruiken op een poort met ~ (tilde) en de stand van de draaiknop (0-1023) te mappen naar de getallen 0-255.Â
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 deze 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 je code.
(In het vorige voorbeeld mappen we het getal 0 naar onze minimumtijd, het getal 1023 naar onze maximumtijd.)
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 waarin de 3 kleuren aanwezig zijn.
Hoeveel verschillende kleuren kan je (theoretisch) maken met deze opstelling?
START MET EEN KOPIE VAN DIT ONTWERP.
💻 EEN LICHTSENSOR 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 bij verschillende lichtsterkten.
💻 EEN TEMPERATUURSENSOR UITLEZEN MET DE SERIËLE MONITOR (1)
Verander de vorige schakeling maar gebruik dezelfde code.
Vervang de lichtgevoelige weerstand door een temperatuurgevoelige weerstand.
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 bij verschillende temperaturen..
Een lichtgevoelige weerstand (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!
Een temperatuursgevoelige weerstand is een weerstand waarvan de grootte afhankelijk is van de temperatuur.
Als je de temperatuursgevoelige weerstand en een andere, constante, weerstand (R) in serie plaatst, wordt de spanning verdeeld. Als de weerstand van de temperatuursgevoelige weerstand verandert, verandert dus de verdeling van de spanning.
De spanning over R is nu dus óók afhankelijk van de temperatuur. Meet de spanning over die weerstand en koppel die aan de temperatuur. Je hebt dan een temperatuursensor gemaakt!
💻 EEN TEMPERATUURSENSOR UITLEZEN MET DE SERIËLE MONITOR (2)
Een temperatuursensor kan je gewoon kopen. Die is meteen gebruiksklaar zonder dat je extra componenten nodig hebt.
Meet met een analoge poort de spanning die zo'n sensor uitstuurt en lees met de seriële monitor de waarde uit die de analoge poort weergeeft bij verschillende temperaturen.
OPGELET! De temperatuursensoren die we in de klas gebruiken hebben een vaste ⊕ en een vaste ⊖.
Voorbeelden van sensoren zijn:
Temperatuursensor: de spanning verandert met de temperatuur.
Lichtsensor: de spanning verandert met de lichtsterkte.
Afstandssensor: de spanning verandert met de afstand tot een object.
Krachtsensor: de spanning verandert met de kracht die je erop uitoefent.
Druksensor: de spanning verandert met de omgevingsdruk.
Gassensor: de spanning verandert met de concentratie van een bepaald gas in de lucht.
pH-sensor: de spanning verandert met de pH van een oplossing.
Geluidssensor: de spanning verandert met de sterkte van het geluid.
Bewegingssensor: de spanning verandert wanneer er beweging wordt gedetecteerd.
Vochtigheidssensor: de spanning verandert met de luchtvochtigheid.
Versnellingssensor: de spanning verandert met de versnelling of beweging van het object.
Magneetsensor: de spanning verandert met de sterkte van het magnetisch veld.
Aanraaksensor: de spanning verandert wanneer er contact of aanraking is.
Positiesensor: de spanning verandert met de positie of hoek van een object.
Waterniveausensor: de spanning verandert met het niveau van een vloeistof.
Wat heb je geleerd?
Een sensor stuurt een spanning naar een apparaat. Die spanning verandert als een bepaalde externe parameter verandert. De arduino meet die spanning en "vertaalt" die naar een getal (0 - 1023).
In de voorbeelden kwamen we via de seriële monitor te weten welke getallen (0 - 1023) een analoge poort geeft als de sensor erop is aangesloten.
💻 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?
Een sensor stuurt een spanning naar een apparaat. Die spanning verandert als een bepaalde externe parameter verandert. De arduino meet die spanning en "vertaalt" die naar een getal (0 - 1023). Dit getal kan je in je code gebruiken om iets te laten gebeuren.
Je moet vooraf bepalen welk bereik je sensor heeft. Je moet dus weten welke getallen (x) beschikbaar zijn (0 ≤ x ≤ 1023) als je de sensor aansluit. Op basis daarvan kan je acties laten uitvoeren.
BACKLIGHTING
Start met een kopie van het vorige project.
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.)
De truc die we hier moeten gebruiken: map de waarde van de sensor naar de pulsbreedte die de led moet ontvangen:Â lichtsterkte = map(nummerVanAnalogePoort, 0, 1023, 50, 255)
KOUD - NORMAAL - WARM (1)
Start met een kopie van het vorige project. Vervang de lichtsensor door een temperatuurgevoelige weerstand. Voeg, naast de rode led, ook een groene led en een blauwe led toe.
Bepaal eerst met de seriële monitor welke waarden de sensor genereert als je temperatuurgevoelige weerstand ...
op een ijsblokje legt. (KOUD)
gewoon op kamertemperatuur houdt. (NORMAAL)
verwarmt met een haardroger (of heet water). (WARM)
Schrijf code zodat:
de blauwe led aangaat als het koud is.
de groene led aangaat bij normale temperaturen.
de rode led aangaat als het warm is.
In deze oplossing staat nog een lichtgevoelige weerstand omdat Tinkercad geen temperatuurgevoelige weerstand kent. (Tinkercad heeft alleen een geïntegreerde temperatuursensor.)
KOUD - NORMAAL - WARM (2)
Start met een kopie van de vorige opdracht KOUD - NORMAAL - WARM (1).
Werk met maar 1 led.
Nu moet de led helderder worden als de temperatuur stijgt en weer dimmen als de temperatuur daalt.
💻 EEN LCD-SCHERM GEBRUIKEN
Een project moet je ook zonder computer kunnen gebruiken. Je beschikt dan niet meer over de seriële monitor dus heb je soms een scherm nodig.
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 hoeft niet alle code zelf te schrijven. Je kan ook zgn. libraries gebruiken waarin al heel wat functies zitten die je kan gebruiken.
Als een library niet standaard is, moet je die eerst één keer installeren via de Library Manager in de Arduino IDE. De computer slaat de code dan op en kan die gebruiken.
Je laadt een library met #include<naamVanDeLibrary>
Om de functies in de library te gebruiken, raadpleeg je de documentatie die erbij hoort.
Een scherm kan je aansturen met de instructies uit deze standaard (!) library.: LiquidCrystal.h
JE RECLAMEBANNER
Vertrek van het vorige ontwerp.
Zorg ervoor dat het scherm 5 seconden jouw naam toont. Je voornaam op de bovenste lijn en je achternaam op de onderste lijn.Â
Daarna verdwijnt jouw naam en verschijnt er 5 seconden een boodschap die je zelf kiest.
Pas daarna eventueel de code aan zodat je boodschap een dynamiek vertoont.
EEN MOGELIJKE OPLOSSING (zonder dynamiek)
DE TOONGENERATOR
Combineer ontwerpen en maak een toongenerator.
Zorg dat je met een draaiknop de frequentie van de buzzer kan regelen van 220 Hz tot 880 Hz.
De frequentie moet op het scherm verschijnen.
💻 EEN VOLTMETER MAKEN
Plaats 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 volgende informatie toont:
de waarde die de analoge poort genereert op de 1e lijn.
de spanning (in volt toont) tot op 1/10 volt nauwkeurig op de 2e lijn.
💻 EEN SENSOR UITLEZEN
Vervang in het vorige ontwerp de knop door een lichtsensor.
Pas de code aan zodat het LCD scherm de (digitale) waarde toont die de sensor genereert via de analoge poort.
Verander een aantal keer de weerstand van de sensor en bestudeer het effect daarvan op de waarde die sensor genereert.
Alternatief: vervang de gewone weerstand door een REGELBARE weerstand (draaiknop) en bestudeer het effect van de verandering van die weerstand op de waarde die sensor genereert.
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 rekenen.
Een berekening kan mapping vervangen.
Een schermpje kan een alternatief zijn voor de seriële monitor als je wil weten welke waarden een sensor genereert via een analoge poort.Â
MEER SENSOREN UITLEZEN
Pas het ontwerp "EEN SENSOR UITLEZEN" aan.
Plaats een extra lichtsensor. Zorg dat je met een druk op een knop kan schakelen tussen het uitlezen van de ene en de andere lichtsensor.
(Hoeveel sensoren kan je zo maximaal uitlezen?)
Je kan op deze manier maximaal 6 sensoren. De Arduino UNO heeft immers 6 analoge poorten (A0 - A5).
EEN THERMOMETER MAKEN
Pas het ontwerp "EEN SENSOR UITLEZEN" aan.
Sluit een temperatuursensor aan i.p.v. de lichtsensor.
Ijk de temperatuursensor. Je zal dus moeten weten bij welke temperatuur de sensor welke waarde genereert.Â
Laat de temperatuur op het scherm verschijnen.
Merk op dat de temperatuursensor die we in de simulatie gebruiken 1 component is.Â
(Je kan ook een serieschakeling gebruiken van een temperatuurgevoelige weerstand (een thermistor) en een gewone, constante weerstand.)
De code in deze oplossing kan je in het echt niet zomaar gebruiken om de temperatuur te meten.
Je zal je eigen temperatuursensor moeten ijken om een correcte waarde voor de temperatuur te krijgen.
Heel wat temperatuursensoren die we gebruiken werken lineair. Dat wil zeggen dat we met 2 ijkpunten voldoende hebben om een ijkcurve (hier: een rechte) op te stellen.
In de thermometer die we bouwden waren dat:
ijkpunt 1:
bij temperatuur -40 °C ( int ijkTemperatuur1 = -40 )
geeft de sensor via poort A0 de waarde 20 ( ijkWaarde1 = 20 )
ijkpunt 2:
bij temperatuur 125 °C ( int ijkTemperatuur1 = 125 )
geeft de sensor via poort A0 de waarde 358 ( ijkWaarde1 = 358 )
Met de code
temperatuur = map(waardeSensor, ijkWaarde1, ijkWaarde2, ijkTemperatuur1, ijkTemperatuur2)
zorg je ervoor dat je een lineaire ijkcurve genereert.
Je thermometer zal dan de juiste temperatuur aangeven voor elke waarde die de sensor naar je arduino stuurt.
(Bekijk de ijkcurve bij Desmos.)
MAPPING MET EEN WISKUNDIGE FUNCTIE
Bouw een eenvoudig circuit met twee LEDs die je kan dimmen met één draaiknop. Gebruik eerst lineaire mapping om de input van de knop te "vertalen" naar de lichtsterkte van de LEDs.
Probleem: onze menselijke zintuigen werken niet lineair. Als je een LED lineair aanstuurt (met PWM), dan lijkt de LED in het begin heel snel fel te worden, terwijl je aan het eind van de draaiknop nauwelijks nog verschil ziet.
Je kan dit bijvoorbeeld oplossen door de input via de draaiknop (0 - 1023) te "vertalen" naar de lichtsterkte van de LED (0 - 255) volgens een kwadratische functie y = a x².
Je gaat hier dus een parabool gebruiken door punt (1023, 255) en met top (0,0).
Het functievoorschrift van de parabool gebruik je in je code in de plaats van map() .
Doe dit voor 1 van de 2 LEDs en vergelijk het verschil.
Bekijk ook het verschil met Desmos.
MAPPING MET EEN WISKUNDIGE FUNCTIE - UITBREIDING
In het vorige ontwerp gebeurt de "mapping" met de functie hiernaast, met p = 2. Een kwadratische functie dus.
Voeg aan het vorige ontwerp een extra knop toe waarmee je de waarde van p kan wijzigen zodat je het dimmen van de led verder kan regelen zodat het helemaal "natuurlijk aanvoelt" als je aan de dim-knop draait.
Zorg ervoor dat je de waarde van p kan opvolgen via de serial monitor.
Op die manier hebben we een dynamische mapping-tool gebouwd waarbij één knop de intensiteit regelt en de tweede knop de "karakteristiek" van de dimmer bepaalt.
💻 EEN SERVOMOTOR
Maak een schakeling met een servomotor. Regel de positie van de arm met een draaiknop.
De professionele manier om een servomotor aan te sluiten (en om de arduino niet te beschadigen):
gebruik een externe voeding (bijv. 4 AA-batterijen of een 5V-batterij).
gebruik een common ground. Verbind de ground (GND, 0 V) van de externe voeding met de GND van de Arduino. Als je dit niet doet, werkt het signaal naar de motor niet omdat er geen gedeeld referentiepunt is.
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.
Wat heb je geleerd?
Een servomotor is een motor die een bepaalde positie kan innemen. Hij reageert op gepulste signalen (PWM) van een ~ poort.
Een servomotor kan je aansturen met de instructies uit deze standaard (!) library.: Servo.h
De code .write(hoekgetal) uit de library vertaalt het hoekgetal (= een hoek van 0 tot 180 graden) in de juiste pulsbreedte om de servomotor in die stand te plaatsen.
EEN SERVOMOTOR STUREN MET LICHT
Pas het vorige ontwerp aan.
Plaats een lichtsensor in plaats van een draaiknop en stuur daarmee je servomotor aan.
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.
! AAN HET VERVOLG VAN DEZE PAGINA WORDT OP DIT MOMENT GEWERKT !
Maak een veilige (!) schakeling met een elektromotor. Regel de rotatiefrequentie (in rpm) met een draaiknop.
Vertrek van een vorig ontwerp met LCD scherm.
Maak een veilige schakeling met een motor.
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.
HIER OOK DE KERSTLICHTJES ?????
💻 Verzend S.O.S. in morsecode
Laat een externe led van je Arduino knipperen.
Verzend S.O.S. in morsecode.
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.
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?
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)
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.
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?
Bij arduino.cc vind je tutorials die je leren je Arduino te programmeren.