Talajnedvesség mérés Arduinoval

 

8. Projekt --Talajnedvesség mérés -- V1.0

by Roboworld Hobbielektronika


Rövid leírás:
Ebben a rövid projektben bemutatjuk neked a talajnedvesség mérő működését, hogy kerted, növényed „szólhasson” mikor szomjas. A talajnedvesség mérőnk lényegében egy analóg kimenetű szenzor, amelynek 3 pinje van. A VCC vagyis a tápfeszültség, GND (Ground) föld. és SIG, mint Signal vagyis a jel, amelyen az adatokat közvetíti számunkra.

Hardware:
1 db Arduino Uno
1 db Talajnedvesség érzékelő
3 db Jumper kábel

Kapcsolási rajz: 
 
                                                                    5V – VCC
                                                                    GND – GND
                                                                    A0 - SIG
A SIG pin biztosítja számunkra az analóg kimenetet, amelyet hozzácsatolhatod bármelyik mikrokontroller ADC pinjére. Fontos megemlíteni, hogy a SIG-ről érkező érték függ attól, hogy milyen feszültségen használjuk a szenzorunkat (3.3V- 5V –os tartományban ajánljuk). A két érzékelő láb lényegében egy változó ellenállásként funkcionál. Minél több víz van a talajban, annál nagyobb a vezetési képessége a szenzornak, vagyis csökken az ellenállása és nagy SIG kimeneti értéket eredményez. Fontos még megemlíteni, hogy ezek a szenzorok, nagyon érzékenyek az időjárás okozta változásokra, így amennyiben a szabad ég alatt használod úgy érdemes az SMD részeket gyantával bevonni.,de a ragasztó pisztolyban lévő patronnal bevonva is megállja a helyét. Továbbá folyamatos üzem esetén a melegedés hatására fals értékeket adhat. Ezt úgy tudjuk kiküszöbölni, hogy csak akkor kapcsoljuk be a szenzort amikor épp mérünk, ezzel növelve az élettartamát. A kapcsoláson ezért is van a D7-es pinre kötve a szenzor VCC pinje.


Szenzor kalibrálása.

Ahhoz, hogy a szenzorunk megfelelő értékeket szolgáltasson számunkra kalibrálásra van szükség. A különböző talaj típus hatással van a szenzorra és emiatt különböző értékeket kaphatsz, tehát a kalibrálás úgymond elengedhetetlen. Ahhoz, hogy használható értékeket kapjunk megkell tudunk azt, hogy mekkora a minimum és a maximum értéke a talajnedvesség szenzornak.


Kalibrálás menete, minimum érték meghatározása:

1. Töltsd fel az Arduinora a mintakódot
2. Nyisd meg a Serial Monitort
3. Olvasd le a “Szenzor ertek:”-nél, hogy mi a szám. Ekkor megkaptad a minimum értéket, ami 0.

A maximum érték meghatározásához már több minden kell. Ahogy már korábban említettem a szenzor értéke függ, hogy mekkora tápfeszültséggel tápláltuk meg. Esetünkben 5V a tápfeszültség.

Kalibrálás menete, maximum érték meghatározása:

1. Töltsd fel az Arduinora a mintakódot ( Ha már feltöltötted akkor ugorj a 2. pontra)
2. Nyisd meg a Serial Monitort
3. Helyezd a szenzorod két lábát egy vízzel teletöltött pohárba.(Figyelem! Csak a szürke részét a szenzornak)
4. Olvasd le a Serial Monitoron a kapott Szenzor értéket. Esetünkben ez az érték 700.

Mivel mostmár megvan a minimum és a maximum érték, nincs más hátra mint a programban is megadni ezeket az értékeket.

A map funkcióban írd be a két értéket a képen látható módon, majd töltsd fel újra a programodat az Arduinora. Ezzel a kalibrálás megtörtént.

A kapcsolásunk mérésre kész, nincs más dolgod, mint a talajba belehelyezni szenzort és figyelni, hogy mikor is szomjas a növényed

Programozás

int szenzorPin = A0;            // A0 -pinől veszi a szenzor SIG pinjéről a jelet. 
int szenzorErtek = 0;           //kezdeti értékek definiálása. 
int szazalek = 0;               // 
int tap=7; 
void setup() { 
Serial.begin(9600);             //Soros kommunikáció beállítása 
} 

// Program kezdete 

void loop() { 

digitalWrite(tap, HIGH);                  //kapcsol D7 "Be" 
delay(10);                                //Vár 10 ms 
szenzorErtek = analogRead(szenzorPin);    //Beolvassa a szenzor értéket az analóg (SIG) lábról. 
digitalWrite(tap, LOW);                   //kapcsol D7 "Ki" 
szazalek = konvertalszazalekba(szenzorErtek); // Konvertálja százalékba a szenzor értékét. 
ertekekaSerialra();                           // Kiírja a Serial monitorra az értéket. 
delay(1000);                                  // Vár 1 mp-t 
} 

int konvertalszazalekba(int value) 
{ 
int szazalekErtek = 0; //szazalekErtek 
szazalekErtek = map(value, 0, 700, 0, 100);  //A kalibrálásból kiderült, hogy a szenzorunk minimuma 0,maximuma 700. Ennek tudatában ezt a 0-700 szakaszt 
                                             //0-100-as szakaszra osztja, ezáltal legenerálva a %-os //értéket.  
return szazalekErtek; 
} 

void ertekekaSerialra()        // Ez a subrutin felel azért hogy a Serial Monitoron jelenjenek meg 
                              //az információk. 
{ 

Serial.print("\n\nAnalog ertek: ");        // Kiírja hogy "Analóg érték" 
Serial.print(szenzorErtek);                // Kiírja a pillanatnyi szenzor által mért értéket 
Serial.print("\nSzazalek: ");              // Kiírja hogy "Szazalek" 
Serial.print(szazalek);                    // Kiírja a pillanatnyi %-os értéket 
Serial.print("%");                         // Kiírja % szimbólumot 
} 

Letöltés
A projekthez tartozó linkek alább találhatóak.
A leírás PDF-ben: Itt található

 

Megjegyzések