<div style="text-align:center;">
<h1>TUGAS BESAR IoT <br/>"SMART LAMP"<br/>
</h1>
</div>
<div style="text-align:center;">
<img src="https://hackmd.io/_uploads/Hk-k3NYwa.png" alt="Logo_Tel-U" width="300">
</div>
<div style="text-align:center;">
<h1>
Disusun Oleh:
</h1>
<h2>
Kelompok 3
</h2>
</div>
<div style="text-align:center;">
<p>
Andika Pratama - 1103210206
</p>
<p>
Daanish Abdul Rabbani - 1103213014
</p>
<p>
Dery Hidayat - 1103228181
</p>
<p>
Reza Rizky Adha - 1103228182
</p>
</div>
# **Pengenalan Proyek**
<div style="text-align:justify;">
<p>
Pencahayaan otomatis dengan sensor LDR menggunakan perangkat lunak Blynk menggabungkan teknologi sensor cahaya yang sensitif dengan kemampuan kontrol otomatis yang ditawarkan oleh platform Blynk. Sensor LDR, yang dapat mendeteksi perubahan intensitas cahaya, digunakan untuk memantau lingkungan sekitarnya. Ketika tingkat cahaya turun di bawah ambang batas yang telah ditentukan, sistem secara otomatis mengaktifkan pencahayaan yang terhubung.
</p>
</div>
# **Latar Belakang**
* **Alasan memilih topik**
<div style="text-align:justify;">
Salah satu masalah yang sedang dihadapi manusia pada era saat ini adalah pasokan energi alam yang semakin menipis. Dari hal tersebut banyak sekali orang-orang maupun perusahaan besar yang berlomba-lomba dalam mengembangkan teknologi yang dapat menghemat penggunaan bahan bakar alam. Teknologi yang diimplementasikan dalam hal tersebut salah satunya adalah lampu otomatis.
</div>
* **Tujuan Proyek**
<div style="text-align:justify;">
Tujuan utama dari proyek ini dibuat adalah sebagai pemenuhan nilai tugas besar untuk mata kuliah Iot(Internet of Thing), dan memahami cara kerja IOT untuk mempermudah kita di kehidupan sehari-hari.
</div>
# **Dasar Teori**
**1. Alat yang dibutuhkan**
* NodeMCU ESP 8266

<div style="text-align:justify;">
NodeMCU ESP8266 adalah sebuah mikrokontroler yang sangat populer dan serbaguna dalam dunia Internet of Things (IoT). NodeMCU menyediakan sejumlah pin input/output (I/O) yang dapat diprogram untuk berbagai keperluan, mulai dari membaca sensor hingga mengendalikan perangkat eksternal. Selain itu, NodeMCU juga mendukung pemrograman menggunakan bahasa Lua dan Arduino IDE, memudahkan pengembangan aplikasi IoT bagi berbagai tingkatan pengguna.
</div>
* Relay 5V

<div style="text-align:justify;">
Relay 5V adalah komponen hardware yang digunakan untuk mengendalikan perangkat listrik menggunakan sinyal digital dari mikrokontroler atau perangkat elektronik lainnya. Relay bekerja sebagai saklar elektromagnetik yang dapat mengatur aliran arus listrik pada perangkat yang lebih besar dengan menggunakan daya yang lebih kecil.
</div>
* Sensor LDR

<div style="text-align:justify;">
Sensor LDR (Light Dependent Resistor) adalah komponen hardware yang sensitif terhadap intensitas cahaya. Sensor ini berubah resistansinya sesuai dengan intensitas cahaya yang diterimanya; semakin besar intensitas cahaya, resistansi sensor LDR semakin rendah, dan sebaliknya.
</div>
* Breadboard

<div style="text-align:justify;">
Breadboard adalah papan rangkaian yang digunakan sementara hanya untuk membuat percobaan (prototype) rangkaian elektronika, sebelum rangkaian tersebut dicetak pada papan rangkaian tercetak (PCB). Breadboard banyak dipakai sebagai papan rangkaian elektronika yang mendukung proyek mikrokendali seperti Arduino. Menggunakan standar pin yang sama, maka titik tancap breadboard sangat presisi dipakai untuk membenamkan rangkaian Arduino dan peripheralnya.
</div>
* Kabel Jumper

<div style="text-align:justify;">
Kabel jumper adalah kabel elektrik yang memiliki pin konektor di setiap ujungnya dan memungkinkanmu untuk menghubungkan dua komponen yang melibatkan Arduino tanpa memerlukan solder. Intinya kegunaan kabel jumper ini adalah sebagai konduktor listrik untuk menyambungkan rangkaian listrik.Biasanya kabel jumper digunakan pada breadboard atau alat prototyping lainnya agar lebih mudah untuk mengutak-atik rangkaian.
</div>
* Lampu 220V

<div style="text-align:justify;">
Lampu 220V merujuk pada lampu yang dirancang untuk menerima tegangan listrik sebesar 220 volt. Lampu ini biasanya digunakan untuk penerangan di rumah, kantor, atau tempat lainnya yang memiliki pasokan listrik dengan tegangan yang sesuai. Dalam alat yang kami akan rancang, lampu 220V dapat menjadi salah satu output atau perangkat yang akan dikendalikan oleh sistem kami.
</div>
* Dudukan Lampu

<div style="text-align:justify;">
Dudukan lampu merupakan komponen hardware yang dirancang untuk mendukung dan menahan lampu dalam posisi yang diinginkan dalam sebuah alat atau sistem. Fungsi utama dari dudukan lampu adalah untuk memberikan stabilitas dan penempatan yang tepat bagi lampu sehingga dapat berfungsi sesuai dengan kebutuhan. Dalam alat yang kami rancang, dudukan lampu akan memiliki peran penting dalam menempatkan lampu 220V atau jenis lampu lainnya di posisi yang optimal.
</div>
* Kabel Listrik

<div style="text-align:justify;">
Kabel listrik dan colokan lampu adalah dua komponen penting dalam alat yang Anda rancang, terutama karena mereka bertanggung jawab untuk menyediakan daya dan menghubungkan lampu 220V ke sumber listrik.
</div>
**2. Koneksi yang digunakan**
* Wifi
<div style="text-align:justify;">
Wifi adalah jaringan nirkabel yang memungkinkan perangkat elektronik, seperti komputer, smartphone, tablet, dan berbagai perangkat lainnya, untuk terhubung ke jaringan internet atau jaringan lokal (LAN) secara nirkabel.
</div>
* Software Blynk
<div style="text-align:justify;">
MQTT (Message Queuing Telemetry Transport) adalah sebuah protokol komunikasi yang dirancang untuk pengiriman pesan ringan dan efisien di atas protokol TCP/IP. MQTT broker adalah perangkat lunak atau layanan yang bertindak sebagai perantara dalam jaringan MQTT. Broker ini memungkinkan perangkat atau aplikasi yang menggunakan protokol MQTT untuk berkomunikasi satu sama lain.
</div
**3. Source Code Program**
Berikut adalah source code dari program Lampu Otomatis.
```
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6T5B_5DVy"
#define BLYNK_TEMPLATE_NAME "Lampu Otomatis"
#define BLYNK_AUTH_TOKEN "o4wVrIpE7CoXXz1VsyHYkuTL6F0bd8B4"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Relay.h>
```
- #define BLYNK_PRINT Serial - Menetapkan output debugging Blynk ke serial port.
- #define BLYNK_TEMPLATE_ID - Menentukan ID template Blynk yang digunakan untuk menghubungkan aplikasi Blynk dengan perangkat.
- #define BLYNK_TEMPLATE_NAME - Mendefinisikan nama template Blynk untuk dokumentasi dalam kode.
- #define BLYNK_AUTH_TOKEN - Menyediakan token otentikasi yang mengizinkan perangkat terhubung ke aplikasi Blynk.
- #include <ESP8266WiFi.h> - Memasukkan library untuk mengaktifkan fungsi WiFi pada modul ESP8266.
- #include <BlynkSimpleEsp8266.h> - Memasukkan library yang memfasilitasi komunikasi antara ESP8266 dan Blynk.
- #include <Relay.h> - Memasukkan library untuk mengontrol relay (catatan: periksa keberadaan dan kebenaran nama library ini).
```
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "nama wifi";
char pass[] = "password wifi";
```
- char auth[] = BLYNK_AUTH_TOKEN; - Mendefinisikan sebuah array karakter auth yang berisi token otentikasi Blynk. Token ini digunakan untuk mengotentikasi koneksi antara perangkat hardware Anda dan aplikasi Blynk.
- char ssid[] = "nama wifi"; - Mendefinisikan array karakter ssid yang menyimpan nama SSID jaringan WiFi yang ingin Anda hubungkan.
- char for_pass[] = "password wifi"; - Mendefinisikan array karakter pass yang berisi password dari jaringan WiFi tersebut untuk mengakses dan terhubung ke jaringan.
```
#define LDR_PIN A0
#define relay D5
int threshold = 500;
bool ldrActive = true;
BlynkTimer timer;
```
- Define LDR_PIN A0 mendefinisikan Sensor LDR pada pin A0
- Define Relay D5 mendefinisikan relay pada pin D5
- Threshold = 500 : adalah nilai batas yang digunakan untuk menentukan kapan relay harus diaktifkan atau dinonaktifkan berdasarkan pembacaan LDR. Jika nilai pembacaan LDR lebih besar atau lebih kecil dari `500` (tergantung pada logika yang diimplementasikan), relay akan diaktifkan atau dinonaktifkan.
- ldrActive adalah penanda yang digunakan untuk menentukan apakah sensor LDR aktif atau tidak. Jika ldrActive bernilai true, maka pembacaan dari LDR akan digunakan untuk mengontrol relay. Jika ldrActive bernilai false, pembacaan dari LDR mungkin diabaikan atau tidak digunakan.
- BlynkTimer adalah pustaka timer yang digunakan oleh Blynk untuk menjalankan fungsi secara periodik atau setelah periode tertentu. Dengan BlynkTimer, kita dapat mengatur fungsi untuk dijalankan pada interval waktu yang tetap, seperti membaca nilai sensor, mengirim data ke Blynk, atau mengontrol relay. Ini sangat berguna untuk menjaga logika kontrol yang terjadwal dan teratur tanpa harus menggunakan delay() yang akan menghentikan eksekusi kode lainnya.
```
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
pinMode(LDR_PIN, INPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Pastikan lampu awalnya mati
Serial.println("testing ");
timer.setInterval(2000L, sensorRead);
}
```
- Serial.begin(9600); - Menginisialisasi komunikasi serial dengan baud rate 9600 bps. Ini berguna untuk debugging dan melihat output dari mikrokontroler di monitor serial.
- Blynk.begin(auth, ssid, pass); - Menghubungkan mikrokontroler ke jaringan WiFi menggunakan SSID dan password yang disediakan, serta mengautentikasi dengan server Blynk menggunakan token otentikasi yang telah didefinisikan sebelumnya.
- pinMode(LDR_PIN, INPUT); - Menetapkan pin yang terhubung dengan sensor LDR sebagai pin input, yang digunakan untuk menerima data dari sensor LDR.
- pinMode(relay, OUTPUT); - Menetapkan pin yang terhubung dengan relay sebagai pin output. Ini digunakan untuk mengontrol relay yang akan menyalakan atau mematikan lampu.
- digitalWrite(relay, LOW); - Mengatur output dari pin relay menjadi LOW. Hal ini memastikan bahwa lampu dalam keadaan mati pada awal menjalankan program.
- Serial.println("testing "); - Mencetak teks "testing " ke monitor serial, yang dapat membantu dalam proses debugging untuk memastikan bahwa bagian setup berjalan dengan benar.
- timer.setInterval(2000L, sensorRead); - Membuat timer yang memanggil fungsi sensorRead setiap 2000 milidetik (2 detik). Ini digunakan untuk rutin membaca data dari sensor LDR secara berkala.
```
void loop()
{
if (ldrActive) {
int ldrValue = analogRead(LDR_PIN);
Serial.print("LDR Value: ");
Serial.println(ldrValue);
// Mengirimkan nilai sensor ke Blynk
Blynk.virtualWrite(V5, ldrValue);
// Menyalakan atau mematikan lampu berdasarkan nilai sensor
if (ldrValue < threshold) {
digitalWrite(relay, LOW); // Menyalakan lampu
Blynk.virtualWrite(V6, "ON");
} else {
digitalWrite(relay, HIGH); // Mematikan lampu
Blynk.virtualWrite(V6, "OFF");
}
}
Blynk.run();
timer.run();
}
```
Fungsi loop() adalah inti dari operasi aplikasi yang berinteraksi dengan Blynk untuk pengendalian lampu berdasarkan pembacaan dari sensor LDR.
- if (ldrActive) { ... } - Blok kode ini hanya akan dieksekusi jika kondisi ldrActive bernilai true, yang biasanya digunakan untuk mengontrol apakah sensor LDR aktif atau tidak.
- int ldrValue = analogRead(LDR_PIN); - Membaca nilai analog dari pin LDR, yang merefleksikan intensitas cahaya yang dideteksi oleh sensor LDR.
- Serial.print("LDR Value: "); dan Serial.println(ldrValue); - Mencetak nilai yang dibaca dari sensor LDR ke monitor serial, berguna untuk debugging dan memantau output sensor secara real-time.
- Blynk.virtualWrite(V5, ldrValue); - Mengirim nilai yang dibaca dari sensor LDR ke aplikasi Blynk untuk ditampilkan pada widget virtual pin V5.
- if (ldrValue < threshold) { ... } else { ... } - Struktur pengkondisian yang menyalakan atau mematikan lampu berdasarkan nilai sensor:
Jika nilai LDR di bawah nilai ambang (threshold), artinya kondisi gelap, maka lampu akan dinyalakan (digitalWrite(relay, LOW);) dan status "ON" dikirim ke Blynk (Blynk.virtualWrite(V6, "ON");).
Jika nilai di atas atau sama dengan threshold, artinya cukup terang, maka lampu dimatikan (digitalWrite(relay, HIGH);) dan status "OFF" dikirim ke Blynk (Blynk.virtualWrite(V6, "OFF");).
- Blynk.run(); - Memastikan bahwa library Blynk berjalan dan menghandle semua operasi terkait Blynk seperti koneksi dan komunikasi dengan server.
- timer.run(); - Menjalankan timer yang sudah diatur dalam setup(), yang memastikan fungsi seperti pembacaan sensor dijalankan sesuai dengan interval yang ditentukan.
```
void sensorRead()
{
}
BLYNK_WRITE(V1)
{
// Mendapatkan nilai ambang batas dari aplikasi Blynk
threshold = param.asInt();
}
BLYNK_WRITE(V2)
{
// Mengaktifkan atau menonaktifkan sensor LDR dari aplikasi Blynk
ldrActive = param.asInt();
if (!ldrActive) {
digitalWrite(relay, LOW); // Memastikan lampu mati saat sensor LDR tidak aktif
Blynk.virtualWrite(V6,"OFF");
}
}
```
Fungsi sensorRead()
Fungsi BLYNK_WRITE(V1)
- Fungsi ini dipanggil ketika nilai pada virtual pin V1 di aplikasi Blynk diubah. Ini biasanya digunakan untuk mengambil nilai ambang batas (threshold) yang digunakan untuk membandingkan dengan pembacaan dari sensor LDR.
threshold = param.asInt(); mengambil nilai integer yang dikirim dari Blynk dan menetapkannya sebagai nilai ambang batas baru. Nilai ini kemudian digunakan dalam logika kontrol lampu di loop().
Fungsi BLYNK_WRITE(V2)
- Fungsi ini dipanggil ketika nilai pada virtual pin V2 di aplikasi Blynk diubah. Fungsi ini mengatur apakah sensor LDR aktif atau tidak.
ldrActive = param.asInt(); mengubah status aktivasi sensor LDR berdasarkan nilai yang diterima dari Blynk (1 untuk aktif, 0 untuk non-aktif).
Jika ldrActive bernilai 0 (false), kode akan mematikan relay (dan oleh karena itu lampu) dengan digitalWrite(relay, LOW); dan mengirimkan status "OFF" ke Blynk dengan Blynk.virtualWrite(V6, "OFF");. Ini memastikan bahwa lampu tetap mati jika sensor LDR dinonaktifkan melalui aplikasi Blynk.
**4. Tampilan Blynk**
Berikut tampilan dari aplikasi Blynk.

**Desain Alat**

# **Cara Kerja Alat**
<div style="text-align:justify;">
1. Pertama, kita memasukkan inputan berupa software melalui aplikasi arduino ide yang terhubung melalui wifi auth dengan aplikasi pada smartphone (Blynk)



2. Setelah Program diinputkan dan dijalankan maka secara otomatis Sensor LDR akan megirimkan data ke ESP8266 berupa nilai intensitas cahaya.

3. Jika sensor LDR menerima nilai intensitas cahaya pada nilai parameter yang sudah ditentukan maka akan memicu relay untuk menghidupkan atau mematikan lamu, disini nilai yang di tentukan adalah `500`, jika nilai di bawah `500` maka relay akan mematikan lampu, jika nilai di atas `500` maka relay akan menyalakan lampu.

</div>
# **Kesimpulan**
<div style="text-align:justify;">
Berdasarkan dari penelitian kami yang berjudul “Smart Lamp”, alat pencahayaan otomatis ini merupakan sebuah solusi yang inovatif dan berpotensi memberikan dampak positif dalam pengelolaan pencahayaan dalam berbagai lingkungan, mulai dari rumah tangga hingga lingkungan perkantoran. Dengan fokus pada efisiensi energi, kenyamanan pengguna, dan keterhubungan melalui teknologi IoT, kami yakin bahwa alat ini memiliki prospek yang cerah untuk diimplementasikan dan memberikan manfaat yang signifikan bagi pengguna.
</div>
# **Dokumentasi**
<iframe width="560" height="315"
src="https://www.youtube.com/embed/OaxM7BC0kpk"
title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
# **PPT**
<div style="text-align:justify;">
https://docs.google.com/presentation/d/11I3aA9JoC5R8tBuaCWj0P9NML-SwcrqR5qVFKOS4k2c/edit?amp;usp=embed_facebook#slide=id.g2e49d3b1343_3_5
</div>