Ik heb mijn woning inmiddels voorzien van een zonneboiler-systeem naast de reeds aanwezige zonnestroompanelen. Het zonneboiler-systeem is in staat om naast het verzorgen van warm tapwater ook de opgeslagen energie aan de centrale verwarming af te geven. Tot enige tijd terug kon ik via de zonneboiler met diverse codes de nodige informatie zoals temperaturen aflezen. Maar om nu elke keer de trap op te rennen, dat ging me al snel te ver. Techniek staat voor niets, dus ik ben na een kennismaking met de Arduino microcontroller aan het speuren geslagen naar een passende oplossing. Welnu, die heb ik gevonden en op mijn systeem geplaatst.
Doel
Ik wil graag voor mijn zonneboiler een betaalbaar en makkelijk uitbreidbaar/beheerbaar systeem vinden, die geen computersysteem continue nodig heeft om op lokatie e.e.a. te meten. Daarnaast wil ik graag een koppeling aan internet, zodat ik waar ter wereld dan ook de zonneboiler kan volgen. Aangezien mijn programmeer-ervaring zeer beperkt is, hecht ik een grote waarde aan een levendige ondersteuning van leverancier danwel een community.
Door het verzamelen van meetdata, specifiek voor mijn woning, hoop ik nauwkeurigere en beter de energie te kunnen inzetten om daarmee gas te besparen en comfort te verhogen.
Al snel heb ik de Arduino gekozen voor de aansturing en internetkoppeling, alsmede de programmatuur die lijkt op C++. Een kanttekening: er zijn overigens verschillende typen verkrijgbaar van Arduino. Ikzelf heb getest met 2 uitvoeringen: de Arduino Duemillenove (2009) en de Arduino Uno. Beiden werken in elk geval goed in dit project, beiden voorzien van de Ethernetshield-uitbreiding.
Temperatuursensoren
Er zijn verschillende mogelijkheden om de temperatuur te registreren, zowel met analoge als digitale temperatuursensoren. Uit oogpunt van uitbreidbaarheid heb ik digitale sensoren van het type DS18S20 gekozen. Deze zijn elk afzonderlijk voorzien van een uniek adres en hebben een temperatuurbereik welke ruim voldoende is voor de zonneboiler: van -15 graden Celsius tot +125 graden Celsius. Heel nuttig is de mogelijkheid om de sensor middels een ‘parasite-mode’ te voorzien van voeding: hierbij maak je gebruik van 2 leidingen: massa & data. Wel essentieel van belang is dat de vrije 3e pin van elke sensor ook aan massa is gekoppeld, anders meet je elke keer een temperatuur van 85 graden Celsius. Met een pull-up weerstand (van 4k7 Ohm) is de datalijn aan de voeding gekoppeld (5 Volt). Vanuit de fabriek is elke sensor reeds gekalibreerd, zodat vanuit de software er geen voorzorgsmaatregelen genomen hoeven te worden voor een nauwkeurige meting.
Het uitvragen van de sensor via de z.g. ‘one-wire’ methode is uitgebreid beschreven in de programmatuur van Arduino, waarmee ik van elke sensor het unieke adres heb kunnen achterhalen.
Andere sensoren zoals de LM35 en PT100 heb ik na het bestuderen van de DS18S20 sensor terzijde geschoven, maar kunnen ook zo voor hun doelen gebruikt worden.
Koppeling aan internet
Er zijn diverse omgevingen die data kunnen vertalen naar grafische weergave. Zelf heb ik overwogen om de data naar een (eigen) database te laten wegschrijven. Maar helaas zijn mijn programmeer-vaardigheden hier niet toereikend toe. Door gebruik te maken van de gekozen oplossing (via Pachube.com) is het eenvoudig om periodiek data aan te reiken. Pachube zorgt voor de vertaling naar de grafieken en afhankelijk van het gekozen abonnement is ook een historie mogelijk. Standaard is een gratis Pachube account goed voor maximaal 10 input-stromen (feeds), en een historie van 30 dagen. De grafieken zelf zijn weer in diverse vormen te gebruiken op je eigen website, zonder te veel programmeren: de HTML/Javascript code is vlot te genereren.
Een ander alternatief wat ik gevonden heb is de omgeving van Exosite, die minder bekend is. Maar wel een mogelijkheid heeft om criteria vast te leggen, waarop een mail/SMS of andere actie gestart moet worden indien een conditie bereikt wordt.
De programmatuur
De Arduino controller wordt via de computer geprogrammeerd in de ontwikkelomgeving IDE (Integrated Development Environment). Voor zowel besturingssysteem Windows als OS/X en Linux is een ontwikkelomgeving voorhanden, gebaseerd op een eenvoudige interface. Door de Arduino te koppelen aan je computer via de USB-aansluiting, wordt de voeding verzorgd en kun je programmeren.
Zoals ik eerder aangaf in het artikel, heb ik de code bijeen geraapt van vele voorbeelden en onderdelen die over het internet verspreid zijn. Met de beproefde trail-and-error methode ben ik stapsgewijs te werk gegaan: van identificatie van elke temperatuursensor tot aan het uitlezen van de temperatuur, gevolgd door koppeling aan Pachube. Omdat ik persoonlijk van mening ben dat de code niet aan mij toe behoort maar samengesteld is met medewerking van vele mensen in de Arduino en overige communities, vind ik het niet meer dan eerlijk om de code ‘as is’ voor iedereen beschikbaar te stellen. Houdt wel in dat ik vrij weinig op maat kan aanpassen, maar dat terzijde.
De modules die gebruikt zijn in deze toepassing zijn in de IDE omgeving als tab-bladen te onderscheiden:
- tabblad ‘atagqsolarpachube’ is het hoofdprogramma;
- tabblad ‘localclient’ regelt de communicatie met het Ethernetshield (de uitbreiding die je op je Arduino steekt voor koppeling aan ethernet);
- tabblad ‘pachube_in_out’ regelt het dataverkeer naar Pachube.com ;
- tabblad ‘readtemphex’ regelt het uitlezen van de digitale temperatuursensor DS18S20 en vertaling naar graden Celsius;
Tabblad ‘atagqsolarpachube’ details
In deze module zijn een aantal belangrijke zaken geregeld die je naar je eigen situatie moet configureren. Een onderdeel ervan is het aantal sensoren en elk hun adres. Het achterhalen van het adres van de sensor kun je zelf uitvinden via de voorbeelden die bij de Arduino IDE omgeving zijn meegeleverd, via de library/bibliotheek OneWire is het voorbeeld meegeleverd wat de CRC-code en het adres toont in de seriele monitor van de Arduino omgeving.
Heb je dus een of meerdere sensoren, dan dien je deze informatie eerst te verzamelen.
De verkregen adressen van de toe te passen DS18S20 sensoren dien je in de broncode te verwerken, bij de variabele(n) ‘byte SENSOR…’. In mijn voorbeeld zijn momenteel 4 sensoren met elk hun uniek adres genoteerd, aangevuld met 4 variabelen voor de temperatuur (elke sensor 1 temperatuur-variabele) (geregistreerd onder ‘byte temp_….’.
In de variabele SHARE_FEED_ID en PACHUBE_API_KEY moet je je persoonlijke informatie vermelden zoals Pachube deze aan je heeft toegewezen. In de bron-code is deze geanonimiseerd om te voorkomen dat iedereen mijn ‘feed’ gaat verrijken met zijn/haar data.
De update-interval naar Pachube heb ik voor de zonneboiler op 30 seconden geplaatst in de parameter Update_interval. Dat lijkt me toereikend genoeg voor een geleidelijke opwarming van (in mijn geval) 380 liter buffervat met 10,9 GJ vlakkeplaatcollectoren (ca. 7,5 m2). Sneller dan 5 seconden zal problemen geven bij Pachube, dus houdt er schappelijk rekening mee.
Uiteraard komt de Arduino met de Ethernet-uitbreiding aan je eigen netwerkje te hangen. Hiervoor zul je dus persoonlijk een uniek IP-adres, de gateway en subnet moeten invoeren, evenals een eigen MAC-adres (MAC=media access control).
in de programmatuur binnen de gedefinieerde ‘loop’ vindt de continue aansturing verder plaats. Je herkent duidelijk dat elke sensor expliciet aangeroepen wordt voor een terugkoppeling van de temperatuur. Heb je meer/minder sensoren, zul je hier een aanpassing moeten doen door extra sensoren toe te voegen, danwel te verwijderen.
Door eerst de subroutine ‘pachube_in_out’ aan te roepen, zal de software zaken als timing en communicatie-protocol naar Pachube voor zijn rekening nemen.
Tabblad ‘localclient’ details
In dit onderdeel vindt de aansturing van de Ethernet-module plaats. Zoals je ziet, het is erg compact opgesteld en er valt niets bij te configureren.
Tabblad ‘Pachube_in_out’ details
Hier vindt de feitelijke interactie naar Pachube plaats. De gemeten waarden worden in een string van meetdata aan elkaar gezet en aangeboden aan Pachube.
Heb je meer/minder sensoren dan de vier oorspronkelijke die ik nu heb gebruikt, dan moet je een aantal regels aanpassen.
Copieer daarvoor de regels met ‘Pachube_data +=….’ voor meer sensoren toe te voegen (of verwijder een aantal naar gelang jouw toepassing). Belangrijk: vergeet niet de ‘+’ voor het ‘=’-teken, hiermee weet Arduino dat de string aangevuld moet worden met extra tekens!
Tabblad ‘ReadTempHex’ details
In dit tabblad staan de routines beschreven die de DS18S20 sensoren benaderen, ondervragen en het antwoord (welke hexadecimaal is) converteren naar voor ons begrijpelijke eenheid ‘graden Celsius’.
Zoals je ziet, de modules zijn relatief compact opgesteld. Als alles goed is (de library/bibliotheken zijn voorhanden, recente IDE-omgeving beschikbaar, eventueel USB-stuurprogramma’s voor Windows/Apple geinstalleerd) dan is met een druk op de knop de Arduino te programmeren.
De bron-code heb ik momenteel in een gecomprimeerd bestand op mijn website beschikbaar gesteld, mocht je deze willen downloaden.
Aansluiten van de Arduino op je zonneboiler
Elektrisch kun je je Arduino aansluiten met de volgende aandachtspunten:
Gebruik een kleine voeding van ca. 7-9 Volt gelijkspanning (centrale pin = plus van de voeding). Je kan ook gebruik maken van een 9Volt batterijblok.
De pull-up weerstand van 4k7 Ohm dient aan de +5Volt en een pin 9 (digitale kanaal, gedefinieerd in de programmatuur) gekoppeld te worden.
De DS18S20 sensor heeft 3 aansluitingen, waarvan de Vdd en GND aan massa/ground moeten liggen, en de data-aansluiting aan pin 9 via de pull-up weerstand.
Mijn sensoren zijn relatief prijzig (ca. 15 euro per stuk), maar afgewerkt met een metalen ‘kopstuk’ en circa 2 meter bekabeling, afgekit zodat vochtige omstandigheden geen problemen zouden moeten geven. Door de metalen kop kan ik voorzichtig de sensor tussen het isolatiemateriaal van het 380 liter grote buffervat schuiven, nabij de originele temperatuursensoren.
Voor de aanvoer-en retourleiding van het solar-deel (afkomstig van de vlakkeplaatcollectoren) heb ik ze momenteel tusssen de isolatie om de leiding en de leiding zelf geschoven.
Hiermee is de Arduino geprogrammeerd en gereed om in bedrijf genomen te worden, uiteraard na het aansluiten op de Ethernet-bekabeling die je op je router steekt.
Als alles goed is, zal de Arduino na ca. 10 seconden ‘opstarttijd’ zelfstandig verbinding opbouwen met Pachube.com, de data verzenden, en verder meten. Je kan dit controleren door op Pachube je eigen ‘feed’ in de gaten te houden, en te genieten van de data en de grafieken.
De grafieken van de 4 temperatuursensoren
Nawoord
Uiteraard is deze opstelling niet alleen voor je zonneboiler te gebruiken. Denk ook aan het meten van het opwarm-en
afkoelgedrag gerelateerd aan de buitentemperatuur van je woning. Of volg nauwgezet je eigen CV-ketel, en controleer de warmte per radiator (aanvoer-en retour), danwel de gehele aanvoer-en retourtemperatuur.
Voor mij is het praktisch om te zien hoe de temperatuur in de Atag Qsolar zich ophoopt, zodat ik mijn thermostaat kan instellen op een bepaald tijdstip waarbij de hitte alvast in mijn woonkamer/keuken gestuwd wordt. Zodoende warmt mijn woning s’middags op tot ca 22-23 graden Celsius, en zit ik er gedurende de avond warm en comfortabel bij. Daarbij is het buffervat weer voldoende afgekoeld zodat een volgende zonnige dag weer optimaal geoogst kan worden, en het gasgebruik naar nul gaat. Hoeveel aardgas ik ga besparen door inzet van deze Arduino-monitor kan ik nog niet eens voorzien. Wel is het voor mij praktisch om op afstand te kunnen zien hoe het systeem werkt en ik bij thuiskomst kan bepalen wat ik met de energie ga doen: naar de verwarming toe danwel extra welverdiend warm bad nemen. Daarbij is het een mooi voorbeeld wat ik kan laten zien aan mensen die interesse hebben in duurzame energie, en wellicht hen de mogelijkheden van de CV-ondersteuning door zon tastbaar maak.
Ergo: er is veel te bedenken waar het vastleggen van temperatuur een hulpmiddel kan zijn in het energiegebruik in je leven. En ikzelf heb er een stukje energie (lees: vreugde) in gekregen om e.e.a. uit te zoeken en nu daadwerkelijk werkend te hebben!
En wat betreft het energieverbruik van de Arduino: de Arduino Uno heeft ongeveer 40 mA per digitale I/O pin nodig. Hier gebruik ik 1 I/O pin van. Bij een aanbevolen voeding van 7 Volt is het vermogen voor deze schakeling minder dan 0,5 Watt (exclusief de internet-router). Je mag de Arduino voeden met een spanning tussen de 5Volt en 12Volt, echter bij 12Volt zal er meer warmte ontwikkeld worden. Zit je beneden de 7Volt dan kan het bord instabiel zijn en de 5Volt-aansluiting geen zuivere referentie-spanning leveren.
Bronnen
Arduino community
Pachube Data infrastructure for the Internet of Things
Exosite one platform to connect you to your data
Datasheet DS18S20 digitale temperatuur sensor
Niels Thijssen, Weblog: Renewable Energy: NOW
8 reacties op “Monitor je zonneboiler”
Tech detail overload 🙂
Where can I get one??
Misschien is Nefit geinteresseerd. Ik heb lang geleden gevraagd of er al iets was om je opbrengst te meten, maar toen hadden ze niets. Misschien kunnen ze dit op de markt brengen?
@Joris:
Inderdaad, ‘tech detail overload’. Ik koos bewust om in vogelvlucht de subroutines kort te bespreken, en dan specifiek de onderdelen die je zelf aan moet passen indien je meer of minder digitale sensoren wilt inzetten.
De Atag Qsolar heeft de nodige parameters in zich waar je rechtstreeks de opbrengsten in giga-Joule zo kan uitlezen, voor zowel het tapwater-gebruik als het CV-gebruik (en hiermee ook het totaal).
Het gaat mij meer om ‘wat heb ik in het vat zitten’, en ‘ga ik douchen of in bad, danwel de leefruimte lekker opwarmen’. Ook handig is om te weten hoe snel het buffervat (bij mij 380 liter) in temperatuur stijgt/daalt. Op zonnige dagen je huis gestaag opwarmen voor de nacht is efficient gebruik maken van je zonneboiler om stagnatie overdag tegen te gaan.
Dus gezonde nieuwsgierigheid 🙂
Ik wil nog een keer met warmtegeleidende pasta proberen de sensoren op de leidingen te monteren. Maar ja, plannen genoeg.
Veel zonneboilers ondersteunen VBus, waarmee je temperatuur en efficientie direct kunt uitlezen.
Hier vind je meer info:
http://hobbyelektronik.org/w/index.php/VBus-Decoder
Er zijn genoeg mogelijkheden. De Atag Qsolar heeft in elk geval een aantal seriele poorten aan boord die benut kunnen worden voor bijvoorbeeld displays.
http://www.circuitsonline.net/forum/view/47517/2
Mijn insteek is om de temperaturen makkelijker in het oog te houden, zodat ik een gevoel krijg wat de zonneboiler doet en hoe ik maximaal gebruik kan maken door de opgeslagen energie danwel voor tapwater of CV te benutten.
Is het ook mogelijk om een grafiekje beschikbaar te maken met naast temperatuur ook het warm water gebruik? (liefst over langere periode met genoeg meetpunten per dag)
– Ik wil zien hoe het systeem zich gedurende de dag gedraagt en daarmee de afweging met betrekking tot omvang van de boiler en aantal collectoren inzichtelijk maken.
@5: je schrijft ‘warmwater gebruik’, dus ik begrijp dat je het aantal liters warm water wilt meten. Dit is mogelijk mits je in de warm tapwaterleiding een meter hebt die b.v. optisch (via een getal/reflectie) is uit te lezen, of elektrisch (via S0-signaal). Veel voorbeelden zijn te vinden op websites van http://www.pachube.com en http://www.arduino.cc.
Genoeg leuke projecten rondom deze kleine controller.
Meet-frequentie is zelf te bepalen: Pachube accepteerd bij mij elke 10 seconden een update van meetdata bij de zonnestroompanelen, en voor de zonneboiler heb ik elke 20 seconden een ‘update’ naar Pachube staan (water warmt niet zo snel op als elektriciteit doet toenemen bij instraling van zon/daglicht).
Stabiliteit is tot nu toe netjes: ongeveer 1x per maand/zes weken wil de controller onverhoopt ‘hangen’, waarna een korte reset alles weer in beweging brengt.
mooi gemaakt! Ik ben wel nieuwsgierig naar de sketch (code) die je voor de Arduino hebt gemaakt. Kan ik die ergens vinden?
Met vr. groet,
Gijs Berger
@Gijs: zoals vermeld in het artikel is de programma-code vrij beschikbaar op mijn website.