Kasvien IoT-elämä alkoi!

Jee! Tänään on ollut eka päivä kun kastelujärjestelmä alkoi lähettämään sensoridataa internettiin. Nyt voi mielestäni sanoa, että tämän kyseisen ”esineen” internet-elämä alkoi, sillä mittausdata tallennetaan Googlen drivelle. Alhaalla on kuva tuntidatasta. Kenttiä tulee tietysti paljon lisää sitten kun varsinainen kastelujärjestelmä parvekkeelle tehdään. Kyseistä tiedostoa voi sitten lukea ”millä vaan” ja piirtää erilaisia käppyröitä. Itse Raspillahan minulla on jo Matplotilla toteuttamani käppyröinen visualisointiohjelma, mutta ehkä Googleltakin voisi löytyä jotain online-graph työkaluja, jolla voisi Driven dataa visualisoida. Pitääpä tutkia.

Esineiden internetistä löytyy Googlella paljon tietoa. Tässäpä esimerkiksi yhdenlainen kuvaus aiheesta:

https://www.telia.fi/yrityksille/iot/etusivu?gclid=Cj0KCQiAqNPyBRCjARIsAKA-WFz5IAWvCERTREwnQbh2URcfUHeJojC44-5qCtM84eZg8cfunrxuuWwaAsmmEALw_wcB

Toinen ilmiselvä merkki IoT-toiminnasta on etäyhteyden toimintaan saattaminen. Asensin nimittäin TeamViewerin ja nyt voin ohjata kastelua myös kotiverkon ulkopuolelta. Harmittavasti TeamViewer tökkii ikävästi VNC:hen verrattuna, joten se tuskin tulee olemaan lopullinen ratkaisu. Ehkäpä VNC VPN:n yli olisi toimivampi ratkaisu. Ja löytyyhän muitakin vaihtoehtoja kuten vaikkapa Dataplicity: https://www.dataplicity.com/subscriptions/plans/

Tulipa myös harrastettua piirto-ohjelmaa muutamana iltana ja väsäsin järjestelmäkuvauksen. Aika paljon on vielä tekemistä ja saas nähdä toteutuuko ihan kaikki, mutta kiva se on ainakin suunnitella. 🙂

Calibration

Since today I’ve been using only time based irrigation dosing. That’s perfectly fine if I just want to feed ”some amount” of water for the plants. Things get more complicated if I want to dose exactly e.g. 50 ml or some other exact amount of water. In this case following field and installation related nonlinearties affect the irrigation dosing:

  • Water pump power
    • Pump power might change due to load changes
  • Pipe diameter
    • Narrow pipe needs less pump power
    • Many sizes of pipes in a row complicates things even more
  • Pipe length
    • Longer pipe needs obviously more water. (this is linear)
  • Irrigation height from pump to plant
    • Gravity has an big effect for the throughput.
  • Water ”kickback” effect in a pipe
    • Paddle wheel of the pump leaks and allows water to flow back when the pump is off. Paddle wheel leaks also during the active mode and especially with high irrigation heights
  • Unexpected air in the pipe
    • If the pipe is pended many times or if it has many up-down routes, unwanted air can lead to the pipe causing error on dosing accuracy

These all factors affects dramatically for the dosing and if not considered during the design, desert drought and very unhappy plants might be the result. I’ve tried to figure out how to deal all these factors and I have some preliminary ideas, but they are not yet ready for publishing. They need little bit more time and cooking. Here are some preliminary ideas:

  1. No pipe calibration at all (time based feeding)
  2. Irrigation with calibrations that uses some correlation factors for the points I listed above
  3. Irrigation with auto-calibration. In this option pumped water is measured and used for calibration factors.

In addition to field/installation related nonlinearties, temperature and humidity needs to be taken in account as well. For that, I’ve already installed sensors and created preliminary algorithms. Fine tuning will be done in the summer time.

Uusia antureita käyttöön

Asensin lämpötila-anturin, valo-anturin ja kosteus/lämpötila-anturin testikäyttöön. Tarkoitus olisi käyttää näitä hienosäätämään veden annostelun määrää. Kuumana kesäpäivänä kasvit tarvitsevat reippaasti enemmän vettä kuin sateella tai pilvisellä säällä, joten automaattisäätö on tässäkin tarpeen.

Lämpötila-anturin ja valo-anturin asennus oli aika helppo homma. Sen kun kytki kiinni ja latasi esimerkkiohjelmat internetistä. Yhdistetty kosteus/lämpötila-anturi sen sijaan ei lähtenyt pelittämään. Tarkistin kytkennät moneen kertaan ja koodi pitäisi olla myös oikein, mutta minkäänlaisia lukemia ei ilmaannu. Ehkä anturi on rikki, joten tilasin uuden Kiinasta tilalle. Harmittavasti Kiinan tilauksissa menee aina vähintään pari viikkoa, joten ongelma jäänee arvoitukseksi siihen asti.

Valo-anturin tarpeellisuudesta mittauksen säätöön voi pitää kyseenalaisena. Ehkäpä sen lukemat ovatkin enemmän viihteellisiä. Voisin tehdä vaikka laskurin laskemaan aurinkoisia päiviä.

Kirjoitan seuraavalla kerralla kalibroinnista ja sen haasteista. Siinäpä olisikin pähkinöitävää vaikka kevyen lopputyön verran, sillä asiat hankaloituu selvästi kun epälineaarisia elementtejä tulee kastelua sotkimaan.

Vasemmalta: lämpötila-anturi, valo-anturi ja yhdistetty kosteus/lämpötila-anturi, joka on ehkä rikki

Elämän ihme…

…on tapahtunut jälleen kerran ja pieniestä siemenistä on alkanut kasvamaan vihreitä versoja. Todistusaineistoa tästä syntymäjuhlasta on kuvissa alhaalla. Chilin laji on Capsicum Annuum Cayenne, jonka tulisuus on 35000 Scovillen asteikolla. Ne ovat siis hieman miedompia kuin viime kesänä kasvattamamme Barakit, jotka ovat n. 100000 scovillea. Cayennea käytetään yleisemmin jauhettuna, joten pitää itsekin yrittää jauhaa sitten syksyllä jos vaan satoa saadaan. Ja saadaanhan sitä – siitä pitänee AGiotS-kastelujärjestelmä huolen. 😇

Eikä tässä vielä kaikki. Tuli nimittäin ostettua Bauhausista myös ”hieman” tulisempaa lajiketta nimeltään Trinidad Scorpion – 1 500 000 chovillea. Chilikirjan mukaan yli 1 000 000 chovillea sisältävät chilit soveltuvat parhaiten pippurisumutteeksi esim. taisteluissa harmaakarhuja vastaan. Alammekin siipan kanssa (kemisti) valmistamaan pippurisumutetta ensi syksynä. Nehän on kiellettyjä suomessa, mutta tuskin tätä blogia poliisit lukee, joten tilauksia otetaan jo vastaan! 😉

Chovillen asteikko. Lähde: Wikipedia. Scoville scale. Source: Wikipedia

Miksi Raspberry, miksi ei Arduino?

Näin minulta kysyttiin heti eka päivänä kun julkaisin blogin. Myös töissä sain perustella valintaani välittömästi kun otin projektin ruokalassa puheeksi. Jos haluat lyhyen vastauksen: Se sattui ensimmäisenä käteen Verkkokaupan hyllyltä. Pidempi vastaus? – jatka lukemista… 

Kelataanpa historiaa 20 vuotta taaksepäin – aikaan jolloin Raspberryjä ja Arduinoja ei vielä ollut olemassa –  jolloin itse aloittelin ohjelmoitavien mikrokontrollerien ohjelmointia PIC16-nimisellä mikrokontrollerilla. Valjastin kyseisen kontrollerin ohjaamaan manuaalista vaihteistoa, jonka olin suunnitellut PC-autopelien ratti-poljinyhdistelmän kylkeen. Siihen aikaan ei ollut kaupallisesti sellaisia ratti-poljinyhdistelmiä, joissa olisi ollut manuaalinen vaihteisto ja käsijarru, joten päätin yrittää tehdä itse. Itse mekaniikka oli faneerista, puusta ja metallista. Vaihteen kytkeminen aiheutti suljetun piirin ja tämän informaation toimitin PIC16:lle. PIC16:lla oli sitten tilakone, joka “togletti” ratti-poljinyhdistelmän vaihteita tarvittavan määrän ylös tai alas. Systeemi toimi mainiosti ja sillä sai mahtavasti lisää fiilistä rallipeliin! En millään muista itse rallipelin nimeä, mutta se oli suomalaisten tekemä ja siinä pääsi ajamaan Ladalla, Saab 96:lla, Taunuksella ja muilla legendaarisilla vauhtihirmuilla.  

PIC16-seikkailujen jälkeen onkin ollut hiljaista ohjelmointi- ja elektroniikkarintamalla, sillä opintojen jälkeen ajauduin nopeasti hektiseen työelämään ja sen jälkeen vielä hektisempään perhe-elämään. Aika ei vaan riittänyt kaikkeen, joten harmittavasti mikrokontrolleri-harrastukseen on tullut 20-vuoden tauko. Sinä aikana on sitten tullut jotain Atmelin ohjelmoitavia piirejä, Arduino ja Raspberry. Toki sen verran seurasin rintamaa, että tiesin joidenkin tehneen Arduinoilla autotallinovien avaajia ja jotain kaljapullonavauslaskureita. Ja että taisipa niitä olla Robot Wars –tv-ohjelmassakin joitain häkkyröitä ohjaamassa. Ja Raspberryillä kuulemma sai tehtyä mediakeskuksen olohuoneeseen. Mutta siihenpä se tietämys sitten jäikin.  

Joten – hirvittävän syvällisesti en tähän projektiin pohtinut “Arduino vai Raspberry” –valintaa. Taisin käydä seuraavien tyyppisillä sivuilla: 

https://flaviocopes.com/arduino-vs-raspberry-pi/ => Täällä sanotaan, että minulle olisi riittänyt Arduino… 

https://all3dp.com/1/arduino-vs-raspberry-pi/ => Tällä sivulla sanotaan että: 

”Your first consideration should be what you want to do with it! If you need a full-blown OS and want to run multiple programs on a single computer, the Raspberry Pi is the right choice. If you just want to get one job done and also need to control external periphery, the Arduino is the superior machine.”

Ajattelin asiaa siltä kannalta, että Raspberryllä saisin käyttää tuttua Python-kieltä ohjelmointiin, Raspberry on helppo liittää telkkuun,  virtalähteeseen ja nettiin sekä käyttöjärjestelmänä olisi tuttu Linux. Raspberryllä voisin myös pyörittää useampia sovelluksia (kasvien web-kamera, palvelin, striimauskoneeksi – samalla kun se ohjaisi kastelujärjestelmää keskusyksikkönä ja toimisi langattomien anturien tukiasemana). Näihin jokaisiin varmaan Arduino-fani vastaisi, että no voihan samat tehdä Arduinollakin!? En yhtään epäile, enkä väheksy Arduinoa – vaan päinvastoin. Arduino on erittäin pätevä ja fiksu valinta samanlaiseen systeemiin mitä minulla on tulossa. Mutta minun valinta nyt vaan on Raspberry –  ja toisaiseksi olen valintaan erittäin tyytyväinen. Raspi on osoittautunut vakaaksi ja toimivaksi. Käytän sitä paitsi Arduinoon (pääasiassa) suunniteltuja anturi-moduuleja, joten olen erittäin tyytyväinen että Arduinot ovat olemassa ja että niitä moni harrastaa! 😊 

Jade plants 💲 Rahapuu 🤑

Last posting was quite technology oriented, so this time I’m writing something that is not technical but extremely difficult though – so I’m talking about plant care!

Both plants which I have under automated irrigation are very thirsty ones. They like to get irrigated at least twice a week and sometimes even three times. One might say that they are drunks among the plants. But that’s very good since those kind of plants are perfect for my irrigation experiments. They don’t care so much if my program contains a mistake (never happened so far ;)) and I accidentally pump 5 dl instead of 1…

But there are also other kind of plants. They’d rather stay far away from water and drink only when it’s absolutely necessary. We bought couple of this kind of plants some months ago and they’re called as Jade plants. We didn’t read the instructions of irrigation and watered the plants quite normally – once a week like our other plants. But that seems to be a fatal mistake! The other Jade plant died some weeks ago and the other is alive, but suffering. But we won’t give up! We bought new ones and we’ll try to be more careful from now on. We read from the internet that Jade plants should be irrigated only once per three weeks. Who in earth – can remember which plants needs irrigation three times a week and which only once per three weeks?

So the conclusion is: Plant care is far more difficult than technology stuff!

Ohjelmointia Pythonilla

Tänään kirjoitan asiasta josta tiedän jotain, mutta en todellakaan paljoa – saatikka että väittäisin olevani minkääntasoinen asiantuntija. Eli hieman siis liikutaan epämukavuusalueella.

Kyse on siis ohjelmoinnista. Ja nimenomaan perinteisestä ”soft”-ohjelmoinnista, eikä laitteisto-ohjelmoinnista (VHDL, Verilog, SystemVerilog), jota kyllä osaan kattavasti työn puolesta. Olen käynyt pakolliset C++ -kurssit opiskeluaikoina ~20 vuotta sitten, eikä kurssinumerot olleet silloin mitenkään ylihyviä. HW-puolelle suuntauduttuani ja työsarkaa sillä puolella koluttuani, alkoi vähäisetkin koodaamistaidot jäädä unholaan ainakin C++-kielen osalta. Työelämässä olen toki tarvinut alusta asti skriptauskieliä kuten sh, csh, bash, Perl, Tcl, html, awk jne. Myöskin Assembly-kieli tuli tutuksi mikrokontrollerin ohjelmoinnissa. Perl ja Tcl ovat toki paljon enemmänkin kuin skriptauskieliä, mutta siihen tarkoitukseen minä niitä lähes yksinomaan käytin. Skriptausohjelma on siis tyypillisesti pieni ohjelmanpätkä, joka hoitaa joko yhden tai muutamia asioita kerrallaan. Jos vaikka jokin tulostiedosto näyttää sekavalta, voi esim. Perlillä saada sen näyttämään järkevämmältä.

Python-kieleen tutustuin nykyisessä työpaikassani 4,5 vuotta sitten. Työkaverilla oli hienoja Python-skriptejä, joilla hän muutti tulostusta kätevästi. Python syntaksi näytti paljon helpommalta kuin Perl-totetus, joten kipinä Pythonista jäi mieleen itämään. Otinkin Pythonin käyttöön skriptaamisessa ja muutamia arkea helpottavia pikkuohjelmia tuli tehtyä. Ilokseni huomasin että Python tukee Tcl/Tk-GUI rajapintaa, josta minulla oli jo aiempaa kokemusta. Tk -lisäystä kutsutaan Pythonissa Tkinter-nimellä, jolla olen siis tehnyt aiemmassa postauksessa olleet GUI-harjoitelmat.

Raspberryä voisi ohjelmoida monella muullakin kielellä, mutta Python on ilmeisesti suosituin ei-web-pohjaiseen ohjelmointiin. Raspberry-palstoilla web-pohjaiseen ohjelmointiin suositeltiin Node-RED:iä, joka generoi JavaScriptiä. Jotkut käyttävät ilmeisesti C++-kieltä tai kirjoittavat suoraan Javaa. Myös täysin graafista Scratch-ohjelmointiympäristöä voi käyttää, taikka sitten Rubyä, jota wikipedian mukaan pidetään maailman helpoimpana ohjelmointikielenä. Sitä ilmeisesti opetataan jo peruskoulussa?

Mutta takaisin Pythoniin! Hehkutan sitä kieltä tässä eniten, koska sitä osaan parhaiten – mikä siis ei tarkoita että täydellisesti. Python on tulkkaava ohjelmointikieli, eli välittömästi ohjelman kirjoitettuani voin ajaa sen ja saada virheilmoitukset heti näkyviin. Python myös etenee koodissa iloisesti aina sinne saakka, kunnes ensimmäinen virhe koodista löytyy. C++-ohjelma sen sijaan pitää kääntää erikseen – mikä ei sekään ole iso steppi, mutta vaatii enemmän aikaa kuin Pythonin välitön palaute. Tulkkaavilla ohjelmointikielillä on kääntöpuolensa – ne eivät ole yhtä suorituskykyisiä kuin kääntävillä kielillä kirjoitetut ohjelmat.

Ohjelmointiprojekti on edennyt seuraavasti:

  • Kosteuden mittaus: 10 riviä koodia
  • Kodinonnen ja Nukkumatin kastelu (pumpun ohjaus): 34 riviä koodia
  • Kosteuden mittaus ajastetusti ja tallennus tiedostoon: 70 riviä koodia
  • Kosteuden mittaus ja kastelu ajastetusti kahtena päivänä viikossa ja tallennus tiedostoon: 180 riviä koodia
  • Kosteuden mittaus ja kastelu ajastetusti kahtena päivänä viikossa ja tallennus tiedostoon. Viikkomittaus päivittäin 4h välein ja tallennus tiedostoon. Testiversio GUI:sta (näkyvissä aiemmassa postauksessa), Kasvivalo-ohjaus: 400 riviä koodia
  • Nykyinen versio: Kaikki edelliset ominaisuudet + päiväkohtaiset kastelumääräasetukset, kuivuusraja, kosteustilanne näyttö, manuaalikastelu, logitiedoston teko, on/of statusvalot, kasteluhistorian ikkuna, jossa pv-viikko-kohtainen tulostus. Ohjelmien järjestely luokkakohtaisesti omiin tiedostoihin. GUI 650 riviä + filehandler 150 riviä + manual_controls 35 riviä + history_plot 35 riviä = 870 riviä koodia.

Täytyy huomioida että rivien määrä ei kerro mitään koodin hyvyydestä ja valmiusasteesta. Välissä on paljon erilaisia testitulostuksia ja ihan joka paikassa en ole käyttänyt looppeja. Välillä teen myös turhia tietotyyppimuunnoksia, jotka olen tajunnut vasta myöhemmin, mutta en ole jaksanut korjata. Optimointia siis riittää!

Mitä seuraavaksi? Nykyisessä GUI:ssa alkaa olla jo kaikki perusominaisuudet mitä alunperin ajattelin. Pystyn aikataulutetusti kastelemaan (yhtä kasvia) halutun määrän haluttuun aikaan – mikäli kasvi on tarpeeksi kuiva. Näen GUI:sta onko automaatio päällä ja mikä on viimeisin kosteustilanne. Näen myöskin graafin minkä tahansa päivän tai viikon tilanteesta. Tarvittaessa pystyn kastelemaan manuaalisesti halutun määrän. Ja jos jokin menee vikaan, niin näen logitiedostosta johtolankoja.

Seuraavaksi siis: kopioidaan toiminnot toisiin sheetteihin ”Nukkumatti, Chilit jne”. Sen jälkeen pidän tauon GUI:n kanssa ja alan testaamaan ilmankosteus-, valo- ja vuoto-antureita sekä niiden integroimista järjestelmään. Odotan myös jo innolla seuraavaa lähetystä Kiinasta. Sieltä pitäisi tulla lisää pumppuja, raja-antureita vesisäiliöihin, letkuliittimiä, vuoto-anturi ja kaikkea muuta kivaa. 🙂

The latest GUI. All the basic features (for one plant) starts to be ready. Now it’s mainly about copying the features for the other plants.