Smart Irrigator - Balan Rareș-Alexandru

Balan Rareș-Alexandru 334CD

Introducere

Proiectul monitorizează umiditatea solului și udă automat plantele atunci când nivelul de umiditate scade sub o valoare prestabilită. Sistemul asigură o udare eficientă, optimizând consumul de apă și menținând plantele sănătoase chiar și în absența proprietarului.

Scopul este de a automatiza procesul de udare a plantelor, astfel încât persoana responsabilă să economisească timp și resurse, reducând riscul ca plantele să sufere din cauza lipsei de apă.

Ideea de la care am pornit a fost o problemă des întâlnită în rândul persoanelor care dețin plante, în special în sere sau grădini unde udarea zilnică poate deveni o activitate repetitivă și greu de respectat din cauza lipsei de timp sau a comodității. De asemenea, în perioadele în care proprietarii sunt plecați de acasă, plantele pot rămâne neîngrijite.

Proiectul este util deoarece poate fi folosit de oricine are plante acasă, fiind deosebit de practic pentru persoanele ocupate sau care călătoresc frecvent.

Descriere generală

Într-un ghiveci sunt montați doi senzori de umiditate a solului, câte unul pentru fiecare parte (stânga și dreapta). Pe baza datelor colectate, un servomotor repoziționează furtunul de udare către partea mai uscată, asigurând o irigare direcționată.

Servomotorul este alimentat direct de la Arduino și este controlat printr-un pin digital. Rolul său este să orienteze furtunul spre zona cu solul cel mai uscat înainte de activarea sistemului de udare.

Irigarea este realizată cu ajutorul unei pompe de apă submersibile, care este controlată printr-un releu. Pompa extrage apă dintr-un rezervor, în care este montat un senzor de nivel ce împiedică funcționarea pompei în cazul în care apa scade sub un prag minim. Alimentarea pompei se face dintr-o sursă externă (patru baterii de 1.5V) care este conectată prin releu.

Un ecran LCD cu interfață I2C este folosit pentru a oferi feedback în timp real: ce plantă este udată sau dacă nivelul apei este scăzut.

Conexiuni componente principale:

  • servomotor: alimentat de la 5V Arduino, controlat prin pinul D9
  • senzori de umiditate sol: conectați la A0 și A1
  • senzor nivel apă: conectat la A2
  • LCD I2C: conectat la SDA și SCL
  • releu pompă apă: controlat prin pinul D1
  • pompa de apă: conectată la sursă externă prin releu

Hardware Design

Schema Electrică

Schema realizată în Tinkercad diferă parțial față de implementarea fizică a proiectului din cauza limitărilor platformei de simulare. În absența unui model dedicat pentru pompa de apă utilizată în circuitul real, aceasta a fost substituită în simulare cu un motor DC pentru a reda comportamentul funcțional al sistemului. De asemenea, senzorii de umiditate a solului disponibili în Tinkercad nu corespund în totalitate cu cei folosiți fizic, iar senzorul de nivel al apei nu a putut fi inclus, întrucât nu este disponibil în biblioteca aplicației.

În ceea ce privește alimentarea pompei (respectiv a motorului DC din simulare), aceasta este asigurată de un suport pentru patru baterii AA montate în serie, furnizând o tensiune totală de aproximativ 6V, conectată prin intermediul unui releu controlat de Arduino.

Lista de piese

Componentă Cantitate Link
Senzor de umiditate a solului, higrometru 2 https://www.bitmi.ro/senzori-electronici/senzor-de-umiditate-a-solului-higrometru-10461.html
Senzor de nivel al apei 1 https://www.optimusdigital.ro/ro/senzori-altele/272-senzor-de-nivel-al-apei.html?search_query=senzor+de+nivel+al+apei&results=3
Micro Servomotor SG90 180° 1 https://www.optimusdigital.ro/ro/motoare-servomotoare/2261-micro-servo-motor-sg90-180.html?search_query=Micro+Servomotor+SG90+180%C2%B0&results=2
LCD 1602 cu Interfață I2C 1 https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html?search_query=LCD+1602+cu+Interfata+I2C+si+Backlight+Albastru&results=2
Breadboard 830 puncte 1 https://sigmanortec.ro/Breadboard-830-puncte-MB-102-p125923983
Placă de Dezvoltare Compatibilă cu Arduino UNO R3 (ATmega328p + ATmega16u2) 1 https://www.optimusdigital.ro/ro/placi-avr/4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html?search_query=arduino+uno+r3&results=129
Pompă apă submersibilă 1 https://sigmanortec.ro/Pompa-apa-submersibila-3-6VDC-p125423415
Furtun pompă apă 1 https://sigmanortec.ro/Furtun-Pompa-Apa-8x10-1-metru-p148295684
Suport de 4 baterii AA 1 https://sigmanortec.ro/Suport-4-baterii-AA-cu-capac-si-intrerupator-p172447738
Modul releu cu un canal (comandat cu 5 V) 1 https://www.optimusdigital.ro/ro/electronica-de-putere-module-cu-releu/13084-modul-releu-cu-un-canal-comandat-cu-5-v.html?search_query=Modul+releu+cu+un+canal&results=14

Software Design

Mediu de dezvoltare: Arduino IDE

Librării externe folosite

  • Servo.h → Controlul servomotorului SG90 prin semnal PWM
  • LiquidCrystal_I2C.h → Controlul afișajului LCD cu interfață I2C

Algoritm general implementat

  • Inițializare componente: LCD, senzori de umiditate, senzor de nivel al apei, servomotor, releu pentru pompă
  • Citirea datelor: Se citesc valorile analogice de la cei doi senzori de umiditate (A0, A1)
  • Comparare senzori umiditate: Se determină care parte (stânga sau dreapta) este mai uscată și se salvează zona selectată pentru udare
  • Verificare nivel apă: Dacă senzorul de nivel al apei semnalează că nu mai este apă ⇒ sistemul nu pornește pompa și se afișează pe LCD un mesaj
  • Controlul direcției de udare: Servomotorul este comandat să se poziționeze către partea uscată
  • Activarea udării: Se activează releul pentru pompă

Exemplu de cod pentru testare – sistem simplificat

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C display(0x27, 16, 2);

const int pumpRelayPin = 2;
const int moistureSensorPin = A0;

void setup() {
  Serial.begin(9600);
  
  display.init();
  display.backlight();
  display.clear();

  pinMode(pumpRelayPin, OUTPUT);
  digitalWrite(pumpRelayPin, HIGH);
  delay(1000);
  
  display.setCursor(0, 0);
  display.print("Irrigation System");
  display.setCursor(0, 1);
  display.print("System is ON");
  display.print("");
  delay(3000);
  display.clear();
}

void loop() {
  int moistureLevel = analogRead(moistureSensorPin);
  Serial.print("Moisture value: ");
  Serial.println(moistureLevel);

  if (moistureLevel > 950) {
    digitalWrite(pumpRelayPin, LOW);
    display.setCursor(0, 0);
    display.print("Pump Status: ON");
  } else {
    digitalWrite(pumpRelayPin, HIGH);
    display.setCursor(0, 0);
    display.print("Pump Status: OFF");
  }

  if (moistureLevel < 300) {
    display.setCursor(0, 1);
    display.print("Moisture: HIGH");
  } else if (moistureLevel <= 950) {
    display.setCursor(0, 1);
    display.print("Moisture: MID");
  } else {
    display.setCursor(0, 1);
    display.print("Moisture: LOW");
  }
}

Rezultate Obţinute

Videoclipuri

Github Repo

Concluzii

Am învățat cum să structurez un proiect complet, pornind de la conectarea fizică a componentelor, până la scrierea codului si testarea funcționalității.

Consider că acest proiect are un potențial real de extindere în viitor, prin adăugarea unor funcționalități precum:

  • conectivitate wireless (WiFi/Bluetooth)
  • transmiterea datelor către o platformă cloud
  • control de la distanță prin aplicație mobilă

Bibliografie/Resurse

Resurse Hardware

pm/prj2025/fstancu/rares.balan.txt · Last modified: 2025/05/28 01:57 by rares.balan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0