Modul 4: Percobaan
Sistem Monitoring Greenhouse Otomatis Untuk Tanaman Sayuran
1. Prosedur [Kembali]
- Siapkan alat dan bahan yaitu dengan komponen utama dan komponen lainnya seperti Arduino UNO, LCD, LED, Sensor hujan, Sensor DHT11, Sensor LM35, Sensor BMP180, Motor DC, Resistor, L293D Driver
- Rangkai sesuai gambar percobaan
- Rancang kerja rangkaian sesuai flowchart
- Tekan tombol “Play” untuk menjalankan simulasi
- Arduino

- LCD 16x2
- LED

- Resistor
- Sensor LDR

- Sensor Rain
- Sensor DHT11
- L293D Driver
- Motor DC
- Sensor BMP180
- Sensor LM35
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Kondisi (logika):
Rain Sensor = jika tidak hujan rumah kaca membuka (motor bergerak)
LDR = Cahaya kurang, lampu hidup sebagai pencahayaan buatan (indikatornya menggunakan LED)
Sensor LM35 = Jika suhu tinggi, akan mengaktifkan motor sebagai kipas untuk pendingin greenhouse
DHT11 = jika kelembaban tinggi, membuka ventilasi untuk mengurangi kelembaban (motor DC bergerak)
Sensor BMP180, bertindak sebagai prediksi cuaca dan kondisi lingkungan, pengawasan ventilasi. Jika nanti kondisi memang tidak normal, maka rumah kaca ini akan memproteksi dirinya dengan cara menutup secara keseluruhan, dan menggunakan alternatif lainnya yang tersedia di dalam sistem rumah kaca, seperti misalnya kurangnya cahaya, maka LED akan hidup sebagai indikator pencahayaan.
1. Prediksi Cuaca dan Kondisi Lingkungan
Deskripsi: Perubahan tekanan udara sering kali merupakan indikator perubahan cuaca.
Manfaat: Dengan memantau tekanan udara, Anda dapat memprediksi perubahan cuaca yang akan datang dan mengambil tindakan pencegahan untuk melindungi tanaman.
2. Pengawasan Ventilasi
Deskripsi: Tekanan udara yang tidak normal dapat menunjukkan masalah dengan ventilasi rumah kaca.
Manfaat: Dengan memantau tekanan udara, Anda dapat memastikan bahwa ventilasi berfungsi dengan baik, menghindari kondisi yang bisa merugikan tanaman.
Kondisi normal 2.34 pascal, di bawah ini berarti kondisi tidak normal.
4. Flowchart dan Listing Program [Kembali]
Flowchart
master
#include <Wire.h> // Library for I2C communication | |
#include <LiquidCrystal_I2C.h> // Library for I2C LCD | |
#include <DHT.h> | |
#include <Adafruit_BMP085.h> // Library for BMP180 sensor | |
// Pin Definitions | |
#define PIN_HUJAN 7 | |
#define DHT11_SENSOR 2 | |
#define DHTTYPE DHT11 // Type of DHT sensor | |
float pressure; | |
const int ldrPin = A1; // Analog pin connected to LDR sensor | |
const int thresholdr = 500; // Threshold for sunlight detection (adjust as necessary) | |
const int LM_SENSOR = A0; // Analog pin for LM35 temperature sensor | |
const int threshold = 25; // Threshold temperature value for control | |
// Initialize LCD | |
LiquidCrystal_I2C lcd(0x27, 16, 2); | |
DHT dht(DHT11_SENSOR, DHT11); | |
Adafruit_BMP085 bmp; | |
void setup() { | |
Serial.begin(9600); // Serial monitor for debugging | |
dht.begin(); | |
bmp.begin(); // Initialize BMP180 sensor | |
pinMode(LM_SENSOR, INPUT); | |
pinMode(PIN_HUJAN, INPUT); | |
pinMode(ldrPin, INPUT); // Set the pin mode for LDR | |
lcd.init(); // Initialize the LCD | |
lcd.backlight(); // Turn on the backlight | |
lcd.begin(16, 2); // Initialize the LCD with 16 columns and 2 rows | |
// Display initial message | |
lcd.setCursor(0, 0); | |
lcd.print("System Starting"); | |
delay(2000); // Wait for 2 seconds | |
} | |
void loop() { | |
float t = dht.readTemperature(); | |
float h = dht.readHumidity(); | |
int Hujan = digitalRead(PIN_HUJAN); | |
pressure = bmp.readPressure() / 100.0; // Read pressure in hPa | |
int sensorValue = analogRead(LM_SENSOR); | |
float TC = (sensorValue * 5.0) / 1023.0 * 100.0; | |
lcd.setCursor(0, 0); | |
lcd.print("T:"); | |
lcd.print(TC); | |
lcd.print("C"); | |
lcd.setCursor(0, 1); | |
lcd.print("H:"); | |
lcd.print(h); | |
lcd.print("%"); | |
lcd.setCursor(8, 0); | |
lcd.print("P: "); | |
lcd.print(pressure); | |
lcd.print("hPa"); | |
lcd.setCursor(8, 1); | |
lcd.print("R: "); | |
lcd.print(Hujan); | |
delay(2000); | |
// Read sensor values | |
int ldrValue = analogRead(ldrPin); // Using analogRead instead of digitalRead for LDR | |
// Print sensor values to Serial Monitor for debugging | |
Serial.print("Temp: "); | |
Serial.print(t); | |
Serial.print("C, Hum: "); | |
Serial.print(h); | |
Serial.print(", Hujan: "); | |
Serial.print(Hujan); | |
Serial.print(", LM35: "); | |
Serial.print(TC); | |
Serial.print(", LDR: "); | |
Serial.println(ldrValue); | |
// Condition to control heater and fan based on temperature | |
if (TC > threshold) { | |
Serial.write('D'); | |
Serial.println("Motor ON"); | |
} else { | |
Serial.write('z'); // This should be consistent with slave code | |
Serial.println("Motor OFF"); | |
} | |
// Send LDR value | |
if (ldrValue > thresholdr) { | |
Serial.write('l'); // LED OFF (consistent with slave code) | |
Serial.println("Light detected"); | |
} else { | |
Serial.write('L'); // LED ON (consistent with slave code) | |
Serial.println("Darkness detected"); | |
} | |
delay(10); // Small delay to avoid flooding the serial communication | |
} |
// Pin Definitions | |
#define LED_PIN 7 | |
#define MOTOR1 3 // Pin yang terhubung ke IN1 L293D | |
#define MOTOR2 4 // Pin yang terhubung ke IN2 L293D | |
#define EN_PIN 5 // Pin yang terhubung ke EN L293D | |
void setup() { | |
Serial.begin(9600); // Serial monitor for debugging | |
pinMode(LED_PIN, OUTPUT); | |
pinMode(MOTOR1, OUTPUT); | |
pinMode(MOTOR2, OUTPUT); | |
pinMode(EN_PIN, OUTPUT); | |
// Enable the motor driver | |
digitalWrite(EN_PIN, HIGH); | |
} | |
void loop() { | |
if (Serial.available()) { | |
char message = Serial.read(); | |
Serial.print("Received message: "); | |
Serial.println(message); | |
if (message == 'L') { | |
digitalWrite(LED_PIN, HIGH); | |
Serial.println("Turning LED_PIN ON"); | |
} | |
else if (message == 'l') { | |
digitalWrite(LED_PIN, LOW); | |
Serial.println("Turning LED_PIN OFF"); | |
} | |
if (message == 'D') { | |
digitalWrite(MOTOR1, HIGH); | |
digitalWrite(MOTOR2, LOW); // Logika untuk putaran maju | |
Serial.println("Turning MOTOR1 ON, MOTOR2 OFF"); | |
} | |
else if (message == 'z') { | |
digitalWrite(MOTOR1, LOW); | |
digitalWrite(MOTOR2, LOW); // Mematikan motor | |
Serial.println("Turning MOTOR1 and MOTOR2 OFF"); | |
} | |
} | |
delay(100); // Small delay to avoid flooding the serial communication | |
} |
Komentar
Posting Komentar