This shows you the differences between two versions of the page.
pm:prj2025:avaduva:andrei.iacob1009 [2025/05/28 18:21] 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 == |