Dankzij een ingebouwde versnellingsmeter kun je een BBC Micro:Bit zonder gedoe met hardware omtoveren tot een elektronische waterpas – en dat met alleen wat programmeerwerk.
Het meest aansprekende aan de BBC Micro:Bit is dat je er spannende experimenten mee kunt uitvoeren zonder dat je met kabels en elektronicacomponenten aan de slag hoeft . Er komt zelfs geen soldeerbout aan te pas: twee drukknoppen, een 5×5-ledmatrix en een versnellingsmeter zitten al op het board.
Het doel van dit project is om een elektronische variant op een waterpas te maken. Met behulp van de versnellingsmeters bepaalt het programma in welke richting (ten opzichte van het board) de zwaartekracht werkt en daarmee hoe ver het board gekanteld is ten opzichte van de horizontale stand. De led-matrix dient daarbij als indicator. Bij het verder kantelen laten we een punt steeds verder vanaf het midden oplichten.
Als je die opdracht wat nauwkeuriger analyseert, dan wordt duidelijk dat voor het berekenen van de kantel hoek een trigonometrische functie nodig is. Dat geeft meteen de moeilijkheidsgraad van dit project aan: enige wiskundige onderlegging is wel handig (al moet je dat ook weer niet overdrijven), en ook enige ervaring met de Micro:Bit en de gebruikte programmeeromgeving is handig. Er komt immers best wel wat code aan te pas. Het project is ook geschikt om te werken met gevorderde programmeertechnieken zoals zelfgeschreven functies.
Bouwen met blokken
Als programmeertaal gebruiken we NEPO, de grafische programmeertaal van het Open Roberta Lab. Die is gericht op scholieren, daar zullen sommigen misschien al mee vertrouwd zijn. NEPO is geschikt voor de BBC Micro:Bit en Calliope en daarnaast (al dan niet in bètastadium) voor andere boards en platforms als Lego Mindstorms.
De programmeeromgeving draait in de browser en is te bereiken op https://lab.open-roberta.org. Bij het openen moet je eerst een van de ondersteunde platforms kiezen. Download ook het voorbeeldproject. Om een project te openen, klik je in de browser linksboven op het pictogram van een notitie. In het menu dat verschijnt, kies je ‘importeer programma’.
Om het programma op je board te laten werken, sluit je hem via usb aan op je pc. Je krijgt dan een nieuw station dat MICROBIT heet bij de Micro:Bit. Klik rechtsonder op de afspeelknop of kies via het menu de opdracht ‘start op >>mijn board<<‘. Daarmee start je het downloaden van een bestand met de extensie .hex, dat je opslaat op het station van je board. Als dat is gebeurd, start het programma automatisch. Dat je het bestand op het station daarna in Verkenner niet meer ziet is normaal.
Waterpas
Het programma om van je microcontroller een waterpas te maken, moet de stand van het board voortdurend bepalen en de ledweergave daarop aanpassen.
De daarvoor benodigde eindeloze lus staat in de NEPO-editor in de categorie ‘Control’ en heet ‘herhaalt voor altijd’.
De versnellingsmeter meet de op het board werkende krachten op drie assen: de X-as komt overeen met de denkbeeldige lijn tussen de twee knoppen A en B, langs de Y-as steek je de usb-stekker in de aansluiting en de Z-as staat loodrecht op de printplaat. Het programma moet bij elke herhaling van de lus alle drie de assen uitlezen. Daarvoor zijn drie vergelijkbare blokken nodig met ‘verkrijg value milli-g accelerometer …’ uit de categorie ‘Sensors’. Achter ‘accelerometer’ moet steeds een andere as worden gekozen. De meetwaarden worden bewaard in drie variabelen, die we xVersnelling, yVersnelling en zVersnelling hebben genoemd.
Hoe je uit die waarden de kanteling van het board berekent, lees je in het kader. Het programma bewaart het resultaat in een variabele genaamd xHelling.
Analoog daaraan kan ook yHelling worden berekend op basis van de waarden voor yVersnelling en zVersnelling. De arctangens-functie staat in de programmeeromgeving door te klikken op de ‘2’ linksboven. Je ziet dan meer categorieën, waaronder ‘Math’. Als je daar het blok ‘sin’ uit invoegt, kun je dat via de keuzelijst wijzigen in ‘arctan’.
Weergaveled
Het programma gebruikt de ledmatrix op de board om aan te geven hoe schuin je het hem houdt. We laten daarop een led oplichten waarvan de positie is gerelateerd aan de hellingshoek. Omdat er zowel in X- als Y-richting slechts vijf posities beschikbaar zijn, moet je goed bedenken hoe je het theoretische meetbereik op die ‘schaal’ wilt afbeelden.
In onze voorbeeldprojecten hebben we daarvoor de variabele aanslag gebruikt. Die geeft aan vanaf welke hellingshoek (in graden) de led moet verspringen
naar de volgende positie. Hoe kleiner de waarde is die je daaraan toewijst, des te hoger de gevoeligheid. Een uitbreidingsopdracht zou kunnen zijn om daar op basis van wat experimenteren een zinnige waarde voor te bepalen.
De code voor het omzetten van de hellingshoek naar een horizontale of verticale positie op de led matrix zou er als volgt uit kunnen zien:
if xHelling <= -aanslag
kolom = 0
else if xHelling <= -aanslag / 3
kolom = 1
else if xHelling <= aanslag / 3
kolom = 2
else if xHelling <= aanslag
kolom = 3
else
kolom = 4
Bijna vergelijkbare code is dan ook nodig voor het omzetten van yHelling naar een rij op de ledmatrix. In plaats van de code eenvoudigweg te kopiëren, is
het handig die in een eigen functie onder te brengen. Daarvoor staat in NEPO bij de uitgebreide categorieën ‘Functions’ het blok ‘doe iets … return Number’. Daarmee hebben we de functie schalen gemaakt. Die accepteert de te schalen waarde als argument en geeft als resultaat een getal van 0 tot 4 voor de positie op de kolom of rij.
Om alles goed te laten werken, moet je nog een belangrijke eigenschap weten van het NEPO-programma voor de Micro:Bit. De functie atan() geeft de berekende hoek namelijk in radialen. Je moet de gewenste hoek voor de aanslag dan ook in radialen opgeven. Als je dat niet intuïtief vindt, definieer je gewoon de functie alsGraden die de hellingshoek omrekent van radialen naar graden (met de formule graden=180*radialen/π).
Hoekmeting
De zwaartekracht oefent een neerwaartse kracht uit op de versnellingsmeter. Die ontbindt dat in een X- en Z-component. Die assen staan loodrecht op elkaar en zijn georiënteerd op de sensor, wat wil zeggen dat ze mee kantelen als de sensor kantelt. De hellingshoek kan met de arctangens-functie worden berekend uit de verhouding tussen de twee waarden die de versnellingsmeter heeft bepaald.