Menampilkan Nilai Kekuatan Cahaya pada 7-Segment dengan LDR dan Arduino

LDR adalah singkatan dari Light Dependent Resistor, yaitu sebuah sensor yang peka terhadap cahaya. LDR ini termasuk resistor yang nilai hambatannya ditentukan oleh kekuatan cahaya yang menerpa permukaannya. LDR merupakan komponen pasif, tidak memiliki polaritas pada kakinya. Jadi mau dipasang terbalikpun tidak masalah. Penggunaan LDR sangat banyak, salah satunya adalah lampu otomatis. Ketika tiba malam hari, maka lampu itu akan menyala secara otomatis. Begitu pagi menjelang, lampu itu akan padam. Anda juga dapat menggunakan LDR ini sesuai kreasi anda.

Bahan yang digunakan :

  1. Arduino UNO R3
  2. Breadboard
  3. 7-segment common cathode 0.86 inchi
  4. Resistor 330 Ohm
  5. Resistor 10K
  6. LDR
  7. Kabel jumper secukupnya.

Image

Gambar 1. Skema rangkaian untuk menguji LDR.

Sinyal dari LDR bukanlah sinyal digital, melainkan sinyal analog, sehingga pin mikrokontrol yang digunakan harus salah satu dari pin ANALOG IN (A0-A5). Dalam penulisan kode, pin analog tidak perlu menggunakan fungsi pinMode(), yang ada hanya mode IN, yaitu input. Untuk membaca nilai input, gunakan fungsi analogRead(). Parameter yang dimasukkan nama pin analog. Pin analog diantaranya A0, A1, A2, A3, dan A5.

Kode yang digunakan untuk mengetahui range nilai input dari LDR dapat dilihat pada kode di bawah ini.

int sensorPin = A0;
int sensorValue = 0;
void setup() {
 // put your setup code here, to run once: 
 Serial.begin(9600);
}
void loop() {
 // put your main code here, to run repeatedly:
 sensorValue = analogRead(sensorPin);
 Serial.println(sensorValue);
 delay(100);
}

Pengujian ini dilakukan untuk mengetahui range nilai input yang dihasilkan dari LDR. R1 di sini digunakan untuk meredam pulsa liar. Gunakan nilai R1 yang tinggi nilai hambatannya. Di sini saya menggunakan 10K karena di lab mini ini adanya 10K. Kalau menggunakan nilai R1 yang terlalu rendah, maka kepekaan LDR pun menurun. Jika ingin membuat kepekaan LDR bisa diatur-atur, maka gantilah R1 dengan poternsiometer atau trimpot.

Dari kode di atas ada fungsi Serial.begin(). Fungsi ini digunakan untuk meng-setup konsol Arduino. Parameter yang dimasukkan adalah nilai baud rate. Nilai baud rate yang digunakan di sini adalah 9600. Untuk menampilkan output ke konsol Arduino, maka gunakan fungsi Serial.println(). Parameter yang dimasukkan adalah pesan yang ingin ditampilkan. Pesan dapat berupa string maupun integer.

Setelah program di-upload ke mikrokontroller, dari software Arduino, tekan tombol Ctrl+Shift+M pada keyboard, maka akan muncul jendela Serial Monitor. Bisa juga dibuka dari menu Tools > Serial Monitor. Ketika jendela itu sudah terbuka, maka akan muncul nilai input yang terbaca dari LDR. Coba tutupi LDR dengan tangan agar tidak terkena cahaya, maka dapat dilihat nilai inputnya menurun. Semakin gelap, maka nilainya semakin rendah, begitu juga sebaliknya. Dari yang saya coba range nilai input yang terlihat adalah kisaran 300 - 900.

Jika sudah mengetahui range nilai input LDR, maka selanjutnya dapat digunakan sebagai kondisi untuk ditampilkan pada 7-segment sebagai display.

Image

Gambar 2. Skema rangkaian LDR + 7-segment.

Dari nilai range yang terlihat, maka sayapun membuat kode dibawah ini untuk di-upload ke mikrokontrol.

int sensorPin = A0;
int sensorValue = 0;

int dA = 7;
int dB = 8;
int dC = 9;
int dD = 10;
int dE = 11;
int dF = 12;
int dG = 13;

void setup() {
// put your setup code here, to run once:
pinMode(dA, OUTPUT);
pinMode(dB, OUTPUT);
pinMode(dC, OUTPUT);
pinMode(dD, OUTPUT);
pinMode(dE, OUTPUT);
pinMode(dF, OUTPUT);
pinMode(dG, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
sensorValue = analogRead(sensorPin);
int lightLevel = 0;
if (sensorValue >= 900) {
lightLevel = 9;
} else if (sensorValue >= 800) {
lightLevel = 8;
} else if (sensorValue >= 700) {
lightLevel = 7;
} else if (sensorValue >= 600) {
lightLevel = 6;
} else if (sensorValue >= 500) {
lightLevel = 5;
} else if (sensorValue >= 400) {
lightLevel = 4;
} else if (sensorValue >= 300) {
lightLevel = 3;
} else if (sensorValue >= 200) {
lightLevel = 2;
} else if (sensorValue >= 100) {
lightLevel = 1;
}
showNumber(lightLevel);
delay(100);
turnOff();
}

void turnOff()
{
digitalWrite(dA, LOW);
digitalWrite(dB, LOW);
digitalWrite(dC, LOW);
digitalWrite(dD, LOW);
digitalWrite(dE, LOW);
digitalWrite(dF, LOW);
digitalWrite(dG, LOW);
}

void showNumber(int n)
{
// LED A 7-segment
if (n != 1 && n != 4) {
digitalWrite(dA, HIGH);
}
// LED B 7-segment
if (n != 5 && n != 6) {
digitalWrite(dB, HIGH);
}
// LED C 7-segment
if (n != 2) {
digitalWrite(dC, HIGH);
}
// LED D 7-segment
if (n != 1 && n != 4 && n != 7) {
digitalWrite(dD, HIGH);
}
// LED E 7-segment
if (n == 0 || n == 2 || n == 6 || n == 8) {
digitalWrite(dE, HIGH);
}
// LED F 7-segment
if (n != 1 && n != 2 && n != 3 && n != 7) {
digitalWrite(dF, HIGH);
}
// LED G 7-segment
if (n != 0 && n != 1 && n != 7) {
digitalWrite(dG, HIGH);
}
}

Setelah diupload, sekarang nilai terangnya cahaya dapat diukur dengan skala 0-9. Ditempat yang terang tampil angka 9. Ditempat yang terkena bayangan atau terhalangi cahaya, tampil angka 7 atau 8. Ketika ditutup dengan tangan, tampil angka 3. Saya belum mencobanya ketika gelap gulita. Apakah yang tampil angka 0?

Image

Gambar 3. Percobaan langsung.

Jika ingin membuat rangkain lampu otomatis sih tanpa menggunakan mikrokontrol juga bisa. Sebagai gantinya yang digunakan adalah komponen aktif yang bernama SCR. LDR tetap digunakan sebagai sensor cahaya. Pikirkan penggunaan LDR + mikrokontrol yang lebih kreatif.

Sekian isi tulisan ini, semoga bermanfaat. Terimakasih telah membaca tulisan ini. Ikuti terus update tulisan dari lab mini Introvesia.

comments powered by Disqus