Differences

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

Link to this comparison view

pm:prj2025:avaduva:andrei.iacob1009 [2025/05/29 15:25]
andrei.iacob1009 [Software Design]
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. +  void loop() { 
-  if(counter == 1) { +    //Check temperature,​ humidity, and soil humidity once a minute. 
-    checkBME280();​ +    if(counter == 1) { 
-    checkWater();​ +      checkBME280();​ 
-    checkMoisture();​ +      checkWater();​ 
-  } else { +      checkMoisture();​ 
-    checkWater();​ +    } else { 
-  +      checkWater();​ 
-  delay(1000); //10sec = 10000 +    
-  counter++;​ +    delay(10000); //10sec = 10000 
-  if(counter >= 6){ +    counter++;​ 
-    counter = 0;+    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 +  ​//moisture sensor 
-void checkMoisture() { +  void checkMoisture() { 
-  //Measure soil humidity +    //Measure soil humidity 
-  int moisture = analogRead(A0);​ +    int moisture = analogRead(A0);​ 
-  Serial.print("​Moisture Sensor Value:"​);​ +    Serial.print("​Moisture Sensor Value:"​);​ 
-  Serial.println(moisture);​ +    Serial.println(moisture);​ 
-  lcd.setCursor(0, ​ 1); +    lcd.setCursor(0, ​ 1); 
-  lcd.print("​Moisture:​ " + String(moisture) + " ​  "​);​ +    lcd.print("​Moisture:​ " + String(moisture) + " ​  "​);​ 
-  if (moisture ​ <= 300) { +    if (moisture ​ <= 300) { 
-    water_count++;​ +      water_count++;​ 
-    Serial.println(water_count);​ +      //Serial.println(water_count);​ 
-    if(water_count == 5){//To wait for the water  to go through the pot. +      if(water_count == 5){//To wait for the water  to go through the pot. 
-      watering();​ +        watering();​ 
-      water_count = 0;+        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 ==
pm/prj2025/avaduva/andrei.iacob1009.1748521527.txt.gz · Last modified: 2025/05/29 15:25 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