Smart Home Security Alarm — Arduino Mega simulation

Sistem keamanan rumah dan alarm multi-bahaya menggunakan Arduino Mega dengan sensor PIR, DHT11, Keypad, LCD, dan Buzzer.

An interactive Arduino Mega circuit simulation you can run free in your browser on Velxio, by s160425118.

Components

Sketch code

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <DHT.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 
const int pirPin = 7;
const int buzzerPin = 13;
const int ledPIRPin = 30;
const int ledTempPin = 31;

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}
};
byte rowPins[ROWS] = {22, 23, 24, 25};
byte colPins[COLS] = {26, 27, 28, 29};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

DHT dht(8, DHT11);

bool systemArmed = true;
bool alarmAktif = true; 

// Timer untuk pembacaan DHT agar tidak merusak timing loop
unsigned long lastDHTRead = 0;
float temp = 0.0;

void setup() {
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ledPIRPin, OUTPUT);
  pinMode(ledTempPin, OUTPUT);
  
  // Pastikan awal-awal buzzer mati total
  noTone(buzzerPin);
  digitalWrite(buzzerPin, LOW);
  
  dht.begin();
  lcd.begin(16, 2);
}

void loop() {
  char key = keypad.getKey();

  if (key == '*') {
    alarmAktif = false;
    noTone(buzzerPin);
    digitalWrite(buzzerPin, LOW); // Paksa mati
    Serial.println(">>> MUTE AKTIF");
  } else if (key == '#') {
    systemArmed = !systemArmed;
    alarmAktif = true; // Reset alarm saat ganti status ARM
    noTone(buzzerPin);
    digitalWrite(buzzerPin, LOW);
  }

  if (systemArmed) {
    // 1. Baca Sensor PIR
    bool intruder = (digitalRead(pirPin) == HIGH);

    // 2. Baca DHT11 setiap 2 detik sekali (agar pembacaan stabil)
    if (millis() - lastDHTRead >= 2000 || lastDHTRead == 0) {
      lastDHTRead = millis();
      float readT = dht.readTemperature();
      if (!isnan(readT)) {
        temp = readT;
      }
    }
    
    bool hot = (temp > 40.0);

    // Nyalakan LED Indikator
    digitalWrite(ledPIRPin, intruder ? HIGH : LOW);
    digitalWrite(ledTempPin, hot ? HIGH : LOW);

    // ===================================================
    // KONTROL BUZZER (FIX: DIAM JIKA TIDAK ADA BAHAYA)
    // ===================================================
    if ((intruder || hot) && alarmAktif) {
      tone(buzzerPin, 1000); // Bunyi HANYA saat ada bahaya DAN tidak di-mute
    } else {
      // Hentikan frekuensi tone dan matikan pin secara fisik
      noTone(buzzerPin);
      digitalWrite(buzzerPin, LOW); 
    }

    // TAMPILAN LCD
    lcd.setCursor(0, 0);
    if (!alarmAktif) {
      lcd.print("ALARM MUTED     ");
    } else if (intruder && hot) {
      lcd.print("!!! INTR + FIRE !");
    } else if (intruder) {
      lcd.print("!!! BAHAYA !");
    } else if (hot) {
      lcd.print("!!! FIRE !");
    } else {
      lcd.print("SYSTEM ARMED    ");
    }
    
    lcd.setCursor(0, 1);
    lcd.print("Temp: "); 
    lcd.print(temp, 1); 
    lcd.print("C   ");

  } else {
    // Kondisi DISARM: Buzzer dan LED DIJAMIN MATI
    noTone(buzzerPin);
    digitalWrite(buzzerPin, LOW);
    digitalWrite(ledPIRPin, LOW);
    digitalWrite(ledTempPin, LOW);
    
    lcd.setCursor(0, 0);
    l

More projects by s160425118