Arduinosta saunavahti
Ulkona on kylmää, hyistä ja pimeää, mutta sauna on onneksi lämpiämässä. Kohta pääsee löylyyn! Mutta onkohan kiuas jo lämmin?
Sen sijaan, että vaeltaisimme saunalle asti tarkastamaan tilanteen, ratkaisemme ongelman tekniikalla. Rakennamme laitteiston, joka kertoo saunan lämpötilan reaaliajassa suoraan taskupuhelimeen.
Saunan lämpötilasta raportoiva mittarimme koostuu yleiskäyttöisistä osista, joilla voi tehdä kaikenlaista kukkien kastelujärjestelmistä ovisummereihin ja CNC-jyrsinten ohjaimiin. Siinä missä kaupasta ostettu lämpömittari pystyy ainoastaan mittaamaan lämpötiloja, tämä laite on muokattavissa vaikkapa soittamaan summeria kun sauna on valmis tai kun lämpötila lähtee uhkaavaan laskuun.
Esimerkkilaitteistoa voi käyttää muidenkin lämpötilojen mittaukseen pelkän saunan seurannan sijaan. Kaikenlaista elektroniikkaa rakentaessa voi laitteiden mahdollisen ylikuumenemisen selvittää laittamalla lämpötilasensorit laatikon sisään ja katsomalla tulokset ruudulta. Sensorit voi laittaa myös esimerkiksi jääkaappiin, pakastimeen tai kellarikomeroon tarkkailemaan ruokien säilyvyyttä.
Komponentit
Itse lämpötilamittaus on toteutettu DS18B20-piirillä. Se kuuluu Dallas Semiconductorin kehittämään 1-Wire-tuoteperheeseen, josta löytyy monenlaisia pieniä sensoripiirejä. Tyypillisimpiä ovat lämpötila- ja kosteussensorit, laskurit ja jännitemittarit. Sensorit ovat digitaalisia ja kommunikoivat 1-Wire-protokollan avulla. Rautasuunnittelua tämä helpottaa huomattavasti, koska samoihin piuhoihin voi kytkeä useita sensoreita ilman että ne häiritsevät toisiaan. Niitä voi kytkeä kiinni lennosta ja koska jokaisella on oma uniikki sarjanumero, ne eivät sekoitu keskenään.
Digitaalinen kommunikaatio pienillä nopeuksilla antaa myös paljon valinnanvaraa kaapeloinnin suhteen. Itse olen päätynyt käyttämään tavallista audiopiuhaa ja 3,5 mm plugiliittimiä. Etuna tässä on se, että jatkojohtoja saa lähimmästä K-kaupasta. Toinen hyvä asia on stereojakajien käyttömahdollisuus. Lisäsensorin kytkeminen vaatii normaalin audiojakajan lisäämisen, jonka jälkeen uuden sensorin voi kytkeä kiinni. 1-Wire-tuotteiden kanssa käytetään tyypillisesti lankapuhelimista tuttua RJ11-liitintä, mutta sellaisen tekeminen vaatii puristuspihtejä, eikä jakopaloja enää nykyisin löydy kaupoista. Mikään ei tietenkään estä käyttämästä vaikka vanhaa verkkopiuhaa ja juottamasta liittimiä suoraan kiinni sensoriin. Paras ratkaisu löytyy käyttökohteen mukaan. Valmistajasta riippuen 1-Wiren pitäisi toimia jopa satojen metrien kaapeleilla, mutta itse olen huomannut ongelmia jo kymmenen metrin matkalla.
Seuraava vaihe järjestelmässä on tiedon kerääminen sensoreilta. Se on hoidettu Arduino Ethernet -mikrokontrollerilla, joka kyselee jatkuvasti sensoreilta uusia lämpötilatietoja ja lähettää ne eteenpäin. Arduino-tuoteperhe on hyvin tuotteistettu, aloittelijaystävällinen elektroniikan häkkäysalusta. Arduinoilla voi tehdä ”ihan mitä tahansa”, esimerkiksi tällaisen lämpötilamittarin tai vaikkapa ovisummerin, valo-ohjaimen tai puhuvan leivänpaahtimen. Tarvitaan vain kourallinen kivoja elektroniikan komponentteja, vähän koodaustaitoa ja intoa kokeilla asioita.
Käyttövirran koko järjestelmä saa verkkokaapelia pitkin Power over Ethernetillä. Tässä projektissa se selvästi helpottaa johdotusta, koska tarvitsee vetää vain yksi kaapeli Arduinolle. Toisessa päässä on PoE-injektori, joka kytketään normaaliin seinäsähköön ja verkkopiuhoihin. Tehoa saa välitettyä enintään 15 W, mikä riittää moneen projektiin aivan loistavasti. Kannattaa huomata, että on olemassa myös epästandardeja PoE-ratkaisuja, joita myydään melkein samalla nimellä.
Seurannan helpottamiseksi Arduinoon on lisätty myös LCD-näyttö, joka kertoo senhetkiset lämpötilat. Näyttö itsessään on vakiolaite ja liitetty Sparkfun SerLCD -adapterin avulla, joka pudottaa vaadittavien ohjaussignaalien määrän viidestä yhteen. Ohjelmoinnin kannalta SerLCD:n käytöllä ei ole merkitystä, mutta se selvästi helpottaa johdotusta.
Lämpötilat koneelle
Kun sensorien data on saatu numeroiksi, se pitää vielä ottaa talteen ja saada näkyviin kännykkään. Kuten Ethernet-termistä saattoi arvata, Arduino lähettää mittaustulokset verkkoon, josta PC-kone (tai vaikka Raspberry Pi) poimii ne talteen. Laiskana koodarina laitoin Arduinon lähettämään tiedot broadcastina koko verkkoon, jolloin ei ole väliä mitä IP-osoitteita käytetään. Vastaanottopuolelle koodasin muutaman rivin Perl-taian, joka kuuntelee verkkoa ja kirjoittaa tulokset ylös. Sama onnistuisi melkein millä tahansa ohjelmointikielellä.
Tietojen varastointiin ei tarvitse välttämättä koodata omaa softaa, vaan voi käyttää rrdtoolia. Sillä luodaan aluksi halutun kokoinen arkisto tarvittavista mittareista, esimerkiksi katto- ja istumatasojen lämmöt yhden vuorokauden ajalta. Tämän jälkeen tietoja päivitetään sitä mukaa kun niitä syntyy. Rrdtool huolehtii myös aikaleimojen keräämisestä, joten ei haittaa vaikka järjestelmä olisi välillä pois päältä.
Lopuksi koneen tai kännykän ruudulle saadaan piirrettyä lämpötilakäyrä rrdtoolia käyttäen. Olen kokenut helpoimmaksi tehdä tämän www-palvelimen kautta muutaman rivin PHP-skriptillä. Tällöin samaa sivua voi käyttää omalta koneelta, läppäriltä, kännykältä tai vaikka kumminkaiman tabletilta. Kun projektin jälkeinen tylsyys yllättää, voi sivulle koodailla lisää animaatioita ja hienouksia.
Linkkejä
- Projektin lähdekoodi zip-pakettina
- Arduino-projektin kotisivut
- Suuri yhdysvaltalainen elektroniikkakauppa
- Kotimainen Arduino-/elektroniikkakauppa
- Suuri suomalainen elektroniikkakauppa
- Erilainen toteutus saunalämpömittarista
Teksti: Anssi Kolehmainen
Kuvat: Anssi Kolehmainen, Mitol Berschewsky