AI Assistant
Detail Karya Portofolio

Sistem Pembuka dan Penutup Pintu Otomatis

Dini Septiyani AR Oleh: Dini Septiyani AR

Ringkasan Portofolio

Sistem Pembuka Pintu Otomatis Berbasis Deteksi Gerakan dan Suhu adalah sebuah sistem yang dirancang untuk mengontrol pintu agar dapat membuka dan menutup secara otomatis berdasarkan dua faktor: keberadaan orang (deteksi gerakan) dan kondisi suhu lingkungan.

Deskripsi & Detail Proyek

TUJUAN 

Membuat sistem otomatis yang membuka pintu hanya jika terdeteksi gerakan manusia di sekitarnya dan suhu ruangan berada di atas ambang batas tertentu (misalnya, 25°C). Ini bisa digunakan untuk aplikasi seperti pintu otomatis di rumah atau ruang tertentu yang perlu menjaga suhu, misalnya rumah kaca atau laboratorium.

 

KOMPONEN UTAMA DAN FUNGSINYA

  1. Arduino UNO: Mikrokomputer yang mengontrol seluruh sistem.
  2. Motor Servo: Aktuator yang digunakan untuk menggerakkan pintu agar terbuka atau tertutup.
  3. Sensor PIR (Passive Infrared Sensor): Digunakan untuk mendeteksi gerakan manusia dengan mendeteksi perubahan radiasi inframerah yang disebabkan oleh pergerakan.
  4. Sensor Suhu (LM35): Sensor analog yang membaca suhu ruangan dan mengirimkan data ke Arduino untuk dikonversi menjadi nilai suhu dalam derajat Celcius.
  5. Breadboard dan kabel jumper: Untuk menghubungkan semua komponen ke Arduino.

PRINSIP KERJA

  1. Sensor PIR mendeteksi pergerakan manusia. Ketika mendeteksi gerakan, ia mengirimkan sinyal HIGH ke Arduino.
  2. Sensor suhu (LM35) membaca suhu ruangan dan mengirimkan sinyal analog ke Arduino, yang kemudian mengonversinya menjadi nilai suhu dalam derajat Celcius.
  3. Arduino mengevaluasi dua kondisi:
    • Apakah sensor PIR mendeteksi gerakan (sinyal HIGH).
    • Apakah suhu ruangan lebih tinggi dari ambang batas yang ditentukan (misalnya, 25°C).
  4. Jika kedua kondisi terpenuhi, Arduino menggerakkan motor servo untuk membuka pintu dengan memutar sudut servo ke 90 derajat.
  5. Setelah pintu terbuka selama 3 detik, Arduino menggerakkan servo kembali ke posisi awal (0 derajat) untuk menutup pintu.
  6. Serial Monitor digunakan untuk menampilkan informasi seperti suhu ruangan dan status deteksi gerakan, membantu proses debugging dan monitoring.

PROSES ALUR KERJA

  1. Sensor PIR aktif dan mulai mendeteksi pergerakan.
  2. Sensor suhu mengirim data ke Arduino, yang mengukur suhu.
  3. Arduino memproses data:
    • Jika gerakan terdeteksi dan suhu lebih tinggi dari 25°C, servo membuka pintu.
    • Jika tidak ada gerakan atau suhu tidak memenuhi syarat, pintu tetap tertutup.
  4. Servo bergerak untuk membuka pintu ketika kedua syarat terpenuhi, lalu menutupnya setelah beberapa detik.

KEUNTUNGAN

  • Efisiensi energi: Pintu hanya terbuka saat dibutuhkan, mengurangi penggunaan energi dan menjaga suhu dalam ruangan.
  • Keamanan: Sistem dapat dirancang untuk mencegah akses pada suhu tertentu, menjadikannya ideal untuk area dengan kontrol suhu.
  • Otomatisasi: Meningkatkan kenyamanan dengan menghilangkan kebutuhan membuka pintu secara manual.

CODINGAN

#include <LiquidCrystal.h>

#define pir_pin1 7

#define pir_pin2 8

#define suhu_pin A1

bool open = false;

bool terbuka = false;

bool standby = false;

bool standby2 = false;

int starttime = 0;

int prevtime = 0;

int waktuawal = 0;

int interval1 = 500;

int interval2 = 100;

int interval3 = 600;

float suhu = 0;

String status = "";


 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


 

void setup() {

  Serial.begin(9600);

  lcd.begin(16, 2);

  lcd.print("Selamat Datang");

  lcd.setCursor(0, 1);

  lcd.print("Mohon Ukur Suhu");

 

  pinMode(pir_pin1, INPUT);

  pinMode(pir_pin2, INPUT);

  pinMode(9, OUTPUT);

  pinMode(10, OUTPUT);  

}


 

void loop() {

  int pir1 = digitalRead(pir_pin1);

  int pir2 = digitalRead(pir_pin2);

  float suhu = ((analogRead(suhu_pin)*0.004882814)-0.5)*100;

  String temp = String(suhu,1);

  if(pir1 == HIGH){

    standby = false;

    if(suhu <= 37.5){

      bukapintu();

      if(terbuka==false){

        lcd.setCursor(0, 0);

        lcd.print("Suhu anda: "+temp);

        lcd.setCursor(0, 1);

        lcd.print("Anda boleh masuk");

      }

      else{

        lcd.setCursor(0, 0);

        lcd.print("Pintu Terbuka   ");

        lcd.setCursor(0, 1);

        lcd.print("Silahkan masuk  ");

      }

    }

    if(suhu > 37.5){

      if(standby2 == false){

        diam();

        waktuawal = millis();

        lcd.setCursor(0, 0);

        lcd.print("Suhu anda: "+temp);

        lcd.setCursor(0, 1);

        lcd.print("Tidak boleh masuk");

        standby2 = true;

        status = "Tidak boleh masuk, suhu tinggi";

      }

      if(millis()-waktuawal >= interval3){

        standby = true;

        standby2 = false;

        int haha = false;

      }

    }

  }

  if(pir1==LOW && pir2==HIGH){

    tutuppintu();

  }

  if(standby == true){

    lcd.setCursor(0, 0);

    lcd.print("Selamat Datang  ");

    lcd.setCursor(0, 1);

    lcd.print("Mohon Ukur Suhu ");

    status = "Pintu Tertutup, standby";

  }

 

  if(millis()-prevtime>= interval2){

    prevtime = millis();

    Serial.print("Suhu: "+String(suhu));

    Serial.print("   ");

    Serial.print("Pir 1: "+String(pir1));  

    Serial.print("   ");

    Serial.print("Pir 2: "+String(pir2));  

    Serial.print("   ");

    Serial.println("Status: "+status);  

  }

}


 

void bukapintu(){

  if(open==false){

    starttime=millis();

    buka();

    open=true;

    status = "Membuka Pintu";

  }

  if(millis()-starttime >= interval1){

    diam();

    status = "Pintu Terbuka";

    terbuka = true;

  }

}


 

void tutuppintu(){

  if(open==true){

    starttime=millis();

    tutup();

    status = "Menutup Pintu";

    open=false;

    resetlcd();

    lcd.setCursor(0, 0);

    lcd.print("Terima Kasih   ");

    lcd.setCursor(0, 1);

    lcd.print("Patuhi Protokol");

  }

  if(millis()-starttime>=interval1){

    diam();

    terbuka = false;

    standby = true;

  }

}


 

void tutup(){

  digitalWrite(9, HIGH);

  digitalWrite(10, LOW);

}


 

void buka(){

  digitalWrite(9, LOW);

  digitalWrite(10, HIGH);

}


 

void diam(){

  digitalWrite(9, LOW);

  digitalWrite(10, LOW);

}


 

void resetlcd(){

  lcd.setCursor(0, 0);

  lcd.print("                ");

  lcd.setCursor(0, 1);

  lcd.print("                ");

}