Simulasi Sensor Cahaya Arduino dengan Proteus


Alat Penghitung Jumlah Objek dengan Sensor Cahaya

Alat ini merupakan pengembangan dari sensor cahaya yang dapat mendeteksi perubahan intensitas cahaya. Sensor cahaya memiliki nilai resistivitas yang berubah-ubah sesuai dengan intensitas cahaya yang diterimanya. Nilai resistivitas yang berubah-ubah tersebut nantinya akan mempengaruhi besar tegangan yang melewatinya. Kondisi inilah yang diproses oleh mikrokontroler sebagai penanda bahwa terdapat objek didepan sensor.

Agar sensor dapat bekerja, diperlukan tegangan input pada sensor sebesar 5V. Tegangan ini dilewatkan pada sensor yang nilai resistivitasnya berubah sesuai dengan intensitas cahaya yang diterimanya. Output dari sensor ini berupa tegangan yang besarnya menyesuaikan nilai resistivitas. Nilai tegangan yang berkisar antara 0V sampai 5V dijadikan sebagai input analog pada mikrokontroler.

Nilai tegangan yang masuk pada analog input mikrokontroler akan diubah sehingga nilai 0V sampai 5V tadi akan berubah menjadi 0 sampai 1023. Besaran nilai analog ini menjadi acuan dalam menentukan keberaaan objek didepan sensor.

Nilai analog yang telah didapat diubah menjadi nilai digital HIGH dan LOW untuk menentukan keberadaan objek didepan sensor. Digunakan perintah percabangan untuk menentukan nilai analog yang masuk dalam kategori low dan high. Saat kondisi low berarti sensor mendeteksi objek, saat kondisi high berarti sensor tidak mendeteksi objek.


Cara Kerja Alat
1. Saat mikrokontroler menyala, maka secara otomatis sensor cahaya akan bekerja sesuai dengan progam yang dibuat.
2. Sensor cahaya akan melewatkan tegangan sesuai intensitas cahaya yang diterima.
3. Data yang diterima mikrokontroler dari sensor adalah besar tegangan yang dilewatkan sensor. Data tegangan tersebut kemudian diubah untuk mendapatkan nilai analog.
4. Setelah mendapatkan nilai analog, maka mikrokontroler menjalankan operasi percabangan. Hal ini bertujuan untuk menentukan nilai analog yang masuk dalam kategori low dan high.
5. Saat kondisi low berarti sensor mendeteksi objek, saat kondisi high berarti sensor tidak mendeteksi objek.
6. Jika sensor mendeteksi objek maka jumlah objek yang terhitung akan bertambah satu.
7. Tombol reset bertujuan untuk memulai ulang program counter.

Untuk menentukan nilai digital, pembagian kategori nilai analog ke digital perlu disesuaikan dengan kebutuhan dan spesifikasi sensor. Nilai analog yang akan diubah ke digital dapat disesuaikan sesuai kebutuhan agar didapat kondisi high low yang diinginkan.

Program menggunakan prinsip state change detection, dimana program hanya akan menghitung objek sekali saja saat kondisi sensor berubah nilai digitalnya. Hal ini bertujuan agar objek tidak terhitung dua kali atau lebih. Misalkan sebuah objek diam beberapa saat didepan sensor, berarti pada saat ini kondisi sensor bernilai low dan nilai objek yang terhitung bertambah satu. Program akan kembali siap menghitung saat kondisi sensor berubah menjadi high.


Output Program
1. Jika sensor berkondisi HIGH, maka objek tidak terdeteksi. Program akan terus membaca kondisi sensor.
2. Jika sensor berkondisi LOW, maka objek terdeteksi. Jumlah objek yang terhitung bertambah satu.
3. Jika tombol reset ditekan maka program counter akan memulai ulang. Jumlah objek yang terhitung menjadi nol.


Flowchart
Flowchart


Rangkaian pada Proteus
Rangkaian Proteus


Daftar komponen simulasi
1. Arduino UNO
2. APDS 9002 (Sensor cahaya)
3. LCD LM016L
4. Terminal window
5. Push button


Code untuk program
// OBJECT COUNTER
// by Ardhi Muda Ariska
// Terakhir diubah 5 Mei 2020, 14.10
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensor_in = A0;
int state_in = 0;
int terhitung = 0;
int max_count = 5;
int digstate_in = HIGH;
int digstate_in_lama = HIGH;
void setup(){
  lcd.begin(16, 2);
  lcd.clear();
  Serial.begin(9600);
  pinMode(sensor_in, INPUT);
  Serial.println("========= OBJECT  COUNTER =========");
  Serial.println();
  Serial.println("======== Ardhi Muda Ariska ========");
  Serial.println("===================================");
  Serial.println();
  Serial.println("OBJECT TERHITUNG = 0");
  Serial.println();
  Serial.println();    
}
void loop(){
  state_in=analogRead(sensor_in);
  detect_in();
  lcd.setCursor(0,0);
  lcd.print("OBJECT");
  lcd.setCursor(0,1);
  lcd.print("TERHITUNG = ");
  lcd.setCursor(12,1);
  lcd.print(terhitung);
}
void detect_in(){
  adc_in();
  if (digstate_in == LOW){
    if (terhitung < max_count){
      if (digstate_in != digstate_in_lama){
        terhitung++;
        Serial.print("OBJECT +1");
        Serial.println();
        Serial.println(); 
        digstate_in_lama = digstate_in;
        delay(50);     
      }
    }
  }
  else {
    digstate_in_lama = digstate_in;
    }
}
void adc_in(){
  if (state_in <= 883){
    digstate_in = LOW;
  }
  else{
    digstate_in = HIGH;
  }
}


Simulasi
Menyusun rangkaian dan membuat program yang kemudian di compile untuk mendapatkan file hex. File hex harus dipasangkan pada Arduino di Proteus.

Berikut ini video dari simulasi.


Hasil Percobaan
1. Saat sensor tidak mendeteksi objek, program tidak menghasilkan output.
2. Saat sensor mendeteksi objek, jumlah objek yang terhitung bertambah satu.
3. Saat tombol reset ditekan maka jumlah objek yang terhitung menjadi nol.


Daftar Pustaka
Arduino. (2020, Mei 18). State Change Detection (Edge Detection) for pushbuttons. Diambil kembali dari Arduino: https://www.arduino.cc/en/Tutorial/StateChangeDetection

programmingelectronics. (2020, Mei 18). TUTORIAL 18: STATE CHANGE DETECTION AND THE MODULO OPERATOR. Diambil kembali dari programmingelectronics: https://www.programmingelectronics.com/tutorial-18-state-change-detection-and-the-modulo-operator-old-version/

Comments