Keamanan rumah merupakan salah satu aspek penting dalam kehidupan sehari-hari. Salah satu solusi sederhana yang dapat diterapkan adalah sistem alarm pendeteksi gerakan. Dengan sistem ini, keberadaan orang atau pergerakan mencurigakan dapat terdeteksi secara otomatis dan langsung memberikan peringatan.
Pada blog post ini, kita akan membahas cara membuat Smart Alarm Rumah menggunakan ESP8266 dan PIR Motion Sensor. Sistem akan memberikan notifikasi ke HP melalui web browser serta menampilkan status sistem melalui LED indikator dan notifikasi pada web browser.
Seperti proyek-proyek sebelumnya, ESP8266 akan dijalankan dalam mode Access Point (AP) dan menggunakan Async Web Server, sehingga sistem dapat digunakan tanpa koneksi internet.
Alat dan Bahan yang Dibutuhkan
Nama Komponen
Gambar Komponen
NodeMcu esp8266
Sensor PIR (HC-SR501)
Buzzer
LED
Resistor
Kabel Jumper
Breadboard
Skema Koneksi Komponen
ESP8266
PIR
D2
OUT
3V3
VCC
GND
GND
ESP8266
LED / Buzzer
D3
LED Merah (+)
D4
Buzzer (+)
Library yang Digunakan
Pastikan library berikut sudah terpasang pada Arduino IDE:
ESP8266WiFi.h
ESPAsyncWebServer.h
ESPAsyncTCP.h
Code
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "SmartAlarm_AP";
const char* password = "12345678";
AsyncWebServer server(80);
bool motionDetected = false;
String alarmStatusText() {
String text = "";
if (motionDetected == true) {
text = "ALARM AKTIF";
} else {
text = "AMAN";
}
return text;
}
String htmlPage() {
String html = "";
html += "<!DOCTYPE html><html><head>";
html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
html += "<title>Smart Alarm Rumah</title>";
html += "</head><body>";
html += "<h1>Smart Alarm Rumah</h1>";
html += "<p>Status: ";
html += alarmStatusText();
html += "</p>";
html += "<script>";
html += "if ('Notification' in window) {";
html += "Notification.requestPermission();";
html += "}";
html += "</script>";
html += "</body></html>";
return html;
}
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_ALARM, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", htmlPage());
});
server.begin();
}
void loop() {
int pirValue = digitalRead(PIR_PIN);
if (pirValue == HIGH) {
motionDetected = true;
digitalWrite(LED_ALARM, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
} else {
motionDetected = false;
digitalWrite(LED_ALARM, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
delay(500);
}
Cara Menggunakan Sistem
Rangkai PIR sensor, LED, dan buzzer sesuai dengan skema koneksi.
Unggah program ke ESP8266 menggunakan Arduino IDE.
Nyalakan sistem dan tunggu sensor PIR melakukan kalibrasi awal.
Hubungkan HP atau laptop ke jaringan WiFi SmartAlarm_AP.
Buka browser dan akses alamat IP 192.168.4.1.
Izinkan notifikasi pada browser untuk menerima peringatan alarm.
Tutorial ini adalah tutorial pertama dari seri simulator wokwi yang bisa kalian akses di helmydx.my.id. Dalam tutorial ini, kalian tidak membutuhkan perangkat keras ESP32 maupun komponen lainnya. Yang perlu dipersiapkan pada tutorial ini adalah sebuah komputer PC atau laptop yang terkoneksi dengan internet untuk mengakses simulator wokwi.
Baiklah tanpa panjang basa basi, kita masuki tutorial simulasi pengendalian LED dengan ESP32 dan MicroPython.
Langkah pertama, Bukalah browser di laptop kamu misalnya google chrome atau mozilla firefox, lalu buka laman https://wokwi.com/. Selanjutnya kalian akan melihat tampilan laman web seperti gambar dibawah ini. lakukan proses sign up / sign in dengan menggunakan akun google kalian masing-masing.
karena kita akan menggunakan ESP32 sebagai pengendali dan Micropython, maka kita scroll kebawah sampai kita temukan icon Micropython. Selain ESP32, Wokwi juga mendukung beberapa mikrokontroler lain seperti Arduino, STM32 dan Raspberry pi pico.
Setelah kalian klik MicroPython, kalian akan diarahkan ke halaman khusus berisi contoh project dan template simulasi yang menggunakan ESP32. Scroll sedikit kebawah, menuju bagian “Stater Templates”, lalu “NEW PROJECT” pilih jenis ESP32 yang kalian inginkan. Untuk tutorial ini saya akan menggunakan MicroPython on ESP32 sebagai template.
Setelah itu, kita akan melihat halaman simulator ESP32. Simulator ini terdiri dari dua panel utama yaitu panel rangkaian dan panel program. Di sebelah kanan layar kita adalah panel rangkaian, dan di sebelah kiri adalah panel program.
Membuat Rangkaian
Kita mulai dari membuat rangkaian elektronik sesuai yang kita inginkan. Pada tutorial ini kita akan mengontrol sebuah LED nyala dan mati secara bergantian dengan jeda waktu tertentu. Ikutilah gambar dibawah ini.
Untuk menambahkan LED, klik icon + yang ada dibagian kiri atas panel rangkaian dan pilih LED lalu Atur posisi LED sesuai keinginan. Setelah itu, langkah berikutnya adalah menghubungkan lampu LED ke terminal/pin yang terdapat pada ESP32. Kaki LED yang panjang (kaki A) selalu dihubungkan ke salah satu pin dengan notasi angka dan kaki LED yang pendek (kaki C) selalu dihubungkan ke pin GND. pola rangkaian ini berlaku untuk setiap LED yang akan digunakan. Untuk itu pola ini perlu diingat dan dipahami dengan baik.
Menulis Program.
Disini kita akan menggunakan MicroPython sebagai bahasa pemrograman utama, untuk itu kita perlu menghapus semua program yang terlihat pada panel sebelah kiri. lalu ketikkan code dibawah ini:
from machine import Pin
from time import sleep
led = Pin(18, Pin.OUT)
while True:
led.value(1)
sleep(1)
led.value(0)
sleep(1)
Penjelasan Program
from machine import Pin
Perintah ini dipergunakan untuk memanggil fungsi Pin pada modul machine. Modul machine ini digunakan untuk berinteraksi langsung dengan perangkat keras (hardware) pada ESP32. Dengan perintah ini, kita bisa mengendalikan pin-pin pada mikrokontroler tersebut.
from time import sleep
Dipergunakan memanggil perintah sleep untuk menunda eksekusi program dari modul time. Perintah sleep() digunakan untuk membuat program berhenti sejenak selama waktu tertentu (dalam satuan detik). perintah ini berguna untuk membuat jeda atau delay dalam program.
led = Pin(18, Pin.OUT)
membuat sebuah objek bernama “led” yang merepresentasikan pin nomor 18 dan diatur sebagai output (Pin.OUT). Jika kalian menggunakan lebih dari 1 LED, maka kalian harus membuat objek masing-masing led dengan pola seperti ini. Misalnya, jika kalian menggunakan 2 buah LED maka kalian harus membuat 2 objek untuk mempermudah pengendalian LED. untuk penamaan objek yang lebih dari 1 boleh saja diberi nama led1, led2, led3 dsb. Pastikan juga tiap nomor pin dalam parameter Pin sesuai dengan pin yang terhubung ke kaki LED.
while True:
Fungsi ini bermakna berulang terus menerus. semua baris perintah yang berada dibawah fungsi ini dan berindentasi (agak sedikit masuk kedalam) adalah program yang akan terus menerus di eksekusi sampai akhirnya mesin dihentikan.
led.value(1)
Memberikan nilai 1 pada objek led (pin 18). Memberikan nilai (value) 1 pada pin output akan membuat LED menyala. Nilai 1 umumnya mewakili tegangan positif (misalnya 3.3V atau 5V) yang diperlukan untuk menyalakan LED. sebaliknya memberikan nilai (value) 0 akan membuat LED mati.
sleep(1)
Menunda pembacaan program selama 1 detik. Setelah LED menyala, program akan berhenti sejenak selama 1 detik sebelum melanjutkan ke perintah berikutnya, yaitu led.value(0).
Dengan demikian, jika program dituliskan secara berurutan seperti dibawah ini:
while True:
led.value(1)
sleep(1)
led.value(0)
sleep(1)
Maka lampu LED akan menyala (led.value(1)) selama 1 detik (sleep(1)) lalu LED akan mati (led.value(0)) selama satu detik lalu mengulang kembali dari awal karena looping/perulangan terus menerus oleh while True.
Langkah selanjutnya, klik tombol play berwarna hijau untuk memulai pada panel rangkaian dan perhatikan apa yang terjadi. Jika rangkaian dan program dibuat dengan benar, maka pada saat simulasi dijalankan lampu LED akan hidup dan mati secara teratur.
Sekian tutorial pertama saya tentang simulasi pengendalian LED dengan ESP32 dan MicroPython ini. Semoga tutorialnya mudah dipahami dan bermanfaat bagi pembaca.
Akhir semester sudah dekat. Seperti biasa kita akan membuat robot line follower untuk diperlombakan. Robot line follower adalah robot sederhana yang dapat berjalan mengikuti jalur garis tertentu secara otomatis. Berbeda dengan robot line follower yang biasa kita buat, robot kita kali ini akan dilengkapi dengan sensor jarak. Dengan adanya sensor jarak ini, robot nantinya akan mampu menghindari halangan yang ada di depannya dan kembali ke jalurnya semula.
Tanpa panjang lebar lagi, yuk kita ikuti langkah-langkah kerja pembuatannya.
Bahan-Bahan
Bahan
Jumlah
Gambar
Arduino UNO
1 Buah
Motor Shield L293D
1 buah
Robot Chassis
1 set
Sensor Ultra Sonic
1 buah
Male Header
1 set
Case Ultra Sonic
1 buah
Battery case 2 baterai
1 buah
Baterai 18650
2 buah
Sensor Infra Red
2 buah
Kabel Jumper female to female
Secukupnya
Gambar Rangkaian
Dibawah ini adalah gambar rangkaian masing-masing komponen secara terpisah. masing-masing komponen harus terpasang semuanya dengan benar agar robot dapat bekerja sebagaimana mestinya.
Rangkaian motor dan baterai
Penyambungan Motor dan Baterai
Rangkaian Sensor Inframerah
Sambungan modul sensor inframerah
Rangkaian Modul Sensor Jarak Ultrasonik
Sambungan modul sensor jarak ultrasonik
Tabel Koneksi antar pin
Inframerah kanan
Inframerah kiri
Ultrasonik
Motor Kanan
Motor Kiri
Baterai
Arduino + MotorShield
D0
A3
GND
GND
VCC
+5V
D0
A2
GND
GND
VCC
+5V
VCC
+5V
Trig
A4
Echo
A5
GND
GND
2 kabel
M4
2 Kabel
M1
Kabel Positif (merah)
+M
kabel negatif
GND
Pembuatan Terminal untuk Sensor
Motor Shield L293D memiliki lubang-lubang yang bisa dipasangi header untuk mempermudah penyambungan kabel jumper yang menghubungkan sensor inframerah dan sensor jarak ultrasonik dengan Arduino (perhatikan gambar diatas). Pemasangan header ini dilakukan dengan cara menyolder kaki-kaki header ke lubang-lubang yang tersedia. Selain penyolderan header ke papan Shield L293D, Motor DC juga perlu disolder terminal-terminalnya dengan kabel.
Untuk penempatan komponen dan sambungan kabelnya, perhatikan gambar-gambar dibawah ini:
Code
Upload code dibawah ini supaya robot bisa bekerja sesuai fungsinya, beberapa bagian program juga perlu di modifikasi sesuai kebutuhan robot.
NewPing.h dan AFMotor.h adalah program tambahan yang akan mempermudah proses coding. Program tambahan ini disebut dengan library. Library ini harus diinstal terlebih dahulu sebelum kita mengupload program ke robot line follower yang kita buat. Untuk menginstall library yang dibutuhkan, perlhatikan langkah-langkah berikut:
Buka/klik Library manager yang terdapat dibagian kiri layar
Pada bagian search bar, ketikkan “Adafruit Motor Shield” untuk mencari library yang sesuai. Setelah itu nanti akan terlihat Adafruit Motor Shield library di hasil pencarian, klik instal. Perhatikan gambar
Instalasi bisa dikatakan selesai apabila pada terminal ouput terlihat seperti gambar dibawah ini:
Sampai disitu kita sudah berhasil menginstal library AFMotor. Kita ulangi langkah yang sama dengan sebelumnya untuk menginstal library NewPing. Untuk mempermudah penemuan library NewPing, ketikkan “NewPing” di search bar.
Kecepatan dan Keseimbangan Motor
//GERAKAN MOTOR
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20
#define speedKanan MAX_SPEED - 0
#define speedKiri MAX_SPEED - 0
int speedBelokKiri = speedKiri - 30;
int speedBelokKanan = speedKanan - 30;
int delayBelok = 20;
kecepatan maksimal atau MAX_SPEED robot dalam program ini adalah 200. Jika roda kiri dan roda kanan di set dengan nilai MAX_SPEED maka motor akan berputar dengan kecepatan maksimal. Walaupun begitu, seringkali kita harus menyesuaikan kecepatan motor dengan kondisi sebenarnya dilapangan. Untuk mengatur kecepatan motor kanan, kita bisa mengurangi MAX_SPEED secara bertahap pada baris #define speedKanan MAX_SPEED – 0; . Nilai 0 bisa diisi dengan nilai angka misalnya 30 untuk mengurangi kecepatan motor sebelah kanan. Begitu juga dengan motor sebelah kiri, kita ganti nilai 0 pada speedKiri untuk mengurangi kecepatan motor sebelah kiri.
Ada kalanya robot tidak bisa berjalan lurus karena kecepatan real dari motor kanan dan motor kiri berbeda walaupun dalam program kita sudah mengatur dengan nilai yang sama. Untuk mengatasi hal ini, kita bisa mengatur speedKanan dan speedKiri dengan nilai yang berbeda. Misalnya, jika robot ada kecenderungan bergerak kearah kanan, maka kita atur nilai motor sebelah kiri supaya lebih rendah dari motor yang kanan secara bertahap. Uji coba perubahan nilai ini untuk melihat hasilnya secara langsung.
Agar robot bisa berbelok sesuai jalur yang ditentukan, kita juga harus mengatur kecepatan motor saat dibelokan dengan cara menguragi nilai speedKiri dan speed kanan pada variabel speedBelokKiri dan speedBelokKanan. Kurangi nilai ini secara bertahap untuk mendapatkan hasil yang diinginkan. Perlu diingat bahwa pembacaan sensor sering kali gagal jika robot bergerak terlalu cepat.
Melewati Halangan
//HALANGAN
//HALANGAN
int delayHal1 = 200;
int delayHal2 = 700;
int delayHal3 = 300;
Jika terdapat halangan ditengah jalur, robot akan mengambil tindakan mengelak dan memutari halangan tersebut. Tindakan mengelak dan memutari halangan ini memiliki langkah-langkah sebagai berikut:
Robot mendeteksi halangan
Robot berhenti 1 detik
Robot berputar ke kiri dengan gerak rotasi. Jika robot berputar terlalu banyak, kurangi nilai delayHal1
Robot bergerak maju. Jika robot maju terlalu jauh atur nilai delayHal2.
Robot berputar ke kanan dengan gerak rotasi. Jika Robot berputar terlalu banyak, kurangi nilai delayHal3
Posisi kabel Motor Kanan dan Kiri
Sesuai susunan perangkat, kabel motor sebelah kanan bisa dipasang pada terminal M3 dan M4, sedangkan kabel motor kiri bisa dipasang pada terminal M1 dan M2.
Ubah bagian kode dibawah ini untuk menyesuaikan dengan pemasangan terminal yang digunakan. pada kode dibawah ini motor kiri menggunakan terminal M1 dan motor kanan menggunakan terminal M3 (motor1 adalah motor kiri yang terhubung ke M1 dan motor2 adalah motor kanan yang terhubung ke M3.
Jika motor bergerak terbalik, gerakan yang seharusnya maju menjadi mundur, tukar/ balik posisi kabel pada terminal motor.
Sensitifitas Sensor InfraRed
Sensor infra merah yang kita gunakan sangat sensitif terhadap gangguan cahaya dari luar. Untuk mengatasi masalah tersebut, kita bisa memberi tambahan penutup disekitar sensor agar terlindung dari cahaya eksternal. Selain itu, jarak sensor ke permukaan lantai juga harus diperhatikan, jangan terlalu jauh dan jangan terlalu dekat.
Sensor Infra merah yang kita gunakan juga dilengkapi dengan potensiometer (berwarna biru dan punya bagian yang dapat diputar dengan obeng). Potensiometer ini berfungsi untuk menyesuaikan akurasi pembacaan sensor. Potensiometer ini . Sesuaikan pembacaan sensor dengan ketentuan jika berada di luar garis (lantai putih), lampu indikator sensor akan menyala, sebaliknya jika sensor berada digaris berwarna hitam, lampu indikator akan mati. Posisikan dan geser-geser sensor dan pastikan lampu indikator secara responsif hidup dan mati yang menandakan sensor juga merespon dengan cepat.
Akhirnya, saya ucapkan selamat mencoba. Terima kasih sudah mengunjungi tulisan ini dan membaca sampai akhir.
Pada tulisan sebelumnya, kita sudah mencoba untuk mengukur jarak dengan sensor ultrasonik (HC-SR04) yang outputnya ditampilkan melalui serial monitor. Kali ini kita akan mencoba untuk membuat alat pengukur jarak dengan menggunakan sensor yang sama dan menggunakan lampu LED sebagai indikatornya.
Cara kerja alat
Alat pengukur jarak ini akan mengukur jarak benda terhadap sensor ultrasonic dan menampilkan hasil pengukurannya lewat deretan lampu LED. Semakin dekat suatu benda dengan Sensor ultrasonik, semakin banyak lampu LED yang akan hidup.
Skema Rangkaian
Coding
untuk coding nya sama dengan program pada tulisan terdahulu tentang mengukur jarak dengan sensor ultrasonik (HC-SR04), hanya saja kita perlu melakukan penyesuaian dan menambahkan beberapa baris fungsi logika untuk menghidupkan LED berdasarkan jarak yang terbaca oleh Arduino.
int led1=2;
int led2=3;
int led3=4;
int led4=5;
int led5=6;
int trigpin = 10;
int echopin = 9;
long durasi;
long jarak;
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(trigpin,OUTPUT);
pinMode(echopin,INPUT);
}
void loop() {
digitalWrite(trigpin, LOW);
delayMicroseconds(5);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
digitalWrite(trigpin, LOW);
durasi = pulseIn(echopin,HIGH);
jarak = (durasi/2) / 29.1;
if (jarak<30){
digitalWrite (led1, HIGH);
}
else{
digitalWrite(led1,LOW);
}
if (jarak<40){
digitalWrite (led2, HIGH);
}
else{
digitalWrite(led2,LOW);
}
if (jarak<50){
digitalWrite (led3, HIGH);
}
else{
digitalWrite(led3,LOW);
}
if (jarak<60){
digitalWrite (led4, HIGH);
}
else{
digitalWrite(led4,LOW);
}
if (jarak<70){
digitalWrite (led5, HIGH);
}
else{
digitalWrite(led5,LOW);
}
}
Setelah program berhasil di upload, maka hasilnya akan terlihat seperti video dibawah ini:
Dari tampilan video diatas, terlihat bahwa semakin dekat suatu objek dengan sensor ultrasonik, maka semakin banyak lampu LED yang menyala. Bagaimana? mudah kan?
Modul HC-SR04 adalah modul yang digunakan untuk mengukur jarak dengan menggunakan gelombang ultra sonik.
Cara Kerja Modul
HC-SR04 terdiri dari 2 bagian utama yaitu pemancar gelombang suara dan penerima gelombang suara. Pada saat diberi tegangan, bagian pemancar akan memancarkan gelombang suara ultrasonik dan dan bagian penerima akan menunggu pantulan gelombang suara yang kembali akibat terhalang dengan benda padat. Waktu yang dibutuhkan oleh gelombang ultrasonic untuk berjalan dan memantul kembali lalu di konversi/di ubah menjadi jarak dengan persamaan jarak, waktu dan kecepatan.
Rangkaian Arduino dengan HC-SR04 (sensor ultrasonic)
Arduino
HC-SR04
D8
Trig
D9
Echo
5V
VCC
GND
GND
Coding
int trigpin = 8;
int echopin = 9;
long durasi;
long jarak;
void setup() {
Serial.begin(9600);
pinMode(trigpin,OUTPUT);
pinMode(echopin,INPUT);
}
void loop() {
digitalWrite(trigpin, LOW);
delayMicroseconds(5);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
digitalWrite(trigpin, LOW);
durasi = pulseIn(echopin,HIGH);
jarak = (durasi/2) / 29.1;
Serial.print(jarak);
Serial.println(" cm");
delay(500);
}
langkah selanjutnya adalah mengupload kode yang telah kita tulis ke Arduino lalu mencoba hasilnya dengan melihat tampilan output pada serial monitor. Selamat mencoba