Untitled
unknown
plain_text
6 months ago
4.7 kB
9
Indexable
#include <Wire.h> // BME280 #include <Adafruit_BME280.h> // OLED #include <I2CLiquidCrystal.h> // ------------------------------ // BME280 #define I2C_SCL 5 #define I2C_SDA 4 Adafruit_BME280 bme; // OLED #define I2C_ADDR 0x3c #define BRIGHT 127 I2CLiquidCrystal oled(I2C_ADDR, (uint8_t)BRIGHT); // Music #define BEAT 300 #define PIN 10 #define DO 262 #define RE 294 #define MI 330 #define FA 349 #define SO 392 #define RA 440 #define SI 494 #define HDO 523 // ---------------------- // Timer int counter = 0; // Ultrasonic Sensor int Trig = 8; int Echo = 9; int Duration; float Distance; // LED int led = 7; // مستشعر الرطوبة int water_count = 0; // Relay int relay = 13; void setup() { // BME280 Serial.begin(9600); Wire.begin(); if (!bme.begin(0x76)) { Serial.println("لم يتم العثور على مستشعر BME280 صالح، تحقق من الأسلاك!"); while (1); } delay(100); // OLED oled.begin(16, 2); oled.display(); oled.clear(); oled.noBlink(); oled.noCursor(); oled.home(); oled.print("انتظر بضع دقائق."); // Ultrasonic Sensor pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); // LED pinMode(led, OUTPUT); // Relay pinMode(relay, OUTPUT); } void loop() { // تحقق من درجة الحرارة والرطوبة ورطوبة التربة مرة كل دقيقة. if (counter == 1) { checkBME280(); checkWater(); checkMoisture(); } delay(10000); // 10 ثواني counter++; if (counter >= 6) { counter = 0; } checkWater(); } // BME280 void checkBME280() { // الحصول على البيانات من مستشعر BME280 float t = bme.readTemperature(); // °C float h = bme.readHumidity(); // % float p = bme.readPressure() / 100.0F; // hPa Serial.print("درجة الحرارة: "); Serial.println(t); Serial.print("الرطوبة: "); Serial.println(h); Serial.print("الضغط: "); Serial.println(p); Serial.println(); oled.setCursor(0, 0); oled.print(String(t) + "C "); oled.print(String(h) + "% "); } // Ultrasonic Sensor void checkWater() { // تحقق من مستوى المياه في الدلو. digitalWrite(Trig, LOW); delayMicroseconds(1); digitalWrite(Trig, HIGH); delayMicroseconds(11); digitalWrite(Trig, LOW); Duration = pulseIn(Echo, HIGH); if (Duration > 0) { Distance = Duration / 2; Distance = Distance * 340 * 100 / 1000000; // سرعة الموجات فوق الصوتية 340 م/ث = 34000 سم/ث = 0.034 سم/ميكروثانية Serial.print(Distance); Serial.println(" سم"); if (Distance > 12) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } } // مستشعر الرطوبة void checkMoisture() { // قياس رطوبة التربة int moisture = analogRead(A0); Serial.print("قيمة مستشعر الرطوبة: "); Serial.println(moisture); oled.setCursor(0, 1); oled.print("الرطوبة: " + String(moisture) + " "); if (moisture <= 300) { water_count++; if (water_count == 5) { // الانتظار حتى تمر المياه عبر الأصيص. watering(); water_count = 0; } } } // الري void watering() { digitalWrite(relay, HIGH); delay(2000); digitalWrite(relay, LOW); delay(8000); completeWatering(); counter++; } // الموسيقى void completeWatering() { // دعهم يعرفون أن الري اكتمل. oled.setCursor(0, 0); oled.print(" شكرًا لك! "); oled.setCursor(0, 1); oled.print(" (^ O ^)/ "); tone(PIN, DO, BEAT); // C delay(BEAT); tone(PIN, RE, BEAT); // D delay(BEAT); tone(PIN, MI, 1200); // E delay(BEAT); delay(BEAT); delay(BEAT); tone(PIN, RE, BEAT); // D delay(BEAT); tone(PIN, DO, BEAT); // C delay(BEAT); delay(BEAT); tone(PIN, DO, BEAT); // C delay(BEAT); tone(PIN, RE, BEAT); // D delay(BEAT); tone(PIN, MI, BEAT); // E delay(BEAT); tone(PIN, RE, BEAT); // D delay(BEAT); tone(PIN, DO, BEAT); // C delay(BEAT); tone(PIN, RE, 1200); // D delay(BEAT); delay(BEAT); delay(4400); counter++; oled.setCursor(0, 0); oled.print(" "); oled.setCursor(0, 1); oled.print(" "); checkBME280(); int moisture = analogRead(A0); oled.setCursor(0, 1); oled.print("الرطوبة: " + String(moisture) + " "); }
Editor is loading...
Leave a Comment