#include <DHT.h>
#include <Servo.h>
#include <Wire.h>
#include <SPI.h>
#include <MFRC522.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LDR_PIN A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define ULTRASONIC_TRIG 3
#define ULTRASONIC_ECHO 4
#define BUZZER 5
#define MQ2_SENSOR A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define RFID_SS 10
#define RFID_RST 9
#define SERVO_PIN 6
#define SOIL_MOISTURE A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define PUMP_RELAY 7
#define FAN_RELAY 8
// ปรับให้ใช้ขา D1, D2, D3 เป็นต้น
#define LIGHT_1 D1
#define LIGHT_2 D2
#define LIGHT_3 D3
#define LIGHT_4 D4
#define LIGHT_5 D5
#define LIGHT_6 D6
#define LIGHT_7 D7
#define LIGHT_8 D8
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
MFRC522 mfrc522(RFID_SS, RFID_RST);
void setup() {
Serial.begin(9600);
dht.begin();
servo.attach(SERVO_PIN);
SPI.begin();
mfrc522.PCD_Init();
pinMode(LDR_PIN, INPUT);
pinMode(ULTRASONIC_TRIG, OUTPUT);
pinMode(ULTRASONIC_ECHO, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(MQ2_SENSOR, INPUT);
pinMode(SOIL_MOISTURE, INPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(FAN_RELAY, OUTPUT);
// ตั้งค่าให้ไฟทั้งหมดเป็น OUTPUT
pinMode(LIGHT_1, OUTPUT);
pinMode(LIGHT_2, OUTPUT);
pinMode(LIGHT_3, OUTPUT);
pinMode(LIGHT_4, OUTPUT);
pinMode(LIGHT_5, OUTPUT);
pinMode(LIGHT_6, OUTPUT);
pinMode(LIGHT_7, OUTPUT);
pinMode(LIGHT_8, OUTPUT);
digitalWrite(PUMP_RELAY, LOW);
digitalWrite(FAN_RELAY, LOW);
}
void loop() {
checkTemperature();
checkLight();
checkUltrasonic();
checkGasSensor();
checkRFID();
checkSoilMoisture();
delay(500);
}
// เปิดพัดลมหากอุณหภูมิสูงกว่า 35°C
void checkTemperature() {
float temp = dht.readTemperature();
Serial.print("Temperature: ");
Serial.println(temp);
if (temp > 35) {
digitalWrite(FAN_RELAY, HIGH);
Serial.println("Fan ON");
} else {
digitalWrite(FAN_RELAY, LOW);
Serial.println("Fan OFF");
}
}
// เปิดไฟ 8 ดวงถ้าแสงมืด
void checkLight() {
int lightLevel = analogRead(LDR_PIN);
Serial.print("Light Level: ");
Serial.println(lightLevel);
if (lightLevel < 400) {
digitalWrite(LIGHT_1, HIGH);
digitalWrite(LIGHT_2, HIGH);
digitalWrite(LIGHT_3, HIGH);
digitalWrite(LIGHT_4, HIGH);
digitalWrite(LIGHT_5, HIGH);
digitalWrite(LIGHT_6, HIGH);
digitalWrite(LIGHT_7, HIGH);
digitalWrite(LIGHT_8, HIGH);
Serial.println("Lights ON");
} else {
digitalWrite(LIGHT_1, LOW);
digitalWrite(LIGHT_2, LOW);
digitalWrite(LIGHT_3, LOW);
digitalWrite(LIGHT_4, LOW);
digitalWrite(LIGHT_5, LOW);
digitalWrite(LIGHT_6, LOW);
digitalWrite(LIGHT_7, LOW);
digitalWrite(LIGHT_8, LOW);
Serial.println("Lights OFF");
}
}
// ส่งเสียงแจ้งเตือนหากมีคนเข้าใกล้
void checkUltrasonic() {
digitalWrite(ULTRASONIC_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG, LOW);
long duration = pulseIn(ULTRASONIC_ECHO, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
if (distance < 50) {
digitalWrite(BUZZER, HIGH);
Serial.println("Buzzer ON: Intruder detected!");
} else {
digitalWrite(BUZZER, LOW);
}
}
// แจ้งเตือนหากควันหรือแก๊สเกินค่าที่กำหนด
void checkGasSensor() {
int gasLevel = analogRead(MQ2_SENSOR);
Serial.print("Gas Level: ");
Serial.println(gasLevel);
if (gasLevel > 300) {
Serial.println("Warning: High gas detected!");
}
}
// เปิด Servo Motor เมื่อใช้ RFID
void checkRFID() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
Serial.print("RFID UID: ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
servo.write(90);
delay(3000);
servo.write(0);
Serial.println("Servo Activated");
}
// เปิดปั๊มน้ำหากดินแห้ง
void checkSoilMoisture() {
int moisture = analogRead(SOIL_MOISTURE);
Serial.print("Soil Moisture: ");
Serial.println(moisture);
if (moisture < 400) {
digitalWrite(PUMP_RELAY, HIGH);
Serial.println("Pump ON");
} else {
digitalWrite(PUMP_RELAY, LOW);
Serial.println("Pump OFF");
}
}
#include <DHT.h>
#include <Servo.h>
#include <Wire.h>
#include <SPI.h>
#include <MFRC522.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define LDR_PIN A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define ULTRASONIC_TRIG 3
#define ULTRASONIC_ECHO 4
#define BUZZER 5
#define MQ2_SENSOR A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define RFID_SS 10
#define RFID_RST 9
#define SERVO_PIN 6
#define SOIL_MOISTURE A0 // ใช้ A0 สำหรับ ESP8266 (หรือปรับเป็นขาอนาล็อกที่รองรับใน ESP32)
#define PUMP_RELAY 7
#define FAN_RELAY 8
// ปรับให้ใช้ขา D1, D2, D3 เป็นต้น
#define LIGHT_1 D1
#define LIGHT_2 D2
#define LIGHT_3 D3
#define LIGHT_4 D4
#define LIGHT_5 D5
#define LIGHT_6 D6
#define LIGHT_7 D7
#define LIGHT_8 D8
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
MFRC522 mfrc522(RFID_SS, RFID_RST);
void setup() {
Serial.begin(9600);
dht.begin();
servo.attach(SERVO_PIN);
SPI.begin();
mfrc522.PCD_Init();
pinMode(LDR_PIN, INPUT);
pinMode(ULTRASONIC_TRIG, OUTPUT);
pinMode(ULTRASONIC_ECHO, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(MQ2_SENSOR, INPUT);
pinMode(SOIL_MOISTURE, INPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(FAN_RELAY, OUTPUT);
// ตั้งค่าให้ไฟทั้งหมดเป็น OUTPUT
pinMode(LIGHT_1, OUTPUT);
pinMode(LIGHT_2, OUTPUT);
pinMode(LIGHT_3, OUTPUT);
pinMode(LIGHT_4, OUTPUT);
pinMode(LIGHT_5, OUTPUT);
pinMode(LIGHT_6, OUTPUT);
pinMode(LIGHT_7, OUTPUT);
pinMode(LIGHT_8, OUTPUT);
digitalWrite(PUMP_RELAY, LOW);
digitalWrite(FAN_RELAY, LOW);
}
void loop() {
checkTemperature();
checkLight();
checkUltrasonic();
checkGasSensor();
checkRFID();
checkSoilMoisture();
delay(500);
}
// เปิดพัดลมหากอุณหภูมิสูงกว่า 35°C
void checkTemperature() {
float temp = dht.readTemperature();
Serial.print("Temperature: ");
Serial.println(temp);
if (temp > 35) {
digitalWrite(FAN_RELAY, HIGH);
Serial.println("Fan ON");
} else {
digitalWrite(FAN_RELAY, LOW);
Serial.println("Fan OFF");
}
}
// เปิดไฟ 8 ดวงถ้าแสงมืด
void checkLight() {
int lightLevel = analogRead(LDR_PIN);
Serial.print("Light Level: ");
Serial.println(lightLevel);
if (lightLevel < 400) {
digitalWrite(LIGHT_1, HIGH);
digitalWrite(LIGHT_2, HIGH);
digitalWrite(LIGHT_3, HIGH);
digitalWrite(LIGHT_4, HIGH);
digitalWrite(LIGHT_5, HIGH);
digitalWrite(LIGHT_6, HIGH);
digitalWrite(LIGHT_7, HIGH);
digitalWrite(LIGHT_8, HIGH);
Serial.println("Lights ON");
} else {
digitalWrite(LIGHT_1, LOW);
digitalWrite(LIGHT_2, LOW);
digitalWrite(LIGHT_3, LOW);
digitalWrite(LIGHT_4, LOW);
digitalWrite(LIGHT_5, LOW);
digitalWrite(LIGHT_6, LOW);
digitalWrite(LIGHT_7, LOW);
digitalWrite(LIGHT_8, LOW);
Serial.println("Lights OFF");
}
}
// ส่งเสียงแจ้งเตือนหากมีคนเข้าใกล้
void checkUltrasonic() {
digitalWrite(ULTRASONIC_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG, LOW);
long duration = pulseIn(ULTRASONIC_ECHO, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
if (distance < 50) {
digitalWrite(BUZZER, HIGH);
Serial.println("Buzzer ON: Intruder detected!");
} else {
digitalWrite(BUZZER, LOW);
}
}
// แจ้งเตือนหากควันหรือแก๊สเกินค่าที่กำหนด
void checkGasSensor() {
int gasLevel = analogRead(MQ2_SENSOR);
Serial.print("Gas Level: ");
Serial.println(gasLevel);
if (gasLevel > 300) {
Serial.println("Warning: High gas detected!");
}
}
// เปิด Servo Motor เมื่อใช้ RFID
void checkRFID() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
Serial.print("RFID UID: ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
servo.write(90);
delay(3000);
servo.write(0);
Serial.println("Servo Activated");
}
// เปิดปั๊มน้ำหากดินแห้ง
void checkSoilMoisture() {
int moisture = analogRead(SOIL_MOISTURE);
Serial.print("Soil Moisture: ");
Serial.println(moisture);
if (moisture < 400) {
digitalWrite(PUMP_RELAY, HIGH);
Serial.println("Pump ON");
} else {
digitalWrite(PUMP_RELAY, LOW);
Serial.println("Pump OFF");
}
}