Diagram Sistem & Alur Kerja
Saat Sensor cahaya Tidak mendeteksi intensitas pencahayaan ruangan. Saat gelap, relay otomatis menyalakan lampu. Dan Saat terang, lampu mati dan servo bergerak scan kekanan dan kekiri untuk mencari sumber cahaya.
Daftar Bahan yang Dibutuhkan
| No | Nama Barang | Harga Satuan | Qty | Subtotal (Rp) |
|---|---|---|---|---|
| 1 | Arduino Uno R3 | 110.000 | 1 | 0 (Dari Pak Wega) |
| 2 | Buzzer Aktif 5 V | 5.000 | 1 | 5.000 |
| 3 | Relay 5 V 5 Channel | 48.000 | 1 | 0 (Dari Pak Wega) |
| 4 | Sensor Cahaya | 12.000 | 1 | 0 (Dari Pak Wega) |
| 5 | Breadboard 400 Pin | 7.000 | 3 | 7.000 |
| 6 | Servo MG90S | 32.000 | 2 | 0 (Dari Pak Wega) |
| 7 | Kabel Jumper M-M | 8.000 | 1 | 8.000 |
| 8 | Kabel Jumper F-F | 8.000 | 1 | 8.000 |
| 9 | Timah 10 M | 25.000 | 1 | 25.000 |
| 10 | Kardus | 12.000 | 1 | 12.000 |
| 11 | Alat Lem Tembak | 30.000 | 1 | 30.000 |
| 12 | Isi Lem Tembak | 2.000 | 5 | 10.000 |
| BARANG SUDAH DIBELI LENGKAP. TOTAL: | Rp 105.000 | |||
Termasuk bahan & alat pendukung (casing, timah, lem tembak, dsb.).
Kode Program Arduino
Library yang digunakan: Wire.h, LiquidCrystal_I2C.h, Servo.h.
Salin kode berikut ke IDE Arduino lalu unggah ke board.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
int sensor = 4; // SENSOR CAHAYA (DO)
int relay = 7; // RELAY
int buzzer = 8; // BUZZER
int servoPin = 10; // SERVO MG90S
bool cahayaTerakhir = -1;
float posisi = 10; // posisi mulai
float speed = 2.0; // kecepatan smooth
int arah = 1;
byte blockChar[8] = {
B11111, B11111, B11111, B11111,
B11111, B11111, B11111, B11111
};
void setup() {
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(relay , OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(relay, HIGH);
lcd.init(); lcd.backlight();
lcd.createChar(0, blockChar);
servo.attach(servoPin);
lcd.setCursor(0,0); lcd.print(" Smart Lamp ");
lcd.setCursor(0,1); lcd.print(" Smooth Mode ");
delay(1500); lcd.clear();
}
void animEdge(String teks) {
lcd.setCursor(0,0); lcd.write(0);
lcd.setCursor(0,1); lcd.write(0); delay(40);
lcd.setCursor(0,0); lcd.print(" ");
lcd.setCursor(0,1); lcd.print(" ");
lcd.setCursor(2,0); lcd.print(teks);
}
void buzzerBeep(int jml) {
for (int i = 0; i < jml; i++) {
digitalWrite(buzzer, HIGH); delay(70);
digitalWrite(buzzer, LOW); delay(80);
}
}
void loop() {
int nilai = digitalRead(sensor);
/* -- SERVO SUPER-SMOOTH -- */
if (nilai == HIGH) {
posisi += arah * speed;
if (posisi >= 170) { arah = -1; posisi = 170; }
if (posisi <= 10) { arah = 1; posisi = 10; }
servo.write((int)posisi);
} else servo.write((int)posisi);
delay(10);
/* -- LCD + RELAY + BUZZER -- */
lcd.clear();
if (nilai == HIGH) {
digitalWrite(relay, HIGH);
animEdge("Lampu: ON");
lcd.setCursor(2,1); lcd.print("Cahaya: Gelap");
if (cahayaTerakhir != HIGH) buzzerBeep(1);
cahayaTerakhir = HIGH;
} else {
digitalWrite(relay, LOW);
animEdge("Lampu: OFF");
lcd.setCursor(2,1); lcd.print("Cahaya: Terang");
if (cahayaTerakhir != LOW) buzzerBeep(2);
cahayaTerakhir = LOW;
}
}