Sunteți pe pagina 1din 10

Textul si imaginile din acest document sunt licentiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND
Codul sursa din acest document este licentiat
Public-Domain
Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website / blog, printare,
sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document
poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
Arduino senzor de umiditate pentru plante
In acest tutorial vei descoperi cum se poate programa o placa Arduino sa citeasca si sa afiseze,
printr-o matrice de led-uri, nivelul de umiditate din solul unei plante. Astfel, poti afla rapid daca planta
are nevoie de apa sau nu.
Daca planta are nevoie de apa, atunci matricea de led-uri va desena o expresie umana care
indica tristetea, iar daca planta are suficienta apa atunci expresia umana va fi fericita.
In ultima instanta, daca planta duce lipsa majora de apa, matricea va desena o figura moarta.
Pentru a realiza acest montaj vei avea nevoie de urmatoarele componente:
placa Arduino - !ttp:""###.ro$ofun.ro"arduino
matrice de led-uri %x% - !ttp:""###.ro$ofun.ro"electronice"led"matrice-leduri-%x%
&n senzor de umiditate pe care il vei construi singur.
'ire de conexiune diverse - !ttp:""###.ro$ofun.ro"ca$luri
Cum se conecteaza matricea de led-uri ?
(atricea de led-uri se conecteaza direct la porturile placii Arduino. Iti recomand totusi sa
conectezi cate un rezistor de ))* de o!mi in serie cu fiecare coloana a matricei. In felul asta vei proteja
porturile placii in eventualitatea unui scurt circuit.
&rmeaza diagrama de mai jos.
http://www.robofun.ro/forum
Cum se construieste senzorul de umiditate ?
Principiul de functionare al senzorului este simplu. +ei avea nevoie de , conductoare pe care le
vei infige direct in pamantul din g!iveci. Conductoarele formeaza un rezistor a carei rezistenta variaza
in functie de umiditatea pamantului.
Ca si conductoare poti folosi o placuta de ca$laj du$lu strat. 'iecare strat de cupru se comporta
ca un electrod.
http://www.robofun.ro/forum
Pe langa acest rezistor vei mai avea nevoie de un rezistor secundar pe care il vei determina si va
avea o valoare fixa. +ei conecta cele , rezistoare in configuratie de divizor de tensiune.
In primul rand vei masura rezistenta dintre cele , conductoare atunci cand pamantul este uscat
si cand este ud. In cazul de fata s-au masurat valori cuprinse intre -* si -** ./. Pentru rezistorul fix o
valoare de )* ./ este o..
0copul placii Arduino este sa culeaga tensiunea de pe rezistorul varia$il 1senzorul de umiditate2.
Divizorul de tensiune este un senzor a carui iesire este liniara cu marimea de intrare, adica umiditatea.
Cu acest avantaj placa Arduino poate determina simplu si rapid, fara calcule necesare, care este
nivelul de umiditate din pamant.
(ai jos este diagrama senzorului de umiditate.
http://www.robofun.ro/forum
Sketch-ul pentru afisarea umiditatii ?
Tot ce iti ramane este sa incarci s.etc!-ul listat mai jos. Il copiezi cu Cop3"Paste si il incarci
direct in placa Arduino. Dupa cateva momente, matricea va afisa starea plantei in functie de nivelul de
umiditate din sol. Daca nivelul este suficient de mare, matricea iti va indica aceasta stare printr-o
expresie fericita. Daca nivelul este mediu sau scazut, expresiile se vor sc!im$a.
http://www.robofun.ro/forum
http://www.robofun.ro/forum
#include <FrequencyTimer2.h>
#define SAD { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 1, 1, 1, 1, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0} \
}
#define HA! { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 0, 1, 1, 1, 1, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0} \
}
http://www.robofun.ro/forum
#define "#H { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 1, 1, 0, 0, 1, 1, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0} \
}
#define D#AD { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{1, 0, 1, 0, 0, 1, 0, 1}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{1, 0, 1, 0, 0, 1, 0, 1}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{1, 0, 0, 0, 0, 0, 0, 1} \
}
$y%e c&l ' 0(
$y%e led)*+,*+,(
-- .in*//, &n led m0%ri/ c&nnec%ed %& nn &n Arduin& 121 i) dummy %&
m03e 0rr0y )%0r% 0% .&) 14
in% .in)*15,' {21, 6, 7, 8, 2, 17, 16, 19, 15, 18, 12, 11, 10, :,
+, 5, 9}(
-- c&l*//, &f led) ' .in yy &n led m0%ri/
in% c&l)*+, ' {.in)*18,, .in)*8,, .in)*7,, .in)*10,, .in)*09,,
.in)*11,, .in)*16,, .in)*19,}(
-- r&;*//, &f led) ' .in yy &n led m0%ri/
in% r&;)*+, ' {.in)*:,, .in)*17,, .in)*+,, .in)*12,, .in)*1,,
.in)*5,, .in)*2,, .in)*6,}(
c&n)% in% num0%%ern) ' 9(
$y%e .0%%ern)*num0%%ern),*+,*+, ' {
HA!, "#H, SAD, D#AD
}(
in% .0%%ern ' 0(
http://www.robofun.ro/forum
<&id )e%u.14 {
Seri0l.$e=in1:9004(
-- )e%) %he .in) 0) &u%.u%
f&r 1in% i ' 1( i <' 19( i>>4 {
.in"&de1.in)*i,, ?@T@T4(
}
-- )e% u. c&l) 0nd r&;)
f&r 1in% i ' 1( i <' +( i>>4 {
di=i%0lAri%e1c&l)*i 2 1,, B?A4(
}
f&r 1in% i ' 1( i <' +( i>>4 {
di=i%0lAri%e1r&;)*i 2 1,, B?A4(
}
cle0rBed)14(
-- Turn &ff %&==lin= &f .in 11
FrequencyTimer2CCdi)0$le14(
-- Se% refre)h r0%e 1in%erru.% %ime&u% .eri&d4
FrequencyTimer2CC)e%eri&d120004(
-- Se% in%erru.% r&u%ine %& $e c0lled
FrequencyTimer2CC)e%?n?<erfl&;1di).l0y4(
)e%0%%ern1.0%%ern4(
}
<&id l&&.14 {
in% .r0=@midi%0%eSu.eri&r ' 500(
in% .r0=@midi%0%e"ediu ' 600(
in% .r0=@midi%0%eDnferi&r ' 800(

in% ni<el@midi%0%e ' 0n0l&=Ee0d164(

Seri0l..rin%ln1ni<el@midi%0%e4(
if 1ni<el@midi%0%e > .r0=@midi%0%eSu.eri&r4 {
)e%0%%ern104( -- h0..y f0ce
} el)e if 1ni<el@midi%0%e < .r0=@midi%0%eSu.eri&r FF
ni<el@midi%0%e > .r0=@midi%0%e"ediu4 {
)e%0%%ern114( -- meh f0ce
} el)e if 1ni<el@midi%0%e < .r0=@midi%0%e"ediu FF
ni<el@midi%0%e > .r0=@midi%0%eDnferi&r4 {
)e%0%%ern124( -- )0d f0ce
} el)e if 1ni<el@midi%0%e < .r0=@midi%0%eDnferi&r4 {
)e%0%%ern184( -- de0d f0ce
}

http://www.robofun.ro/forum
del0y110004(
}
<&id cle0rBed)14 {
-- Gle0r di).l0y 0rr0y
f&r 1in% i ' 0( i < +( i>>4 {
f&r 1in% H ' 0( H < +( H>>4 {
led)*i,*H, ' 0(
}
}
}
<&id )e%0%%ern1in% .0%%ern4 {
f&r 1in% i ' 0( i < +( i>>4 {
f&r 1in% H ' 0( H < +( H>>4 {
led)*i,*H, ' .0%%ern)*.0%%ern,*i,*H,(
}
}
}
-- Dn%erru.% r&u%ine
<&id di).l0y14 {
di=i%0lAri%e1c&l)*c&l,, B?A4( -- Turn ;h&le .re<i&u) c&lumn &ff
c&l>>(
if 1c&l '' +4 {
c&l ' 0(
}
f&r 1in% r&; ' 0( r&; < +( r&;>>4 {
if 1led)*c&l,*5 2 r&;, '' 14 {
di=i%0lAri%e1r&;)*r&;,, B?A4( -- Turn &n %hi) led
}
el)e {
di=i%0lAri%e1r&;)*r&;,, HDIH4( -- Turn &ff %hi) led
}
}
di=i%0lAri%e1c&l)*c&l,, HDIH4( -- Turn ;h&le c&lumn &n 0% &nce
1f&r equ0l li=h%in= %ime)4
}
http://www.robofun.ro/forum

S-ar putea să vă placă și