Sensor PIR merupakan sensor yang dapat mendeteksi pergerakan, dalam hal ini sensor PIR banyak digunakan untuk mengetahui apakah ada pergerakan manusia dalam daerah yang mampu dijangkau oleh sensor PIR. Sensor ini memiliki ukuran yang kecil, murah, hanya membutuhkan daya yang kecil, dan mudah untuk digunakan. Oleh sebab itu, sensor ini banyak digunakan pada skala rumah maupun bisnis. Sensor PIR ini sendiri merupakan kependekan dari “Passive InfraRed” sensor.
Kalibrasi Sensor
1. Kalibrasi Sensitivitas
Sensitivitas berpengaruh pada jangkauan sensor PIR, semakin maksimum putaran searah jarum jam maka pengaturan sensitivtas maka jangkauan sensor PIR akan semakin jauh atau sensitiv dalam mendeteksi gerak.
2. Kalibrasi Timing
Timing berfungsi untuk mengatur lama status HIGH pada output digital PIR setelah terdeteksi gerakan. Kalibrasi ini dilakukan untuk mengatur delay secara manual pada sistem yang tidak menggunakan Mikrokontroller seperti Arduino. Jika sistem menggunakan Arduino maka timing harus diatur pada posisi MIN. Pengaturan waktu nyala indikator akan diatur melalui program.
Coding:
const int PIN_HUMAN_DETECTOR = 2;
const int PIN_DETECTOR_MODE = 3;
const int PIN_BUTTON_MODE = 4;
const int PIN_ALARM = 6;
const int PIN_INDICATOR_LED = 7;
const int ALARM_DURATION = 100;
const int ALARM_DELAY = 100;
bool detector_on = true;
bool button_ready = true;
void setup() {
pinMode( PIN_HUMAN_DETECTOR, INPUT );
pinMode( PIN_DETECTOR_MODE, OUTPUT );
digitalWrite( PIN_DETECTOR_MODE, HIGH );
pinMode( PIN_INDICATOR_LED, OUTPUT );
pinMode( PIN_BUTTON_MODE, INPUT_PULLUP );
pinMode( PIN_ALARM, OUTPUT );
}
void loop() {
if( digitalRead(PIN_HUMAN_DETECTOR) == HIGH && detector_on ) {
alarm();
}
if( button_ready && digitalRead(PIN_BUTTON_MODE) == LOW ) {
detector_on = !detector_on;
button_ready = false;
delay( 10 );
} else if( !button_ready && digitalRead(PIN_BUTTON_MODE) == HIGH ) {
button_ready = true;
delay( 10 );
}
if( detector_on ) {
digitalWrite( PIN_DETECTOR_MODE, HIGH );
} else {
digitalWrite( PIN_DETECTOR_MODE, LOW );
digitalWrite( PIN_ALARM, LOW );
digitalWrite( PIN_INDICATOR_LED, LOW );
}
}
void alarm() {
int alarm_duration = ALARM_DURATION;
int alarm_delay = ALARM_DELAY;
digitalWrite( PIN_ALARM, HIGH );
digitalWrite( PIN_INDICATOR_LED, HIGH );
while( alarm_duration > 0 ) {
if( button_ready && digitalRead(PIN_BUTTON_MODE) == LOW ) {
detector_on = false;
button_ready = false;
return;
}
alarm_duration -= 10;
delay( 10 );
}
digitalWrite( PIN_ALARM, LOW );
digitalWrite( PIN_INDICATOR_LED, LOW );
while( alarm_delay > 0 ) {
if( button_ready && digitalRead(PIN_BUTTON_MODE) == LOW ) {
detector_on = false;
button_ready = false;
return;
}
alarm_delay -= 10;
delay( 10 );
}
}
Comments
Post a Comment