Kesä tuli viimein!

Jee! Kesä tuli viimeinkin näille leveysasteille. Ennuste näyttää koko ensi viikolle vähintään +18-asteen lukemia iltapäiville. Yötkin näyttäisi olevan reippaasti plussalla – jopa lähes kymmentä astetta parhaimmillaan.

Kasvit muuttivat nyt sitten parvekkeelle lopullisesti. Ensimmäinen yö (toissa yö) oli kuitenkin vielä kylmä Oulussa, joten vähän piti jännittää että miten kasvit selviää. Ja hyvin selvisivät, sillä parvekkeen yö oli yllättävän lämmin. Alhaalla statistiikkaa ensimmäisestä yöstä.

Lämpötiloista

21.5.2020 to-pe välinen yö Oulussa:

  • Ilmatieteenlaitos ennuste klo 4: +1, tuuli 0
  • Mittaukset klo 4.00:
  • Pohjoisparveke: +4.1
  • Raspi: eteläparve: +12.0
  • Raspi: eteläparveke (kasvihuone): +11.7
  • Eteläparve: +12.0

Mittauksista voi vetää sen johtopäätöksen, että ainakin tyynellä säällä ja edellisen päivän ollessa aurinkoinen (seinät varastoineet lämpöä), meidän parvekkeella ei ole hallan vaaraa yöllä, vaikka Ilmatieteenlaitos lupaa nollaa. Toinen johtopäätös; minulla on monta lämpömittaria 🙂 – ja ainakin eteläparvekkeen mittarit ovat aika samaa mieltä lukemista.

Raspissa käytän dht11- ja dht22 -sensoreita, jotka tarjoavat myös kosteuslukemat. Tulen päivittämään tunti/päivä-kohtaiset statistiikkat pilveen kaikkien nähtäväksi, kunhan saan softan päivitettyä. Speksit antureista:

Lämpötila/kosteussensorien speksit

Rakentelusta

Kuten aiemmin keväällä oli puhetta, on painovoimaisessa konekastelussa haasteena mullan kostuttaminen yhtä märäksi joka puolelta. Kun vettä kaadetaan kasvin yläpuolelta mullan pintaan, saattaa vesi levetä epätasaisesti multaan – jättäen mullan paikoitellen kuivaksi. Fiksu ihmiskastelija välttää tätä ongelmaa kastelemalla pintaa monesta kohtaa, mutta kone ei sitä temppua ainakaan vielä osaa tehdä. Yritän keksiä ratkaisun myöhemmin kokeilemalla erilaisia veden levittimiä, mutta aluksi on tärkeintä saada veden syöttö ylipäätään toimimaan.

Alhaalla on pari kokeilua aiheesta. Ensimmäinen on vanha tuttu kodinonnen ja nukkumatin ajoilta (kerrotuna kuudella). Eli syötän letkulla vettä kasvin pinnalle. Se toimii hyvin, kunhan letkujen päät ovat suurin piirtein samalla korkeudella. Jos yksikin pää on selvästi matalempana, menee silloin kaikki vesi sinne mistä helpoiten pääsee (painovoima) ja muut eivät saa mitään.

Veden syöttö letkulla

Seuraava kokeilu oli käyttää putkea, jossa on reikiä kasvien kohdalla. Tämäkin ratkaisu toimi yllättävän hyvin ja bonuksena vesi jakautui tasaisemmin kasvien pinnalle verrattuna letkusyöttöön. Tärkeää tässä ratkaisussa on laittaa putki vaateriin. Muutenhan vesi kertyy toiseen päätyyn ja toisen pään kasvit jäisivät kuivaksi.

Veden syöttö putkella

Pitihän sitä taas pari videota ottaa kun oli niin jännää;

Chilit ja paprikat muuttivat parvekkeelle. Syöttöputket ovat paikoillaan, mutta vielä pitää säätää ja testailla ennen kuin jättää täysin koneen hoitoon

Aloitin myös vetämään letkuja amppeleille. Kiinnitän letkut sähköjohtojen kiinnityksen tarkoitetulla kiinnikkeillä. Letkujen vedoissa pätee samat säännöt kuin sähkökaapeleille. Jos sähköjohdoilla tekee liian tiukkoja mutkia, kaapeli lämpenee mutkien kohdalta ja riski johdon vaurioitumiseen kasvaa. Liian tiukka mutka letkulla aiheuttaa ruttaantumisen tai ainakin turhaa vastusta – joka taasen vaatii enemmän pumpputehoa. Loivia kaaria siis!

Vesijohtojen vetoa

Loppukevennyksenä – välillä pitää muistaa syödäkin. Näin alkoi meidän grillikausi ja oli muuten hyvää! 🙂

Mukavaa viikonloppua ja tulevaa viikkoa kaikille! Nauttikaa lämmöstä!

Langatonta kermaviiliä 5 kg

Kuten aiemmin jos suunnittelin, tulee järjestelmään myös yksi langaton etäyksikkö. Alunperin ajattelin että langaton yksikkö olisi täysin langaton, eli akkukäyttöinen, mutta ESP32:n virrankulutus on sitä luokkaa, että akulla tämä etiäinen toimisi ehkä vain puoli päivää. Joten päätin että toteutan kontrolliyhteyden etänä (BLE), mutta sähkönsyöttö tulee pistorasiasta. En pidä tätä huonona ratkaisuna, sillä pistorasioita on usein siellä täällä, mutta kontrolli-piuhan vetäminen kauas olisi vaivalloista. Nyt tämän hökötyksen voi viedä aina sinne asti mihin BLE-yhteys yltää. Eli käytännössä kymmeniä metrejä jos ei ole seiniä välissä.

Kuten kuvasta näkyy, kyseessä on siis prototyyppi. 🙂 Mutta älkääpä säikähtäkö – oli ne alkuajan puhelimetkin tiileskiven kokoisia – puhumattakaan testi-puhelimista labrassa, joiden koko saattoi olla luokkaa ”kaappi”.

Vesisäiliön virkaa protossa edustaa 5 kg kermaviilipurkki. Sain näitä töistä ilmaiseksi 5 kpl. Kierrätys kunniaan! Pleksiä sain Puuilosta pilkkahintaan, kun hyllystä löytyi joku jämäpala. Pleksiä on kätevä muotoilla ja kuumaliima tarttuu siihen hyvin. Toinen vaihtoehto olisi ollut tehdä kansi puusta, mutta pleksiä se nyt on! Asensin 3 pumppua releineen ja vielä on tilaa yhdelle pumpulle. Alkuperäinen suunnitelma oli toteuttaa pumppujen pidikkeet 3D-tulostettuna pidikkeenä, mutta korona harmittavasti hidastaa ”alihankintaketjua” (työkaveri), joten nippusiteet toimittaa nyt pidikkeen virkaa. Huomaa myös mahtava rautalankaviritys ala-anturin oikeassa kohdassa pitämiseen. Eihän tästä viritelmästä puutu enää kuin ilmastointiteippi, niin voisi alkaa patenttia hakemaan?!

Boxin ominaisuudet:

  • Langaton toiminta (poislukien virransyöttö)
  • Ohjaus millä tahansa laitteella, jossa on Bluetooth (BLE) kontrolli; läppäri, kännykkä, Raspberry jne.
  • 3 kasvin kastelu etäohjatusti (tuki neljälle)
  • Tuki useille kosteus- ja lämpötila-antureille
  • Statustietojen lähetys Bluetoothilla
  • 5 litran vesisäiliö
  • Ylä- ja ala-anturit vesisäiliön automaattitäytön ohjaukseen tai statustiedoksi
  • Akku sähkökatkojen varalle ~15h

Jos virtaa riittää ja intoa, niin seuraavasta versiosta saisi kauniimman ja ehkä jopa täysin langattoman. Asentaisi härvelit vaikka johonkin hienoon kukkaruukkuun, joka toimisi vesisäiliönä ja jossa akulle olisi myös oma tila. Mikrokontrolleri kannattaisi myös vaihtaa Nordickiin, niin virrankulutus pienenisi ja toiminta-aika kasvaisi. Myös kaikki turhat LEDit pitäisi karsia pois releistä. Mutta se on sitten joskus ehkä.. Nyt iloitsen tästä mahtavasta protosta! Nyt tarvitsee vain ohjelmoida Raspberryn päähän BLE ohjaus Pythoniin. Tällä hetkellä ohjaan Protoa gattool-ohjelmalla terminaalista.

Väliyhteenvedon aika

Projektin ensimmäinen testailuvaihe on nyt takana, joten on hyvä aika tarkastella tähänastisia tuloksia. Listaan tavoitteet ja tulokset seuraavasti;

  1. Raspberry Pi-pohjainen toteutus

Olen ollut erittäin tyytyväinen Raspiin. Raspi on ollut erittäin vakaa, vaikka minullahan siinä on pyörinyt vain kasteluohjelman Python-koodi käyttöjärjestelmän lisäksi. Yhtäjaksoinen päälläoloaika on ollut lähes 3 kuukautta ja kaikki on toiminut moitteettomasti. Luonnollisesti olen vasta pintapuolisen raapaisun tehnyt Raspiin, enkä käytä sen resursseja kuin minimaalisesti. Näiden kokemusten perusteella voin kuitenkin suositella Raspia myös pieniin projekteihin tai vaikka kevyeksi yleistietokoneeksi.

2. Kastelujärjestelmän suunnittelu

Suunnitteluvaiheen voisi jäsentää seuraavasti:

  • Joulukuu: Esisuunnitteluvaihe ja pääkomponenttien valinnat, luonnospiirustukset, kastelujärjestelmän mitoitus tarpeeseen, kesän 2020 alustava parvekekasvi-suunnitelma
  • Tammikuuu: Koekasvien valinnat, pumppujen ja kosteusantureiden mitoitus.
  • Helmi – Maaliskuu: Tarkempi suunnittelu sisältäen langattomat vaihtoehdot, vesisäiliöt, kotelot, kasteluteline ja virransyöttö. Viljeltävien kasvien valinnat parvekkeelle.

Suunnitteluvaihe on siis pääosin ohi ainakin pääkomponenttien osalta. Parvekkeelle toteutettava järjestelmä sen sijaan tarvitsee vielä käytännönläheistä tuumausta ainakin letkujen ja antureiden piuhojen sijoittamiseen. Suunnitteluun saisi kulutettua vaikka loputtomasti aikaa, mutta mielestäni suunnittelu on onnistunut tähän mennessä hyvin.

Suunntelma vs. toteutus -tilanne:

Talvi: (esitestailut sisätiloissa)

  1. Kahden huonekasvin kastelu koneellisesti aikataulutettuna. Automaattinen historiatallennus kastelusta ja kosteudesta => VALMIS
  2. Lisätilaus: Lisää pumppuja, raja-antureita, virtausmittareita, letkuliitoksia jne. => VALMIS. Kaikki tarvikkeet ovat nyt kasassa
  3. Graafisen käyttöliittymän tekeminen (GUI) kastelun ohjaukseen ja tarkkailuun => VALMIS (tosin pikku viilausta riittää)
  4. Lisää antureita järjestelmään (kosteus, valo) ja testailuja => VALMIS
  5. Googlen pilvipalvelun datatallennuksen testailu => VALMIS
  6. IoT data-analyysin testailu Matlabilla/Thinkspeed => Ei aloitettu
  7. Android-GUI:n tekeminen kännykällä ohjaukseen => Ei aloitettu, eikä ehkä tulekaan. Käytän VNC/Teamwiever yhteyttä etäohjaukseen
  8. Chilien esikasvatus ja ehkä seuranta => VALMIS

Kevät: (varsinaisen parvekepuutarhan rakentaminen)

  1. Suunnitelma kasvien sijoittelusta => VALMIS
  2. Kasvien esikasvatus sirkkalehdille (manuaalinen kastelu todennäköisesti) => Meneillään
  3. Järjestelmän asennukset parvekkeelle => Seuraavaksi

3. Testi-kastelujärjestelmän toteutus sisätiloihin parilla kasvilla

Testailu on ollut projektin mielenkiintoisin vaihe tähän mennessä. On ollut hauska seurata, kuinka kasvit reagoivat kuivuuteen tai ylikasteluun. Kodinonni lähes kuoli, kun tuijotin liikaa vain kosteusanturin lukemia ja kastelin kodinonnea aluksi muka ”vain tarpeeseen”. Totuus on että menestyäkseen kodinonni tarvitsee jatkuvasti sopivasti märän mullan, joten kosteusanturin lukema on pysyttävä vakiona. 

Nukkumatti sen sijaan tykkää, jos välillä kastuu kauttaaltaan ja välillä kuivuu kunnolla. Nukkumatin kanssa ongelmana on kasteluveden epätasainen valuminen multaan. Järjestelmähän laskee veden ainoastaan yhteen pisteeseen (keskelle kukkaa), jolloin saattaa ruukun reuna jäädä rutikuivaksi ja varret uhkaavat kaatua. Olen yrittänyt erilaisia kikkakolmosia, kuten reikäinen letku tasaisesti ruukun pinnalle tai “rei’itetty pussi”, mutta kumpikaan ei täysin ratkaissut ongelmaa.

Järjestelmä toteutus on myös vaatinut jatkuvaa opiskelua ja tutustumista uusiin asioihin. Näitä on mm. blogin perustaminen ja ylläpitäminen, sensorien ohjelmoiminen (kosteus,valo,lämpö,mullan kosteus), virransyöttö ja ohjelmointi (pumput, releet), BLE-teknologia, langattomat anturit ja niiden ohjelmointi. Linuxin käytössä olen myös tutustunut  useisiin uusiin apuohjelmiin, joista en ollut ikinä kuullutkaan.

Tästä on siis hyvä jatkaa seuraaviin vaiheisiin, jotka ovat:

  1. Testi-kastelujärjestelmän purkaminen
  2. Räkin kokoaminen ja kalusteiden asennukset
  3. Toisen AD-muuntimen asennus ja ohjelmointi
  4. Pumpputestit 12-v pumpuilla
  5. Vesisäiliöiden ja kastelukaukalon raja-antureiden ohjelmointi
  6. Räkin siirtäminen parvekkeelle
  7. Viljelykasvien ja kukkien istutukset ja sijoitukset parvekkeelle
  8. Letkujen, antureiden asennukset ja ohjelmointi
  9. Langattoman osan toteuttaminen ESP32:lla
  10. Lisätilpehöörien mahdolliset asennukset (kamerat, tuuletin, näyttö)
  11. Testailua, testailua, testailua ja testailua…..

Kevät ja kesä on jo kohta ovella, joten listaan vielä mahdolliset riskit, jotka saattaa johtaa projektin epäonnistumiseen tai viivästymiseen:

  1. Koronaan liittyvät sairastelut lähipiirissä
  2. Komponenttien rikkoontuminen
  3. Esikasvatuksen epäonnistuminen täydellisesti
  4. Langattomien ratkaisujen virrankulutus – ja siten ESP32:n käytön järkevyys akulla.
  5. Pumppujen odottamaton heikko teho tai virtalähteiden heikkous

Blogin kävijämäärä on hiipunut sitten alkuaikojen hulinasta. Mutta minä kyllä yritän päivittää tätä joka viikko, vaikka ei kävisi ketään. Kuten sanottu, tämä on samalla päiväkirja itselleni projektin tapahtumista. 🙂 

Tässä vielä viimeiset kuvat tarinan kovaonnisista päähenkilöistä – kodinonnesta ja nukkumatista. Ne selviytyivät 3 kuukauden konekasteluajasta hengissä ja jatkavat täs’t edes elämää ihmiskastelun varassa. Seuraavat kasvikuvat tulevat toivottavasti jo parvekkeelta.

BLE testing demo

I have been playing with Bluetooth Low Energy (BLE) and tried to setup ESP32 wireless link to my irrigation system. The both things, ESP32 micro-controller and BLE protocol are new for me so it’s very exiting to test and do experiments. Yesterday evening was fun since I succeeded to establish BLE connection between Raspberry and ESP32. I was so excited that I even recorded a video of this success. 🙂

Happenings in the video:

1. Quick presentation of the GUI

2. Scanning of ESP32 (Raspberry Pi in VNC terminal) => ESP founded as ”mpy-uart”

3. BLE connection to ESP32. => ESP32 blinks three times (long)

=> After the connection ESP32 starts to send dummy notification messages. I’ll be using these notification messages to receive moisture status data from the plants.

4. Writing ”41=enable” to ESP32. => Led turns on. Writing ”42=disable” = Led off

=> I’ll be using write commands for manual irrigation control

5. Disconnect => Led blinks several times fast

I’m using Micropython for ESP32 programming and BLE control examples which I found from the GitHub: micropython/examples/bluetooth/. I have modified the code and added led control for this demo.

Obviously, I could had been using also ESP32 Thonny Micropython terminal and USB-link to demonstrate the BLE connection, but wireless demo is more fun.

Bluetooth BLE yhteys Raspberryn ja ESP32:n välille

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. 🙂

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! 😊 

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.