//Libraries
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Servo.h>
#define DHTPIN 2 // Pin for DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
#define ONE_WIRE_BUS 3 // Pin for DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define trigPin 4 //Pin for HC-SR04 Trigger
#define echoPin 5 // Pin for HC-SR04 Echo
#define pirPin 6 // Pin for PIR sensor
// Servo declarations
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
long duration;
int distance;
void setup() {
Serial.begin(9600);
// Initialize DHT22
dht.begin();
//Initialize DS18B20
sensors.begin();
// Initialize HC-SR04
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize PIR sensor
pinMode(pirPin, INPUT);
// Attach servos to PWM pins
servo1.attach(9); // Servo 1 on Pin 9
servo2.attach(10); // Servo 2 on Pin 10
servo3.attach(11); // Servo 3 on Pin 11
servo4.attach(12); // Servo 4 on Pin 12
}
void loop() {
// Reading from DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: "); Serial.print(h); Serial.print("% ");
Serial.print("Temperature: "); Serial.print(t); Serial.println("°C");
// Reading from DS18B20
sensors.requestTemperatures();
float dsTemp = sensors.getTempCByIndex(0);
Serial.print("DS18B20 Temperature: "); Serial.print(dsTemp); Serial.println("°C");
// Reading from HC-SR04
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm");
// Reading from PIR
int motion = digitalRead(pirPin);
if (motion == HIGH) {
Serial.println("Motion detected!");
} else {
Serial.println("No motion.");
}
// Move servo1 based on temperature from DHT22
if (t > 25) {
servo1.write(90); // Move to 90 degrees if temp > 25°C
} else {
servo1.write(0); // Move to 0 degrees otherwise
}
// Move servo2 based on temperature from DS18B20
if (dsTemp > 30) {
servo2.write(180); // Move to 180 degrees if temp > 30°C
} else {
servo2.write(0); // Move to 0 degrees otherwise
}
// Move servo3 based on distance from HC-SR04
if (distance < 20) {
servo3.write(90); // Move to 90 degrees if distance < 20 cm
} else {
servo3.write(0); // Move to 0 degrees otherwise
}
// Move servo4 based on PIR sensor
if (motion == HIGH) {
servo4.write(180); // Move to 180 degrees if motion detected
} else {
servo4.write(0); // Move to 0 degrees otherwise
}
delay(1000); // Delay for 1 second before repeating}
}
Loading
ds18b20
ds18b20