Membuat Saklar Non Kontak Dengan Gesture Sensor dan Arduino
Halo teman – teman semuanya, semoga sehat – sehat ya.. pada kesempatan ini DT Production akan memberikan Tutorial tentang, membuat Saklar Non Kontak menggunakan gesture sensor tipe APDS 9960. Tentunya saklar ini sangat bermanfaat disaat era New Normal untuk mencegah penularan COVID-19 dan kebutuhan lainya. Silahkan teman – teman berimajinasi sendiri. Alat ini sangatlah sederhana dan cara kerjanya sungguh sangat mudah. Teman – teman dapat menggunakan mikrokontroler Arduino UNO atau nano. Akan tetapi pada video ini saya telah membuatnya dalam bentuk PCB agar lebih ringkas. terdapat 4 ch relay yang bisa dihubungkan misalnya ke lampu rumah, lampu toilet, dan perangkat elektronik lainya.
Dari hasil pengujian yang dilakukan bahwa sensor ini sangat responsif dan masih bisa bekerja dalam keadaan low light / gelap. Teman – teman bisa melihat Tutorial & demonya pada video berikut ini
Teman – teman bisa mendapatkan PCB ini atau alat / modul yang admin pakai di tokopedia dengan nama toko DT Production. klik link berikut.
Lampiran
Teman – teman bisa unduh library yang akan digunakan :
Gesture Sensor | Download
Ekstrak library yang sudah di unduh pada direktori libraries arduino. biasanya folder tersebut bersama dengan folder default penyimpanan proyek – proyek Arduino IDE. yaitu :
Documents\Arduino\libraries

Selanjutnya copy sketch/program yang admin gunakan pada proyek ini.
[sociallocker]
/* Gesture Switch Project Source : https://dt-production.com Pakailah dengan bijak & tetap mencantumkan sumber :) */ #include#include #define APDS9960_INT 2 SparkFun_APDS9960 apds = SparkFun_APDS9960(); int isr_flag = 0; int relay1 = 5; int relay2 = 6; int relay3 = 7; int relay4 = 8; int a = 0; int b = 0; int c = 0; int d = 0; void setup() { pinMode(APDS9960_INT, INPUT); pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); pinMode(relay4, OUTPUT); digitalWrite(relay1, LOW); digitalWrite(relay2, LOW); digitalWrite(relay3, LOW); digitalWrite(relay4, LOW); Serial.begin(9600); attachInterrupt(0, interruptRoutine, FALLING); if ( apds.init() ) { Serial.println(F("APDS-9960 initialization complete")); } else { Serial.println(F("Something went wrong during APDS-9960 init!")); } if ( apds.enableGestureSensor(true) ) { Serial.println(F("Gesture sensor is now running")); } else { Serial.println(F("Something went wrong during gesture sensor init!")); } } void loop() { if ( isr_flag == 1 ) { detachInterrupt(0); handleGesture(); isr_flag = 0; attachInterrupt(0, interruptRoutine, FALLING); } } void interruptRoutine() { isr_flag = 1; } void handleGesture() { if ( apds.isGestureAvailable() ) { uint8_t gesture = apds.readGesture(); if (gesture == DIR_DOWN && a == 0) { Serial.println("UP"); a = 1; digitalWrite(relay1, HIGH); } else if (gesture == DIR_DOWN && a == 1) { Serial.println("UP"); a = 0; digitalWrite(relay1, LOW); } if (gesture == DIR_UP && b == 0) { Serial.println("DOWN"); b = 1; digitalWrite(relay2, HIGH); } else if (gesture == DIR_UP && b == 1) { Serial.println("DOWN"); b = 0; digitalWrite(relay2, LOW); } if (gesture == DIR_RIGHT && c == 0) { Serial.println("LEFT"); c = 1; digitalWrite(relay4, HIGH); } else if (gesture == DIR_RIGHT && c == 1) { Serial.println("LEFT"); c = 0; digitalWrite(relay4, LOW); } if (gesture == DIR_LEFT && d == 0) { Serial.println("RIGHT"); d = 1; digitalWrite(relay3, HIGH); } else if (gesture == DIR_LEFT && d == 1) { Serial.println("RIGHT"); d = 0; digitalWrite(relay3, LOW); } if (gesture == DIR_NEAR) { Serial.println("NEAR"); } if (gesture == DIR_FAR) { Serial.println("FAR"); } } }
[/sociallocker]
Sebelum melakukan upload program, Pastikan teman – teman telah melakukan konfigurasi pada pilihan board sesuai dengan tipe arduino yang dipakai dan COM Port yang terdeteksi.
Skema
APDS 9960 | Arduino Uno / Nano |
INT | D2 (interupt) |
SDA | A4 |
SCL | A5 |
GND | GND |
VIN (VCC) | 3.3v |
Relay | Arduino Uno / Nano |
VCC | 5v |
GND | GND |
IN 1 | 5 |
IN 2 | 6 |
IN 3 | 7 |
IN 4 | 8 |
Terimakasih dan semoga bisa bermanfaat.