Smart Alarm Rumah Berbasis ESP8266 dengan PIR Motion Sensor

Smart Alarm Rumah Berbasis ESP8266 dengan PIR Motion Sensor

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 KomponenGambar Komponen
NodeMcu esp8266
Sensor PIR (HC-SR501)
Buzzer
LED
Resistor
Kabel Jumper
Breadboard

Skema Koneksi Komponen

ESP8266PIR
D2OUT
3V3VCC
GNDGND
ESP8266LED / Buzzer
D3LED Merah (+)
D4Buzzer (+)

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

  1. Rangkai PIR sensor, LED, dan buzzer sesuai dengan skema koneksi.
  2. Unggah program ke ESP8266 menggunakan Arduino IDE.
  3. Nyalakan sistem dan tunggu sensor PIR melakukan kalibrasi awal.
  4. Hubungkan HP atau laptop ke jaringan WiFi SmartAlarm_AP.
  5. Buka browser dan akses alamat IP 192.168.4.1.
  6. Izinkan notifikasi pada browser untuk menerima peringatan alarm.

Simulasi Pengendalian LED dengan ESP32 dan MicroPython

Simulasi Pengendalian LED dengan ESP32 dan MicroPython

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.

Membuat Robot Line Follower dengan menggunakan Arduino Uno dan Driver L293D

Membuat Robot Line Follower dengan menggunakan Arduino Uno dan Driver L293D

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

BahanJumlahGambar
Arduino UNO1 Buah
Motor Shield L293D1 buah
Robot Chassis1 set
Sensor Ultra Sonic1 buah
Male Header1 set
Case Ultra Sonic1 buah
Battery case 2 baterai1 buah
Baterai 186502 buah
Sensor Infra Red2 buah
Kabel Jumper female to femaleSecukupnya

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 kananInframerah kiriUltrasonikMotor KananMotor KiriBateraiArduino + MotorShield
D0A3
GNDGND
VCC+5V
D0A2
GNDGND
VCC+5V
VCC+5V
TrigA4
EchoA5
GNDGND
2 kabelM4
2 KabelM1
Kabel Positif (merah)+M
kabel negatifGND

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.

#include <NewPing.h>
#include <AFMotor.h>

//hc-sr04 sensor
#define TRIGGER_PIN A4
#define ECHO_PIN A5

#define max_distance 50

//ir sensor
#define irLeft A3
#define irRight A2

//GERAKAN MOTOR
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20
#define speedKanan MAX_SPEED - 30
#define speedKiri MAX_SPEED - 60
int speedBelokKiri = speedKiri - 60;
int speedBelokKanan = speedKanan - 60;
int delayBelok = 20;

//HALANGAN
int delayHal1 = 200;
int delayHal2 = 700;
int delayHal3 = 300;

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(3, MOTOR12_1KHZ);

NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);


int distance = 0;
boolean object;

void setup() {

  Serial.begin(9600);
  pinMode(irLeft, INPUT);
  pinMode(irRight, INPUT);
}

void loop() {

  if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0) {
    objectAvoid();
    //forword
  } else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1) {
    objectAvoid();
    //leftturn
    Stop();
    delay(10);
    motor1.setSpeed(speedKiri - 50);
    motor2.setSpeed(speedKanan - 50);
    moveLeft();
  } else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0) {
    objectAvoid();
    //rightturn
    Stop();
    delay(10);
    motor1.setSpeed(speedKiri - 50);
    motor2.setSpeed(speedKanan - 50);
    moveRight();
  } else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1) {
    //Stop
    Stop();
  }
  Serial.print("kiri: ");
  Serial.println(digitalRead(irLeft));
  Serial.print("kanan: ");
  Serial.println(digitalRead(irRight));
}

void objectAvoid() {
  distance = getDistance();
  if (distance <= 15) {
    Stop();
    delay(1000);
    turn();
    Serial.println(distance);
    delay(100);
  } else {
    //forword
    Serial.println("moveforword");
    moveForward();
  }
}

int getDistance() {

  delay(50);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 100;
  }
  return cm;
}

void Stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor1.setSpeed(0);
  motor2.setSpeed(0);
}
void moveForward() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor1.setSpeed(speedKiri);
  motor2.setSpeed(speedKanan);
}
void moveBackward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor1.setSpeed(speedKiri);
  motor2.setSpeed(speedKanan);
}
void turn() {
  if (object == false) {
    Serial.println("turn Right");  //mutar kiri
    motor1.setSpeed(speedKiri);
    motor2.setSpeed(speedKanan);
    motor1.run(FORWARD);
    motor2.run(BACKWARD);
    delay(delayBelok1);
    Stop();
    delay(1000);
    motor1.setSpeed(speedKiri);  //maju
    motor2.setSpeed(speedKanan);
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    delay(delayBelok2);
    motor1.setSpeed(speedKiri);
    motor2.setSpeed(speedKanan);
    motor1.run(BACKWARD);
    motor2.run(FORWARD);
    delay(delayBelok3);
    motor1.setSpeed(speedKiri - 30);  //maju
    motor2.setSpeed(speedKanan - 30);
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    if (digitalRead(irLeft) == 1 || digitalRead(irRight) == 1) {
      Stop();
      delay(100);
      loop();
    } else {
      moveForward();
    }
  }
}
void moveRight() {
  motor1.setSpeed(speedBelokKiri);
  motor2.setSpeed(speedBelokKanan);
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  delay(delayBelok);
}
void moveLeft() {
  motor1.setSpeed(speedBelokKanan);
  motor2.setSpeed(speedBelokKiri);
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  delay(delayBelok);
}

Hal-hal yang perlu diperhatikan

Instalasi Library

#include <NewPing.h>
#include <AFMotor.h>

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:

  1. Robot mendeteksi halangan
  2. Robot berhenti 1 detik
  3. Robot berputar ke kiri dengan gerak rotasi. Jika robot berputar terlalu banyak, kurangi nilai delayHal1
  4. Robot bergerak maju. Jika robot maju terlalu jauh atur nilai delayHal2.
  5. 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.

AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(3, MOTOR12_1KHZ);

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.

Antarmuka sensor DHT-11 dengan menggunakan Arduino

Antarmuka sensor DHT-11 dengan menggunakan Arduino

DHT 11

DHT 11 adalah sejenis sensor yang memiliki kemampuan untuk mengukur suhu dan kelembaban ruangan. Sensor ini sangat mudah digunakan bersama Arduino dan memiliki kemampuan membaca suhu antara 0 s/d 50 derajat Celcius. Berikut ini adalah spesifikasi lengkap dari sensor ini:

Tegangan kerja3-5 Volt DC
Arus maksimal2.5 mA
rentang pengukuran suhu0-50 °C toleransi +- 2 °C
Rentang pengukuran kelembaban20-80% toleransi 5%

Pinout pada DHT 11

Modul DHT 11 terdiri dari 3 pin yaitu seperti gambar dibawah ini:

pin VCC digunakan untuk memberi supply listrik untuk sensor. Sesuai spesifikasi sensor, DHT 11 dapat disupply dengan menggunakan tegangan antara 3.3 – 5 volt. pemberian supply bisa langsung dari pin 5V pada Arduino atau menggunakan sumber tenaga lain seperti baterai dan powerbank.

pin OUT digunakan untuk mengirimkan sinyal ke Arduino. Sinyal dari pin ini akan diproses oleh Arduino yang outputnya berupa pembacaan suhu dan kelembaban ruangan.

pin GND adalah pin ground

Rangkaian Sensor DHT 11 dengan Arduino

Untuk dapat membaca suhu dan kelembaban, maka sensor DHT 11 harus dihubungkan ke microcontroller Arduino. Rangkaian sensor ini dengan DHT 11 relatif sangat mudah, perhatikan tabel dan gambar dibawah ini

DHT 11Arduino
pin VCCpin 5V
pin OUTpin 8
pin GNDpin GND

Menginstal Library DHT

Untuk dapat mengendalikan sensor DHT 11 dengan baik, kita perlu menginstal library DHT kedalam aplikasi Arduino IDE. Penggunaan library ini akan mempermudah kita dalam memprogram sensor DHT 11.

Langkah-langkat instalasi library DHT ikuti langkah-langkah berikut:

Program / Sketch

Setelah library berhasil diinstal, langkah berikutnya adalah menulis dan mengupload program ke dalam Arduino. Program dibawah ini akan menampikan hasil pembacaan sensor pada serial monitor. S

#include "DHT.h"

#define DHTPIN 8
#define DHTTYPE DHT11


DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("Antarmuka DHT 11"));

  dht.begin();
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");
}

Setelah program selesai ditulis, hubungkan Arduino dengan PC atau laptop, pastikan board dan port sudah disetting dengan benar sebelum mengupload. Bukalah Serial monitor dan perhatikan hasil pembacaan sensor. Jika pada layar serial monitor tampil tulisan “Gagal membaca sensor”, Periksalah kembali sambungan kabel antara Arduino dengan sensor DHT 11.

Penjelasan program

#include "DHT.h"

menambahkan (include) library DHT yang kita instal sebelumnya

#define DHTPIN 8
#define DHTTYPE DHT11

#define DHTPIN 8 : mendefinisikan pin 8 Arduino sebagai pin yang terhubung dengan DHT 11

#define DHTTYPE DHT11 : mendefinisikan jenis sensor DHT yang dipakai, dalam hal ini kita menggunakan DHT 11. Apabila sensor yang digunakan adalah sensor DHT22, maka diganti menjadi #define DHTTYPE DHT22.

dht.begin()

mengaktifkan sensor DHT11

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);

mendeklarasikan variabel dengan tipe data float (desimal) untuk menyimpan data pembacaan sensor. variabel h akan menyimpan hasil pembacaan kelembaban, t akan menyimpan data suhu dalam Celcius, f akan menyimpan data suhu dalam Fahrenheit.

if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Gagal membaca sensor"));
    return;
  }

Arduino akan menjalalankan fungsi if dengan logika jika hasil pembacaan sensor yang tersimpan di salah satu variabel h, t atau f bukan berupa angka (isnan = is not a number) maka Arduino akan menampilkan teks “Gagal membaca sensor” di layar serial monitor.

  Serial.print("kelembaban: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.print("°C ");
  Serial.print(f);
  Serial.println("°F ");

Menampilkan hasil pembacaan sensor ke layar serial monitor. Hasil pembacaan sensor yang tampil di layar adalah kelembaban, suhu dalam celcius, dan suhu dalam Fahrenheit.

Membaca intensitas cahaya dengan menggunakan LDR

Membaca intensitas cahaya dengan menggunakan LDR

LDR (Light Dependent Resistor) adalah sejenis resistor variabel yang nilai hambatannya berubah-ubah sesuai intensitas atau tingkat kecerahan cahaya. Ketika cahaya mengenai permukaan LDR, maka konduktivitas atau kekuatan hantaran listrik pada bahan LDR akan meningkat. Begitu pula sebaliknya, kemampuan menghantarkan listrik akan menurun apabila LDR tidak terpapar cahaya.

berdasarkan sifatnya ini, kita bisa menggunakannya sebagai sensor peka cahaya yang bisa dimanfaatkan untuk berbagai inovasi elektronik misalnya lampu jalan otomatis atau jendela otomatis.

Penggunaan LDR sebagai sensor dengan Arduino

LDR merupakan komponen analog, karena LDR menaikkan dan menurunkan daya hantar listrik dengan cara merubah nilai hambatan karena perubahan cahaya. Oleh karena itu, LDR akan dihubungkan ke pin Analog input pada Arduino. Perhatikan rangkaian berikut ini:

Setelah rangkaian selesai dibuat, buka software Arduino IDE dan ketikkan program dibawah ini:

int sensorPin = A0; 

int sensorValue = 0;
void setup() {
Serial.begin(9600); 
}
void loop() {
sensorValue = analogRead(sensorPin); 
Serial.println(sensorValue); 

delay(100);

}

Setelah itu, hubungkan Arduino ke komputer atau laptop kamu dan upload program yang telah ditulis tadi. Berikutnya, perhatikan hasil output lewat serial monitor sambil perlahan-lahan menutupi LDR yang terpapar cahaya dengan menggunaan tangan atau benda lainnya.

Proyek membuat lampu otomatis dengan LDR

Setelah kita memperhatikan dan memahami cara kerja LDR, berikutnya kita akan menggunakan sifat-sifat LDR ini untuk mengontrol lampu agar hidup dan mati sesuai dengan intensitas cahaya yang diterima nya. Perhatikan gambar dan kode dibawah ini:

int sensorPin = A0; //pin analog yang digunakan untuk membaca LDR
int ledPin = 7; //pin LED

int nilaiSensor = 0; //nilai awal sensor LDR

void setup() {
pinMode(ledPin,OUTPUT); //mengaktifkan pin "ledPin" sebagai output
Serial.begin(9600); //mengaktifkan serial monitor untuk membaca nilai dari sensor
}

void loop() {
nilaiSensor = analogRead(sensorPin); //membaca nilai yang dihasilkan oleh sensor
Serial.println(nilaiSensor); //menampilkan hasil pembacaan nilai sensor ke serial monitor
  if(nilaiSensor < 600){ //jika nilai sensor mencapai kurang dari 600, maka.....
    digitalWrite(ledPin,HIGH); //lampu akan dihidupkan
  }
    else{ //jika tidak.....
      digitalWrite(ledPin,LOW); //maka lampu akan dimatikan
    }
      
delay(100);

}

Program diatas sudah dilengkapi dengan penjelasan di tiap baris nya, silahkan dipahami dan diperagakan sesuai dengan hasil pengamatan yang telah dilakukan.

Demikian tulisan ini, semoga bermanfaat, selamat bereksperimen.

Membaca Database Firebase dan Menampilkannya di Aplikasi Android

Membaca Database Firebase dan Menampilkannya di Aplikasi Android

Pada 2 tulisan sebelumnya kita sudah membahas tentang mengukur suhu ruangan dengan DHT 11 dan mengirimkan data hasil pembacaan sensor ke firebase, maka pada tulisan ini saya akan menyambung tulisan lagi untuk melengkapi project ini dengan menampilkan data yang tersimpan di firebase ke aplikasi android yang kita buat sendiri.

pada tulisan kali ini, kita akan menggunakan situs kodular membuat aplikasi android sederhana yang akan digunakan untuk membaca nilai yang tersimpan di firebase. Baiklah, tanpa berpanjang lebar lagi, langsung saja kit ake materi pokok nya

Kodular

Kodular adalah situs yang menyediakan platform pembuatan aplikasi android dengan mudah tanpa menggunakan text-based programming. Untuk membuat aplikasi android di kodular, kita hanya perlu melakukan drag and drop komponen untuk membuat tampilan aplikasi android. Untuk melakukan programming terhadap komponen yang telah disusun, kodular menyediakan sistem programming model block yang juga digunakan dengan metode drag and drop.

Tampilan Designer Tab pada Kodular
Tampilan Block Tab pada Kodular

Memulai Kodular

Untuk mulai menggunakan situs aplikasi kodular, ikutilah langkah-langkah berikut ini:

1. Buka browser dan ketikkan https://www.kodular.io/ lalu klik tombol “Create Apps”

2. Kita akan diarahkan ke halaman sign in. Pada halaman ini pilih sign in dengan menggunakan akun google.

3. lalu pilih akun gmail yang kamu miliki sebagai akun untuk log in ke kodular.

4. Setelah berhasil log in, kalian akan diarahkan ke halaman creator. Pada halaman ini akan terlihat project-project yang sudah pernah dibuat sebelumnya.

5. Untuk membuat project baru, maka klik tombol “Create project” pada bagian kiri atas halaman Kodular Creator.

6. Berikan nama untuk project yang akan kita buat.

7. Pada “Configure your project”, biarkan saja semua konfigurasi tetap default dan langsung klik finish.

8. Kita akan diarahkan ke tab Designer untuk membuat tampilan aplikasi android yang akan kita buat.

Membuat Aplikasi Android

Aplikasi android yang akan kita buat di situs kodular ini adalah aplikasi yang berfungsi untuk membaca data yang terdapat pada realtime database nya firebase. Untuk mempermudah pembuatan aplikasi silahkan ikuti langkah-langkah berikut ini.

1. Buatlah tampilan android sederhana seperti dibawah ini:

2. untuk komponen image, kalian bisa download asset nya disini lalu nanti upload di properties “Background Image” pada komponen Image2.

3. Pada komponen Firebase_Database1, kita akan diminta untuk memasukkan Firebase token dan firebase URL.

Firebase token bisa didapatkan dengan cara:

  • Buka web firebase dan masuk ke console.
  • Pilih project firebase yang telah kita buat sebelumnya.
  • Klik icon gear yang terdapat pada sebelah kiri atas layar lalu klik project settings
  • pada menu project settings, copy isian web API lalu paste kan ke firebase token di kodular

Firebase URL bisa didapatkan dengan cara

  • Buka web firebase dan masuk ke console.
  • Pilih project firebase yang telah kita buat sebelumnya.
  • Klik Realtime Database
  • Copy link yang terdapat didalam Realtime Database lalu pastekan ke Firebase URL di kodular

4. Masuk ke tab block dan ikuti gambar dibawah ini

Sampai disini, aplikasi kita sudah bisa di download dalam bentuk apk dengan cara klik export >> android APK. Copy aplikasi yang telah kita buat tadi ke HP kita lalu install

Jika pembuatan aplikasi berhasil, maka tampilan aplikasi yang kita buat akan terlihat seperti ini:

Jika kalian masih merasa kesulitan membuat aplikasi nya, silahkan download file aia dibawah ini lalu masukkan ke kodular dengan klik tombol import project pada halaman project.

Project aia

Demikianlah Membaca Database Firebase dan Menampilkannya di Aplikasi Android dengan menggunakan kodular, semoga tulisan ini bermanfaat. Sampai jumpa pada tulisan-tulisan berikutnya

Mengontrol servo dengan Potensiometer

Mengontrol servo dengan Potensiometer

Setelah memahami cara mengontrol LED dengan menggunakan potensiometer, kita lanjutkan lagi pembahasan kita ke peragaan berikutnya yaitu mengontrol motor servo dengan potensiometer.

Seperti yang telah kita ketahui sebelumnya, motor servo adalah sejenis motor yang dapat bergerak dan berhenti kearah sudut tertentu. untuk mengatur derajat yang diinginkan , kita harus menuliskan angka 0-180 didalam fungsi Servo.write. Contohnya:

void loop(){
Servo.write(90);
}

Untuk peragaan kali ini, kita akan menggunakan putaran potensiometer untuk memutar lengan servo kearah yang kita inginkan. Jika kita putar potensiometer ke kanan maka servo akan bergerak ke kanan dan begitu juga sebaliknya.

Gambar Rangkaian

ArduinoServoPotensiometer
D6pin signal (kabel oranye)
A0wiper (pin signal)
5Vpin power (kabel merah)pin masuk
GNDpin GND (kabel coklat)pin keluar

Coding

Langkah pertama dalam menulis kode untuk peragaan ini adalah menuliskan variabel-variabel untuk servo dan potensiometer, selain itu jangan lupa menambahkan library servo dengan cara mengetikkan #include <servo.h>.

#include <Servo.h> 
//potensiometer
int potPin = A0;
int nilaiPot;

//servo

int servoPin = 6;

Servo myservo;

Berikutnya, kita aktifkan pin digital 6 untuk mengontrol servo dengan mengetikkan servo.attach(servoPin); didalam void setup().

void setup() {
    myservo.attach(servoPin);
}

Selanjutnya pada void loop(), kita tuliskan program untuk membaca nilai analog dari potensiometer terlebih dahulu

nilaiPot = analogRead(potPin);

Selanjutnya, kita akam mengkonversi nilai analog yang dibaca tadi menjadi derajat putaran pada servo

int angle = map(nilaiPot,0,1023,0,180);

fungsi map () diatas akan merubah nilai antara 0 – 1023 pada potensiometer menjadi nilai antara 0-180. Setelah itu, kita ketikkan fungsi pembacaan servo dengan mengetikkan:

myservo.write(angle);

Jika semua baris program telah diketikkan dengan benar dan telah berhasil di upload, maka hasilnya akan terlihat seperti video dibawah ini

keseluruhan program diatas dapat kita lihat dibawah ini:

#include <Servo.h> 
//potensiometer
int potPin = A0;
int nilaiPot;

//servo
int servoPin = 6;
Servo myservo;

void setup()
{
  myservo.attach(servoPin);
}

void loop()
{
  nilaiPot = analogRead(potPin);
  int angle = map(nilaiPot,0,1023,0,180);
  myservo.write(angle);
}

Bagaimana? mudah kan?
Selamat berkarya

Mengontrol LED dengan potensiometer

Mengontrol LED dengan potensiometer

Sebelumnya sudah kita sudah membahas tentang cara membaca tegangan/nilai analog yang berasal dari potensiometer. Untuk tulisan hari ini, kita akan memperagakan bagaimana mengolah hasil pembacaan nilai analog dari potensiometer dan menggunakannya untuk mengontrol output pada barisan LED.

Perhatikan rangkaian berikut:

Pada peragaan ini kita akan mengontrol 6 buah LED berdasarkan hasil pembacaan nilai analog yang terbaca dari potensiometer, dimana setiap LED akan menyala satu persatu sejalan dengan putaran potensiometer. Semakin jauh putaran potensiometer, semakin banyak LED yang akan hidup.

Langkah Kerja

Setelah kita merangkai seluruh komponen seperti gambar diatas, bukalah kembali program pembacaan nilai potensiometer yang telah dipelajari pada tulisan sebelumnya atau jika tidak ada, maka ketikkan program dibawah ini.

int potPin = A0;
int nilaiPot;

void setup() {
  Serial.begin(9600);
}

void loop() {
  nilaiPot = analogRead(potPin);
  Serial.println(nilaiPot);
  delay(100);
}

Untuk dapat mengontrol LED, kita harus melakukan modifikasi pada program diatas dengan menambahkan variabel untuk LED:

int potPin = A0;
int nilaiPot;

//Pin LED
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;

Pada fungsi setup ( ), tambahkan baris-baris program untuk mengaktifkan pin 2 sampai 6 sebagai OUTPUT.

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}

Langkah berikutnya, kita akan membagi nilai maksimal yang terbaca dari potensiometer sesuai dengan jumlah LED yaitu:

1023 / 6 = 107.5

Hasil pembagian diatas kemudian kita gunakan sebagai acuan untuk menghidupkan dan mematikan barisan LED dengan ketentuan setiap LED akan hidup satu persatu setiap kelipatan 107. dengan demikian kita bisa menuliskan program untuk led ke 1 sebagai berikut:

int hasilBagi = 1023/6;

if(nilaiPot>hasilBagi){
   digitalWrite(led1, HIGH);
}
else {
   digitalWrite(led1, LOW);

Program diatas jika diterjemahkan akan berbunyi “jika nilai potensiometer lebih dari hasil bagi, maka hidupkan led ke-1”. Dengan demikian, untuk led ke 2 dan seterusnya, nilaiPot bisa kita kalikan dengan urutan LED. perhatikan kode program dibawah ini:

if(nilaiPot>hasilBagi*2){
   digitalWrite(led2, HIGH);
}
else {
   digitalWrite(led2, LOW);

if (nilaiPot>hasilBagi*3) {
   digitalWrite (led3, HIGH);
}
else {
   digitalWrite(led2, LOW);
//dst

Setelah semua program diketik sampai selesai, akan terlihat seperti video dibawah ini:

untuk kode program yang lebih lengkap, bisa dilihat dibawah ini:

Coding

int potPin = A0;
int nilaiPot;

//Pin LED
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;

void setup() {
  Serial.begin(9600);
  
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}

void loop() {
  nilaiPot = analogRead(potPin);
  Serial.println(nilaiPot);
  delay(100);
  
  int hasilBagi = 1023/6;
  
  if(nilaiPot>hasilBagi){
   digitalWrite(led1, HIGH);
  }
  else {
    digitalWrite(led1,LOW);
  }
  
  if(nilaiPot>hasilBagi*2){
   digitalWrite(led2, HIGH);
  }
  else {
    digitalWrite(led2,LOW);
  }
  
  if (nilaiPot>hasilBagi*3) {
   digitalWrite (led3, HIGH);
  }
  else {
    digitalWrite(led3,LOW);
  }
  
  if (nilaiPot>hasilBagi*4) {
   digitalWrite (led4, HIGH);
  }
  else {
    digitalWrite(led4,LOW);
  }
  
  if (nilaiPot>hasilBagi*5) {
   digitalWrite (led5, HIGH);
  }
  else {
    digitalWrite(led5,LOW);
  }
  
  if (nilaiPot>hasilBagi*6) {
   digitalWrite (led6, HIGH);
  }
  else {
    digitalWrite(led6,LOW);
  }
}

NB: Untuk membalik pembacaan nilai dari 0-1023 ke 1023-0, bisa kita lakukan dengan cara membalik kaki yang terhubung dengan 5v dan GND

Selamat memperagakan

Membaca nilai Potensiometer dengan menggunakan Arduino

Membaca nilai Potensiometer dengan menggunakan Arduino

Potensiometer merupakan salah satu jenis resistor yang dapat diubah-ubah nilainya (Resistor Variabel). Potensiometer memiliki 3 buah kaki dan sebuah pemutar khusus untuk menentukan besar resistansi. Potensiometer sering digunakan untuk mengatur tegangan pada suatu rangkaian karena potensiometer bekerja dengan prinsip rangkaian pembagi tegangan.

Rangkaian Potensiometer dengan Arduino

Kita bisa menggunakan potensiometer sebagai input untuk mengatur berbagai komponen elektonik seperti LED dan motor dengan bantuan Arduino sebagai kontrolernya. Arduino akan digunakan untuk membaca nilai tegangan pada potensiometer lalu berdasarkan pembacaan nilai tegangan tersebut, Arduino memberi perintah output ke komponen output misalnya LED dan motor.

Sebelum kita mengontrol output dengan Arduino dan potensiometer, terlebih dahulu kita akan mempelajari cara kerja potensiometer yang dirangkaikan dengan Arduino dengan menggunakan serial monitor.

Gambar Rangkaian

Coding

int potPin = A3;
int nilaiPot;

void setup() {
  Serial.begin(9600);
}

void loop() {
  nilaiPot = analogRead(potPin);
  Serial.println(nilaiPot);
  delay(100);
}

Jika program sudah di upload, maka hasilnya akan seperti video berikut ini

Dari video diatas terlihat output pada serial monitor menunjukkan angka antara 0-1023 atau sebaliknya. mengapa demikian?

Arduino melalui pin analog (A0-A5) akan membaca tegangan antara 0-5 V dan merubahnya ke suatu nilai antara 0-1023. Jika tegangan yang terbaca pada potensiometer adalah 5V, maka Arduino akan menampilkan nilai 1023. Sebaliknya, jika nilai tegangan yang terbaca adalah 0V maka Arduino akan menampilkan nilai 0 pada serial monitornya. Nilai pada serial monitor akan berangsur-angsur berkurang ketika potensiometer diputar dan tegangan yang terbaca menurun sampai ke nilai 0.

Kita bisa melakukan pengukuran dengan multimeter untuk membuktikan keterangan diatas. Perhatikan video dibawah ini

Demikianlah cara membaca nilai potensiometer dan menampilkannya ke serial monitor. Dengan pengetahuan ini, kita bisa membuat berbagai macam project Arduino dengan menggunakan potensiometer.