Sunteți pe pagina 1din 8

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 ud ghivecele cu flori

Se dau: o problem cotidian foarte des ntlnit i o


mulime de soluii pariale ce nu rezolv niciodat
problema propriu-zis. Cam aa se poate rezuma
problema implementrii unui sistem bazat pe placa de
dezvoltare Arduino Uno ce permite automatizarea
procesului de udare a ghivecelor cu flori. Majoritatea
exemplelor existente permit msurarea umiditii din sol
dar nu implementeaz i partea de acionare propriu-zis
mulumindu-se s te trag de mnec cnd trebuie s
uzi florile sau s-i trimit un email de atenionare .
Lecia de fa i propune s implementeze o soluie
complet (achiziie plus acionare) ajutnd astfel pe
oricine s-i permit s uite s ude florile fr a le pune
n pericol.

Componentele utilizate de sistem sunt foarte comune facilitnd astfel implementarea


la un cost rezonabil: plac de dezvoltare Arduino Uno, shield drivere de motoare L298,
senzor umiditate sol, pomp de ap micro i ecran LCD Nokia (opional).

https://www.robofun.ro/mecanice/mecanice-altele/pompa-apa-micro
https://www.robofun.ro/senzori/vreme/soil-moisture-sensor

Shield-ul de motoare L298 este utilizat deobicei n construcia platformelor robotice


telecomandate (a se vedea seria de roboi FlexyBot) dar se poate utiliza i n cazul
nostru pompa de ap nu este altceva dect un motor de curent continuu. Se poate
utiliza i un releu pentru comanda pompei dar se pierde capabilitatea de control al
turaiei (debitului). Shield-ul este capabil s comande dou motoare, sistemul propus
folosete o singur ieire de comand dar permite o extindere simpl ulterioar.

https://www.robofun.ro/forum/
Conectarea pompei de ap la shield se va face pe
canalul Motor2 avnd grij la pinul marcat cu bulin
roie al pompei. Shield-ul va fi utilizat cu jumper-ul de
alimentare comun pus, astfel vom putea alimenta i
placa de dezvoltare i pompa de la un singur
alimentator de 9V conectat la placa de dezvoltare
(mufa de alimentare a plcii de dezvoltare). Dac se
respect conectarea indicat sensul de udare al pompei
va fi urmtorul:

Pentru conectarea pompei de ap la


un recipient cu ap (pompa nu este
proiectat s fie conectat la o surs
de ap cu presiune proprie!!!) i la
ghivecele cu flori ce urmeaz a fi
udate se poate folosi tub de silicon cu
diametrul interior de 3mm (sunt
utilizate de obicei la acvarii). n plus
se pot utiliza diveri conectori
specifici pentru a realiza o instalaie
care s permit udarea mai multor
ghivece simultan:

Este recomandat ca recipientul (rezervorul) de ap s nu fie mai jos ca sistemul de


udare pentru a nu fora pompa s ridice apa.

https://www.robofun.ro/forum/
Senzorul de umiditate sol (pinul SIG) se va conecta la placa de dezvoltare (prin
intermediul shield-ului) la pinul analogic A0. Pinul de alimentare al senzorului se va
conecta la pinul A2, senzorul va fi alimentat doar cnd se va efectua citirea.
Alimentarea continu a senzorului poate duce la deterioarea rapid a acestuia din cauza
efectului de electroliz. Ieirea senzorului nu este calibrat, nu putem calcula precis
cantitatea de ap din sol pe baza acestui senzor. Citirile sunt afectate destul de mult i
de tipul de sol din ghiveciul cu flori. Avnd n vedere c citirile analogice se alf n
plaja 0 1023 vom stabili un prag sub care vom considera c ghiveciul are nevoie de
ap (pragul stabilit n program va fi 500).

Este recomandat parcurgerea urmtorului material pentru a nelege mai bine


funcionarea senzorului de umiditate a solului:

Soil Moisture Sensor Hookup Guide


https://learn.sparkfun.com/tutorials/soil-moisture-sensor-hookup-guide

Ecranul LCD va permite urmrirea funcionrii sistemului dar sistemul poate ndeplini
sarcina stabilit i fr conectarea acestuia. Ecranul grafic LCD Nokia funcioneaz la
3.3V, conectarea linilor la pinii Arduino de 5V scade durata de via a afiajului. Este
recomandat adugarea unui circuit de translatare a nivelurilor logice, a se vedea i
materialul:

https://www.robofun.ro/forum/
Graphic LCD Hookup Guide
https://learn.sparkfun.com/tutorials/graphic-lcd-hookup-guide

Conexiunile necesare afiajului LCD sunt urmtoarele:

Pinul LED al LCD-ului, prin


intermediul unei rezistene de 220ohm,
se va conecta la 5V (sau un un pin
PWM dac se dorete variaia
intensitii luminii de fundal);
Pinul SCLK al LCD-ului se va conecta
la pinul 13 al plcii de dezvoltare;
Pinu DIN (MOSI) al LCD-ului se va
conecta la pinul 11 al plcii de
dezvoltare;
Pinul D/C la pinul 8;
Pinul RST la pinul 7;
Pinul SCE la pinul 4;
Pinul GND la GND;
Pinul Vcc la 3.3V.

Pentru a putea lucra cu LCD-ul programul va utiliza biblioteciile Adafruit GFX i


Adafruit PCD8544.

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 4, 7);

#define MOTOR2_PIN1 3
#define MOTOR2_PIN2 5
#define SOIL_PIN A0
#define SOIL_VCC A2

https://www.robofun.ro/forum/
void setup() {
display.begin();
display.setContrast(50);
delay(1000);
display.clearDisplay();
display.display();
pinMode(MOTOR2_PIN1, OUTPUT);
pinMode(MOTOR2_PIN2, OUTPUT);
digitalWrite(MOTOR2_PIN2, LOW);
pinMode(SOIL_VCC, OUTPUT);
digitalWrite(SOIL_VCC, LOW);
delay(1000);
}

n cadrul seciunii loop() a programului se va efectua citirea senzorului de umiditate a


solului (cu activarea prealabil a pinul A2 pentru a alimenta senzorul) i n funcie de
valoarea citit (dac valoarea citit este mai mic de 500) se pornete un ciclu de udare
format din trei perioade de 1 secund alternate cu trei perioad de pauz de 1 secund.
Pompa este comandat la jumtatea puterii maxime (125 din 255). n funcie de
dimensiunea ghiveciului sau / i de numrul de ghivece udate ciclul de udare poate fi
ajustat ca durat i putere comandat pompei de ap.

unsigned long lasttime = 0;

void loop()
{
int soilhumidity;
digitalWrite(SOIL_VCC,HIGH);
delay(1000);
soilhumidity = analogRead(SOIL_PIN);
digitalWrite(SOIL_VCC,LOW);
display.clearDisplay();
display.display();
display.setTextSize(1);
https://www.robofun.ro/forum/
display.setTextColor(BLACK);
display.setCursor(0,0);
display.print("Soil hum:");
display.println(soilhumidity);
display.print("Time:");
display.println(millis()/1000);
if (soilhumidity<500) {
display.println("Status: ON");
display.display();
delay(100);
analogWrite(MOTOR2_PIN1, 125);
delay(1000);
analogWrite(MOTOR2_PIN1, 0);
delay(1000);
analogWrite(MOTOR2_PIN1, 125);
delay(1000);
analogWrite(MOTOR2_PIN1, 0);
delay(1000);
analogWrite(MOTOR2_PIN1, 125);
delay(1000);
analogWrite(MOTOR2_PIN1, 0);
lasttime = millis()/1000;
}
else {
display.println("Status: OFF");
}
display.print("LastTime:");
display.println(lasttime);
display.display();
delay(100);
}

https://www.robofun.ro/forum/
Afiajul LCD va afia n permanen valoarea citit de la senzorul de umiditate sol,
timpul n secunde de la pornirea sistemului: Time, starea sistemului de comand
(ON/OFF ud/nu ud) i timpul la care s-a efectuat ultimul ciclu de udare: LastTime
(estimat n secunde de la pornirea sistemului). Afiarea timpului poate fi rafinat prin
transformarea valorii afiate n HH:MM:SS nu doar n secunde.

Programul a fost dezvoltat i testat utiliznd Arduino IDE 1.8.1 i bibliotecile Adafruit
GFX 1.1.8 i Adafruit PCD8544 1.0.0.

Sistemul prezentat poate fi mbuntit prin adugarea unor elemente suplimentare de


achiziie (temperatur, umiditate aer, putere lumin solar) pentru a realiza un sistem
de automatizare care s in seama de mai muli factori n alegerea momentului optim
de udare. Pentru inspiraie se pot studia i urmtoarele proiecte:

Arduino Automatic Watering System for Plants Sprinkler


http://www.instructables.com/id/Arduino-Automatic-Watering-System-For-Plants

Automatic Plant Watering and Soil Moisture Sensing


http://www.instructables.com/id/Automatic-Plant-Watering-and-Soil-Moisture-Sensing

Self-Watering Plant
http://www.instructables.com/id/Self-Watering-Plant

https://www.robofun.ro/forum/