LDR (Light Dependent Resistor) merupakan salah satu komponen elektronika yang dapat berubah resistansinya ketika mendeteksi perubahan intensitas cahaya yang diterimanya, sehingga LDR dapat juga dikatakana sebagai sensor cahaya. Karakteristik dari LDR ini ialah LDR akan berubah resistansinya / tahanannya ketika terjadi perubahan cahaya yang dideteksinya. Biasanya LDR terbuat dari cadmium sulfida yaitu merupakan bahan semikonduktor yang resistansnya berupah-ubah menurut banyaknya cahaya (sinar) yang mengenainya
Introduction
Sensor cahaya adalah sebuah alat yang digunakan untuk mengubah besaran cahaya menjadi besaran listrik. Alat ini memungkinkan kita untuk melakukan pendeteksian cahaya dan kemudian untuk melakukan perubahan terhadapnya menjadi sinyal listrik dan dipakai dalam sebuah rangkaian yang memakai cahaya sebagai pemicunya. Sensor ini dapat mengalami perubahan resistansinya apabila mengalami perubahan penerimaan cahaya. Besarnya nilai hambatan pada Sensor Cahaya LDR (Light Dependent Resistor) tergantung pada besar kecilnya cahaya yang diterima oleh LDR itu sendiri.
Lihat video dibawah untuk melihat Cara Kerja dari sensor ini.
Hardware
Beberapa komponen yang digunakan dalam pembuatan alat ini adalah:
- Arduino Uno
- Sensor RGB
- LED RGB
- Resistor 220 ohm dan 4.7K ohm
Karakteristik Sensor Cahaya LDR (Light Dependent Resistor) Sensor Cahaya LDR (Light Dependent Resistor) adalah suatu bentuk komponen yang mempunyai perubahan resistansi yang besarnya tergantung pada cahaya. Karakteristik LDR terdiri dari dua macam, yaitu Laju Recovery dan Respon Spektral :
- Laju Recovery, Laju recovery merupakan suatu ukuaran praktis dan suatu kenaikan nilai resistansi dalam waktu tertentu. Nilai ini ditulis dalam K/detik, untuk LDR type arusnya lebih besar dari 200 K/detik (selama 20 menit pertama mulai dari level cahaya 100 lux), kecepatan tersebut akan lebih tinggi pada arah sebaliknya, yaitu pindah dari tempat gelap ke tempat terang yang memerlukan waktu kurang dari 10 ms untuk mencapai resistansi yang sesuai dengan level cahaya 400 lux.
- Respon Spektral, LDR tidak mempunyai sensitivitas yang sama untuk setiap panjang gelombang cahaya yang masuk. Bahan yang digunakan sebagai penghantar arusnya yaitu tembaga, alumunium, baja, emas, dan perak. Dari kelima bahan tersebut tembaga merupakan penghantar yang paling banyak digunakan karena mempunyai daya hantar yang baik.
Schematich
Berikut ini adalah rangkaian schematich Sensor LDR dan RGB:
Single LED RGB
Single LED RGB adalah tiga warna light (red, green, blue) yang disatukan mejadi satu. Pada Single LED ini hanya membutuhkan 1 resitor untuk men-supply tegangan ground pada kaki LED. Berikut adalah rangkaiannya:
Download: Rangkaian Sensor LDR dan RGB.fzz
Rangkaian diatas menggunakan Single LED RGB seperti ini:
Single LED RGB - image by: https://learn.sparkfun.com/ |
Kemudian susunlah rangkaian diatas menjadi seperti pada gambar berikut:
Rangkaian sensor LDR pada PCB |
Tata letak LED harus lebih rendah dari LDR, supaya cahaya bias dari LED tidak mengganggu sensor LDR saat mengkalibrasi objek. Agar pengkalibrasian sensor LDR lebih stabil, kamu bisa membungkusnya dengan selongsong pembungkus kabel dan hanya di tampakan pada permukaanya saja.
3 LED RGB
Selain rangkaian diatas, ada juga rangkaian yang menggunakan 3 LED RGB seperti pada gambar berikut:
Rangkaian Sensor LDR dengan 3 LED RGB |
Download: Rangkaian Sensor LDR dan 3 LED RGB.fzz
Secara prinsip/cara kerja rangkaian sensor LDR yang menggunakan single LED dengan 3 LED adalah sama, yang membedakan adalah kaki ground pada rangkaian 3 LED ini membutuhkan 3 resistor. Kedua rangkaian dapat dioperasikan dengan program arduino yang sama.
Kemudian susunlah rangkaian diatas PCB bolong seperti pada gambar dibawah ini:
Source Code
Tata letak sensor LDR 3 LED pada PCB bolong |
Setelah menyusun dan memahami rangkaian diatas, selanjutnya adalah memasukan program dibawah ini kedalam arduino.
/* Program sensor warna dengan LDR dan RGB
web : hestech.id
*/
#include <Servo.h>
Servo myservo;
int sensorPin = A0;
int LedBiru =3; // Led warna biru digital pin 3
int LedHijau=4; // Led warna hijau digital pin 4
int LedMerah=5; // Led warna merah digital pin 5
int hasil,hasilb,hasilm,hasilh;
int k=8; // toleransi warna
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(LedBiru,OUTPUT);
pinMode(LedMerah,OUTPUT);
pinMode(LedHijau,OUTPUT);
digitalWrite(LedBiru,LOW);
digitalWrite(LedMerah,LOW);
digitalWrite(LedHijau,LOW);
myservo.attach(6); // motor servo pin digital 6
myservo.write(90);
delay(100);
Serial.begin(9600);
delay(1000);
}
void loop() {
// nyalakan LedMerah
digitalWrite(LedMerah,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilm=map(hasil,0,1023,0,255);
Serial.print("R,G,B = ");
Serial.print(hasilm);
digitalWrite(LedMerah,LOW);
delay(150);
// nyalakan LedHijau
digitalWrite(LedHijau,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilh=map(hasil,0,1023,0,255);
Serial.print(",");
Serial.print(hasilh);
digitalWrite(LedHijau,LOW);
delay(150);
// nyalakan LedBiru
digitalWrite(LedBiru,HIGH);
//delay 150 ms agar LDR baca stabil
delay(150);
// baca data sensor
hasil= analogRead(sensorPin);
hasilb=map(hasil,0,1023,0,255);
Serial.print(",");
Serial.println(hasilb);
digitalWrite(LedBiru,LOW);
delay(150);
// cek warna dibandingkan dengan nilai hasil kalibrasi
if(abs(hasilm-208)<k && abs(hasilh-203)<k && abs(hasilb-177)<k){
Serial.println(" -> WARNA PUTIH!\n");
myservo.write(10); } else
if(abs(hasilm-209)<k && abs(hasilh-165)<k && abs(hasilb-139)<k){
Serial.println(" -> WARNA MERAH !\n");
myservo.write(30); } else
if(abs(hasilm-135)<k && abs(hasilh-182)<k && abs(hasilb-147)<k){
Serial.println(" -> WARNA HIJAU !\n");
myservo.write(50); } else
if(abs(hasilm-138)<k && abs(hasilh-163)<k && abs(hasilb-166)<k){
Serial.println(" -> WARNA BIRU !\n");
myservo.write(70); } else
if(abs(hasilm-156)<k && abs(hasilh-184)<k && abs(hasilb-172)<k){
Serial.println(" -> WARNA CYAN !\n");
myservo.write(90); } else
if(abs(hasilm-199)<k && abs(hasilh-159)<k && abs(hasilb-170)<k){
Serial.println(" -> WARNA UNGU !\n");
myservo.write(110); } else
if(abs(hasilm-209)<k && abs(hasilh-214)<k && abs(hasilb-223)<k){
Serial.println(" -> WARNA KUNING !\n");
myservo.write(130); } else
if(abs(hasilm-210)<k && abs(hasilh-206)<k && abs(hasilb-211)<k){
Serial.println(" -> WARNA PINK !\n");
myservo.write(150); } else
if(abs(hasilm-165)<k && abs(hasilh-197)<k && abs(hasilb-205)<k){
Serial.println(" -> WARNA HIJAU MUDA !\n");
myservo.write(170); } else
if(abs(hasilm-209)<k && abs(hasilh-204)<k && abs(hasilb-210)<k){
Serial.println(" -> WARNA KUNING MUDA!\n");
myservo.write(180); } else
Serial.println(" -> ???\n");
delay (2000);
}
Setelah diupload, kemudian bukalah serial monitor untuk mengambil nilai objek yang ingin dikalibrasi. Misalnya yang akan di kalibrasi adalah warna merah. Letakan objek warna merah tersebut di depan sensor, lihatlah hasil diserial monitor, maka akan tampil seperti gambar berikut:
Kemudian nilai RGB diatas dituliskan pada program seperti ini:
Upload ulang program diatas kedalam arduino. Kode program diatas adalah untuk kode warna merah, jika nanti sensor LDR mendeteksi warna dengan nilai diambang batas 157, 165, dan 134, maka serial monitor akan menampilkan warna seperti berikut:
Hasil kalibrasi sensor LDR |
Nilai angka pada hasil kalibrasi diatas menunjukan warna merah terdeteksi. Namun, angka kalibrasinya kok berbeda...? Hal itu dikarenakan toleransi yang dibuat adalah 8. Jadi, jika nilai warna yang terdeteksi berada diambang batas 8. Status warna masih bisa dikenali. jika ingin merubah ambang batas nilai toleransinya, Rubahlah nilai ini sesukamu.
Tapi ingat...! semakin kecil nilai toleransi, maka semakin akurat sensor mendeteksi objeknya.
Agar sensor akurat mendeteksi objek, diperlukan penambahan cover yang dibuat sedemikian rupa. Agar cahaya bias dari LED ataupun cahaya dari luar tidak mengganggu kerja sensor LDR.SELESAI
Mas Klo ada kendala eror gimana
ReplyDeleteErrornya dimana?
Delete