Differences

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

Link to this comparison view

pm:prj2025:avaduva:andrei.iacob1009 [2025/05/27 11:17]
andrei.iacob1009 [Rezultate Obţinute]
pm:prj2025:avaduva:andrei.iacob1009 [2025/05/29 15:32] (current)
andrei.iacob1009 [Software Design]
Line 331: Line 331:
  
 loop() – Verifică periodic datele de la senzori și acționează în consecință (udare, notificări). loop() – Verifică periodic datele de la senzori și acționează în consecință (udare, notificări).
 +
 +  void loop() {
 +    //Check temperature,​ humidity, and soil humidity once a minute.
 +    if(counter == 1) {
 +      checkBME280();​
 +      checkWater();​
 +      checkMoisture();​
 +    } else {
 +      checkWater();​
 +    }
 +    delay(10000);​ //10sec = 10000
 +    counter++;
 +    if(counter >= 6) {
 +      counter = 0;
 +    }
 +  }
  
 checkMoisture() – decide dacă este necesară udarea. Se contorizeaza 5 masuratori sub valoarea minima inainte de a declansa udarea efectiva. In felul asta asiguram timpul necesar pentru absorbirea uniforma a apei in sol checkMoisture() – decide dacă este necesară udarea. Se contorizeaza 5 masuratori sub valoarea minima inainte de a declansa udarea efectiva. In felul asta asiguram timpul necesar pentru absorbirea uniforma a apei in sol
 +
 +  //moisture sensor
 +  void checkMoisture() {
 +    //Measure soil humidity
 +    int moisture = analogRead(A0);​
 +    Serial.print("​Moisture Sensor Value:"​);​
 +    Serial.println(moisture);​
 +    lcd.setCursor(0, ​ 1);
 +    lcd.print("​Moisture:​ " + String(moisture) + " ​  "​);​
 +    if (moisture ​ <= 300) {
 +      water_count++;​
 +      //​Serial.println(water_count);​
 +      if(water_count == 5){//To wait for the water  to go through the pot.
 +        watering();
 +        water_count = 0;
 +      }
 +    }
 +  }
  
 checkWater() – determină nivelul apei din rezervor. checkWater() – determină nivelul apei din rezervor.
  
 +  //​Ultrasonic Sensor
 +  void  checkWater(){
 +    //Check the water level in the bucket.
 +    digitalWrite(TRIG,​LOW);​
 +    delayMicroseconds(1);​
 +    digitalWrite(TRIG,​HIGH);​
 +    delayMicroseconds(11);​
 +    digitalWrite(TRIG,​LOW);​
 +    duration_us = pulseIn(ECHO,​HIGH);​
 +    if (duration_us > 0)  {
 +      distance = 0.017 * duration_us; ​
 +      Serial.print(distance);​
 +      Serial.println(" ​ cm");
 +      if(distance > 8.4) {
 +        digitalWrite(LED,​ HIGH);
 +      } else {
 +        digitalWrite(LED,​ LOW);
 +      }
 +    }
 +  }
 +  ​
 checkBME280() – citește temperatura,​ umiditatea și presiunea aerului. checkBME280() – citește temperatura,​ umiditatea și presiunea aerului.
  
 +  //BME280
 +  void checkBME280(){
 +    // Get data from BME280 sensor
 +    float t = bme.readTemperature(); ​      // ​ C
 +    float h = bme.readHumidity(); ​         // %
 +    float p = bme.readPressure() ​ / 100.0F; // hPa
 +    Serial.print("​Temperature:"​);​
 +    Serial.println(t);​
 +    Serial.print("​Humidity:"​);​
 +    Serial.println(h);​
 +    Serial.print("​Pressure:"​);​
 +    Serial.println(p);​
 +    Serial.println();​
 +    lcd.setCursor(0,​ 0);
 +    lcd.print(String(t)+"​C ​ ");
 +    lcd.print(String(h)+"​% ​   ");
 +  }
 +  ​
 watering() – controlează udarea efectivă. watering() – controlează udarea efectivă.
  
 +  //Watering
 +  void watering(){
 +    Serial.write("​watering"​);​
 +    digitalWrite(relay,​ HIGH);
 +    delay(2000);​
 +    digitalWrite(relay,​ LOW);
 +    delay(8000);​
 +    completeWatering(); ​
 +  }
 + 
 completeWatering() și playMelody() – afiseaza un mesaj concomitent cu melodia si dupa determina noua valoare a umiditatii. completeWatering() și playMelody() – afiseaza un mesaj concomitent cu melodia si dupa determina noua valoare a umiditatii.
 +  //Music
 +  void completeWatering() {
 +    // Clear LCD and show message
 +    lcd.clear();​
 +    lcd.setCursor(0,​ 0);
 +    lcd.print(" ​  ​Thank ​ you!   "​);​
 +    lcd.setCursor(0,​ 1);
 +    lcd.print(" ​  (^ O ^)/     "​);​
 +    delay(1000);​ // Allow LCD to complete before sound starts
 +    playMelody();​
 +    // After melody, update sensor readings
 +    lcd.clear();​
 +    checkBME280();​
 +    int moisture = analogRead(A0);​
 +    lcd.setCursor(0,​ 1);
 +    lcd.print("​Moisture:​ " + String(moisture));​
 +  }
  
 +  void playMelody() {
 +    tone(PIN, DO, BEAT); delay(BEAT);​
 +    tone(PIN, RE, BEAT); delay(BEAT);​
 +    tone(PIN, MI, 1200); delay(BEAT);​
 +    delay(BEAT * 3);
 +    tone(PIN, RE, BEAT); delay(BEAT);​
 +    tone(PIN, DO, BEAT); delay(BEAT);​
 +    delay(BEAT);​
 +    tone(PIN, DO, BEAT); delay(BEAT);​
 +    tone(PIN, RE, BEAT); delay(BEAT);​
 +    tone(PIN, MI, BEAT); delay(BEAT);​
 +    tone(PIN, RE, BEAT); delay(BEAT);​
 +    tone(PIN, DO, BEAT); delay(BEAT);​
 +    tone(PIN, RE, 1200); delay(BEAT);​
 +    delay(4400);​
 +  }
  
 == Validarea funcționării == == Validarea funcționării ==
Line 377: Line 493:
 Funcționare stabilă și interactivă:​ sistemul a funcționat fără blocaje, valorile afișate au fost coerente, iar controlul releului s-a dovedit fiabil după optimizarea logicii de inițializare. Funcționare stabilă și interactivă:​ sistemul a funcționat fără blocaje, valorile afișate au fost coerente, iar controlul releului s-a dovedit fiabil după optimizarea logicii de inițializare.
  
-**Voi adauga videoclipul final dupa ce vine noua pompaPana atunci, am atasat filmare pe care o am la assesmentul de pe moodle**+https://​youtube.com/​shorts/​lR0l8U7UWNU
  
 ===== Concluzii ===== ===== Concluzii =====
pm/prj2025/avaduva/andrei.iacob1009.1748333841.txt.gz · Last modified: 2025/05/27 11:17 by andrei.iacob1009
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