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
Megjegyzések
Megjegyzés küldése