// Pin definitions
#define DOOR_SENSOR_PIN 2 // Hall effect sensor for door
#define PIR_SENSOR_PIN 3 // PIR sensor for motion
#define LIGHT1_PIN 4 // Relay for Light 1
#define LIGHT2_PIN 5 // Relay for Light 2
#define LIGHT3_PIN 6 // Relay for Light 3
#define LIGHT4_PIN 7 // Relay for Light 4
#define FAN_CONTROL_PIN 9 // PWM pin for fan (PC817)
#define SOCKET_PIN 8 // Relay for power socket
#define TOUCH1_PIN A0 // Touch sensor for Light 1
#define TOUCH2_PIN A1 // Touch sensor for Light 2
#define TOUCH3_PIN A2 // Touch sensor for Light 3
#define TOUCH4_PIN A3 // Touch sensor for Light 4
#define FAN_TOUCH_PIN A4 // Touch sensor for fan control
#define SOCKET_TOUCH_PIN A5 // Touch sensor for socket
// Variables
unsigned long doorCloseTime = 0;
bool doorOpen = false;
int fanSpeed = 0; // 0=Off, 1=Speed1, ..., 5=Speed5
void setup() {
// Input pins
pinMode(DOOR_SENSOR_PIN, INPUT);
pinMode(PIR_SENSOR_PIN, INPUT);
pinMode(TOUCH1_PIN, INPUT);
pinMode(TOUCH2_PIN, INPUT);
pinMode(TOUCH3_PIN, INPUT);
pinMode(TOUCH4_PIN, INPUT);
pinMode(FAN_TOUCH_PIN, INPUT);
pinMode(SOCKET_TOUCH_PIN, INPUT);
// Output pins
pinMode(LIGHT1_PIN, OUTPUT);
pinMode(LIGHT2_PIN, OUTPUT);
pinMode(LIGHT3_PIN, OUTPUT);
pinMode(LIGHT4_PIN, OUTPUT);
pinMode(FAN_CONTROL_PIN, OUTPUT);
pinMode(SOCKET_PIN, OUTPUT);
// Initialize outputs
digitalWrite(LIGHT1_PIN, LOW);
digitalWrite(LIGHT2_PIN, LOW);
digitalWrite(LIGHT3_PIN, LOW);
digitalWrite(LIGHT4_PIN, LOW);
digitalWrite(SOCKET_PIN, LOW);
analogWrite(FAN_CONTROL_PIN, 0); // Fan off
}
void loop() {
// Door sensor logic
if (digitalRead(DOOR_SENSOR_PIN) == HIGH) {
doorOpen = true;
turnOnAllLights();
} else {
if (doorOpen) {
doorCloseTime = millis();
doorOpen = false;
}
}
// Check for door closed and no motion
if (!doorOpen && millis() - doorCloseTime > 120000) { // 2 minutes
if (digitalRead(PIR_SENSOR_PIN) == LOW) {
turnOffAllLightsAndFan();
}
}
// Touch sensor logic for manual controls
if (digitalRead(TOUCH1_PIN) == HIGH) toggleLight(LIGHT1_PIN);
if (digitalRead(TOUCH2_PIN) == HIGH) toggleLight(LIGHT2_PIN);
if (digitalRead(TOUCH3_PIN) == HIGH) toggleLight(LIGHT3_PIN);
if (digitalRead(TOUCH4_PIN) == HIGH) toggleLight(LIGHT4_PIN);
if (digitalRead(FAN_TOUCH_PIN) == HIGH) controlFan();
if (digitalRead(SOCKET_TOUCH_PIN) == HIGH) toggleLight(SOCKET_PIN);
}
// Function to turn on all lights
void turnOnAllLights() {
digitalWrite(LIGHT1_PIN, HIGH);
digitalWrite(LIGHT2_PIN, HIGH);
digitalWrite(LIGHT3_PIN, HIGH);
digitalWrite(LIGHT4_PIN, HIGH);
}
// Function to turn off all lights and fan
void turnOffAllLightsAndFan() {
digitalWrite(LIGHT1_PIN, LOW);
digitalWrite(LIGHT2_PIN, LOW);
digitalWrite(LIGHT3_PIN, LOW);
digitalWrite(LIGHT4_PIN, LOW);
analogWrite(FAN_CONTROL_PIN, 0); // Fan off
}
// Function to toggle light or socket state
void toggleLight(int pin) {
digitalWrite(pin, !digitalRead(pin));
delay(200); // Debounce delay
}
// Function to control fan speed
void controlFan() {
fanSpeed = (fanSpeed + 1) % 6; // Cycle through speeds
int pwmValue = map(fanSpeed, 0, 5, 0, 255); // Map speed to PWM value
analogWrite(FAN_CONTROL_PIN, pwmValue);
delay(200); // Debounce delay
}