Widget Ads

Projek

Dimmerduino


Arduino adalah satu dari sekian perkembangan mikrokontroler yang membahagiakan. Kit ini kecil namun lengkap dan mudah digunakan. Dengan alasan itulah kami akan membuat projek tentang dimmer digital memanfaatkan arduino sebagai otaknya. Konsepnya adalah mengatur redup terang sebuah lampu pijar berdasarkan jumlah orang didalam ruangan serta tepukan tangan.
Dua buah PIR Motion Sensor dipasangkan pada pintu masuk yang diletakkan berdekatan dengan selisih jarak sekitar 30 cm. Sensor tersebut akan membaca gerakan orang saat masuk atau keluar. Misal kita namakan PIR 1 untuk sensor yang depan dan PIR 2 untuk yang belakang. Jika sensor PIR 1 mendeteksi gerakan kemudian diikuti PIR 2 mendeteksi gerakan bisa kita artikan ada orang sedang masuk ruangan. Kebalikannya jika PIR 2 mendeteksi gerakan diikuti PIR 1 mendeteksi gerakan maka dapat diartikan ada orang yang keluar ruangan. Dengan diolah menggunakan program, dapat lebih sempurna dan meminimalisir gangguan gerakan. Komponen ini memiliki 3 buah kaki, dua diantaranya merupakan kaki vcc dan gnd, sedangkan kaki lainnya merupakan output. Jika mendeteksi gerakan nilai outputnya adalah 1 dan jika tidak ada gerakan maka akan menghasilkan 0.
Untuk mengolah tepukan tangan, maka dipasang sensor suara. Sensor ini juga memiliki 3 buah kaki, dua diantaranya juga merupakan vcc dan gnd, satu kaki lainnya juga merupakan output. Namun jika mendeteksi suara akan menghasilkan 0 dan jika tidak mendeteksi suara maka akan menghasilkan 1.
Pada bagian dimmer akan dikendalikan pada port PWM arduino . Secara umum PWM adalah sebuah cara memanipulasi lebar sinyal atau tegangan yang dinyatakan dengan pulsa dalam suatu perioda, yang akan digunakan untuk mentransfer data pada telekomunikasi ataupun mengatur tegangan sumber yang konstan untuk mendapatkan tegangan rata-rata yang berbeda. Dalam projek ini PWM digunakan sebagai suplay tegangan rata-rata yang kita atur melalui range bilangan byte. Sehingga akan mendapatkan tegangan antara 0 sampai 5 volt. Tegangan ini jika dihubungkan sebuah LED maka akan terlihat redup terangnya sesuai nilai byte yang dimasukan. Rangkaian dimmer yang mengolah output PWM terdiri dari komponen utama Photo Diode dan TRIAC. Namun bagian ini akan kita bahas detail pada artikel lainnya.
Potongan program arduinonya :

int pin_pir_1 = 5; //pin untuk sensor motion 1
int pin_pir_2 = 4; //pin untuk sensor motion 1
int pin_dimmer = 9; //pin untuk dimmer lampu
int pin_dimmer_led = 10; //pin untuk dimmer led
int pin_masuk_led = 12; //pin untuk dimmer led
int pin_keluar_led = 13; //pin untuk dimmer led
int pin_suara = 7; //pin untuk sensor suara
int data_pir_1 = 0;
int data_pir_2 = 0;
int status_pir_1 = 0 ;
int status_pir_2 = 0 ;
int status_reset = 0;
int data_suara = 0;
int status_suara = 0;
int brightness = 0;
int jml_orang=0;
int timeouts=0;

void setup () {
  pinMode(pin_pir_1, INPUT); //pin diset sebagai input digital
  pinMode(pin_pir_2, INPUT); //pin diset sebagai input digital
  pinMode(pin_dimmer, OUTPUT); //pin diset sebagai output digital
  pinMode(pin_dimmer_led, OUTPUT); //pin diset sebagai output digital
  pinMode(pin_masuk_led, OUTPUT); //pin diset sebagai output digital
  pinMode(pin_keluar_led, OUTPUT); //pin diset sebagai output digital
  pinMode(pin_suara, INPUT); //pin diset sebagai input digital
  digitalWrite(pin_keluar_led, LOW);
  digitalWrite(pin_masuk_led, LOW);
  brightness=0;
  analogWrite(pin_dimmer, brightness);
  analogWrite(pin_dimmer_led, brightness);
  status_pir_1=0;
  status_pir_2=0;
  Serial.begin(9600);
  Serial.println("Dimmer Digital");
}

void loop () {
  data_pir_1 = digitalRead(pin_pir_1); //membaca keadaan input motion 1
  data_pir_2 = digitalRead(pin_pir_2); //membaca keadaan input motion 2
  
  if (data_pir_1==HIGH && status_pir_1==0 && data_pir_2==LOW && status_pir_2==0)
    {
      status_reset=0;
      status_pir_1=1;
      Serial.println("Akan masuk");
      digitalWrite(pin_keluar_led, LOW);
      digitalWrite(pin_masuk_led, HIGH);
      delay(500);
    }
  else if (data_pir_2==HIGH && status_pir_1==1 && data_pir_1==LOW && status_pir_2==0 && status_reset==0)
    {
      status_reset=1;
      jml_orang++;
      Serial.println("Berhasil masuk");
      Serial.println("-----------------------");
      Serial.print("Jumlah orang = ");
      Serial.println(jml_orang);
      digitalWrite(pin_keluar_led, HIGH);
      digitalWrite(pin_masuk_led, HIGH);
      delay(500);
      digitalWrite(pin_keluar_led, LOW);
      digitalWrite(pin_masuk_led, LOW);
    }
  else if (data_pir_2==HIGH && status_pir_1==0 && data_pir_1==LOW && status_pir_2==0)
    {
      status_pir_2=1;
      status_reset=0;
      Serial.println("Akan keluar");
      digitalWrite(pin_keluar_led, HIGH);
      digitalWrite(pin_masuk_led, LOW);
      delay(500);
    }
  else if (data_pir_1==HIGH && status_pir_1==0 && data_pir_2==LOW && status_pir_2==1 && status_reset==0)
    {
      status_reset=1;
      if (jml_orang>0)
        jml_orang--;
      Serial.println("Berhasil keluar");
      Serial.println("-----------------------");
      Serial.print("Jumlah orang = ");
      Serial.println(jml_orang);
      digitalWrite(pin_keluar_led, HIGH);
      digitalWrite(pin_masuk_led, HIGH);
      delay(500);
      digitalWrite(pin_keluar_led, LOW);
      digitalWrite(pin_masuk_led, LOW);
    }
  else if (data_pir_1==LOW && status_pir_1==0 && data_pir_2==LOW && status_pir_2==1 && status_reset==1)
    {
      status_pir_2=0;
    }
  else if (data_pir_1==LOW && status_pir_1==1 && data_pir_2==LOW && status_pir_2==0 && status_reset==1)
    {
      status_pir_1=0;
    }
  else if (status_pir_1>0 || status_pir_2>0)
  {
     timeouts=timeouts+1;
     if (timeouts>5)
     {
       timeouts=0;
       status_pir_1=0;
       status_pir_2=0;
       digitalWrite(pin_keluar_led, LOW);
       digitalWrite(pin_masuk_led, LOW);
       Serial.println("Timeout");
     }
     delay(1000);
  }  
  if (jml_orang==1 && brightness==0)
    {
	  //hidupkan secar terang penuh
      brightness=255;
      analogWrite(pin_dimmer, brightness);
      analogWrite(pin_dimmer_led, brightness);  
    }
  else if (jml_orang==0)
    {
	  //matikan saat tidak ada orang
      brightness=0;
      analogWrite(pin_dimmer, brightness);
      analogWrite(pin_dimmer_led, brightness);
      status_suara=0;
    }
  else
    {
      analogWrite(pin_dimmer, brightness);
      analogWrite(pin_dimmer_led, brightness);
    }
  
  //sensor suara, pastikan saat ada orang didalam
  if (jml_orang>0)
  {
    data_suara = digitalRead(pin_suara); //membaca keadaan sensor suara
    if (status_suara==0 && data_suara==LOW)
    {
      Serial.println("Level 2 dari 3 - 80");
      brightness=80;
      status_suara=1;
      delay(1000);
    }
    else if ((status_suara==1) && (data_suara==LOW))
    {
      Serial.println("Level 1 dari 3 - 50");
      brightness=50;
      status_suara=2;
      delay(1000);
    }
    else if ((status_suara==2) && (data_suara==LOW))
    {
      Serial.println("Level 3 dari 3 - 250");
      brightness=250;
      status_suara=0;
      delay(1000);
    }
  }
}

Baca Juga

TULISKAN KOMENTAR KAMU

Wajib diisi (No.hp akan kami rahasiakan)*

Nama *

Alamat *

No.hp *