Zondagmiddagproject: micro:bit thermometer

20161030_135958_hdr-1Na ruim een week geen berichten hier is de vakantie toch echt zo goed als voorbij. Vandaag nog een uitdaging die je zelf kunt uitproberen als je beschikt over een micro:bit en een thermometer. Wij hebben hier gebruik gemaakt van de thermometer die hier te bestellen is. Die heeft als grote voordeel dat er meteen 3 krokodilklemmen aanzitten zodat je hem eenvoudig op de micro:bit kunt aansluiten. De webpagina geeft ook een beetje uitleg bij het programma dat je kunt gebruiken om de temperatuur weer te geven op de micro:bit. Maar toch ook weer niet echt heel veel.

En dat maakte het natuurlijk toch wel weer een heel leuke uitdaging, vooral ook om er voor te zorgen dat zowel vader als zoon aan het eind begrepen hoe de oplossing in zijn werk ging.

voltage_temperatuurDe uitdaging is als volgt: de thermometer heeft een bereik van ongeveer −55°C tot +150°C. Daarbij, zo valt in de documentatie ook te lezen (PDF, dit is de TMP36GZ) verandert het voltage dat de thermometer terug geeft met de temperatuur. Zie ook de afbeelding hiernaast. Je kunt daarin zien dat onze TMP36GZ bij 50°C precies 1V als outputspanning heeft. Bij 25°C is dat 0,75V. Voor elke graad Celsius die het kouder of warmer wordt verandert de outputspanning met o,1V omlaag of omhoog.

Maar, de analoge poort van de micro:bit (P1) geeft niet een waarde terug in Volt. Die geeft een waarde terug die ligt tussen de 0 en 1023 afhankelijk van of er tussen de 0V en 3,3V spanning op die analoge poort gezet wordt. De thermometer kan max met 7V gevoed worden, maar hij werkt ook op de 3,3V die de micro:bit kan leveren. Daar komt bij dat, met wat rekenwerk, we kunnen uitvogelen dat bij de maximale temperatuur die de thermometer aan kan, de spanning maximaal 2,0V kan zijn, binnen de grenzen van de micro:bit dus.

Onze uitdaging was dat we er voor wilden zorgen dat niet de ruwe waarde van P1 getoond zou worden op het scherm van de micro:bit, maar dat in plaats daarvan meteen de temperatuur in graden Celsius getoond zou worden.

Daar is wat rekenwerk voor nodig. Lees alleen door als je de oplossing wilt weten. Het is natuurlijk veel leuker om het eerst zelf uit te proberen.

De uitwerking

We wisten dat bij 50°C precies 1V als outputspanning gegeven zou worden. Een voltage van 3,3V staat gelijk aan een P1 waarde van 1023. Omgerekend zou dat betekenen dat bij 1V een P1 waarde van 1024/3,3 = 310,3 (afgerond 310) hoort.

Als we doorrekenen met het gegeven van 0,1V daling van de outputspanning per graad Celcius, dan weten we dat bij 0°C we nog 1V – (50*0,1V) = 0,5V outputspanning kunnen verwachten.
De P1 waarde daarvan is dan: (1024/3,3) * 0,5 = 155,15 (afgerond 155).

Als een daling van P1 met 155 (van 310 => 155) gelijk staat aan een daling van de temperatuur met 50°C (van 50°C => 0°C), dan staat een daling van P1 met 1 eenheid gelijk aan een daling van de temperatuur met 50°C / 155 = 0,3223°C.

Omdat de Block Editor niet goed met het decimale getal leek om te gaan, vermenigvuldigen we eerst met 3223 en delen dan door 1000.

Het getal dat je nu uit krijgt is 50°C te hoog (immers, de schaal loopt ook onder 0°C nog door tot -50°C), door nu 50 af te trekken van het getal dat je uitkrijgt na vermenigvuldiging met 0,3223 krijg je meteen de temperatuur in graden Celsius.

De code ziet er heel eenvoudig uit, de waarde zit hem in de puzzel én het begrijpen waar het getal vandaan komt! 🙂