#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
// Define pins
#define VOLTAGE_POT_PIN 34 // Potentiometer to simulate voltage input to GPIO34
#define CURRENT_POT_PIN 35 // Potentiometer to simulate current input to GPIO35
#define DHTPIN 15 // DHT22 data pin to GPIO15
#define TRIG_PIN 5 // Ultrasonic sensor Trig pin to GPIO5
#define ECHO_PIN 18 // Ultrasonic sensor Echo pin to GPIO18
#define RED_LED_PIN 25 // Red LED pin to GPIO25
#define GREEN_LED_PIN 26 // Green LED pin to GPIO26
// Define constants
#define DHTTYPE DHT22 // DHT22 (AM2302)
#define TEMP_THRESHOLD 65 // Temperature threshold for red LED activation
#define DUST_THRESHOLD 10 // Dust threshold in cm
// Initialize LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16 chars and 2 line display
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize DHT sensor
dht.begin();
// Initialize Ultrasonic Sensor
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Initialize LEDs
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
// Turn on green LED initially
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
}
float readDistanceCM() {
// Send a 10us pulse to trigger the sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Read the echo pin
long duration = pulseIn(ECHO_PIN, HIGH);
// Calculate the distance in cm
float distance = duration * 0.034 / 2;
return distance;
}
void loop() {
// Read potentiometer values
int voltagePotValue = analogRead(VOLTAGE_POT_PIN);
int currentPotValue = analogRead(CURRENT_POT_PIN);
// Convert potentiometer values to meaningful units
float simulatedVoltage = (voltagePotValue / 4095.0) * 3.3; // Assuming 3.3V reference
float simulatedCurrent = (currentPotValue / 4095.0) * 3.3; // Assuming 3.3V reference
// Read temperature and humidity
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read distance from ultrasonic sensor
float distance = readDistanceCM();
// Display simulated voltage and current on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("V: ");
lcd.print(simulatedVoltage, 2);
lcd.print("V ");
lcd.print("I: ");
lcd.print(simulatedCurrent, 2);
lcd.print("A");
delay(2000); // Wait 2 seconds
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("%");
delay(2000); // Wait 2 seconds
lcd.clear();
if (temperature > TEMP_THRESHOLD) {
// Temperature above threshold
lcd.setCursor(0, 0);
lcd.print("High Temp");
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
} else {
// Normal temperature
lcd.setCursor(0, 0);
lcd.print("Normal Temp");
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
}
// Display dust detection status on LCD
lcd.setCursor(0, 1);
if (distance <= DUST_THRESHOLD) {
lcd.print("Dust Detected");
} else {
lcd.print("No Dust");
}
delay(2000); // Wait 2 seconds
}