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.


/*
   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");
    }
  }
}

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 9960Arduino Uno / Nano
INTD2 (interupt)
SDAA4
SCLA5
GNDGND
VIN (VCC)3.3v
RelayArduino Uno / Nano
VCC5v
GNDGND
IN 15
IN 26
IN 37
IN 48

Terimakasih dan semoga bisa bermanfaat.

Tinggalkan Balasan

Your email address will not be published. Required fields are marked *.

*
*
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Theme BCF By aThemeArt - Proudly powered by WordPress .
BACK TO TOP