Arduinocursus Deel4 Opdrachten

From Digimaken wiki

Het doel voor vandaag is om de opdrachten van de vorige weken af te maken.

Voor degenen die hier mee klaar zijn of iets anders willen doen, is er de optie om met de hulp van de docent aan een eigen project te werken. Mocht je geen eigen project hebben, staan hieronder een aantal (lastige) problemen waar je uit kan kiezen.

Probleem 1, drukknopmodule

Gebruik een drukknop en een 10k module om de drukknopmodule na te maken. Als de drukknop niet ingedrukt is staat er 5V op pin A0, en als de drukknop wel is ingedrukt staat er 0V op A0. Je kan de sketch van uitwerking van Opdracht 2.3 gebruiken om de schakeling mee te testen (Materiaal Arduinocursus > Voorbeeldsketches en Uitwerkingen > Week 2 > Uitwerkingen Week 2 > Opdracht3).

Kan je de module zo aanpassen dat hij andersom werkt (5V als de knop is ingedrukt, en 0V als de knop niet is ingedrukt)?

Probleem 2, LDR module

Het volgende document legt uit hoe LDR-module werkt: Uitleg voltagedeler (Engels). Gebruik een weerstand en een LDR om een LDR-module te maken.

Probleem 3, lichtzoeker

Plak met een stukje tape de LDR-module aan de servo:

Lichtzoeker.jpg

Gebruik deze opstelling om een lichtzoeker mee te maken. De lichtzoeker wijst aan waar het meeste licht vandaan komt. Dit gebeurt in 2 stappen:

  • Eerst maakt de servo een scan (een draai van 180 graden om te bepalen waar het meeste licht vandaan komt).
  • Daarna draait de servo naar de richting waar het meeste licht vandaan kwam.

Na een paar seconde begint het hele proces weer opnieuw.

Probleem 4, toggle-schakelaar

Deze opdracht is een herhaling van opdracht 2++.3. Maar volgens mij heeft niemand deze opdracht gedaan. Deze opdracht is een verraderlijk lastige opdracht. De rede dat ik hem terug laat komen is omdat hij heel nuttig is. In deze opdracht komt het probleem van signaalruis naar voren, een probleem wat veel voorkomt in de electronica en nuttig is om een keer gezien te hebben. De uitwerking van deze opdracht kan je vinden in (Materiaal Arduinocursus > Voorbeeldsketches en Uitwerkingen > Week 2 > Uitwerkingen Week 2 (opgaven voor programmeurs) > Opdracht2b).


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 de eerste 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.)