OKUYAT MORGAN JEREMIAH



#include 
#include 
#include 
#include 

// LCD (I2C address usually 0x27 or 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);

// RTC
RTC_DS3231 rtc;

// DHT11
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// Sensors
#define ALCOHOL_SENSOR A0
#define TRIG_PIN 3
#define ECHO_PIN 4

// Outputs
#define GREEN_LED 5
#define RED_LED 6
#define BLUE_LED 7
#define YELLOW_LED 8
#define BUZZER 9
#define RELAY 10
#define FAN 11

// Thresholds
int alcoholLimit = 400;
int distanceLimit = 50;
int tempLimit = 30;

void setup() {
  Serial.begin(9600);

  // LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("SMART HELMET");
  delay(2000);
  lcd.clear();

  // RTC
  rtc.begin();

  // DHT
  dht.begin();

  // Pins
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  pinMode(YELLOW_LED, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(RELAY, OUTPUT);
  pinMode(FAN, OUTPUT);
}

void loop() {

  // ===== TIME DISPLAY =====
  DateTime now = rtc.now();

  lcd.setCursor(0,0);
  lcd.print("Time: ");
  if (now.hour() < 10) lcd.print("0");
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) lcd.print("0");
  lcd.print(now.minute());

  // =======================
  // 🍺 ALCOHOL DETECTION
  // =======================
  int alcoholValue = analogRead(ALCOHOL_SENSOR);

  if (alcoholValue > alcoholLimit) {
    digitalWrite(RELAY, LOW);
    digitalWrite(RED_LED, HIGH);
    digitalWrite(GREEN_LED, LOW);
    digitalWrite(BUZZER, HIGH);

    lcd.setCursor(0,1);
    lcd.print("ALCOHOL! STOP  ");
  } else {
    digitalWrite(RELAY, HIGH);
    digitalWrite(GREEN_LED, HIGH);
    digitalWrite(RED_LED, LOW);

    digitalWrite(BUZZER, LOW);

    lcd.setCursor(0,1);
    lcd.print("SAFE            ");
  }

  // =======================
  // 🚧 OBSTACLE DETECTION
  // =======================
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long duration = pulseIn(ECHO_PIN, HIGH);
  int distance = duration * 0.034 / 2;

  if (distance < distanceLimit && distance > 0) {
    digitalWrite(BLUE_LED, HIGH);
    digitalWrite(BUZZER, HIGH);

    lcd.setCursor(0,1);
    lcd.print("OBSTACLE!       ");
  } else {
    digitalWrite(BLUE_LED, LOW);
  }

  // =======================
  // 🌡️ TEMPERATURE
  // =======================
  float temp = dht.readTemperature();

  if (temp > tempLimit) {
    digitalWrite(FAN, HIGH);
    digitalWrite(YELLOW_LED, HIGH);

    lcd.setCursor(0,1);
    lcd.print("HOT! FAN ON     ");
  } else {
    digitalWrite(FAN, LOW);
    digitalWrite(YELLOW_LED, LOW);
  }

  delay(500);
}
Email whatsapp