Smart Home Lamp System

Arduino Project

Diagram Sistem & Alur Kerja

Wiring Diagram Smart Home Lamp

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

NoNama BarangHarga SatuanQtySubtotal (Rp)
1Arduino Uno R3110.00010 (Dari Pak Wega)
2Buzzer Aktif 5 V5.00015.000
3Relay 5 V 5 Channel48.00010 (Dari Pak Wega)
4Sensor Cahaya12.00010 (Dari Pak Wega)
5Breadboard 400 Pin7.00037.000
6Servo MG90S32.00020 (Dari Pak Wega)
7Kabel Jumper M-M8.00018.000
8Kabel Jumper F-F8.00018.000
9Timah 10 M25.000125.000
10Kardus12.000112.000
11Alat Lem Tembak30.000130.000
12Isi Lem Tembak2.000510.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;
  }
}