perjantai 11. elokuuta 2017

Tarvitsevatkohan kasvini kastelua?

Seuraava kokeiluni oli todella kiva projekti! Laitoin kasvin multaan maaperänkosteussensorin, joka mittasi mullan kosteutta. Mikäli multa oli liian kuivaa, ledi valoi punaisena ja ohjelma tulosti tekstiä "Time to water your plant". Mikäli multa oli tarpeeksi kosteaa, ledi paloi vihreänä, ja ohjelma tulosti tekstiä "Doesn't need watering". Se oli helppo tehdä ohjeita seuraamalla, ja lopputulos näytti tältä:



Miten päädyin kyseiseen lopputulokseen? Minun oli ollut tarkoitus jo pitkään rakentaa automaattinen kastelujärjestelmä, joten teki mieli kokeilla ensin pelkästään mullan kosteuden mittaamista maaperänkosteussensorilla. Päädyin testailemaan kahta eri projektia, joista toisen esittelin yllä, ja se on mielestäni parempi. Ensimmäisen projektin lopputulos oli mielestäni hieman epätarkka, eikä se sisältänyt kivoja ledejä!

Projekti 1


Katsoin Make: Sensors kirjasta, olisiko siinä neuvoja kasvin mullan kosteuden mittaamiseen, ja olihan siinä! Kirjassa kerrottiin, että normaali hanavesi ja maaperän vesi sisältävät liuenneita suoloja ja muita materiaaleja, mikä tekee vedestä sähköä johtavan. Maaperänkosteussensorit mittaavat kyseistä sähkönjohtavuutta. Mutta minun kosteussensorini näyttivät erilaisilta kuin kirjassa:


Kirjan sensoriin ei kuulunut elektronista osaa, toisin kuin minun sensoreihini. Lisäksi sensorini numerointi oli erilainen kuin kirjassa. Minun sensorini oli nimeltään YL-69, kun taas kirjassa sensori oli  nimeltään FC-28.



No, kirjan kytkentäkaaviosta ei olisi apua, koska ne on tehty sensorille, joka liitetään vain Arduinoon. Päätin etsiä netistä ohjeita, jotka sopisivat minun varusteisiini. Törmäsin create.arduino.cc:n sivuilla ohjeeseen, jossa on käytetty samaa sensoria ja sen mukana tulleeseen elektronista osaa, jotka minullakin ovat. Jee! Elektroninen osa on nimeltään YL-39 ja suluissa kerrottiin sen olevan "logic", minkä arvelen viittaavaan siihen, että osa voisi olla looginen piiri. Arvelen, että looginen piiri muuttaa sensorin tiedot Arduinolle luettavaan muotoon binääriluvuiksi. Kävin viime vuonna hieman kurssia "Tietokoneen rakenne ja arkkitehtuuri", mutten saanut käytyä sitä kovin pitkälle. Tänä vuonna uudestaan!

Luin projektin kytkentäkaavion Fritzing -ohjelmalla. Sillä voi testailla erilaisia kytkentöjä, kätevää! Kytkentäkaavio (ja Fritzing-ohjelma) on tämän näköinen:


Ongelmana oli, että sekä sensorien mukana tulleet johdot että arduinon nastojen kytkentäkohdat olivat naaras-tyyppiä (punaiset ympyrät kuvassa). Jotta Arduinon nastaan voisi kytkeä johdon, sen tulisi olla koiras-tyyppiä (turkoosi ympyrä kuvassa). YL-39:n nastat puolestaan ovat koiras-tyyppiä, joten niihin tulee liittää naaras-tyyppinen johto. En siis voinut liittää omaa koiras-johtoani Arduinosta YL-39:iin, koska siihen tarvitaan naaras-päätteinen johto.


Päätin liittää koiras-johdon Arduinoon ja myös naaras-johtoon. Naaras-johto sopisi sitten YL-39:iin. Ehkä tuollainen johtojen yhdistely on jokin yleinen käytäntö elektroniikassa, tai sitten on olemassa jotain adaptereita, en tiedä kun ei ole kokemusta. Mutta kokemusta onneksi koko ajan kertyy! Testaamisvaiheessa näkisi, toimiiko tuollainen. Tosin miksei toimisi?

 

Tällainen kytkennästä tuli!


Sitten vain koodin lataus samalta sivulta kuin ohjekin eli osoitteesta https://create.arduino.cc/projecthub/nekhbet/using-the-yl-39-yl-69-soil-humidity-sensor-with-arduino-968268. Luin muuten tänään uudesta kirjastani Exploring Arduino - Tools and techniques for engineering wizardy (kirjoittanut Jeremy Blum) Arduinon koodaamisesta. Tiedän nyt siis tarkemmin, mitä alla olevassakin koodissa on tehty! Kirjoitan Arduinon koodaamisesta myöhemmin. Kirja vaikuttaa muuten todella loistavalta!

// YL-39 + YL-69 humidity sensor
byte humidity_sensor_pin = A1;
byte humidity_sensor_vcc = 6;

void setup() {
  // Init the humidity sensor board
  pinMode(humidity_sensor_vcc, OUTPUT);
  digitalWrite(humidity_sensor_vcc, LOW);

  // Setup Serial
  while (!Serial);
  delay(1000);
  Serial.begin(9600);
}

int read_humidity_sensor() {
  digitalWrite(humidity_sensor_vcc, HIGH);
  delay(500);
  int value = analogRead(humidity_sensor_pin);
  digitalWrite(humidity_sensor_vcc, LOW);
  return 1023 - value;
}

void loop() {
  Serial.print("Humidity Level (0-1023): ");
  Serial.println(read_humidity_sensor()); 
  delay(10000);
}

Sitten laitoin vain sensorin multaan, ja valmista tuli! 


Johtoviritelmäni toimi! Aluksi ohjelman tulostus ei näyttänyt mitään, mutta muistin ultraäänisensorikokeilusta, että pitää valita oikea baudi. Tässä se oli 96000, joten valitsin sen. O-ou, kasvini multa näytti melko kuivalta! Sen arvo oli vain 20 väliltä 0 ja 1023!


Päätin kokeilla ohjesivuston kommenteissa kerrotua juttua, eli sensorin kastamista vesilasiin.


Mutta hetkinen, kosteusarvo näytti vain noin viittäsataa. Mikäli vedessä ollessaan kosteusarvo ei ole maksimissaan eli 1023, niin milloin sitten? Onkohan tässä asetelmassa tai koodissa jotain vikaa? Vai johtuukohan tulos kraanaveden ominaisuuksista, jos jotkin tekijät vaikuttavat sen sähkönjohtokykyyn? En halunnut vielä kastella kasviani, koska halusin kokeilla toisenlaistakin projektia, joten en tiedä, paljonko kosteusarvo olisi ollut märällä mullalla. Päivitän tänne sitten, jos joskus kokeilen! Hmm, mittausta olisi mielenkiintoista kokeilla myös esimerkiksi kivennäisvedellä, maaperän vedellä ja sadevedellä.


Projekti 2


Halusin kokeilla myös toisenlaista projektia kasvien mullan kosteuden mittaamiseksi, koska en ollut varma, oliko ensimmäinen kokeiluni onnistunut. Tämä projekti vaikutti kivalta! Siinä käytettäisiin myös koekytkentälevyä ja ledejä. Tarvitsin projektiin Arduinon, kosteussensorin ja sen elektronisen osan lisäksi siis myös koekytkentälevyn, kaksi lediä, kaksi 220 ohmin vastusta sekä johtoja.



Kytkentäkaavio näytti tältä:




Ja tällainen se oli minun tekemänäni:




Latasin ohjeen sivulta eli osoitteesta https://randomnerdtutorials.com/guide-for-soil-moisture-sensor-yl-69-or-hl-69-with-the-arduino/ koodin, joka näytti tältä:



Pistin sensorin kasvin multaan (keltainen nuoli), latasin koodin Arduinolle ja katsoin, mitä tapahtuu!



Jee, olipas kivaa! Punainen ledi paloi, ja ohjelma tulosti tekstiä joka kertoi, että kasvini tarvitsee kastelua. Tai no, ei se kasvini kannalta ollut kivaa, anteeksi :(





No, ei kasvini välttämättä oikeasti kärsinyt. Raja-arvon, jossa ledi muuttuu punaiseksi, voi itse määrittää. Se pitäis määrittää kasvilajin mukaan, eli paljon vettä tarvitsevilla lajeilla raja olisi erilainen kuin kuivan kasvupaikan lajeilla. Sivulla sanotaan, että sensorissa on potentiometri (säädettävä vastus), jonka avulla sensorin herkkyyttä voisi säädellä. En vielä kokeillut sitä. En ole itseasiassa vielä kokeillut lainkaan potentiometriä! Ehkä käytän sitä seuraavassa projektissani. Miksihän sivuilla sanotaan, että kuivalla maaperällä on suurempi jännitteen ulostulo (output) kuin märällä? Luulisi, että märässä maaperässä olisi enemmän vettä, jolloin siinä olisi enemmän liuenneita suoloja jotka johtavat sähköä.

No, oli aika ryhtyä kasvin pelastustoimiin! Kutsuin hätiin norsuapurini, joka ruiskutti kasville vettä. Katsokaa, miten uutterana hän ahertaa, kun tietää toisen olevan hädässä <3 


Jippii, elvytystoimet auttoivat! Nyt vihreä ledi syttyi ja ohjelma tulosti tekstiä joka kertoi, ettei kasvini tarvitse kastelua! Kiitos norsu avustasi <3



Sensorin pitäisi tosin yltää syvemmälle, jos haluaisin tietää kasvini todellisen kastelutarpeen. Pienet sensorit kertovat isojen ruukkujen mullan kosteuden vain pinnasta mitattuna, kun taas kasvin juuret ovat syvällä. Eri sivuilla myös kerrottiin tai oltiin kommentoitu, että jos sensoria pitää toiminnassa pitkään, korroosio tuhoaa sen. Ehkä siihen on olemassa jo jokin ratkaisu, pitää ottaa selvää! Mutta pääasia on, että kasvini on nyt onnellinen. Loppu hyvin, kaikki hyvin.

Ei kommentteja:

Lähetä kommentti