first commit
This commit is contained in:
commit
8d4449021c
|
@ -0,0 +1,149 @@
|
|||
#include <Wire.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include "DHT.h"
|
||||
|
||||
// Set the LCD number of columns and rows
|
||||
int lcdColumns = 16;
|
||||
int lcdRows = 2;
|
||||
|
||||
// Set LCD address, number of columns and rows
|
||||
// If you don't know your display address, run an I2C scanner sketch
|
||||
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
|
||||
|
||||
// Define the DHT sensor pin
|
||||
const int dhtPin = 2;
|
||||
// Initialize DHT sensor
|
||||
DHT dht(dhtPin, DHT21);
|
||||
|
||||
// Mendefinisikan pin sensor cahaya
|
||||
const int lightSensorPin = 3;
|
||||
// Mendefinisikan pin sensor hujan
|
||||
const int rainSensorPin = 4;
|
||||
// Mendefinisikan pin relay untuk lampu
|
||||
const int lampRelayPin = 5;
|
||||
// Mendefinisikan pin untuk mengontrol motor (IN1, IN2)
|
||||
const int motorIn1Pin = 6;
|
||||
const int motorIn2Pin = 7;
|
||||
|
||||
// Variables to track the last state
|
||||
bool lastRainSensorValue = HIGH;
|
||||
bool lastLightSensorValue = LOW;
|
||||
bool motorRunning = false;
|
||||
|
||||
void setup() {
|
||||
// Initialize LCD
|
||||
Serial.begin(9600);
|
||||
lcd.init();
|
||||
// Turn on LCD backlight
|
||||
lcd.backlight();
|
||||
dht.begin();
|
||||
// Mengatur pin sensor hujan sebagai input
|
||||
pinMode(rainSensorPin, INPUT);
|
||||
|
||||
// Mengatur pin relay untuk lampu sebagai output
|
||||
pinMode(lampRelayPin, OUTPUT);
|
||||
// Matikan lampu secara default
|
||||
digitalWrite(lampRelayPin, LOW);
|
||||
|
||||
// Mengatur pin untuk mengontrol motor sebagai output
|
||||
pinMode(motorIn1Pin, OUTPUT);
|
||||
pinMode(motorIn2Pin, OUTPUT);
|
||||
stopMotor();
|
||||
}
|
||||
|
||||
void stopMotor() {
|
||||
digitalWrite(motorIn1Pin, LOW);
|
||||
digitalWrite(motorIn2Pin, LOW);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Read temperature and humidity from DHT sensor
|
||||
float temperatureC = dht.readTemperature();
|
||||
float humidity = dht.readHumidity();
|
||||
|
||||
// Check if DHT sensor reading is successful
|
||||
if (isnan(temperatureC) || isnan(humidity)) {
|
||||
// Print error message if reading failed
|
||||
Serial.println(F("Gagal Baca Data DHT sensor!"));
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Failed to read DHT");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("sensor data!");
|
||||
delay(2000);
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.print("Kelembaban: ");
|
||||
Serial.println(humidity);
|
||||
Serial.print("Suhu: ");
|
||||
Serial.println(temperatureC);
|
||||
|
||||
// Membaca nilai dari sensor hujan
|
||||
int rainSensorValue = digitalRead(rainSensorPin);
|
||||
|
||||
// Membaca nilai dari sensor cahaya
|
||||
int lightSensorValue = digitalRead(lightSensorPin);
|
||||
|
||||
// Clear LCD sebelum menampilkan data baru
|
||||
lcd.clear();
|
||||
|
||||
// Check if the motor needs to run based on the sensor values and only run it once
|
||||
if (!motorRunning && (rainSensorValue == LOW || lightSensorValue == HIGH)) {
|
||||
// Putar motor searah jarum jam (clockwise)
|
||||
digitalWrite(motorIn1Pin, HIGH);
|
||||
digitalWrite(motorIn2Pin, LOW);
|
||||
delay(2000); // Gerakkan motor selama 2 detik
|
||||
stopMotor();
|
||||
motorRunning = true; // Set motor running flag
|
||||
lcd.setCursor(9, 0);
|
||||
lcd.print("M: CW "); // Print status motor
|
||||
} else if (!motorRunning && (rainSensorValue != LOW && lightSensorValue != HIGH)) {
|
||||
// Putar motor berlawanan arah jarum jam (counter-clockwise)
|
||||
digitalWrite(motorIn1Pin, LOW);
|
||||
digitalWrite(motorIn2Pin, HIGH);
|
||||
delay(2000); // Gerakkan motor selama 2 detik
|
||||
stopMotor();
|
||||
motorRunning = true; // Set motor running flag
|
||||
lcd.setCursor(9, 0);
|
||||
lcd.print("M: CCW "); // Print status motor
|
||||
}
|
||||
|
||||
// Kontrol lampu berdasarkan kondisi suhu, hujan, dan cahaya
|
||||
if (temperatureC < 25 || rainSensorValue == LOW || lightSensorValue == HIGH) {
|
||||
// Hidupkan lampu jika suhu < 45, atau hujan terdeteksi, atau cuaca gelap
|
||||
digitalWrite(lampRelayPin, LOW);
|
||||
lcd.setCursor(8, 1);
|
||||
lcd.print("L: ON"); // Print status lampu
|
||||
} else {
|
||||
// Matikan lampu jika kondisi lain
|
||||
digitalWrite(lampRelayPin, HIGH);
|
||||
lcd.setCursor(8, 1);
|
||||
lcd.print("L: OFF"); // Print status lampu
|
||||
}
|
||||
|
||||
// Tampilkan status suhu, hujan, lampu, dan motor di LCD
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Suhu:");
|
||||
lcd.print(temperatureC);
|
||||
lcd.print("C");
|
||||
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Rain:");
|
||||
if (rainSensorValue == LOW) {
|
||||
lcd.print("Yes");
|
||||
} else {
|
||||
lcd.print("No");
|
||||
}
|
||||
|
||||
// Reset the motorRunning flag if conditions have changed
|
||||
if ((lastRainSensorValue != rainSensorValue) || (lastLightSensorValue != lightSensorValue)) {
|
||||
motorRunning = false;
|
||||
}
|
||||
|
||||
// Update the last sensor values
|
||||
lastRainSensorValue = rainSensorValue;
|
||||
lastLightSensorValue = lightSensorValue;
|
||||
|
||||
delay(2000);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
/***
|
||||
* TA Putri
|
||||
* Sesuaikan parameter suhu untuk otomasi lampu, Line 113
|
||||
* delay perputaran motor menyesuaikan dengan panjang tali yang ditarik/diulur. Line 96 dan 105
|
||||
*/
|
Loading…
Reference in New Issue