Datalogger

Uit RobotMC.be
Versie door BlueHaze (overleg | bijdragen) op 29 dec 2017 om 22:35
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken

Dataloggen met de Butterfly

JH Butterfly Frontside.jpg

Het Atmel Butterfly printje is een al ouder demo-print van Atmel om de mogelijkheden te demonstreren van de 8-bit processor ATmega169. Maar, de uitrusting van dit printje is een gedroomde basis voor een datalogger :

  • RTC klok + 32 kHz kristal voorhanden.
  • RS232 levelshifter + bootloader
  • Geintegreerde NTC temp.sensor
  • 4 Mbit (512 kByte) EEPROM
  • ISP programmeer aansluiting
  • 3 Volt knoopbattery 600 mAh
  • 4-weg Joystick
  • LCD display
  • Piezo buzzer

Interessante links :

  • Dit printje vindt je onder andere bij Watterott : Butterfly voor 21,95€
  • De basis software van de datalogger vond ik hier : Datalogger
  • Nog een project met de Butterfly : Datalogger

De hardware : hoe kan je het electriciteitsverbruik loggen ?

JH El teller.jpg

Indien je nog een oudere klassieke Ferraris electriciteitsteller hebt, is de kans klein dat deze voorziening heeft om het verbruik te loggen. Sommige gaan dan aan de slag met een optische sensor om de omwentelingen van de draaiende schijf te tellen, maar ik heb gekozen om een eenvoudige éénfasige pulsteller in te bouwen. Deze vindt je voor ca 20€ in diverse webshops. Ik heb een hoofdaansluiting 1-fasig, 40A. Je moet er dus wel voor zorgen dat de pulsteller minimaal deze stroom kan verdragen ! Dergelijke pulstellers hebben een zogenaamde SO-pulsuitgang, dit is een optokoppelaar zodat je deze eenvoudig aan een µ-controller kunt aansluiten. Deze meter geeft dan telkens een puls van 30 ms per WattUur. Je ziet dan ook de rode LED kort oplichten. De interface naar de Butterfly was dan ook eenvoudig : De voedingsspanning van de Butterfly naar de ingang van deze optokoppelaar, de uitgang van de opto direct naar een ingangspin (PF4) van de Butterfly. De pulslengte bedraagt ongeveer 30 ms, je moet dus minimaal om de 25 ms de ingang scannen. De nauwkeurigheid van deze teller bedraagt 1%. In de praktijk heb ik een afwijking van maar 0,3% tussen de Ferraris meter en deze pulsteller.

Het waterverbruik loggen

Per toeval is mijn watermeter recent vervangen, en gelukkig had deze een voorziening om een pulsteller aan te sluiten ! Hiertoe is er een magneet aangebracht aan het telwerk, die meedraait met de laatste ring. Je moet dus een geschikte magneetsensor vinden om deze omwentelingen te kunnen tellen. Gelukkig had ik nog een KMI18/2 sensor, die schakelt met vrij kleine velden. In de meter is een kleine boring voorzien, vermoedelijk voor een reedkontakt, maar dit IC past er niet in. Ik heb het IC dan eenvoudig tegen de meter gemonteerd, en dit werkte probleemloos ! Het stroomverbruik van dit IC bedraagt ca 7 mA, en is daarmee veel te hoog om onze logger alleen op batterijen te laten werken. Daarom heb ik de voeding van deze IC's via een pin van de µ-controller (PF7) geschakeld : alleen tijdens een meting wordt het IC gevoed ! De uitgang is een NPN transistor, hiertoe is er dus een Pull-up weerstand nodig aan de ingang van µ-controller (PF5). De interne pull-ups van de AT169 kunnen hiervoor gebruikt worden.

JH Waterteller.jpg

Het gasverbruik loggen

JH Gasteller 1.jpg

Ook hier had ik weer het geluk dat mijn gasteller recent vervangen is, en ook hier is er weer een magneet op het telwerk aangebracht ! Dezelfde sensor is dan ook hier weer gebruikt. Deze gasteller geeft dan 100 pulsen/m³

Temperaturen loggen

JH DS18B20.jpg

De Butterfly zelf heeft een ingebouwde NTC temperatuursensor die je kan gebruiken, maar het zou natuurlijk interessanter zijn om ook aparte sensoren aan te sluiten. De DS18B20 digitale tempsensor is hiervoor uitermate geschikt ! Deze sensor wordt aangesloten via het zogenaamde "1 wire protokol". Deze sensoren hebben standaard drie aansluitingen (VCC, ground, data), maar kunnen zelfs met 2 aansluitingen al werken ! De kabellengte kan tientallen meters bedragen, en je sluit de sensoren parallel aan. Elke sensor heeft een intern 64 bit serienummer. Het stroomverbruik in idle mode bedraagt slechts enkele nA ! Het uitlezen van één sensor duurt 750 ms. Deze sensoren zijn gekalibreerd, en de nauwkeurigheid bedraagt +/- 0,5°C. Je vindt deze sensoren vrij goedkoop in diverse webshops. Ik heb 5 stuks in China besteld voor enkele euro's. Als eerste heb ik ze alle 5 eens getest in ijswater en warm water, en de afwijkingen tov elkaar waren verbazend klein ! Eén sensor meet de buitentemperatuur, de andere sensor meet de temperatuur in de leefruimte. Beide sensoren zitten op dezelfde dataleiding, en worden continu gevoed door de batterijspanning. De Butterfly zelf bevindt zich in de kelder, en ook daar wordt dus de temperatuur gemeten.

DS18B20 Eis.pngDS18B20 Heiss.png

Het aansluitschema

Zoals je op de foto kan zien, zijn er verschillende soldeerpunten voorzien op het printje : RS232, JTAG, ISP en nog verschillende andere pinnen van de µ-controller kan je hier aansluiten. Daar ikzelf een ISP-programmer (AVR MK2 ISP)heb, was het eenvoudig om via de ISP-poort te flashen. Het kan echter ook via de RS232 poort, maar dan moet je wel telkens de bootloader van de Butterfly activeren. Zoals je ziet kan je vrijwel alles rechtstreeks aansluiten. Alleen de DS18B20 sensoren hebben nog een pullup van 4,7 k nodig. De ingebouwde knoopbatterij heeft maar een beperkte levensduur, daarom heb ik nog 4 AAA NiMh cellen als hoofdbatterij gebruikt. In deze configuratie is de standtijd makkelijk 4 maanden. Het lijkt dat er nog een hoop pinnen vrij zijn, maar dit is niet zo : veel pinnen worden gebruikt voor het LCD en de joystick.

JH Butterfly Schema.pngJH Butterfly Backside.jpg

De software : enkele kleine aanpassingen voor de pulstellers

De bestaande software van www.brokentoaster.com is zeer uitgebreid en modulair opgebouwd. Omwille van het beperkte flashgeheugen (16 kbyte), is het niet mogelijk alle opties tegelijkertijd te programmeren. In mijn versie heb ik het display uitgeschakeld. Er was nog wel geen mogelijkheid voorzien voor pulsen te tellen, daarom heb ik nog wat kleine aanpassingen gedaan. Om het stroomverbruik minimaal te houden, wordt de logger normaal geklokt door het 32 kHz kristal. Op geregelde tijdstippen wordt door de RTC een interrupt doorlopen en wordt tijd en datum aangepast, en indien de ingestelde tijd is verstreken, worden er data in de EEPROM geschreven. In deze interrupt heb ik de ingangen afgevraagd van de pulstellers. Om met de logger via RS232 te communiceren, moet hij eerst "gewekt" worden door de joystick even naar boven te klikken (pin PB6). Hierdoor wordt de kloksnelheid verhoogd naar bijna 8 MHz, en kan je via seriele commando's alle instellingen aanpassen (baudrate 115 k).