In dit deel gaan we in op het programmeren van timers voor de Micro:bit. Je gaat een prototype voor een lantaarnpaal maken. Er zijn twee manier om dat te doen, je kunt kiezen.
In dit deel laten we zien hoe je een timer kunt programmeren voor de Micro:bit en welke blokken je daarvoor nodig hebt. We laten de volgende onderdelen zien:
de timer starten
de timer loopt af
de timer resetten
de timer uitzetten
De timer starten
In het algemene deel van cyclus 2 heb je kunnen zien dat je een variable nodig hebt, we noemen deze variabele: timerEindtijd.
Het starten van de timer doe je als volgt.
De looptijd (ms) geeft aan hoe lang de Micro:bit al aan staat, in miliseconden. Daar tel je 5000 miliseconden (= 5 seconden) bij op. De timer loopt dus over 5 seconden af.
De timer loopt af
Om na te gaan of de timer afloopt gebruik je het volgende:
Je controleert dus op de looptijd van de Micro:bit inmiddels groter of gelijk is aan de eindtijd van de timer. Als dat zo is, zijn de 5 seconden verstreken en loopt de timer dus af.
Een voorbeeld:
Je start de timer bij de looptijd van 12.000 milliseconden (dat is 12 seconden). De timerEindtijd wordt dan 12.000 + 5.000 = 17.000 milliseconden. Bij een looptijd van 12.500 milliseconden gaat de timer niet af, want de volgende uitdrukking is dan NIET WAAR:
12.500 >= 17.000
Een paar seconden later is de looptijd bijvoorbeeld 17.400 milliseconden. De timer loopt dan wel af, want de volgende uitdrukking is dan WAAR:
17.400 >= 17.000
De timer resetten of herstarten
Het resetten of herstarten van een timer is hetzelfde als het starten van de timer.
De timer uitzetten
Het uitzetten van een timer kan niet en hoeft ook niet. Als in een bepaalde toestand binnen het toestandsdiagram de timer niet belangrijk is, wordt simpelweg niet gecontroleerd of de timer afloopt. Eigenlijk is de vergelijking met de kookwekker in die zin niet helemaal goed. Een kookwekker geeft namelijk een alarm (hard piepen bijvoorbeeld) waardoor jij weet dat het tijd is om de eieren uit de pan te halen. Als je niet wilt dat het alarm afgaat moet je de kookwekker eerder uitzetten.
Bij een timer werkt dat iets anders. Het programma controleert steeds of de tijd al is verstreken. En als de timer niet meer nodig is, controleer het programma niet meer of de tijd al is verstreken.
Voorbeeld: knipperend lampje programmeren
We geven je een voorbeeld van een knipperend lampje om te laten zien hoe je een timer kunt programmeren in de Micro:bit. We gebruiken het onderstaande toestandsdiagram.
Toestand 1: lamp is uit
Toestand 2: lamp is aan
Hieronder vind je een deel van de uitwerking. We gaan daarbij uit van een timer van 1000 milliseconden = 1 seconden. Kijk eventueel nogmaals bij de uitleg over het programmeren van timers als je het programma niet helemaal begrijpt.
Opdracht: maak knipperende lichtje
Maak het bovenstaande programma af op basis van het toestandsdiagram.
Lantaarnpaal met externe sensor
Samenwerkingsopdracht
Je kunt dit hoofdstuk via een samenwerkingsopdracht doorlopen. Deze opdracht is gebaseerd op de expert-methode en staat hieronder beschreven. Je kunt er ook voor kiezen om het hoofdstuk zelfstandig of op een andere manier te doorlopen, sla dan deze paragraaf over. Overleg met je docent.
Opdracht: prototype lantaarnpaal maken
Je werkt voor deze opdracht in groepjes van 2 leerlingen. Samen gaan jullie een prototype voor een lantaarnpaal maken. De lamp van de lantaarnpaal gaat aan zodra er een voorbijganger wordt gedetecteerd. Na verloop van tijd gaat de lamp weer uit. Het systeem bestaat uit twee onderdelen:
een passieve infrarood sensor (PIR-sensor)
een lamp (we gebruiken hiervoor de ledjes van de Micro:bit)
Voordat jullie dat samen gaan doen gaat ieder van jullie zich verdiepen in een apart onderdeel. Daarna komen jullie weer samen om gezamenlijk het systeem te bouwen.
Opdracht leerling 1: aansluiten en testen PIR-sensor
Zoek een andere leerling van een ander groepje op en zorg dat je leert hoe je een PIR-sensor kunt aansluiten. Meer informatie vind je hier:
In dit hoofdstuk ga je een prototype maken voor het systeem met de lantaarnpaal. De lamp van de lantaarnpaal gaat aan zodra er een voorbijganger wordt gedetecteerd. Na verloop van tijd gaat de lamp weer uit. Het systeem bestaat uit twee onderdelen:
een passieve infrarood sensor (PIR-sensor)
een lamp (we gebruiken hiervoor de ledjes van de Micro:bit)
Programma maken op basis van een toestandsdiagram met timer.
Stap 1: aansluiten en testen van de PIR-sensor
Het doel van deze opdracht is om een PIR-sensor aan te sluiten en te testen. Daarvoor moet je weten hoe de PIR-sensor precies kan worden gekoppeld aan de Micro:bit.
Opdracht: gegevens PIR-sensor
Zoek op internet een datasheet van de PIR-sensor die jij gebruikt. Het typenummer van de PIR-sensor die wij gebruiken is: HC-SR501. Als jij hetzelfde type PIR-sensor gebruikt kun je op dat typenummer zoeken. In het engels heet het: PIR motion sensor of PIR motion detector. PIR staat voor Pyroelectric InfraRed. Zie ook:
a. Spanning waarop de PIR sensor werkt
b. De stroomsterkte die de PIR sensor zal afnemen
c. De verschillende aansluitingen
d. Wat verandert er bij het detecteren van een beweging?
e. Wat kun je instellen aan de PIR sensor? (Wat kun je doen met de twee schroefjes op de PIR-sensor?)
f. De hoek waaronder de PIR sensor beweging kan detecteren
g. De afstand waarbinnen hij nog beweging kan detecteren
h. Wat is het verschil tussen H-mode en L-mode?
Bij het aansluiten van een externe sensor of actuator is het belangrijk om er zeker van te zijn dat deze goed werkt en dat te testen voordat je verder gaat.
Zoals je waarschijnlijk hebt gezien, werkt de sensor op 5 tot 20 V. De Micro:bit geeft echter slecht 3V af. Daarom hebben we een externe voedingsbron nodig. Gebruik daarvoor een batterijhouder met 3 AAA-batterijen. Die geeft 4,5 V af, dat is eigenlijk nog te weinig, maar het blijkt toch voldoende te zijn om de PIR-sensor te laten werken.
Bouw de schakeling zoals hieronder. Sluit de Micro:bit aan op de computer via USB. Let op: vergeet niet de zwarte verbinding aan de linkerkant.
Nu moeten we testen of de PIR-sensor werkt. Om goed te kunnen testen kun je het beste:
de vertraging van de PIR-sensor (time delay) op z'n laagst zetten
de trigger op repeatable zetten: zorg dat de jumper in de H-mode staat. Op internet vind je overigens tegenstrijdige informatie over wat de L-mode is en wat de H-mode is. Zorg dat je zoekt op het juiste type.
De eenvoudigste manier om te testen is door de output van de sensor op de een of andere manier weer te geven. Dat kan met het volgende eenvoudige programma.
Test het programma en de werking van de sensor. Wanneer verschijnt er een 0? Wanneer een 1? Wat gebeurt er als je de instellingen (gevoeligheid en vertraging) van de PIR-sensor aanpast? Wat gebeurt er als je de trigger aanpast (L-mode of H-mode)?
Wees je er van bewust dat de PIR-sensor steeds even tijd nodig heeft bij het opstarten. Ook zal de PIR-sensor bij het overgaan van HIGH (1) naar LOW (0) minstens 3 seconden op LOW blijven, voordat de output weer HIGH kan worden (als er een beweging wordt gedetecteerd).
Nu moet je zelf een programma maken voor een lantaarn met timer. Je kunt het toestandsdiagram gebruiken dat hieronder staat. Bepaal zelf hoe lang het licht aan moet blijven nadat er iemand is gepasseerd.
Als je er niet goed uitkomt, kijk dan nog eens goed naar het voorbeeld met het knipperende lampje.
Lantaarnpaal met interne sensor
Inleiding
Je gaat een systeem bouwen bestaande uit:
een lichtsensor (deze zit standaard op de Micro:bit)
een lamp (hiervoor gebruiken we de ledjes van de Micro:bit)
De eerste versie is een systeem waarbij de lamp aangaat zodra het donker wordt. Zodra het weer licht wordt moet de lamp weer uit.
De tweede versie is iets uitgebreider. De lamp mag niet gelijk aangaan zodra het donker wordt. Pas als het minstens 5 seconden donker is, mag de lamp aangaan (misschien was er namelijk slechts kortstondig een schaduw).
We werken op basis van de volgende stappen:
Stap 1: Test de lichtsensor
Stap 2: Maak een toestandsdiagram voor versie 1
Stap 3: Maak een programma voor versie 1
Stap 4: Maak een toestandsdiagram voor versie 2
Stap 5: Maak een programma voor versie 2
Stap 1: Test de lichtsensor
Misschien vraag je je af waar die lichtsensor precies zit op de Micro:bit. Die zul je echter niet vinden. Om de lichtintensiteit te meten worden namelijk de LED's op de Micro:bit gebruikt. Dat wordt uitgelegd in het volgende, engelstalige filmpje.
Je hoeft geen externe sensor aan te sluiten. Het testen van de lichtsensor kan met het onderstaande programma. De waarde van lichtniveau varieert tussen 0 en 255.
Het is handiger om deze weer te geven als een waarde tussen 0 en 9 zodat het makkelijk weer te geven is via de LED's op de Micro:bit. Dat kan het met onderstaande programma. We delen de waarde van de lichtsensor door 26. Als je dat doet komt er niet per se een geheel getal uit. Daarom gebruiken we 'floor' om het getal naar beneden af te ronden.
Probeer het maar eens uit. Je hebt overigens vrij fel licht nodig om de waarde 8 of 9 te krijgen.
Stap 2: Maak een toestandsdiagram voor versie 1
Het eerste doel is om een systeem te maken waarbij de lamp aangaat als de lichtintensiteit laag is. We gaan er vanuit dat de lichtintensiteit tussen de 0 en 255 kan zijn. Kleiner dan 100 moet de lamp aan gaan, groter of gelijk aan 100 moet de lamp uit gaan.
Er zijn dus twee mogelijke gebeurtenissen:
Lichtintensiteit wordt kleiner dan 100
Lichtintensiteit wordt groter of gelijk aan 100
De acties zijn:
Zet lamp aan
Zet lamp uit
Hieronder vind je een uitwerking.
Toestand 1: lamp is uit
Toestand 2: lamp is aan
Stap 3: Maak een programma voor versie 1
Nu gaan we het toestandsdiagram omzetten naar een programma. We hieronder een start gemaakt. Voor de lamp gebruiken we de ledjes.
Opdracht: maak programma af
Maak het bovenstaande programma af op basis van het toestandsdiagram.
Stap 4: Maak een toestandsdiagram voor versie 2
Opdracht: maak toestandsdiagram voor lichtsensor met timer
Maak nu een toestansdiagram voor het systeem met een lichtsensor waarbij je gebruik maakt van een timer, versie 2 dus. De lamp moet aangaan zodra het 5 seconden donker is. Als het licht wordt gaat de lamp weer uit.
Je hebt de volgende mogelijke gebeurtenissen:
Lichtintensiteit wordt kleiner dan 100
Lichtintensiteit wordt groter of gelijk aan 100
De timer loopt af
De acties zijn:
Start de timer
Zet lamp aan
Zet lamp uit
Stap 5: Maak een programma voor versie 2
Opdracht: maak programma voor lichtsensor met timer
Maak nu op basis van het toestandsdiagram dat je hebt gemaakt het bijbehorende programma. Kijken eventueel goed naar het voorbeeld met het knipperende lampje als je er niet uitkomt.
a) Maak op basis van het toestandsdiagram van opdracht a) een programma voor de Micro:bit.
b) Maak op basis van het toestandsdiagram van opdracht b) een programma voor de Micro:bit.
Dodemansknop
Opdracht dodemansknop
In het algemene deel van cyclus 2 zit een opdracht over een dodemansknop. Maak op basis van het toestandsdiagram dat je voor deze opdracht hebt gemaakt een prototype op de Micro:bit. Bepaal zelf hoe je de knop, lamp en het alarm nabootst.
Aardappelspel
Deze opdracht is wat uitdagender. Je gaat een spelletje maken op basis van twee Micro:bits, voor twee spelers dus. Het heet "aardappel". Het idee is dat één van de spelers steeds de 'aardappel' heeft. In de aardappel zit een soort bom die na een tijdje ontploft. Als de aardappel ontploft terwijl jij hem vast hebt heb je verloren. De Micro:bits communiceren via de radio om de aardappel door te schuiven.
We hebben hieronder een toestandsdiagram gemaakt. Het idee is dat de aardappel een willekeurig getal is. Als jij de aardappel in de hand hebt (toestand 1) loopt er een timer. Als de timer afloopt wordt er eentje afgetrokken van de aardappel. Als de aardappel 0 is, ontploft de aardappel. Je kunt de aardappel ook doorgeven door de Micro:bit te schudden, dan geef je dus het getal door aan de andere Micro:bit.
Toestand 1: je hebt de aardappel in je hand, de timer loopt.
Toestand 2: de ander heeft de aardappel
Toestand 3: de aardappel is ontploft toen jij 'm vasthad, je hebt verloren
Toestand 4: de aardappel is ontploft toen de ander 'm vasthad, je hebt gewonnen
Het gaat om twee systemen, het toestandsdiagram voor de andere Micro:bit is net even anders, de starttoestand is namelijk anders:
Opdracht: aardappelspel
Maak de programma's voor de twee Micro:bit op basis van bovenstaande toestandsdiagrammen. We helpen je op weg met het onderstaande programma voor het eerste toestandsdiagram. Het is nog niet af. De timer is ingesteld op 300 milliseconden.
Als je meer informatie zoekt over de werking van de radio en het versturen en ontvangen van berichten, kijk dan bijvoorbeeld op de site van de Micro:bit.
Het kan onhandig zijn dat je twee Micro:bits hebt met twee verschillende programma's. Je kunt wellicht een truukje verzinnen waarbij de programma's op de beide Micro:bits hetzelfde zijn en je wel zorgt dat de ene in toestand 1 begint en de ander in toestand 2.
Reactiespelletje
Maak een reactiespelletje. Het spelletje toont na een willekeurige tijd een hartje, de speler moet dan binnen een halve seconde op de knop drukken. Dit blijft zich herhalen totdat de speler te laat is.
Maak eerst de toestandsdiagram. Programmeer het daarna in de Micro:bit.
Verdieping: event-handlers
Event-handlers op de Micro:bit
In de Micro:bit programmeeromgeving zijn er twee blokjes die je kunt gebruiken om te zien of knop A wordt ingedrukt:
Het verschil tussen beide wordt duidelijk aan de hand van de volgende programma's.
(We gebruiken hier pauzeer om het voorbeeld eenvoudig te houden, je hebt inmiddels geleerd om in principe geen pauzeer te gebruiken maar een timer).
Wat gebeurt er als je knop A indrukt en weer loslaat? Dan wordt één keer even een hartje getoond.
Wat gebeurt er bij het bovenstaande programma als je de knop langer ingedrukt houdt? Dan gaat het hartje knipperen.
Het blokje 'wanneer knop A wordt ingedrukt' is een voorbeeld van een event-handler. Het is een stukje programma dat wordt uitgevoerd zodra zich een bepaalde gebeurtenis ('event') voordoet. In dit geval is dat de gebeurtenis: knop A wordt ingedrukt en weer losgelaten.
Het blokje 'knop A wordt ingedrukt' is geen event-handler, het is geen los onderdeel dat wordt uitgevoerd bij een bepaalde gebeurtenis. Je kunt het gebruiken om te bepalen of iemand op dat moment knop A indrukt.
Je herkent event-handlers dus gelijk in de Micro:bit programmeeromgeving, het zijn namelijk blokjes die je los in je programma kunt zetten, zoals de twee hieronder.
Veranderingen en situaties
Je hebt in deze tweede cyclus een prototype gemaakt voor een lantaarnpaal met behulp van een (externe) infraroodsensor of de lichtsensor op de Micro:bit. Voor beide sensoren zijn geen event-handlers. Bijvoorbeeld zoiets als: het was licht en nu is het donker. Vergelijk dit met een knopje indrukken en weer loslaten.
In plaats daarvan gebruikte je zoiets als dit, waarmee je controleer of het op dat moment donker is.
Soms reageert het systeem dus op een verandering, soms reageert het op een bepaalde situatie. Zie de voorbeelden in de tabel hieronder.
Verandering
Situatie
Drukknop
De drukknop wordt ingedrukt: de drukknop verandert van niet ingedrukt naar wel ingedrukt
De drukknop is ingedrukt (iemand heeft zijn vinger op dit moment op de knop)
Afstandssensor
Er komt een object binnen een afstand van 20,0 cm
Er is een object binnen een afstand van 20,0 cm.
Temperatuur
De temperatuur verandert van lager dan 21,0 graden naar groter dan of gelijk aan 21,0 graden.
De temperatuur is groter dan of gelijk aan 21,0 graden.
Licht
De lichtintensiteit was eerst groter dan of gelijk aan 100 (>=100) maar is nu kleiner dan 100 (<100).
De lichtintensiteit is kleiner dan 100.
Event-handlers gebruik je typsich bij veranderingen. Maar zoals je hebt kunnen zien, niet voor alle veranderingen is een event-handler beschikbaar in de programmeeromgeving. De Micro:bit heeft standaard een event-handler voor de volgende verandering: de drukknop wordt ingedrukt en weer losgelaten:
Maar er is geen event-handler voor een verandering in de temperatuur.
In de praktijk heb je het daar echter ook niet altijd nodig en kun je prima uit de voeten met de blokjes het systeem reageert op een situatie, afhankelijk van de toestand waarin het systeem verkeert. Je kunt hier bij het maken van het toestandsdiagram ook rekening mee houden door de keuze van de gebeurtenissen.
In de volgende paragraaf volgt een concreet voorbeeld om het verschil tussen verandering en situatie verder te verhelderen.
Voorbeeld: tel het aantal keren dat het knopje wordt ingedrukt
Stel je wilt meten hoe vaak op het knopje wordt gedrukt. We beschrijven twee manieren.
Manier 1
teller++ betekent: hoog de teller op met 1. Het toestandsdiagram heeft maar één toestand.
Je kunt dit omzetten naar een programma voor de Micro:bit met behulp van de event-handler: wanneer knop A wordt ingedrukt. We hebben voor het gemak de controle op de toestand achterwege gelaten, want er is maar één toestand.
Dit lijkt prima te werken. Wat gebeurt er als we hiervoor niet de event-handler gebruiken, bijvoorbeeld als volgt?
Probeer het maar eens uit, en houdt de knop wat langer ingedrukt. Daar gaat iets mis...
Manier 2
Het kan ook als volgt:
Merk op dat we de gebeurtenissen bij de toestandsovergangen anders formuleren dan in het eerdere voorbeeld. De toestanden zijn:
Toestand 1: knop is niet ingedrukt
Toestand 2: knop is wel ingedrukt.
We kunnen dit omzetten naar een programma op de Micro:bit, zonder gebruik te maken van een event-handler.
Conclusie
Je hebt twee manieren gezien om een probleem op te lossen. Het lijkt erop dat de oplossing met een event-handler makkelijker is. Dan moet er echter wel een event-handler zijn.
Extra opdracht: tel het aantal voorbijgangers
Opdracht: tel het aantal voorbijgangers
Maak een systeem dat het aantal voorbijgangers telt met behulp van de externe PIR-sensor of de lichtsensor op de Micro:bit. Elke keer als als er iemand voorbijloopt gaat de teller omhoog.
Kijk of je hiervoor een event-handler van de Micro:bit kunt gebruiken en zo ja welke.
Het arrangement Cyclus 2 - Micro:bit is gemaakt met
Wikiwijs van
Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt,
maakt en deelt.
Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:
het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
voor alle doeleinden, inclusief commerciële doeleinden.
Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten
terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI
koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI
koppeling aan te gaan.
Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.
Arrangement
IMSCC package
Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.
Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en
het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op
onze Developers Wiki.