[Tutorial]Kasvatustilan automatisointi Arduinolla ja Nexa-pistokkeilla

Aloittaja polte, huhtikuu 23, 2015, 10:33:26 ap

« edellinen - seuraava »

polte

huhtikuu 23, 2015, 10:33:26 ap Viimeisin muokkaus: huhtikuu 23, 2015, 14:19:33 ip käyttäjältä polte
Kasvatustilojen automatisointi helpottaa elämää monella tavalla. Kasvatustilan muuttujia (kuten valoa, kastelua ja ilman lämpötilaa) voi säädellä haluamallaan tarkkuudella, projekti on verrattain edullinen toteuttaa, eikä se kokoonpanon jälkeen tarvitse juurikaan huolehtimista. Myöskään pistokkeisiin kytkettävällä laitteella ei ole merkitystä. Voit laittaa minkä tahansa verkkovirralla toimivan laitteen kiinni pistokkeisiin, natikasta pöytälamppuun. Suurin etu projektissa on se ettei Nexa-pistokkeiden kanssa tarvitse tehdä 220v kytkentöjä. Tämä on ymmärtääkseni kiellettyä tavalliselta kuolevaiselta ja hyvä niin. Projektissa käytetyt jännitteet ovat sitä luokkaa, ettei niistä pitäisi olla vaaraa sinulle tai ympäristöllesi. Suosittelen kuitenkin erityistä varovaisuutta sähkön kanssa leikittäessä.

Kaikki projektissa käytetyy osat on helppo tilata Kiinasta tai hankkia suomalaisilta toimittajilta. Olen pyrkinyt käyttämään osia joita ei tarvitse juottaa, joten mitään erikoistyökaluja ei tässä projektissa tarvita.

Tämän projektin tarkoitus on ohjata kasvatustilan valojaksoa, tuuletusta ja kastelua 433 MHZ taajuudella toimivilla etäohjattavilla Nexa pistokkeilla käyttäen Arduino UNO:a, ja samalla tarkkailla kasvatustilan lämpötilaa sekä ilmankosteutta. Ilmankosteus/lämpötila-anturista tuleva tieto näytetään pienellä lcd-näytöllä ajan ja päivämäärän lisäksi.

Arduino
Arduino on luottokortin kokoinen mikrokontrolleri, jonka avulla voi toteuttaa jos jonkinlaista projektia ilmapuntarista kännykällä ohjattuihin robotteihin. Arduinon parhaat puolet ovat tuotteen laajennettavuus, sillä erilaisia valmiita komponentteja ja laajennusosia on tarjolla mittaamaton määrä. Myös omien komponenttien rakentaminen sujuu osaavalta tekijältä helposti. Arduinolle on tarjolla valtava määrä erilaisia kirjastoja joilla laitteita voidaan ohjata sekä todella kattava internet-yhteisö, jolloin ohjeiden ja tuen saaminen ongelmatilanteissa on helppoa. Hintakaan ei päätä huimaa, sillä kiinalaisen halpakopion saa kotiin muutamalla eurolla. Valitsin omaksi alustakseni Arduino UNO:n. UNO on helppo, yksinkertainen ja luotettava alusta. Mikäli lopputuotteesta haluaa pienemmän, kannattaa valita Arduino Nano, joka on kooltaan vain puolet tulitikkuaskista. Mikäli projekti kasvaa, ja UNO:n liitännät täyttyvät uhkaavasti, kannattaa siirtyä astetta suurempaan MEGA:an

Nexa PE-3 pistokkeet
Ruotsalainen Nexa valmistaa kauko-ohjattavia pistokkeita. Nämä on kaikista helpoin hankkia Suomesta, itse hankin omani Clas Ohlsonilta ja hinta oli parikymppiä. Yhdessä paketissa on kolme pistoketta ja valmistajan mukaan ne kestävät 1000 watin kuorman, joten suurempitehoisen natikan käyttämisessä ei pitäisi olla ongelmaa. Pistokkeiden säätämiseen käytetään pientä kaukosäädinta jolla säädetään pistoke päälle ja pois. Muiden valmistajien käyttämiä pistokkeita voi myös käyttää, mutta en osaa sanoa kuinka se vaikuttaa Arduinon koodiin. Nexan pistokkeiden kanssa ainoa konkreettinen ongelma on se etteivät yksiköt mahdu rinnakkain tavalliseen viisipaikkaiseen jatkojohtoon, jossa sähköpistokkeet ovat viistosti. Nexa-pistokkeiden numerointi alkaa nollasta, joten ensimmäinen yksikkö on numero 0, toinen 1 ja kolmas 2.

Muut komponentit

Olen hankkinut käytännössä kaikki komponentit (Arduinon mukaanlukien) kiinalaiselta aliexpress.com sivustolta. Myös kiinalainen DX.com ja sen eurooppalainen liike DX.eu myy kaikenlaista. Yksikään komponentti ei ollut kallis, muutaman euron luokkaa. Myös tuotteiden saatavuus on hyvä, enkä käyttänyt liian eksoottisia tai ylihintaisia tuotteita. En edusta tai mainosta mitään edellämainittua sivustoa, eikä minulla ole mitään kytköstä näihin sivustoihin muutenkaan. Mikäli moderaattorit kuitenkin kokevat, että ulkomaisten kauppojen mainostaminen on vastoin foorumin sääntöjä, toivon että muokkaatte viestiä haluamallanne tavalla.

Kannattaa käyttää sellaisia moduuleja, jotka ovat valmiiksi asennettu omalle piirilevylleen (löytyy mm. hakusanoilla keyes module). Moduuleihin on usein myös asennettu valmiiksi tarvittavat piikkirimat ja vastukset ja muut komponentit.

Projektinkannalta välttämättömät osat ovat Arduino, Nexa-pistokkeet sekä kaukosäädin, Radiolähetin ja -vastaanotin, sekä kellomoduuli. Kytkennässä käytn itse protolevyä (breadboard) sekä uros-naaras hyppylankaa (female to male jumpwire). Protolevyjä löytyy eri kokoisia, Tässä projektissa käyttämäni protolevy on jopa aavistuksen liian suuri, sillä pienemmälläkin olisi pärjännyt. Pienempi protolevy menee luonnollisesti pienempään tilaan, joten ohjausyksikön koteloiminen on helpompaa. Reikälevyn käyttö on myös mahdollista, mutta se vaatii kolvaamista.  DHT-anturi ja LCD-näyttö ovat vaihtoehtoisia, mutta mukavia ja käytännöllisiä lisäosia.

RTC- (real time clock) kellomoduuli. Käyttämäni DS1302 moduuli oli huonolaatuinen. Se ei kestänyt käytössä kuin pari viikkoa joten suosittelen hankkimaan jonkin laadukkaamman. Aina on mahdollista, että moduuli toimii moitteettomasti mutta olen törmännyt muihinkin, jotka ovat joutuneet tekemaan DS1302:n töitä, jotta sen saa toimimaan. Toinen vaihtoetho on käyttää jotain muuta kellomoduulia, kuten esim DS3231, jonka pitäisi olla tarkempi.

433 MHZ vastaanotin (reciever, RX) ja lähetin (transmitter, TX). Vastaanottimella luetaan Nexa-kaukosäätimen sarjanumero ja lähettimellä imitoidaan kaukosäätimen komentoja. Kerrassaan nerokasta. Lähetin ja vastaanotin maksavat kiinasta tilattuna kaksi, kolme euroa. Vastaanotinta ei tarvitse käyttää kuin kerran, mutta lähetin sen sijaan on lähes  koko ajan käytössä. Lähettimen saa toimimaan paremmin, mikäli siihen kiinnittää ~17 cm pitkän johdon antenniksi. Tämän pitäisi vahvistaa lähetettyä signaalia huomattavasti, jolloin ohjausyksikön voi sijoittaa jopa toiseen huoneeseen. Itselläni kasvatuslaatikko pulisee makuuhuoneessa ja ohjausyksikkö on näppärästi sohvan alla.

DHT11- ilmankosteus- ja lämpötila-anturi, (DHT11 temperature humidity sensor).
DHT22:ta voi myös käyttää. Tämä on DHT11:tä tarkempi eikä hintakaan ole merkittävästi kalliimpi. Koodiin pitää kuitenkin muistaa vaihtaa kohtaan " #define DHTTYPE DHT11 " " #define DHTTYPE DHT22", ilman heittomerkkejä.

LCD-näyttö, HD44780. Sinisillä ledeillä varustettu simppeli kaksirivinen nestekidenäyttö. Näyttää toistaiseksi vain lämpötilan ja kosteuden, mutta tähän saa helposti lisättyä vaikka kellonajan, valojakson kunkin hetken, ilmoituksen vesipumpun käynnistyksestä, virheilmoitukset ynnä muut. LCD vaatii toimiakseen 10 KOhmin potentiometrin. Tarkista tarkempi johdotus fritzing-kuvasta.

Virtajohto. Vaikka Arduino voi ottaa virtansa suoraan tietokoneen USB-paikasta, kannattaa investoida erilliseen virtajohtoon. Arduinon voi asentaa silloin käytännössä mihin tahansa, jossa on sähköpistoke. Muista ottaa kuitenkin huomioon lähettimen kantavuus!

Kokoonpano

Ennen varsinaista lähetinyksikön rakentamista täytyy lukea kaukosäätimen sarjanumero. Tämä tapahtuu kytkemällä vastaanottimen johdot arduinoon (+ johto arduinon 5v pinniin, gnd miinukseen ja data pin 12:n. Tämän jälkeen Arduinoon ladataan "AM-HRR3 receiver test"-koodi HomeEasy-sivustolta HomeEasy-sivustolta . Mikäli kaikki menee niinkuin pitää, 9600-serial monitoriin (ctrl+shift+m tai "Tools" -> "Serial monitor") pitäisi ilmestyä kaukosäätimen tietoja, kun sillä osoittaa vastaanotinta.

Muista ottaa sarjanumero talteen, tarvitset sitä myöhemmin! Sarjanumero on kahdeksan numeroinen numerosarja. Kun olet saanut sarjanumeron talteen, voit tyhjentää arduinon johdoista ja siirtyä rakentamaan lähetinyksikköä.


Arduino-lähettimen rakentaminen

Lähetinyksikön kokoonpano on suoraviivainen prosessi. Jokaisesta moduulista lähtee vähintään kolme johtoa, yksi +-johto (vcc), yksi --johto (GND) sekä data. Fritzing-kuvassa plussat ovat punaisia ja miinukset sinisiä. Datajohdot menevät Arduinoon ja plus- ja miinusjohdot protolevyyn. Datajohtojen paikan kanssa kannattaa olla tarkkana. Väärään paikkaan asennettuna moduuli toimii väärin tai ei lainkaan. Käyttämässäni koodissa RTC menee analog pin 4:n ja 5:n, DHT11 pin 7:n ja lähetin pin 6:n. LCD varaa pin numerot   2,3,4,5,11 ja 12.




Arduino käyttää kirjastoja (.h-päätteiset tiedostot). Valtaosa kirjastoista tulee Arduinon mukana automaattisesti, mutta hieman eksoottisempia kirjastoja joutuu etsimään muualta. Tähän olen koonnut ne kirjastot, jotka eivät löydy suoraan. Kirjastot siirretään /sketchbook/libraries/-kansioon pakattuna .zip-muotoon. GitHubista ladattaessa .zip-tiedoston perään tulee mukana (Kansion nimi)-master.zip häntä. Ongelma ratkeaa sillä että purat paketin, poistat puretusta kansiosta, tässä tapauksesa (Kansion nimi)-master, -master-hännän ja pakkaat kansion uudestaan haluamallasi nimellä, ja siirrät /sketchbook/libraries/ kansioon. Mikäli pakatussa kansiossa on -master liite, Arduino IDE ei tunnista kirjastoa. Uuden kansion saa näkyviin Arduino Idestä "Sketch"-välilehdetä, kohdasta "Import library" ja sieltä "Add library..."

Nexatransmitter.h

Arduinoon menevä Koodi

En ole itse kirjoittan kaikkea koodia, itse asiassa en oikeastaan edes osaa kirjoittaa koodia. Sen sijaan olen äpäröinyt sen monesta eri lähteestä. Olen pahoillani, etten osaa enää mainita kaikkia lähteitä, joista olen palaset kasannut. Kaikki lähteet ovat kuitenkin vapaasti verkosta löydettävissä, joten suurta copyright-loukkausta tässä tuskin on tapahtunut. Suurin kiitos menee serkulleni Samulille, joka koodasi moduulien metodit. Olen oluen tai pari velkaa.

Kun lähteinyksikkö on valmis, voit ladata koodin arduinoon. Helpoin tapa lienee copy-paste. Tarkastathan kuitenkin että sinulla on kaikki .h-päätteiset kirjastot käytössäsi. Muuten ohjelma herjaa virhekoodeja. Käyttämäni Arduino Ide on versio 1.06. Aikaisemmat versiot eivät välttämättä toimi.

Ennen koodin lataamista tee kuitenkin seuraavat muutokset: Kohtaan "NexaTransmitter remote(6, XXXXXXXX) vaihda x-kirjainten tilalle oman kaukosäätimesi numero.

Tuuletin menee ensimäiseen Nexa yksikköön, eli 0:n. Valot menevät kiinni toiseen, eli ykköseen, ja kastelu kolmanteen eli kakkoseen.

Koodi laittaa valot ja tuulettimen ja kastelun päälle kello 7 aamulla. Kastelu on päällä kolme kertaa päivässä päällä, kymmenen minuuttia kerrallaa, kello 7, 14 ja 20. Valot ja tuuletin sammuvat klo 22.

Voit muuttaa eri rutiinien ajankohtia "//this section is for controlling the nexa PE3 -relays" kohdan alapuolelta. Vaihtamalla "if (now.hour() == 7 && now.minute() == 0) {"-rivin numero 7 johonkin toiseen, valojen, kastelun ja tuuletuksen alkuaika muuttuu. Sama pätee muihin ajankohtiin. Vesipumpun käynnissäoloaikaa säädetään "// A method that first switches unit 2 (irrigation) on, waits 10 minutes // (or 600000 microseconds) and then switches it off
"
kohdan alapuolelta, "(delay(600000);" kohdasta. Aika esitetään millisekunteina, jolloin 600000 millisekuntia on 600 sekuntia, eli kymmenen minuuttia. Muuttamalla suluissa olevaa arvoa, muttuu kasteluajan pituus.
   

Parannusehdotukset

Projektia on mahdollista myös laajentaa. Seuraavat(mahdolliset) laajennusideat ovat kasteluveden lämpötilan, PH ja EC lukemien  tarkkailu, kasvatustilan LUX arvojen tarkkailu, mittareista tulevan datan kerääminen erilliseen tiedostoon ja tämän pohjalta erilaisten grafiikkojen piirtäminen, Raspberry Pi-mikrotietokoneen liittäminen projektiin, jolla kaikki arvoja voisi säätää puhelimella tai nettiselaimella. Vain taivas on rajana.
Projekti on ollut opettavainen muilla tavoilla. Olen joutunut miettimään asioiden toteutusta monelta eri kantilta ja olen yrityksen ja erehdyksen kautta päässyt tällaiseen lopputulokseen. Tämä ei tarkoita että oma toteutustapani olisi ainoa saati millään tavalla oikea. Toivon että projektini toimii kantorakettina omalle projektillesi.

edit: mikrosekunnit millisekunneiksi.

Valtola

Pikkuhuomiona, noiden kauko-ohjattavien pistorasioiden maksimikuorma on tyypillisesti resistiivistä. Nämä purkauslamput, monimetallit, natikat ja elohopeat eivät ole resistiivistä kuormaa. Esimerkiksi Rele ja rattaan Johdoton sarjan pistorasiakytkin 3500W (resistiivistä) ei kovin hyvin jaksa sytyttää 70W:sta monimetallivalaisinta.
Välillä toimii ja välillä ei. Muutamia on hajonnut minulla viiden vuoden aikana tuolla kuormalla, yksi paloi liekillä (Onneksi oltiin kotona...).
Vastaanottimessa pitää olla mekaaninen rele niin sitten toimii varmemmin. Tuosta Nexasta en muista miten on.

kyseessä siis tämä:
http://www.johdoton.fi/tuotteet/pko-3500

Muuten oikein mielenkiintoista luettavaa.

Jani M

Nuo halvat radio-ohjattavat jaksavat kyllä sytyttää natikan kuin natikan. Ongelma on se, ettei se enää lähde pois päältä, siellä sen verran jämysti hitsautuu kontaktipinnat toisiinsa. 250W esli rankaisee jo melko tylysti noita, puhumattakaan vielä tehokkaammista natikoista.

Ukkopaha

Mahtava ohje! Pienen asiavirheen löysin tosta loppupuolelta. Ei mikään kovin vakava, mutta kuitenkin :) 600000 mikrosekuntia on 600 millisekuntia, eli 0.6 sekuntia. Vai olenko ymmärtänyt jotakin väärin?

polte

Lainaus käyttäjältä: Ukkopaha - huhtikuu 23, 2015, 13:45:55 ip
Mahtava ohje! Pienen asiavirheen löysin tosta loppupuolelta. Ei mikään kovin vakava, mutta kuitenkin :) 600000 mikrosekuntia on 600 millisekuntia, eli 0.6 sekuntia. Vai olenko ymmärtänyt jotakin väärin?


Juu, oli typo. Kyse on koko ajan millisekunneista. Vaikka koodissa se on kirjoitettu väärin, pumppu on käynnissä noilla asetuksilla sen kymmenen minuuttia.

Hyvä huomio noiden suurempitehoisten lamppujen kanssa. Itse ajelen noilla teholediä 50w kuormalla, enkä ole huomannut mitään ongelmaa. Vesipumpussakin on tehoa hurjat 3 wattia.

ChIlIDoG

Lainaus käyttäjältä: Jani M - huhtikuu 23, 2015, 12:01:38 ip
Nuo halvat radio-ohjattavat jaksavat kyllä sytyttää natikan kuin natikan. Ongelma on se, ettei se enää lähde pois päältä, siellä sen verran jämysti hitsautuu kontaktipinnat toisiinsa. 250W esli rankaisee jo melko tylysti noita, puhumattakaan vielä tehokkaammista natikoista.


miten toimis SSR eli Solid-State-Relay? tosin silloin joutuu tekemisiin AC kytkentöjen kanssa.

Jani M

Lainaus käyttäjältä: ChIlIDoG - huhtikuu 23, 2015, 21:02:01 ip
Lainaus käyttäjältä: Jani M - huhtikuu 23, 2015, 12:01:38 ip
Nuo halvat radio-ohjattavat jaksavat kyllä sytyttää natikan kuin natikan. Ongelma on se, ettei se enää lähde pois päältä, siellä sen verran jämysti hitsautuu kontaktipinnat toisiinsa. 250W esli rankaisee jo melko tylysti noita, puhumattakaan vielä tehokkaammista natikoista.


miten toimis SSR eli Solid-State-Relay? tosin silloin joutuu tekemisiin AC kytkentöjen kanssa.


Voihan sitä tosiaan käyttää ihan normaaleita välireleitä, pyytää vaikka sähkömiestä kytkemään johonkin pienehköön kytkentäkaappiin. Esim: http://www.sahkonumerot.fi/2707055

tkff

LainausKokoonpano

Ennen varsinaista lähetinyksikön rakentamista täytyy lukea kaukosäätimen sarjanumero. Tämä tapahtuu kytkemällä vastaanottimen johdot arduinoon (+ johto arduinon 5v pinniin, gnd miinukseen ja data pin 12:n. Tämän jälkeen Arduinoon ladataan "AM-HRR3 receiver test"-koodi HomeEasy-sivustolta HomeEasy-sivustolta . Mikäli kaikki menee niinkuin pitää, 9600-serial monitoriin (ctrl+shift+m tai "Tools" -> "Serial monitor") pitäisi ilmestyä kaukosäätimen tietoja, kun sillä osoittaa vastaanotinta.

Muista ottaa sarjanumero talteen, tarvitset sitä myöhemmin! Sarjanumero on kahdeksan numeroinen numerosarja. Kun olet saanut sarjanumeron talteen, voit tyhjentää arduinon johdoista ja siirtyä rakentamaan lähetinyksikköä.


Helpottaakseen kaikkien rakentelua niin tämän vaiheen voi surutta jättää väliin täysin turhana. Jokainen nexa pistoke toimii jokaisen kaukkarin kanssa, joten voit keksiä tuon koodin ihan itse. Tuo koodikun ohjelmoidaan jokaiselle rasialle sen käyttöön otossa. Eli sen voi tehdä suoraan arduinosta.

SSR toimii jos sen mitoittaa oikein, oikean kokosen hinta vain on niin karmea ettei kannata (+50€). Suosittelen suoraan kontaktoria tuohon ohjaukseen.

-Tomi-

ps. olisi muutama tuollainen dpdt 30a kontaktori tarjolla jos tarvetta

polte

Lainaus käyttäjältä: tkff - huhtikuu 24, 2015, 11:03:43 ap
Helpottaakseen kaikkien rakentelua niin tämän vaiheen voi surutta jättää väliin täysin turhana. Jokainen nexa pistoke toimii jokaisen kaukkarin kanssa, joten voit keksiä tuon koodin ihan itse. Tuo koodikun ohjelmoidaan jokaiselle rasialle sen käyttöön otossa. Eli sen voi tehdä suoraan arduinosta.


Tosi hienoa, jos olet saanut tuon toimimaan ilman vastaanotinta  :)! Kuten sanoit, se helpottaa kaikkien rakentelua. Itse en saanut niin tehtyä kokeilusta huolimatta. Onko se täysin turha vaihe, en osaa sanoa. Itse sain sekä arduinon, että Nexa-kaukosäätimen toimimaan tuolla tavalla ja kirjoitin ohjeet niin yksityiskohtaisesti kuin mahdollista, pyrkien välttämään mahdollisia sudenkuoppia joita rakentelussa väistämättä tulee. Huomasin jossain vaiheessa, että toimiva kaukosäädin oli hyvä olla olemassa, ainakin silloin kun RTC levisi ja vesipumppu ja valo lakkasivat toimimasta. Jos nexoja on enemmän kuin kolme, uskoisin että kuvaamallasi tavalla ne saisi kytkettyä ilman säädintä.

Toivon lisää parannusehdotuksia, kommentointia ja osaavampien kontribuutiota. Oma osaamiseni on vielä rajallista ja tarkoituksena on parantaa laitteen toimivuutta (joka toistaiseksi on ollut positiivinen yllätys) ja korjata mahdollisesti esiintyviä virheitä.

-Sakari