Cum sa faci o floare sa te traga de maneca atunci cand ai uitat sa o uzi

Autor: Viorel -21/04/2011-

Evident, cu Arduino :)


Principiul de baza este simplu, chiar foarte simplu. Doar fire conductoare introduse in pamanul din ghiveci formeaza un rezistor variabil, a carui rezistenta variaza in functie de umiditatea pamantului. Acest rezistor variabil este conectat intr-o configuratie de divizor de tensiune, iar Arduino culege o tensiune proportionala cu rezistenta dintre fire, si implicit cu umiditatea din ghivechi. Mai departe, sky is the limit :)

Eu am folosit doar un simplu led care se aprinde, ca sa ilustrez principiul, dar se pot imagina o multitudine de interactiuni in zona asta. Doar cateva exemple ar fi un SMS (“Iar ai uitat sa ma uzi dimineata, idiotule !” – semnat “Floricica”), un email primit tot de la “Floricica”, sau chiar apel de voce folosind un shield GSM.

Am inceput prin a taia o bucata de PCB dublu strat (fiecare strat de cupru reprezinta un conductor, corect ?), pe care am lipit doua fire (cate un fir pe fiecare parte de cablaj), l-am infipt in pamantul din ghiveci si i-am masurat rezistenta cu pamantul ud si cu pamantul uscat (asta ca sa imi dau seama de ce rezistor am nevoie pentru a realiza divizorul de tensiune). Am gasit valori intre 10 KiloOhm si 100 de KiloOhm, asa ca m-am hotarat ca un rezistor de 30 de KiloOhm ar fi bun pentru ceea ce am nevoie.

Schema montajului este cea de mai jos. Cuprinde un Arduino, un rezistor fix de 30 KOhm, un rezistor variabil (format din placa de PCB introdusa in ghiveci), si un led.



Codul sursa este si el foarte simplu. Atunci cand rezistenta masurata intre cele doua fire introduse in ghiveci scade sub o anumita valoarea (pe care o stabilesti tu prin teste repetate, in functie de distanta intre fire si de cata umiditate are nevoie planta), led-ul se aprinde.



const int VAL_PROBE = 0; // Analog pin 0
const int UMIDITATE_NIVEL = 250; // Valoarea dupa care se "declanseaza" led-ul 

void setup() {
  	Serial.begin(9600);
}

void LedState(int state) {
  	digitalWrite(13, state);
}

void loop() {
	int umiditate = analogRead(VAL_PROBE);

	Serial.println(umiditate);

	if(umiditate > UMIDITATE_NIVEL) {
		LedState(HIGH);
	} else   {
	    LedState(LOW);
	}
  	delay(100);
}


Ceva neclar in articolul de mai sus ? Ai vrea sa discuti cu cineva despre proiectul tau ? Vino in fiecare marti seara de la ora 19:00 la Intalnirea Tehnorama, sau ne poti contacta direct.
Vezi aici detalii complete.

Despre... Viorel

Acest autor a publicat 128 articole.

Share

FacebookTwitterEmailWindows LiveTechnoratiDeliciousDiggStumbleponMyspaceLikedin

Comentarii


alexandru iovanovici
April 21st, 2011

foarte asemanator cu http://www.botanicalls.com/archived_kits/twitter/
o varianta ar fi sa il legi cu o pompa gen din aia de parbriz de masina si sa uzi direct planta :)


Cristian Buzatu
December 7th, 2011

Schema este gresita.
Intrarea analogica 0 este legata permanent la masa deci analogRead(VAL_PROBE)=0 in orice conditii de umiditate in sol.


Viorel Spinu
December 8th, 2011

@Cristian Buzatu Ai dreptate :) Pinul analogic 0 ar fi trebuit legat inainte de ghiveci, imediat dupa rezistor, si dupa ghiveci asa cum l-am pus eu.


George
February 14th, 2012

Doar pentru siguranta puteti pune un update cu circuitul corect?


Viorel
February 15th, 2012

Salut George, am actualizat circuitul corect.

Viorel


Cristian
February 19th, 2012

Am un sistem de irigare care foloseste o pompa de acvariu ca sa circule apa prin tevi gaurite inapoi in bazinul de unde a luat-o. Arduino mi-ar putea porni sistemul doar atunci cand este nevoie. Acum folosesc un dispozitiv programabil la priza, care uda de doua ori pe zi, cate 15 min, dar nu sunt prea fascinat de el, de-oarece nu tine cont de umiditatea solului.

Super tutorialu, mersi!

Trimite un comentariu