In deze tweede cyclus gaan we in op smart cities, oftewel: slimme steden. Hoe kun je het leven in de stad veraangenamen met behulp van physical computing? Hoe kun je de stad veilig houden? Hoe kun je energie besparen? Dat zijn enkele van de vragen die horen bij smart cities.
De sensor die centraal staat is de infraroodsensor. Je gaat een infraroodsensor gebruiken waarmee je bewegingen van mensen kunt detecteren. Misschien heb je thuis een lamp die aangaat als je er voorbij loopt. Waarschijnlijk bevat deze lamp zo’n infraroodsensor.
De eindopdracht is: bouw een prototype voor een energiezuinige lantaarnpaal. Als er iemand voorbij komt moet de straatlamp aan gaan. Om energie te besparen gaat de lamp na 30 seconden weer uit.
Smart cities
Opdracht: beschrijf toepassingen voor smart cities
In de filmpjes hieronder vind je allerlei voorbeelden en toepassingen voor smart cities. Kies hieruit 5 concrete toepassingen. Beschrijf deze concrete toepassingen kort en geef daarbij steeds aan wat voor sensoren daarbij een belangrijke rol spelen.
In een smart city zoekt men naar allerlei mogelijkheden om het leven in de stad te verbeteren. Een voorbeeld: als jij via een app precies kunt zien welke parkeerplaats nog vrij is dan kan dat een hoop tijd en frustratie schelen.
Ook duurzaamheid is belangrijk: hoe kun je het verbruik van energie verlagen met behulp van physical computing? Denk aan lantaarnpalen die alleen aan gaan als er iemand langsloopt.
In al die gevallen spelen sensoren een belangrijke rol. Met behulp van een bewegingssensor kan een systeem detecteren of er iemand voorbij komt. Zo'n bewegingssensor is vaak een infraroodsensor. Je kent ze waarschijnlijk wel van de lamp thuis of op het schoolplein. De lamp gaat pas aan als je er voorbij loopt.
Bij de infraroodsensoren onderscheiden we de passieve sensor en de actieve sensor. Hieronder zie je afbeeldingen van dat soort infrarood sensoren.
Opdracht: verken de passieve infrarood sensor
Onderzoek en beschrijf de werking van de passieve infrarood sensor. Zoek zelf naar geschikte bronnen. Onderaan de pagina vind je een voorbeeldbron.
Als je recht naar een passieve infrarood sensor toe loopt zal hij niet of matig reageren. Hoe komt dat?
Leg uit: kun je met een passieve infrarood sensor gemonteerd op een autootje detecteren of de auto een muur nadert bij het inparkeren?
Opdracht: verken de actieve infrarood sensor
Onderzoek en beschrijf de werking van de actieve infrarood sensor. Zoek zelf naar geschikte bronnen.
Geef het verschil aan tussen de actieve en de passieve infrarood sensor.
Actieve infraroodsensoren bestaan soms uit één deel zoals die in afbeelding 2 maar soms ook uit twee die tegenover elkaar geplaatst worden (een zogenaamde lichtsluis). Wat is het verschil daartussen?
Waarom wordt er gebruik gemaakt van infrarood licht en waarom niet van zichtbaar licht?
De PIR (passieve infrarood) bewegingssensor geeft als output een HIGH (of 1) als deze een beweging detecteert; als er geen beweging is geeft de sensor als output LOW (of 0). Je kunt de gevoeligheid en de vertraging van de sensor aanpassen met de instelpotmeters, zoals in de figuur hieronder is te zien. De vertraging is de tijd voordat het signaal LOW wordt, na de laatst gedetecteerde beweging.
De hoofdopdracht voor deze cyclus is het maken van lantaarnpaal waarvan het licht gaat branden als er iemand langsloopt. Het licht van een lantaarnpaal moet aan gaan als een beweging wordt gedetecteerd en weer uit als er geen beweging meer is. Je kunt dat als volgt in een toestandsdiagram weergeven.
Toestand 1: lamp staat uit
Toestand 2: lamp staat aan
Het hangt van de instelpotmeter op de PIR-sensor af hoe lang het duurt voordat de lamp weer uitgaat. Je kunt de situatie weergeven in een tabel zoals hieronder. Deze tabel is nog niet volledig ingevuld.
Wat gebeurt er?
Lamp aan of uit?
Toestand?
Niemand in de buurt
Lamp is uit
Toestand 1
Een fietser komt langs
De fietser is net weg
Het is een tijdje stil
Toestandsdiagram met timer
Uit het voorbeeld met de PIR-sensor blijkt dat er een soort klokje in de sensor zit verwerkt. De sensor blijft een tijdje HIGH als output geven, ook al loopt er niemand meer voorbij. Je kunt echter ook zelf zo'n klokje programmeren, dat noemen we een timer. In dit hoofdstuk leer je om zelf een timer te gebruiken.
Een timer is een soort kookwekker. Je kunt de wekker instellen zodat deze over een bepaalde tijd, bijvoorbeeld 5 minuten, afloopt en dan een bel of alarm laat horen. Zo is het ook met een timer, alleen gaat het meestal niet om minuten, maar om seconden of zelfs miliseconden.
Hoe kun je een timer in een toestandsdiagram gebruiken? Daarvoor heb je een actie en een gebeurtenis nodig. Dit is de actie die je kunt gebruiken voor een timer:
start timer / reset timer
Als je het vergelijkt met een kookwekker: stel de wekker in, bijvoorbeeld op 10 seconden van nu. Resetten betekent dat je de timer weer terugzet naar de oorspronkelijke tijd nog voordat de timer is afgelopen. Het resetten van de timer is eigenlijk hetzelfde als het starten van de timer, daarom hebben we ze bij elkaar gezet.
Een gebeurtenis die hoort bij de timer is:
timer loopt af
Als je het vergelijkt met een kookwekker: de kookwekker laat een bel of alarm horen.
Hieronder vind je een voorbeeld voor het systeem met de lantaarnpaal.
Toestand 1: lamp is uit
Toestand 2: lamp is aan
Waarom timers?
Los van deze toepassing met de lantaarnpaal is het belangrijk dat je timers leert gebruiken. Het is belangrijk om het verschil tussen een timer en een pauze te begrijpen. Een pauze bij de lantaarnpaal zou als volgt werken. Nadat een beweging is gedetecteerd zet het systeem de lamp aan. Daarna komt een pauze van bijvoorbeeld 10 seconden. In die 10 seconden doet het systeem echter helemaal niets en kan het dus ook niet reageren op input vanuit de omgeving. Bij een lantaarnpaal is dat misschien niet zo erg, maar stel je hebt een zelfrijdende auto. Die zou tijdens de pauze nergens op reageren, dus ook niet op andere sensoren die aangeven dat er een andere auto aankomt. Levensgevaarlijk dus.
Bij een pauze reageert het systeem nergens meer op. Bij een timer is dat anders, die werkt als een kookwekker. Het systeem gaat gewoon door terwijl de seconden op de kookwekker wegtikken. Op het moment dat de kookwekker afgaat, kan het systeem actie ondernemen.
Oefenopdracht: knipperend lampje
Hieronder vind je twee opdrachten om te oefenen met het gebruik van een timer in een toestandsdiagram.
Opdracht: toestandsdiagram voor een knipperend lampje
Maak een toestandsdiagram voor een lampje dat knippert. Maak gebruik van een timer.
Als gebeurtenis gebruik je:
timer loopt af
De acties die je kunt gebruiken zijn:
start timer / reset timer
zet lampje aan
zet lampje uit
Opdracht: toestandsdiagram voor twee knipperende lampjes
Maak een toestandsdiagram voor een systeem met twee knipperende lampjes. Zorg dat de lampjes knipperen met verschillende tussenpozen. (Bijvoorbeeld: het eerste lampje knippert elke 1,3 seconde: 1,3 seconde aan, 1,3 seconde uit. Het tweede lampje knippert om de 1,7 seconde: 1,7 seconde aan, 1,7 seconde uit.)
Bedenk zelf welke toestandsovergangen je hebt en welke acties. Je zult twee timers moeten gebruiken (bijvoorbeeld timer1 en timer2).
Hint: als je uitgaat van de twee lampjes die allebei aan en uit kunnen zijn, hoeveel toestanden heb je dan nodig voor alle mogelijke combinaties?
Programmeren van een timer
Zoals gezegd: een timer is een soort kookwekker: je start een timer met een bepaalde tijd. Als de tijd voorbij is, loopt de timer af.
Om een timer te programmeren heb je één variabele nodig:
var timerEindtijd
Stel, je wilt een timer starten voor 10 seconden. Gebruik dan de volgende regel om de timer te starten of te resetten:
timerEindtijd = huidigeTijd + 10
Elke microcontroller (Micro:bit, Arduino, Lego Mindstorms) houdt bij hoeveel tijd is verstreken sinds de start van het systeem. In de regel hierboven staat dat aangegeven met huidigeTijd.
Om te zien of de timer afloopt gebruik je:
huidigeTijd >= timerEindtijd
Je controleert dus of de huidige tijd hoger is dan de eindtijd van de timer.
Een voorbeeld: het onderstaande toestandsdiagram werken we in pseudo-code uit.
Kijk of je de onderstaande pseudocode kunt relateren aan het toestandsdiagram en de informatie over de timer hierboven. Er zijn drie toestandsovergangen (drie pijlen, los van de starttoestand), daarom zie je drie keer: ALS ... DAN. We hebben er hier voor gekozen om gebruik te maken van EN in plaats van twee keer een losse ALS ... DAN. Vergelijk dit met de aanpak in cyclus 1. We gaan uit van een timer van 10 seconden.
EENMALIG BIJ OPSTARTEN:
toestand wordt 1
HERHAAL:
ALS (toestand is 1 EN beweging gedetecteerd) DAN
zet lamp aan
timerEindtijd = huidigeTijd + 10
toestand wordt 2
ALS (toestand is 2 EN beweging gedetecteerd) DAN
timerEindtijd = huidigeTijd + 10
ALS (toestand is 2 EN huidigeTijd >= timerEindtijd) DAN
zet lamp uit
timerEindtijd = huidigeTijd + 10
toestand wordt 1
Opdracht: maak pseudocode voor knipperend lampje
Beschrijf de pseudocode voor het toestandsdiagram hieronder. Het gaat om een knipperend lampje. Kies zelf de duur van de timer.
Toestand 1: lamp is uit
Toestand 2: lamp is aan
Oefenopdracht: tamagotchi
Opdracht Tamagotchi
In cyclus 1 heb je ze al leren kennen, de tamagotchi's. Hier volgen twee opdrachten waarin timers een rol spelen.
Maak een geheel nieuw toestandsdiagram voor het volgende elektronische huisdier. Het huisdier is gewoonlijk blij. Als het een tijdje geen eten krijgt, krijgt het honger. Door eten te geven wordt hij weer blij. Als je dan weer eten geeft wordt hij moe. Als hij dan een tijd geen eten krijgt wordt hij weer blij.
Breid het vorige huisdier uit. Als het huisdier te lang honger heeft, gaat het dood. Je kunt dan niets meer doen.
Oefenopdracht: dodemansknop
Opdracht Dodemansknop
Een dodemansknop zit in de bestuurderscabine van een trein (zeg maar de cockpit). Om de zoveel tijd gaat er een lamp branden. De machinist moet daar op reageren door op een knop te drukken. De lamp gaat dan uit. Daarmee laat de machinist merken dat hij/zij nog alert is. Als de machinist niet binnen zoveel seconden reageert, zal de trein afremmen en tot stilstand komen.
Maak een toestandsdiagram voor een prototype van een dodemansknop. Om de 10 seconden gaat er een lamp branden. De treinmachinist moet dan binnen 5 seconden op een knop drukken, de lamp gaat dan uit. Als hij/zij dat niet doet, gaat een alarm (bijvoorbeeld een zoemer of een lamp aan). Zodra de knop weer wordt ingedrukt gaat het alarm uit.
Datasheets
De datasheet van een sensor kan je veel informatie geven over de werking van een sensor. Die informatie kun je gebruiken om een keuze te maken tussen verschillende type sensoren.
Hieronder vind je een Engelstalig filmpje over het lezen van datasheets en daaronder de bijbehorende website.
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.