Arduinocursus Deel2 Gev Opdrachten

From Digimaken wiki

Revision as of 15:17, 27 June 2016 by Simon (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

2++.1, PWM

Sluit de LED aan op een van de PWM-pinnen van de Arduino (3, 5, 6, 9 of 10). Gebruik de functie analogWrite om de LED te laten faden: Laat de LED in een paar seconde geleidelijk aangaan en vervolgens weer geleidelijk uit.

2++.2, analogRead

a

Sluit de LDR-module aan op een van de analoge pinnen (A0-A3):

Arduinocursus img6.jpg

Lees de waarde van de LDR-module uit met de functie analogRead. Toon deze waarde op de serial monitor met behulp van de functie Serial.println Welke waarde krijg je als je de LDR afschermt met je hand? Welke waarde krijg je als je er een lampje op schijnt?

b

Sluit nu ook een LED aan op de Arduino. Zorg ervoor dat de LED gaat branden als het donker is en weer uitgaat als het licht is.

2++.3, digitalRead (met ruis)

a

Sluit de druknopmodule en een LED op de Arduino aan. We beginnen eenvoudig: Laat de LED aangaan als de drukknop is ingedrukt en uitgaan als de drukknop is losgelaten. (Dit is een herhaling van Opdracht 1.4b van vorige week.)

b

Maak een toggle-switch: Pas de sketch zo aan dat de LED aangaat als de drukknop wordt ingedrukt en vervolgens aanblijft zelfs als de schakelaar wordt losgelaten. Pas als de schakelaar nogmaals wordt ingedrukt gaat de LED weer uit.

Opmerking: Dit is lastiger dan het op het eerste gezicht lijkt. Er zijn twee problemen om rekening mee te houden:

1. Bij een naive implementatie gaat de LED gaat knipperen als je de knop ingedrukt houdt. Probeer dat te voorkomen.

2. Er zit ruis in het signaal. Volgens het model dat we tot nu toe hebben gebruikt meet je een hoog voltage (5V) als de drukknop niet is ingedrukt en zodra de drukknop wordt ingedrukt gaat het voltage naar 0V. (Bij deze overgang wil je de LED toggelen.) In werkelijkheid is die overgang niet zo mooi. Als je een drukknop indrukt dendert het contact een beetje na. Dat wil zeggen het voltage gaat na het indrukken van de knop een aantal keer op en neer van 0V naar 5V voor het uiteindelijk stabiel op 0V blijft staan. Zie onderstaande plaatjes:

Ideaal model drukknop:

Drukknop ideaal.png

Werkelijkheid:

Drukknop dendering.png

Dit effect wordt denderen (of bouncing) genoemt. Het denderen kan ervoor zorgen dat de LED heel snel achter elkaar uit en aan gaat. Dit gaat zo snel dat je het niet ziet. Maar, als je er geen rekening mee houdt in je programma, dan kan de schakeling heel onvoorspelbaar gedrag gaan vertonen.

Het is dus belangrijk om ervoor te zorgen dat je sketch hier goed mee omgaat.

(Hint: De sampling rate--het aantal keer per seconde dat je de toestand van de drukknop uitleest--speelt een grote rol.)

2++,4 (BONUS)

Voor degenen die nog tijd overhebben zijn hier nog drie extra uitdagingen om uit te kiezen:

  • Lichtsterktemeter. Gebruik 3 LED's en een LDR. Meet de lichtsterkte met de LDR. Gebruik vervolgens de LED's als indicator voor de gemeten lichtsterkte. Als het heel donker is zijn alle LED's uit, als het iets lichter is brandt alleen de eerste LED, als het nog iets lichter branden de eerste twee, en als het heel erg licht is branden alle LED's.
  • Fietslampje (moeilijk): Dit is een uitbereiding van opdracht 2++.3b. De meeste goedkope fietslampjes hebben drie toestanden: aan, uit en knipperen. Als je de knop één keer indrukt, gaat de LED aan, als je nogmaals op het knopje drukt gaat de LED knipperen en als je een derde keer op het knopje drukt gaat de LED weer helemaal uit. Maak dit na met de Arduino.
  • LED-display (heel moeilijk). De LED-displays die je veelal in trams ziet bevatten vaak duizenden LED's. Als je elke LED individueel met een Arduino zou aansturen kom je al snel pinnen tekort. Er zijn een hoop trucs om het aantal benodigde pinnen te beperken. Een van de meest voorkomende trucs is een LED-matrix. Hiermee is het mogelijk om bijvoorbeeld 16 LED's te bedienen met slechts 8 Arduinopinnen. Vraag de docent om instructies.