#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PIR_SENSOR 2
#define LDR_SENSOR A0
#define NTC_SENSOR A1
#define LED_PIR 3 //yellow
#define LED_LDR 4 //blue
#define LED_NTC 7 //red
#define LED_READY 5 //green
#define BUZZER 6
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(PIR_SENSOR, INPUT);
pinMode(LED_PIR, OUTPUT);
pinMode(LED_LDR, OUTPUT);
pinMode(LED_NTC, OUTPUT);
pinMode(LED_READY, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("System Ready");
// System Ready Signal
digitalWrite(LED_READY, HIGH);
tone(BUZZER, 1000, 500);
delay(2000);
noTone(BUZZER);
digitalWrite(LED_READY, LOW);
lcd.clear();
}
void loop() {
int pirStatus = digitalRead(PIR_SENSOR);
int ldrValue = analogRead(LDR_SENSOR);
int ldrThreshold = 500;
int ntcValue = analogRead(NTC_SENSOR);
// Convert NTC value to temperature (basic estimation)
float resistance = (1023.0 / ntcValue) - 1;
resistance = 10000 / resistance; // Assume 10k pull-down resistor
float temperature = 1 / (log(resistance / 10000) / 3950 + 1 / 298.15) - 273.15;
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C ");
if (pirStatus == HIGH) {
digitalWrite(LED_PIR, HIGH);
tone(BUZZER, 2000, 500);
lcd.setCursor(0, 1);
lcd.print("Motion Detected");
delay(1000);
} else {
digitalWrite(LED_PIR, LOW);
}
if (ldrValue < ldrThreshold) {
digitalWrite(LED_LDR, HIGH);
tone(BUZZER, 500, 1000);
lcd.setCursor(0, 1);
lcd.print("Low Light Alert");
delay(1000);
} else {
digitalWrite(LED_LDR, LOW);
}
if (temperature > 40) {
digitalWrite(LED_NTC, HIGH);
lcd.setCursor(0, 1);
lcd.print("High Temp Alert!");
delay(1000);
tone(BUZZER, 3000, 1500);
} else {
digitalWrite(LED_NTC, LOW);
}
delay(500);
}