#include <OneWire.h>
#include <DallasTemperature.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 2 // Temperature sensor pin
#define PIR_SENSOR_PIN 3 // Motion sensor pin
#define LED_PIN 4 // LED pin
#define SERVO_PIN 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int tempThreshold = 35.8; // Temperature threshold in Celsius
bool isDoorOpen = false;
void setup() {
sensors.begin();
pinMode(PIR_SENSOR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(SERVO_PIN, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
}
void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
bool motionDetected = digitalRead(PIR_SENSOR_PIN) == HIGH;
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.print(" temperature ");
if (temperature < tempThreshold && !motionDetected) {
digitalWrite(LED_PIN, HIGH);
if (!isDoorOpen) {
openDoor();
}
} else {
digitalWrite(LED_PIN, LOW);
if (isDoorOpen) {
closeDoor();
}
}
delay(1000); // Delay for a second (adjust as needed)
}
void openDoor() {
servo.attach(SERVO_PIN);
servo.write(90); // Adjust the angle to open the door
delay(500); // Wait for the servo to move
servo.detach();
isDoorOpen = true;
}
void closeDoor() {
servo.attach(SERVO_PIN);
servo.write(0); // Adjust the angle to close the door
delay(500); // Wait for the servo to move
servo.detach();
isDoorOpen = false;
}