#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin Definitions
#define OUT_PIN 4
#define LEDRED 16
#define LEDGREEN 17
// Threshold Definition
#define CHEMICAL_THRESHOLD 50
// Create an LCD object (I2C address 0x27, 16 characters, 2 lines)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Function to simulate chemical concentration readings
int readChemicalConcentration() {
return random(50, 101); // Random value between 0-100 ppm
}
void setup() {
// Initialize Serial Communication
Serial.begin(115200);
// Initialize Pins
pinMode(OUT_PIN, OUTPUT);
pinMode(LEDRED, OUTPUT);
pinMode(LEDGREEN, OUTPUT);
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Chemical Sensor");
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(2000);
// Generate random concentration
randomSeed(analogRead(A0));
lcd.clear();
int concentration = readChemicalConcentration();
// Hazard Detection Logic
if (concentration > CHEMICAL_THRESHOLD) {
// Hazardous: Turn on RED LED, show alert
digitalWrite(OUT_PIN, HIGH);
digitalWrite(LEDRED, HIGH);
digitalWrite(LEDGREEN, LOW);
Serial.print("Hazardous chemical detected! Concentration: ");
lcd.setCursor(0, 0);
lcd.print("ALERT: HAZARD");
lcd.setCursor(0, 1);
lcd.print("Alert sent to Municipality");
} else {
// Safe: Turn on GREEN LED
digitalWrite(OUT_PIN, LOW);
digitalWrite(LEDRED, LOW);
digitalWrite(LEDGREEN, HIGH);
Serial.print("Safe chemical level. Concentration: ");
lcd.setCursor(0, 0);
lcd.print("Status: Safe");
lcd.setCursor(0, 1);
lcd.print("Conc: ");
lcd.print(concentration);
lcd.print(" ppm");
}
Serial.println(concentration);
}
void loop() {
delay(1000); // Delay before next operation (can be extended if no new readings)
}