This shows you the differences between two versions of the page.
pm:prj2025:ccristi:alex.moldoveanu0510 [2025/05/27 00:11] alex.moldoveanu0510 [Hardware Design] |
pm:prj2025:ccristi:alex.moldoveanu0510 [2025/05/30 09:10] (current) alex.moldoveanu0510 [Software Design] |
||
---|---|---|---|
Line 29: | Line 29: | ||
Pentru flexibilitate si usurinta in demonstratie, toate functiile pot fi declansate si manual, la comanda, indiferent de momentul din zi. | Pentru flexibilitate si usurinta in demonstratie, toate functiile pot fi declansate si manual, la comanda, indiferent de momentul din zi. | ||
- | {{:pm:prj2024:ccontasel:merge.png |}} | + | {{:pm:prj2025:ccristi:poza2.png?300|}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Listă de componente: | Listă de componente: | ||
+ | |||
+ | • Arduino Uno | ||
+ | • Water Pump | ||
+ | • Light Sensor | ||
+ | • Speaker | ||
+ | • Clock Module | ||
+ | • Breadboard | ||
+ | • Cables | ||
+ | • LEDs | ||
+ | |||
+ | Mai jos se regaseste desgnul orientativ in Tinkerpad: | ||
+ | |||
+ | {{:pm:prj2025:ccristi:poza.png|}} | ||
+ | |||
+ | Mai jos se ragaseste o poza hardware a proiectului: | ||
+ | |||
+ | {{:pm:prj2025:ccristi:poza3.png?300|}} | ||
+ | |||
+ | De asemenea si un video demonstrativ: | ||
+ | |||
+ | https://youtu.be/8lZL-eniPDA | ||
+ | |||
+ | ===== Software Design ===== | ||
+ | |||
+ | |||
+ | Design-ul software va fi realizat in Arduino IDE. | ||
+ | |||
+ | Am utilizat SoftwareSerial si DFRobotDFPlayerMini drept biblioteci. | ||
+ | |||
+ | <code> | ||
+ | |||
+ | #include "Arduino.h" | ||
+ | #include "SoftwareSerial.h" | ||
+ | #include "DFRobotDFPlayerMini.h" | ||
+ | #include "LiquidCrystal_I2C.h" | ||
+ | |||
+ | // LCD pe adresa 0x27, cu 16 coloane si 2 randuri | ||
+ | |||
+ | LiquidCrystal_I2C lcd(0x27, 16, 2); | ||
+ | |||
+ | SoftwareSerial mySoftwareSerial(10, 11); // RX, TX | ||
+ | DFRobotDFPlayerMini myDFPlayer; | ||
+ | |||
+ | void printDetail(uint8_t type, int value); | ||
+ | |||
+ | int play_in_progress=0; // if = 1 then player is working | ||
+ | |||
+ | const int buttonPin = 2; | ||
+ | const int buttonPin2 = 7; | ||
+ | const int relayPin = 2; | ||
+ | int buttonState = 0; | ||
+ | |||
+ | // Intervalul de intrare | ||
+ | const int inputMin = 1; | ||
+ | const int inputMax = 1021; | ||
+ | |||
+ | // Intervalul de ieșire | ||
+ | const int outputMin = 1; | ||
+ | const int outputMax = 30; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | mySoftwareSerial.begin(9600); | ||
+ | Serial.begin(115200); | ||
+ | pinMode(buttonPin, INPUT); | ||
+ | pinMode(buttonPin2, INPUT); | ||
+ | pinMode(relayPin, OUTPUT); | ||
+ | digitalWrite(relayPin, HIGH); | ||
+ | | ||
+ | lcd.begin(); | ||
+ | lcd.backlight(); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Sistem activ"); | ||
+ | |||
+ | myDFPlayer.begin(mySoftwareSerial); | ||
+ | } | ||
+ | |||
+ | void music_switch() { | ||
+ | if(play_in_progress == 0) { | ||
+ | myDFPlayer.play(1); //Play the first mp3 | ||
+ | play_in_progress = 1; | ||
+ | } | ||
+ | else { | ||
+ | myDFPlayer.pause(); //stops the music | ||
+ | play_in_progress = 0; // no longer playing | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void manual_watering() { | ||
+ | |||
+ | digitalWrite(relayPin, LOW); | ||
+ | while (buttonState == HIGH) { | ||
+ | buttonState = digitalRead(buttonPin2); | ||
+ | } | ||
+ | |||
+ | digitalWrite(relayPin, HIGH); | ||
+ | |||
+ | lcd.begin(); | ||
+ | lcd.backlight(); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Sistem activ"); | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | int soundVolume = ((analogRead(A1) - inputMin) * (outputMax - outputMin + 1) / (inputMax - inputMin + 1)) + outputMin; | ||
+ | myDFPlayer.volume(soundVolume); | ||
+ | |||
+ | int waterSensor = analogRead(A2); | ||
+ | int lightSensor = analogRead(A0); | ||
+ | |||
+ | Serial.print(F("Valoare senzor de lumina: ")); | ||
+ | Serial.println(lightSensor); | ||
+ | Serial.print(F("Valoare senzor de umiditate: ")); | ||
+ | Serial.println(waterSensor); | ||
+ | |||
+ | if (waterSensor < 100 && lightSensor < 50) { | ||
+ | digitalWrite(relayPin, LOW); | ||
+ | |||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Udare automata"); | ||
+ | |||
+ | delay(2000); | ||
+ | digitalWrite(relayPin, HIGH); | ||
+ | } | ||
+ | |||
+ | buttonState = digitalRead(buttonPin); | ||
+ | if (buttonState == HIGH) { | ||
+ | music_switch(); | ||
+ | } | ||
+ | delay(100); | ||
+ | |||
+ | buttonState = digitalRead(buttonPin2); | ||
+ | if (buttonState == HIGH) { | ||
+ | manual_watering(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | setup() – initializeaza comunicarea seriala, seteaza pinii si porneste modulul audio DFPlayer. | ||
+ | |||
+ | music_switch() – comuta intre redarea si oprirea muzicii in functie de starea curenta. | ||
+ | |||
+ | manual_watering() – activeaza pompa atata timp cat butonul de udare manuala este apasat. | ||
+ | |||
+ | loop() – ruleaza continuu, citeste senzorii, ajusteaza volumul, face udarea automata si gestioneaza actiunile butoanelor. | ||
+ | </code> | ||
+ | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | * **Arduino Uno | + | Care au fost rezultatele obţinute în urma realizării proiectului vostru. |
- | * **Water Pump | + | |
- | * **Light Sensor | + | |
- | * **Speaker | + | |
- | * **Clock Module | + | |
- | * **Breadboard | + | |
- | * **Cables | + | |
- | * **LEDs | + | |
</note> | </note> | ||
+ | |||
+ | Irigarea s-a realizat automat in functie de umiditatea solului, un senzor analogic declansand pornirea unei pompe de apa printr-un releu, la sesizarea lipsei de lumina data de la fotorezistenta. | ||
+ | |||
+ | Dupa udare, utilizatorul a fost notificat sonor printr-o melodie redata de un buzzer (+ vizual pe LCD). | ||
+ | |||
+ | Sistemul a functionat stabil, fara blocaje, cu afisari corecte si control fiabil al releului, optimizat printr-o logica eficienta de initializare. | ||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | Proiectul propus ofera o solutie practica si eficienta pentru monitorizarea si udarea automata a plantelor, fara ca utilizatorul sa intervina zilnic. Prin folosirea senzorilor si a componentelor de afisare si control, sistemul poate gestiona parametri importanti precum umiditatea solului, temperatura si nivelul apei. | ||
+ | |||
+ | Proiectul este usor de refacut, adaptabil si poate fi extins. Desi a fost gandit pentru plante de apartament, structura modulara permite folosirea lui si in aplicatii mai complexe, inclusiv in sisteme IoT. | ||
+ | ===== Download ===== | ||
+ | |||
+ | <note warning> | ||
+ | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
+ | |||
+ | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | ===== Jurnal ===== | ||
+ | |||
+ | <note tip> | ||
+ | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
+ | </note> | ||
+ | |||
+ | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | <note> | ||
+ | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
+ | </note> | ||
+ | |||
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
+ | |||
+ | - Pentru modulul MP3: https://www.instructables.com/Tutorial-of-MP3-TF-16P/ | ||
+ | Cat si datasheetul: https://www.electronicoscaldas.com/datasheet/DFR0299-DFPlayer-Mini-Manual.pdf?srsltid=AfmBOopRyqEZlLLECGWZad9qkzdOQHsyO3ZfRmh8OgPTLugA3A6b7Q1f | ||
+ | |||
+ | - Releu datasheet: https://www.electronicoscaldas.com/datasheet/DFR0299-DFPlayer-Mini-Manual.pdf?srsltid=AfmBOopRyqEZlLLECGWZad9qkzdOQHsyO3ZfRmh8OgPTLugA3A6b7Q1f | ||
+ | |||
+ | - ALPHA TEST: displayul LCD: https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/62-lcd-1602-cu-interfata-i2c-si-backlight-galben-verde.html?search_query=lcd+&results=215 | ||