This shows you the differences between two versions of the page.
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 uscat. Sistemul 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 necesar. Informaț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ă bloc: TBD | + | |
+ | <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ță utilizator: LCD 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 = FALS) ATUNCI: |
- | 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ă PWM, ADC, I2C, UART ș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Ă(umiditate, 0,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 documente, datasheet-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 software, debounce, 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/ | ||