Kontrol Lampu Otomatis
Overview
Kontrol Lampu Otomatis? Otomatis adalah sebuah aksi yang terjadi dengan sendiri nya dengan kondisi atau keadaan tertentu. Otomatis ini juga bisa menggantikan manusia dalam pengoprasian nya. Contoh kali ini adalah kontrol lampu otomatis.
Dalam kondisi nyata, ketika malam misal nya, kita ( manusia ) menghidupkan lampu dengan switch, ketika terang mematikan lampu. Nah peran manusia ini akan di gantikan oleh sebuah alat untuk menghidupkan lampu dengan sendiri nya. Pengantian peran ini bisa di sebut dengan Otomatis.
Otomatis ini memiliki Triger dalam kendali nya, pemicu, apa yang membuat dia menyalakan mau pun mematikan. Pada contoh tutorial dari mikroavr kali ini, ada 4 triger yang akan memicu lampu menyala secara otomatis, yuk kita bahas satu satu contoh nya.
Otomatis dengan Sensor Cahaya
Kontrol Lampu Otomatis dengan sensor cahaya adalah contoh otomatis yang sangat sederhana. Ada dua metode sederhana disini, yang pertama menggunakan rangkaian analog, dan yang kedua menggunakan Mikrokontroller ( contoh nya Arduino ).
Rangkaian Analog
Berikut Rangkaian analog kontrol otomatis nya,
Pada rangkaian di atas, trimpot pada pembagi tegangan LDR akan mengatur nilai intensitas cahaya yang akan di terima oleh LDR sebagai penentu apakah relah akan aktif atau relay akan on. Pada rangkain di atas sifat nya baku, ada kesulitan sendiri jika ingin mengembangkanya menjadi lebih luas. Namun cost atau biaya pembuatan alat akan semakin kecil.
Rangkaian LDR Arduino
Nah selanjut nya bagaimana kah kontrol lampu otomatis menggunakan LDR dengan modul belajar Arduino kita?
output sensor LDR dan pembagi tegangan ini akan kita hubungkan ke pin Analog A0 Arduino Nano. Kita akan membahas fungsi analogRead disini. Jika teman-teman ingin belajar teori dasar tentang analogRead. cukup Tekan tombol merah di bawa ini
Rangkaian nya sebagagai berikut
Tugas kita selanjut nya adalah membaca output dari sensor LDR tersebut. Yuk kita buat program nya.
Program baca sensor LDR
karena output rangkaian sensor LDR di hubungkan ke pin A0, maka akan kita baca data ADC nya di pin A0. Program analisa output sensor LDR nya sebagai berikut.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(16, 2); const byte pin_ldr = A0; String line1, line2; int adc_ldr; void setup() { pinMode(pin_ldr, INPUT); lcd.autoAddress(); lcd.begin(); } void loop() { update_lcd(); adc_ldr = baca_ldr(); delay(250); } int baca_ldr(){ int data_adc = analogRead(pin_ldr); delay(2); return data_adc; } void update_lcd(){ line1 = "baca LDR"; line2 = String("ADC: ") + adc_ldr; lcd.clear(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); }
Sebelum compile program di atas, agar tidak error, pastikan teman-teman sudah add library i2c LCD auto scan, atau bisa langsung tekan tombol merah di bawah ini untuk tutorial nya,
Nah setelah di compile dan di upload ke Modul belajar Arduino kita, sekarang, coba lihat data LDR nya di LCD. Perhatikan dengan jelas, kondisi berapa nilai nya gelap, dan kondisi berapa nilai nya terang, tutup saja LDR nya dengan tangan.
Pada pengujian saya, kondisi gelap adalah ketika nilai ADC 0 sampai 85, nah sekarang kita program lagi ini, bagaimana cara nya agar relay satu hidup ketika nilai ADC di antara 0 – 85,
Pastikan berapa nilai ADC terang dan gelap, lihat di LCD
Nah, setelah dapat nilai nya, sekarang kita akan kontrol relay di modul belajar arduino nya. Pada modul ini relay satu di kontrol oleh pin A2. yuk kita modifikasi program nya.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(16, 2); const byte pin_ldr = A0; const byte pin_relay = A2; const int limit_ldr = 85; String line1, line2; int adc_ldr; void setup() { pinMode(pin_ldr, INPUT); pinMode(pin_relay,OUTPUT); lcd.autoAddress(); lcd.begin(); } void loop() { control(); delay(250); } int baca_ldr(){ int data_adc = analogRead(pin_ldr); delay(2); return data_adc; } void update_lcd(){ line1 = "baca LDR"; line2 = String("ADC: ") + adc_ldr; lcd.clear(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); } void control(){ update_lcd(); adc_ldr = baca_ldr(); if ( adc_ldr >= limit_ldr ){ digitalWrite(pin_relay, HIGH); } else{ digitalWrite(pin_relay, LOW); } }
jangan copy paste program
usahakan ketik langsung
Program bekerja sebagai berikut, Data ADC yang di baca di pin A0 akan kita tampilkan di LCD 16×2 I2C. Nah ketika data ADC lebih kecil atau sama denga limit_ldr maka relay akan aktif, namun sebalik nya, ketika pin data ADC lebih besar dari limit_ldr, maka relay akan aktif. Silahkan ambil modul belajar nya, kemudian praktikan langsung, saya sudah praktikan dan program ini sudah berhasil.
Otomatis dengan Waktu
Setelah praktik di atas sudah kita coba langsung dan berhasil, langkah selanjut nya adalah membuat otomatis lampu berdasarkan waktu. Pada waktu tertentu, Lampu akan menyala, dan pada waktu tertentu lampu akan mati. Nah siapkan modul belajar Arduino nya, colokkan modul DS3231 sebagai RTC. Jika teman-teman ingin mendapatkan modul nya, cukup tekan tombol merah di bawah ini.
Langkah selanjut nya, kita buat jam digital dulu, menampilkan jam digital pada LCD, library yang kita gunakan adalah RTClib, tinggal visit aja tutorial nya di bawah ini,
berikut program nya,
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include "RTClib.h" // library yang kita add tadi LiquidCrystal_I2C lcd(16, 2); RTC_DS3231 rtc; char hari[7][12] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"}; String text; int jam, menit, detik; void setup() { Serial.begin(9600); lcd.autoAddress(); lcd.begin(); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //--> ambil waktu dari laptop atau komputer } void loop() { update_lcd(); } void printDT ( int DT ){ if ( DT < 10 ){ lcd.print('0'); lcd.print(DT); } else{ lcd.print(DT); } } void update_lcd(){ DateTime now = rtc.now(); jam = now.hour(); menit = now.minute(); detik = now.second(); text = String("Hari: ")+ hari[now.dayOfTheWeek()] +(" --> ")+jam +(":")+ menit +(":") + detik; Serial.println(text); lcd.setCursor(1,0); lcd.print(hari[now.dayOfTheWeek()]); lcd.print(":"); printDT(now.day()); lcd.print("-"); printDT(now.month()); lcd.print("-"); printDT(now.year()); lcd.setCursor(4,1); printDT(now.hour()); lcd.print(":"); printDT(now.minute()); lcd.print(":"); printDT(now.second()); delay(500); }
Program di atas akan menampilkan waktu pada LCD. Perhatikan program di bawah ini, sebuah program setting waktu dari laptop / pc kita pribadi
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //ambil waktu dari laptop atau komputer
Pertama program masukkan line program di atas, setelah waktu nya sudah pas, jadikan program di atas sebagai comentar, dan program ulang, menjadi nya komentar cukup mudah tinggal rubah seperti program di bawah ini
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // ambil waktu dari laptop atau komputer
Tahap ini, kita sudah mendapatkan data waktu, nah bagaimana kah cara memprogram nya agar detik 0 – 10 relay aktif, kemudian yang lain relay non aktif? yuk kita coba buat program sederhana nya,
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include "RTClib.h" // library yang kita add tadi LiquidCrystal_I2C lcd(16, 2); const byte pin_relay = A2; RTC_DS3231 rtc; char hari[7][12] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"}; int jam, menit, detik; void setup() { lcd.autoAddress(); lcd.begin(); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } pinMode(pin_relay,OUTPUT); //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //--> ambil waktu dari laptop atau komputer } void loop() { control(); } void printDT ( int DT ){ if ( DT < 10 ){ lcd.print('0'); lcd.print(DT); } else{ lcd.print(DT); } } void update_lcd(){ DateTime now = rtc.now(); jam = now.hour(); menit = now.minute(); detik = now.second(); lcd.setCursor(1,0); lcd.print(hari[now.dayOfTheWeek()]); lcd.print(":"); printDT(now.day()); lcd.print("-"); printDT(now.month()); lcd.print("-"); printDT(now.year()); lcd.setCursor(4,1); printDT(now.hour()); lcd.print(":"); printDT(now.minute()); lcd.print(":"); printDT(now.second()); delay(500); } void control(){ update_lcd(); if ( detik >= 0 && detik <= 10 ){ digitalWrite(pin_relay, HIGH); } if ( detik > 10 && detik <= 59 ){ digitalWrite(pin_relay, LOW); } }
Program di atas akan menghidupkan relay pada detik 0 sampai 10, kemudian mematikan relay pada detik 11 sampai 59. Silahkan modifikasi program di atas sesuai dengan kebutuhan.
Otomatis Dengan Jarak
Praktik Selanjut nya adalah otomatis Lampu dengan Jarak. Lampu akan hidup jika mendapatkan jarak tertentu, kemudian lampu akan padam dengan jarak tertentu.
Pada kasus ini kita akan kembali menggunakan modul belajar Arduino dan sensor jarak ultrasonik. Sensor jarak ini sudah kita bahas pada artikel sebelum nya, jika teman-teman ingin pelajari tentang sensor ultrasonik, cukup tekan button merah di bawah ini.
Pada modul arduino ini, kita memiliki konfigurasi sebagai berikut,
PIN Arduino | PIN HC-04 |
D2 | Echo |
D3 | Triger |
+5v | VCC |
GND | GND |
Membaca Jarak
Setelah kita tahu pin konfigurasi nya, langkah selanjut nya adalah membuat program untuk membaca jarak. Program nya adalah sebagai berikut,
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(16, 2); const byte Echo = 2;//kaki ultrasonik const byte Trig = 3;//kaki ultrasonik long duration; int distance; int jarak; String line1, line2; unsigned long old_time; void setup() { lcd.autoAddress(); lcd.begin(); pinMode(Echo, INPUT); pinMode(Trig, OUTPUT); } void loop() { if( millis() - old_time >= 250 ){ get_data(); old_time = millis(); } } void baca_sensor(int trigPin, int echoPin){ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034/2; } void get_data(){ baca_sensor(Trig,Echo); jarak = distance; line1 = "Ukur Jarak"; line2 = String("Jarak: ") + jarak + (" cm"); lcd.clear(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); }
Perhatikan di LCD modul belajar kita, disana akan tertampil jarak cm terhadap objek. Selanjut nya adalah meng aktifkan relay pada pin A2, rule nya sebagai berikut,
Jika jarak 0 cm sampai dengan 10cm maka relay pada A2 akan hidup, jika lebih besar maka relay akan tidak aktif, gimana kah program nya? yuk kita coba lagi coding sederha nya,
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(16, 2); const byte Echo = 2;//kaki ultrasonik const byte Trig = 3;//kaki ultrasonik const byte pin_relay = A2; const byte limit_jarak = 10; long duration; int distance; int jarak; String line1, line2; unsigned long old_time; void setup() { lcd.autoAddress(); lcd.begin(); pinMode(Echo, INPUT); pinMode(Trig, OUTPUT); pinMode(pin_relay, OUTPUT); } void loop() { if( millis() - old_time >= 250 ){ control(); old_time = millis(); } } void baca_sensor(int trigPin, int echoPin){ digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034/2; } void get_data(){ baca_sensor(Trig,Echo); jarak = distance; line1 = "Ukur Jarak"; line2 = String("Jarak: ") + jarak + (" cm"); lcd.clear(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); } void control(){ get_data(); if ( jarak >= limit_jarak ){ digitalWrite(pin_relay, HIGH); } else{ digitalWrite(pin_relay, LOW); } }
Otomatis dengan Suhu
Pembahasan dua jenis otomatis ini akan di bahas dan di update secara berkala yah, Mayan capek juga ngetik nya,
untuk dapatkan materi belajar arduino bisa visit di modul belajar arduino di bawah ini
thanks
Learning And Sharing
mikroavr.com