Cyclus 2 - Micro:bit

Cyclus 2 - Micro:bit

Inleiding

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.

1. Met gebruik van een externe passieve infraroodsensor. Deze opdracht biedt wat meer uitdaging dan de tweede. Deze opdracht kun je goed met z'n tweeen doen op basis van de samenwerkingsopdracht. Dat hoeft echter niet.

2. Met gebruik van de interne lichtsensor van de Micro:bit. Die opdracht is wat makkelijker omdat er geen externe sensor is. Daarnaast wordt het wat meer stap voor stap uitgelegd.

Je kunt er ook voor kiezen om eerst met de interne lichtsensor te werken en dan over te stappen naar de externe infraroodsensor.

We leggen natuurlijk ook uit hoe je een timer moet programmeren in de Micro:bit.

 

Timers in de Micro:bit

Timers programmeren voor de Micro:bit

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:

https://maken.wikiwijs.nl/135430/Cyclus_2___Micro_bit#!page-4905560

Zorg dat je:

  • weet hoe de PIR-sensor werkt
  • weet hoe je de PIR-sensor aansluit
  • weet hoe je test of de PIR-sensor werkt

 

Opdracht leerling 2: timer gebruiken

Zoek een andere leerling van een ander groepje en zoek uit hoe je een timer kunt programmeren. Gebruik de informatie van:

https://maken.wikiwijs.nl/135430/Cyclus_2___Micro_bit#!page-4972766 (gebruik van timers met Micro:bit)

Zorg dat je:

  • weet hoe je een timer in een toestandsdiagram kunt omzetten naar een werkend programma voor de Micro:bit.

 

Gezamenlijke opdracht: prototype lantaarnpaal maken

Leg elkaar uit wat je hebt geleerd. Maak vervolgens samen het prototype op basis van het gegeven toestandsdiagram, zie:

https://maken.wikiwijs.nl/135430/Cyclus_2___Micro_bit#!page-4905601

Inleiding in de opdracht

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)

Als je geen PIR-sensor hebt, of als je nog niet wilt werken met externe sensoren, dan kun je kiezen voor de alternatieve opdracht waarbij de lichtsensor die op de Micro:bit zit wordt gebruikt.

Je doorloopt de volgende stappen:

  1. Aansluiten en testen van de PIR-sensor
  2. 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:

https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/how-pirs-work

Noteer de volgende eigenschappen:

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

Je kunt het programma ook testen met een seriele verbinding.

Stap 2: programma maken met timer

Opdracht: maak prototype lantaarn met timer

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.

 

Extra opdrachten

Tamagotchi

Opdracht Tamagotchi op de Micro:bit

In het algemene deel van cyclus 2 zat een oefenopdracht over tamagotchi's.

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.

Terug naar voorpagina Micro:bit

Ga terug naar de voorpagina Micro:Bit met verwijzingen naar alle hoofstukken voor deze module.

  • Het arrangement Cyclus 2 - Micro:bit is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Laatst gewijzigd
    2020-05-23 21:23:29
    Licentie

    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.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld