18 juli 2015

Arduino project 6: Temperatuur en Amperes

Om wat meer inzicht te krijgen in de hoeveelheid stroom die ik verstook als ik alle toeters en bellen op de fiets aan heb staan, ga ik een stroommeter inbouwen. Hiervoor zijn voor de Arduino een aantal kleine modules te koop. Voor de Arduino kwam ik uit op de ACS712. Deze zijn te koop in verschillende smaken; van 5A, 20A en 30A. Ik ga er even vanuit dat 20A voor mij genoeg moet zijn. En op Ebay kost deze $1.82, dus daar ga ik mij geen buil aan vallen. Een ACS712 werkt volgens het principe dat er een millivolt signaal wordt uitgestuurd bij oplopende stroomsterkte. Op de datasheet van de chip lees ik dat bij het 20A exemplaar dat ik gekocht heb, 100mV per ampère wordt gegeven. Door die millivolts nu aan een analoge poort van de Arduino aan te sluiten kan ik eenvoudig berekenen hoeveel ampère ik verbruik.

De ampère module moet als volgt op de Arduino aangesloten worden:


De module heeft aan 5V genoeg. Aan de linkerkant komen de draadjes voor de ampère meting binnen (één in, één uit). De blauwe draad is het mV/data signaal. In de Arduino moet ik hiermee aan de gang, zodat ik de verbruikte ampères mooi op het LCD scherm kan laten zien. Na wat programmeer werk ziet dat er dan als volgt uit:


De spanning wordt berekend door de spanningsdeler die ik eerder gebouwd heb. Dit ziet er allemaal nog een beetje spartaans uit, maar het gaat mij nu even om het idee. Nu verder met het volgende hoofdstuk, de temperatuurmeter.


De temperatuurmeter die ik inbouw is van het type db18b20. Dit is eigenlijk geen 'klassieke' elektronische temperatuur meter maar een kleine IC. De IC communiceert met één pin met de Arduino. Ik had er nog een paar van overgehouden van mijn aquarium project. Er zitten drie pinnetjes aan: twee voor de 5 volt voeding, en een voor de data communicatie. Dit datapinnetje heeft een eigen uniek adres, waardoor het mogelijk is op (in principe) tientallen temperatuurmeters via een draadje met de Arduino te laten communiceren. Dit is natuurlijk leuk, maar in een velomobiel niet zo nuttig. Aan de buitentemperatuur heb ik genoeg. Ik zou natuurlijk twee van die dingen aan de trommelremmen kunnen hangen om te kijken hoe warm die dingen worden. Maar dat is alleen interessant als je in de bergen woont, lijkt mij. Dus houd ik het maar op een voelertje. Deze wordt als volgt aangesloten:


Verder moet ik achterhalen wat het 'adres' van de db18b20 is, anders kan ik niet met 'm babbelen. Hiervoor had ik op internet een programmatje opgeduikeld. Nu is het een kwestie van adres in m'n C++ code zetten, de temperatuur uitlezen en een fijn plekje op m'n display geven.

Het enige nadeel aan een db18b20 temperatuur voeler is de uitlees snelheid. Dit duurt ongeveer een halve seconde. Nu lijkt dit niets, maar het programma wordt er een stuk trager door. En daar komt ook nog bij dat de richting aanwijzers erg onregelmatig beginnen te knipperen. Daarom heb ik de zooi zó geprogrammeerd dat de temperatuur één keer in de tien seconden wordt uitgelezen, en verder wordt er niet uitgelezen als de richting aanwijzer aanstaat.


Hier nog even een plaatje. Inderdaad, het was warm die dag :-)

Geen opmerkingen: