#include <Servo.h>
// Pin Definitions
#define ULTRASONIC_TRIG 3
#define ULTRASONIC_ECHO 4
#define GAS_SENSOR A0
#define RAIN_SENSOR A1
#define GREEN_LED 7
#define SERVO_PIN 9
// Constants
#define GAS_THRESHOLD 600
#define RAIN_THRESHOLD 500
#define DISTANCE_THRESHOLD 10
// Objects
Servo myServo;
void setup() {
pinMode(GREEN_LED, OUTPUT);
pinMode(ULTRASONIC_TRIG, OUTPUT);
pinMode(ULTRASONIC_ECHO, INPUT);
myServo.attach(SERVO_PIN);
Serial.begin(9600);
}
void loop() {
// Gas sensor condition
int gasLevel = analogRead(GAS_SENSOR);
if (gasLevel > GAS_THRESHOLD) {
digitalWrite(GREEN_LED, HIGH);
} else {
digitalWrite(GREEN_LED, LOW);
}
// Rain sensor condition
int rainLevel = analogRead(RAIN_SENSOR);
if (rainLevel > RAIN_THRESHOLD) {
myServo.write(90); // Open position
} else {
myServo.write(0); // Closed position
}
// Ultrasonic sensor condition
int distance = measureDistance();
if (distance < DISTANCE_THRESHOLD) {
myServo.write(90); // Open position
}
delay(500);
}
// Function to measure distance using Ultrasonic Sensor
int measureDistance() {
digitalWrite(ULTRASONIC_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG, LOW);
int duration = pulseIn(ULTRASONIC_ECHO, HIGH);
return duration * 0.034 / 2; // Convert to cm
}