Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:eradu:ioana.stefan2806 [2025/05/04 23:16]
ioana.stefan2806 created
pm:prj2025:eradu:ioana.stefan2806 [2025/05/26 00:13] (current)
ioana.stefan2806
Line 5: Line 5:
 Proiect realizat de: Ioana Ștefan, 332CA Proiect realizat de: Ioana Ștefan, 332CA
  
-SmartPot este un ghiveci ​inteligent ​3D-printat ​destinat plantelor de interior. ​Acesta se rotește automat în funcție ​de lumină și udă planta doar când solul este prea uscatSistemul ​oferă feedback ​vizual ​și acustic ​și permite interacțiunea cu telefonul mobil prin Bluetooth.+SmartPot este un sistem embedded ​inteligent destinat ​îngrăjirii automate a plantelor de interior. ​Dispozitivul este capabil să monitorizeze umiditatea solului, să detecteze sursa principală ​de lumină, să rotească ghiveciul spre acea direcție ​și să ude planta doar atunci ​când este necesarInformațiile despre stare sunt afișate pe un ecran LCD I2C, iar sistemul ​oferă feedback ​sonor și vizual prin buzzer ​și LED-uri. În plus, utilizatorul poate controla manual sistemul ​prin intermediul unei interfețe web WiFi. Proiectul aplică în mod direct concepte fundamentale din disciplinele de programare și modelare (PM), precum: ADC, PWM, I2C, UART, control motoare, ISR și design de sisteme reactive.
  
-Scopul proiectului este să automatizeze și să eficientizeze îngrijirea plantelor de interior, integrând cunoștințele dobândite în laboratoarele ​de PM. Ideea a pornit ​de la nevoia ​de a asigura creșterea sănătoasă a plantelor în absența atenției zilnice. Este util atât pentru ​pasionați ​de plante, cât și pentru studenți care vor să își aplice practic cunoștințele hardware/​software.+===== Obiective ===== 
 + 
 +  * Automatizarea udării unei plante în funcție de umiditatea solului 
 +  * Orientarea ghiveciului către sursa principală ​de lumină pentru maximizarea fotosintezei 
 +  * Implementarea unui sistem ​de avertizare pentru nivel scăzut al apei din rezervor 
 +  * Afișarea stării sistemului pe un ecran LCD 
 +  * Crearea unei interfețe web intuitive ​pentru ​comenzi manuale 
 +  * Testarea unei versiuni avansate ​de cod cu ISR și funcționalitate radio (FM TX)
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +{{SP-diagrama.png}} 
-O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.+{{SP-circuit.png?700}}
  
-Exemplu de schemă blocTBD+ 
 +<note tip> 
 +  * Modul senzori: LDR stânga/​dreapta,​ senzor umiditate, senzor nivel apă 
 +  * Modul decizie logică: ESP32, cod bazat pe praguri 
 +  * Modul actuatori: motor stepper, pompă controlată prin releu 
 +  * Modul semnalizare:​ LED roșu, LED verde, buzzer 
 +  * Modul interfață utilizatorLCD I2C, server web ESP32
 </​note>​ </​note>​
  
-**Modul de funcționare:** +===== Pseudocod ​funcționare ​SmartPot =====
-  * 2 fotorezistori LDR detectează sursa principală de lumină. +
-  * Un servo motor rotește ghiveciul în direcția luminii. +
-  * Un senzor capacitiv măsoară umiditatea solului. +
-  * Pompa de apă este activată automat dacă umiditatea e sub un prag. +
-  * Un afișaj OLED I2C arată informații despre sistem. +
-  * Un modul Bluetooth HC-05 permite controlul și citirea valorilor de pe telefon. +
-  * Arduino Uno gestionează toate componentele.+
  
-===== Hardware Design =====+<​code>​ 
 +INCEPUT 
 +  // Configurare inițială 
 +  INITIALIZEAZĂ:​ 
 +    Senzor_umiditate_sol ← pin analogic 32 
 +    Pompa ← pin digital 4 
 +    Senzor_nivel_apa ← pin digital 33 
 +    Buzzer ← pin digital 16 
 +    LED_rosu ← pin digital 15 
 +    LED_verde ← pin digital 2 
 +    LDR_stanga ← pin analogic 12 
 +    LDR_dreapta ← pin analogic 13 
 +    Motor_pas_cu_pas ← pini 14,​27,​26,​25 
 +    LCD ← adresă I2C 0x27 
 +    Server_WiFi ← port 80
  
-<note tip> +  // Variabile globale 
-Aici puneţi tot ce ţine de hardware design: +  ​mod_manual ← FALS 
-  ​* listă de piese +  ​udare_manuală ← FALS 
-  ​* scheme electrice +  ​directie_rotatie ← 0 
-  ​* diagrame de semnal ​ +  ​timp_start_pompa ← 0 
-  ​* rezultatele simulării +  ​MAX_TIMP_UDARE ← 10000 /10 secunde
-</note>+
  
-**Componente utilizate:​** +  // Conectare WiFi 
-  ​* Arduino Uno (ATmega328P+  ​INCARCĂ_SETĂRI_WIFI("​NUME_REȚEA",​ "​PAROLA"​
-  ​* 2x LDR + rezistențe ​(divizor tensiune+  ​AFIȘEAZĂ_LCD("​Conectare WiFi..."​
-  ​* Senzor capacitiv de umiditate +  ​CÂT_TIMP (STARE_WIFI() ≠ CONECTAT) AȘTEPTĂ(500) 
-  ​* Servo motor SG90 +  ​AFIȘEAZĂ_LCD("​IP:​ " ​GET_IP())
-  * Pompiță 5V tranzistor MOSFET +
-  * OLED I2C 128x64 +
-  * Modul Bluetooth HC-05 (cu divizor tensiune pe RX) +
-  * Buzzer activ + LED-uri pentru status +
-  * Butoane pentru comenzi manuale +
-  * Carcasă printată 3D+
  
-**Note:** +  // Configurare server web 
-  ​* Se utilizează SoftwareSerial pentru comunicarea cu HC-05. +  ​CONFIGUREAZĂ_RUTE_SERVER:​ 
-  * Alimentare externă pentru pompiță și servo (nu direct din Arduino). +    RUTA("/"​→ afiseaza_pagina_control 
-  * Schema bloc și cablajul vor fi încărcate în secțiunea Download.+    ​RUTA("/​water"​) → gestioneaza_udare 
 +    RUTA("/​rotate"​) → gestioneaza_rotatie
  
-===== Software Design =====+  // Buclă principală 
 +  CÂT_TIMP (ADEVĂRAT) EXECUTĂ: 
 +    GESTIONEAZĂ_CERERI_SERVER()
  
-<note tip> +    DACĂ (mod_manual = FALSATUNCI
-Descrierea codului aplicaţiei ​(firmware): +      // Mod automat 
-  * mediu de dezvoltare +      ​umiditate ← CITESTE_ANALOGIC(Senzor_umiditate_sol) 
-  * librării şi surse 3rd-party +      ​nivel_apa ← CITESTE_DIGITAL(Senzor_nivel_apa)
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * surse şi funcţii implementate +
-</​note>​+
  
-**Mediu de dezvoltare:** Arduino IDE+      DACĂ (umiditate > 2500 ȘI nivel_apa = Înalt) ATUNCI: 
 +        ACTIVEAZĂ_POMPA(ADEVĂRAT) 
 +      ALTFEL: 
 +        ACTIVEAZĂ_POMPA(FALS)
  
-**Biblioteci utilizate:** +      diferenta_lumina ← CITESTE_ANALOGIC(LDR_dreapta) - CITESTE_ANALOGIC(LDR_stanga) 
-  * `Servo.h` – control motor rotire +      DACĂ (ABS(diferenta_lumina) > 100) ATUNCI
-  * `Wire.h` + `Adafruit_SSD1306.h` – afișaj OLED +        ​ROTEȘTE_MOTOR(diferenta_lumina > 0 ? DREAPTA : STÂNGA)
-  * `SoftwareSerial.h` – comunicare cu HC-05+
  
-**Funcționalități software:** +    ALTFEL
-  * `readLightSensors()` – citește lumină stânga/dreapta +      // Mod manual 
-  * `rotateToLight()` – ajustează servo-ul +      ​ACTIVEAZĂ_POMPA(udare_manuală) 
-  * `readSoilMoisture()` – măsoară umiditatea (ADC+      ​ROTEȘTE_MOTOR(directie_rotatie ​50)
-  * `controlPump()` – udă planta dacă solul e uscat +
-  ​`displayStatus()` – actualizează OLED +
-  * `handleBluetoothCommands()` – procesează comenzi Bluetooth: READ, WATER, SET+
  
-===== Rezultate Obţinute =====+      DACĂ (udare_manuală ȘI (TIMP_CURENT() - timp_start_pompa > MAX_TIMP_UDARE)) ATUNCI: 
 +        udare_manuală ← FALS 
 +        ACTIVEAZĂ_POMPA(FALS)
  
-<note tip> +    VERIFICĂ_NIVEL_APĂ() 
-Rezultatele obţinute în urma realizării proiectului. +    ​ACTUALIZEAZĂ_AFIȘAJ() 
-</​note>​+    ​AȘTEPTĂ(100 ms)
  
-  * Udare automată bazată pe senzor de umiditate, testată cu succes +SFÂRȘIT
-  * Detecție lumină și rotire în direcția sursei +
-  * Afișaj funcțional (OLED) cu valori de sistem +
-  * Control și feedback prin terminal Bluetooth (pe telefon) +
-  * Testat într-un mediu real (plantă + iluminare artificială)+
  
-===== Concluzii =====+// Funcții auxiliare 
 +FUNCȚIE VERIFICĂ_NIVEL_APĂ():​ 
 +  nivel_scazut ← CITESTE_DIGITAL(Senzor_nivel_apa) ​SCĂZUT 
 +  DACĂ (nivel_scazut) ATUNCI: 
 +    ACTIVEAZĂ_BUZZER(ADEVĂRAT) 
 +    SETEAZĂ_LED(LED_rosu,​ INTERMITENT) 
 +    SETEAZĂ_LED(LED_verde,​ FALS) 
 +    OPREȘTE_POMPA() 
 +  ALTFEL: 
 +    ACTIVEAZĂ_BUZZER(FALS) 
 +    SETEAZĂ_LED(LED_rosu,​ FALS) 
 +    SETEAZĂ_LED(LED_verde,​ mod_manual ? FALS : ADEVĂRAT)
  
-SmartPot demonstrează cu succes aplicabilitatea tehnologiilor embedded în automatizarea unei activități cotidiene. Proiectul integrează PWMADCI2CUART și logica de control distribuită într-un sistem complet funcțional. Este o soluție scalabilă și educativăcu aplicații reale în mediul urban.+FUNCȚIE ACTUALIZEAZĂ_AFIȘAJ():​ 
 +  SCRIE_LCD("​Umid:​ " + MAPEAZĂ(umiditate0,4095,0,100) + "​%"​) 
 +  SCRIE_LCD_LINIA_2(mod_manual ? "​MANUAL"​ : "AUTO " + (nivel_apa ? "​OK"​ : "​LOW"​))
  
-===== Download =====+// Handlere web 
 +FUNCȚIE afiseaza_pagina_control():​ 
 +  GENEREAZĂ_HTML cu butoane pentru control manual
  
-<note tip> +FUNCȚIE gestioneaza_udare(parametri):​ 
-</​note>​+  ​mod_manual ← ADEVĂRAT 
 +  udare_manuală ← (parametri.enable = 1) 
 +  timp_start_pompa ← TIMP_CURENT()
  
-===== Jurnal =====+FUNCȚIE gestioneaza_rotatie(parametri):​ 
 +  mod_manual ← ADEVĂRAT 
 +  directie_rotatie ← parametri.dir 
 +</​code>​
  
-<note tip> +===== Hardware Design =====
-</​note>​+
  
 +**Listă completă componente:​**
 +
 +| Componentă ​              | Cantitate | Observații ​                          |
 +| ESP32 DevKit v1           | 1         | Microcontroler central ​                |
 +| LCD 1602 I2C              | 1         | Afișaj stare sistem ​                  |
 +| Senzor umiditate capacitiv| 1         | Alimentare la 3.3V, ieșire analogică ​ |
 +| LDR + rezistențe 10kΩ      | 2 + 2     | Pentru detectare lumină ​             |
 +| Senzor nivel apă (digital) | 1         | Contact simplu ​                        |
 +| Releu 5V                  | 1         | Comută pompa pe 5V extern ​            |
 +| Pompiță 5V + furtun ​      | 1         | Alimentare 4xAA                        |
 +| Motor stepper 28BYJ-48 ​   | 1         | Rotire controlată ​                   |
 +| Driver ULN2003 ​           | 1         | Control motor                          |
 +| LED roșu + verde          | 1 + 1     | Feedback stare rezervor ​              |
 +| Buzzer activ              | 1         | Semnal sonor la eroare ​               |
 +| Breadboard + fire         | -         | Pentru conexiuni ​                     |
 +
 +===== Software Design =====
 +
 +**Structura logică extinsă:**
 +
 +- `setup()`:
 +  - configurare pini I/O
 +  - inițializare LCD
 +  - conectare WiFi
 +  - configurare rute HTTP pentru control manual
 +
 +- `loop()`:
 +  - Mod automat:
 +    - citire umiditate sol → decide udare
 +    - citire diferență LDR → decide rotire
 +  - Mod manual:
 +    - udare temporizată maxim 10s
 +    - rotire controlată din web
 +  - nivel apă scăzut → alarmă, LED, oprire pompă
 +  - actualizare ecran LCD
 +
 +===== Rezultate obținute =====
 +
 +  * Sistem stabil cu timp de reacție bun sub 100ms
 +  * Afișaj LCD actualizat în timp real
 +  * Detecție lumină eficientă chiar și în iluminat artificial
 +  * Udare declanșată doar la nevoie, prevenind supraudarea
 +  * Alarmă sonoră vizibilă (buzzer + LED intermitent) pentru rezervor gol
 +  * Interfață web compatibilă mobil/​desktop
 +
 +===== Îmbunătățiri viitoare =====
 +
 +  * Adăugarea unui senzor DHT22 pentru temperatură și umiditate aer
 +  * Înlocuirea buzzerului activ cu unul pasiv + PWM pentru semnal diferențiat
 +  * Adăugare modul ESP-NOW pentru comunicație cu alți senzori smart garden
 +  * Stocare date în EEPROM sau SD card pentru analiză istorică
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * Arduino Reference 
-Listă cu documentedatasheet-uri, resurse Internet folosite. +  * ESP32 Datasheet 
-</note>+  * Adafruit I2C LCD library 
 +  * Fritzing, draw.io, EasyEDA 
 +  * https://​circuitdigest.com/​arduino-projects 
 +  * https://​www.youtube.com/​watch?​v=T_tpKoNCVYw&​t=61s&​ab_channel=DIYMachines 
 +  * https://​www.youtube.com/​watch?​v=XwJQJnY6iUs&​t=184s&​ab_channel=ScienceBuddies 
 + 
 + 
 +===== Concepte aplicate din laboratoarele PM ===== 
 + 
 +| Laborator PM | Aplicație concretă                            | 
 +|--------------|--------------------------------------------------| 
 +| Lab 1        | USART - debug prin port serial ​                  | 
 +| Lab 2        | Timere softwaredebounce, delay                | 
 +| Lab 3        | PWM motor, LED-uri, buzzer control ​             | 
 +| Lab 4        | ADC cu LDR și senzor umiditate ​                | 
 +| Lab 5        | I2C - interfață LCD + eventual RTC             | 
 + 
 +===== GitHub Repo ===== 
 +https://​github.com/​ioanastefan2806/​SmartPot/​tree/​main 
 + 
 +===== Galerie Foto ===== 
 + 
 +{{SP-poza.png?​700}} 
 + 
  
-**Resurse Software:** 
-  * Arduino IDE 
-  * Adafruit SSD1306 
-  * Servo.h, SoftwareSerial.h 
  
-**Resurse Hardware:** 
-  * https://​www.microchip.com/​wwwproducts/​en/​ATmega328P 
-  * https://​www.electronicwings.com/​arduino/​hc-05-bluetooth-module 
-  * https://​lastminuteengineers.com/​soil-moisture-sensor-arduino-tutorial/​ 
  
pm/prj2025/eradu/ioana.stefan2806.1746389775.txt.gz · Last modified: 2025/05/04 23:16 by ioana.stefan2806
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