const int ldr_pin = A0;
const int pir_pin = 4;
const int relay_pin = 6;
const int trig_pin = 12;
const int echo_pin = 11;
// SYSTEM VARIABLES
int ldr_value;
int pir_value;
int distance;
long duration;
int relay_state = LOW;
int ldrThreshold = 512;
int distanceThreshold = 200;
void setup() {
pinMode(pir_pin, INPUT);
pinMode(relay_pin, OUTPUT);
pinMode(trig_pin, OUTPUT);
pinMode(echo_pin, INPUT);
Serial.begin(9600);
}
void loop() {
// SENSOR READINGS
readLDR();
readPIR();
readUltrasonic();
printSensorsValues();
// MAIN LOGIC
if (ldr_value > ldrThreshold) { // night-time
if (pir_value == 1 || distance < distanceThreshold) {
relay_state = HIGH;
}
else {
relay_state = LOW;
}
}
else { // daytime
relay_state = LOW;
}
// ACTUATOR CONTROL
digitalWrite(relay_pin, relay_state);
}
void readLDR() {
ldr_value = analogRead(ldr_pin);
}
void readPIR() {
pir_value = digitalRead(pir_pin);
}
void readUltrasonic() {
digitalWrite(trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
duration = pulseIn(echo_pin, HIGH);
distance = 0.0345 * duration / 2;
}
void printSensorsValues() {
Serial.print("ldr: ");
Serial.print(ldr_value);
Serial.print("\tpir: ");
Serial.print(pir_value);
Serial.print("\tdistance: ");
Serial.println(distance);
}