Monitoring Level Air Tangki Berbasis ESP8266

Monitoring Level Air Tangki Berbasis ESP8266

Mengetahui kondisi ketersediaan air di dalam tangki atau tandon merupakan hal yang penting, terutama untuk kebutuhan rumah tangga maupun sistem otomatis seperti pompa air. Tanpa sistem monitoring, kita sering kali baru menyadari air habis atau meluap ketika masalah sudah terjadi.

Pada blog post ini, kita akan membahas cara membuat Sistem Monitoring Level Air Tangki menggunakan ESP8266. Sistem ini mampu memberikan indikasi kondisi penuh dan kosong melalui LCD 16×2 dan LED, serta dapat dipantau melalui web browser tanpa koneksi internet.

Sistem monitoring level air ini bekerja dengan mendeteksi ketinggian air di dalam tangki menggunakan sensor level air. Berdasarkan hasil pembacaan sensor, ESP8266 akan menentukan kondisi tangki, apakah dalam keadaan kosong, setengah, atau penuh.

Informasi tersebut ditampilkan secara lokal melalui LCD 16×2 dan LED indikator, serta dapat dipantau melalui halaman web menggunakan HP atau laptop yang terhubung langsung ke WiFi ESP8266.

Alat dan Bahan yang Dibutuhkan

Nama KomponenGambar Komponen
NodeMcu esp8266
Water Level Sensor
LED Merah dan Hijau
Resistor 220 ohm
LCD 16×2 I2C
Kabel Jumper
Breadboard

Gambar Rangkaian

NodeMcu Esp8266LCD I2C
Pin D5SCL
Pin D6SDA
Vin / VuVCC
GNDGND
NodeMcu Esp8266Water Level Sensor
Pin D2S
GNDGND (-)
Vin /VuVCC (+)
NodeMcu Esp8266LED Merah / Hijau
Pin D3Anoda (+) Merah
Pin D4Anoda (+) Hijau
GNDkatoda (-) Merah & Hijau

Cara Kerja Sistem

Cara kerja sistem monitoring level air ini dapat dijelaskan sebagai berikut:

  1. Sensor level air mendeteksi keberadaan air di dalam tangki.
  2. ESP8266 membaca status sensor sebagai input digital.
  3. Sistem menentukan kondisi air berdasarkan input sensor.
  4. LED indikator menyala sesuai kondisi air (penuh atau kosong).
  5. Informasi kondisi air ditampilkan pada LCD 16×2.
  6. ESP8266 menyediakan halaman web untuk memantau kondisi tangki.

Library yang Digunakan

Pastikan library berikut sudah terpasang pada Arduino IDE:

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • LiquidCrystal_I2C.h

Code

#include <ESP8266WiFi.h>
html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
html += "<title>Monitoring Level Air</title>";
html += "</head><body>";
html += "<h1>Monitoring Level Air Tangki</h1>";
html += "<p>Status Air: ";
html += waterStatusText();
html += "</p>";
html += "</body></html>";
return html;
}


void setup() {
lcd.init();
lcd.backlight();


pinMode(LEVEL_PIN, INPUT);
pinMode(LED_FULL, OUTPUT);
pinMode(LED_EMPTY, 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 sensorValue = digitalRead(LEVEL_PIN);


if (sensorValue == HIGH) {
waterDetected = true;
digitalWrite(LED_FULL, HIGH);
digitalWrite(LED_EMPTY, LOW);
} else {
waterDetected = false;
digitalWrite(LED_FULL, LOW);
digitalWrite(LED_EMPTY, HIGH);
}


lcd.setCursor(0, 0);
lcd.print("Level Air:");
lcd.setCursor(0, 1);
lcd.print(waterStatusText());
lcd.print(" ");


delay(1000);
}

Cara Menggunakan Sistem

  1. Pasang sensor level air di dalam tangki sesuai ketinggian yang diinginkan.
  2. Rangkai semua komponen sesuai dengan skema koneksi.
  3. Unggah program ke ESP8266 menggunakan Arduino IDE.
  4. Nyalakan sistem dan pastikan LED serta LCD berfungsi dengan baik.
  5. Hubungkan HP atau laptop ke jaringan WiFi WaterLevel_AP.
  6. Buka browser dan akses alamat IP 192.168.4.1 untuk melihat status level air.

Sistem Penyiram Tanaman Terjadwal Berbasis ESP8266

Sistem Penyiram Tanaman Terjadwal Berbasis ESP8266

Penyiraman tanaman tidak selalu harus bergantung pada kondisi tanah. Pada beberapa jenis tanaman, penyiraman justru lebih efektif jika dilakukan pada waktu-waktu tertentu, misalnya pagi dan sore hari. Oleh karena itu, pada artikel ini kita akan membahas cara membuat Sistem Penyiram Tanaman Terjadwal menggunakan ESP8266 dan pompa air.

Berbeda dengan sistem sebelumnya yang berbasis sensor kelembapan tanah, sistem ini akan menyalakan pompa air berdasarkan jadwal waktu yang telah ditentukan. ESP8266 tetap dijalankan dalam mode Access Point (AP) dan menggunakan Async Web Server, sehingga sistem dapat diakses tanpa koneksi internet.

Sistem penyiram tanaman terjadwal ini bekerja dengan memanfaatkan modul RTC DS1307 sebagai penentu waktu. RTC akan menyimpan informasi jam, menit, dan tanggal secara mandiri. ESP8266 membaca data waktu dari RTC, lalu mengaktifkan pompa air sesuai jadwal yang telah ditentukan.

Status pompa, waktu saat ini, dan jadwal penyiraman ditampilkan melalui LCD 16×2 serta dapat dipantau melalui halaman web menggunakan browser HP atau laptop.

Alat dan Bahan yang Dibutuhkan

Nama komponenGambar Komponen
NodeMcu esp8266
Modul RTC DS1307
Pompa DC 5V
Relay Module 1 Channel
LCD 16×2 I2C
Kabel Jumper
Breadboard

Gambar Rangkaian

NodeMcu esp8266Relay
Pin D1IN
Vin /VUVCC (+)
GNDGND (-)
NodeMcu Esp8266LCD I2C
Pin D5SCL
Pin D6SDA
Vin / VuVCC
GNDGND
NodeMcu Esp8266DS1307
Pin D5SCL
Pin D6SDA
Vin / VuVCC
GNDGND

Cara Kerja Sistem

Cara kerja sistem penyiram tanaman terjadwal ini adalah sebagai berikut:

  1. RTC DS1307 menyimpan dan menyediakan data waktu secara real-time.
  2. ESP8266 membaca data jam dan menit dari RTC.
  3. Sistem membandingkan waktu saat ini dengan jadwal penyiraman yang telah ditentukan.
  4. Jika waktu sesuai dengan jadwal, relay diaktifkan sehingga pompa air menyala.
  5. Pompa air akan bekerja selama durasi tertentu.
  6. Setelah durasi penyiraman selesai, pompa dimatikan secara otomatis.
  7. Waktu saat ini dan status pompa ditampilkan pada LCD dan halaman web.

Library yang Digunakan

Pastikan library berikut sudah terpasang pada Arduino IDE:

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • RTClib.h
  • LiquidCrystal_I2C.h

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>

#define RELAY_PIN D1

LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;

const char* ssid = "SmartWaterRTC_AP";
const char* password = "12345678";

AsyncWebServer server(80);

bool pumpState = false;

int waterHour = 6;
int waterMinute = 0;
int wateringDuration = 10; // detik

unsigned long startMillis = 0;
bool wateringActive = false;

String pumpStatusText() {
  String text = "";

  if (pumpState == true) {
    text = "ON";
  } else {
    text = "OFF";
  }

  return text;
}

String htmlPage(DateTime now) {
  String html = "";
  html += "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<title>Smart Watering RTC</title>";
  html += "</head><body>";
  html += "<h1>Penyiram Tanaman Terjadwal</h1>";
  html += "<p>Waktu Saat Ini: ";
  html += String(now.hour());
  html += ":";
  html += String(now.minute());
  html += "</p>";
  html += "<p>Status Pompa: ";
  html += pumpStatusText();
  html += "</p>";
  html += "<p>Jadwal Penyiraman: 06:00</p>";
  html += "</body></html>";
  return html;
}

void setup() {
  lcd.init();
  lcd.backlight();

  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);

  rtc.begin();

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    DateTime now = rtc.now();
    request->send(200, "text/html", htmlPage(now));
  });

  server.begin();
}

void loop() {
  DateTime now = rtc.now();

  if (wateringActive == false && now.hour() == waterHour && now.minute() == waterMinute) {
    digitalWrite(RELAY_PIN, LOW);
    pumpState = true;
    wateringActive = true;
    startMillis = millis();
  }

  if (wateringActive == true && millis() - startMillis >= wateringDuration * 1000) {
    digitalWrite(RELAY_PIN, HIGH);
    pumpState = false;
    wateringActive = false;
  }

  lcd.setCursor(0, 0);
  lcd.print("Time: ");
  lcd.print(now.hour());
  lcd.print(":");
  lcd.print(now.minute());
  lcd.print("   ");

  lcd.setCursor(0, 1);
  lcd.print("Pump: ");
  lcd.print(pumpStatusText());
  lcd.print("   ");

  delay(1000);
}

Cara Menggunakan Sistem

  1. Rangkai RTC DS1307, relay, pompa air, dan LCD sesuai dengan skema koneksi.
  2. Unggah program ke ESP8266 menggunakan Arduino IDE.
  3. Atur waktu RTC (sekali saja) sesuai dengan waktu saat ini.
  4. Nyalakan sistem dan pastikan semua komponen bekerja dengan baik.
  5. Hubungkan HP atau laptop ke jaringan WiFi SmartWaterRTC_AP.
  6. Buka browser dan akses alamat IP 192.168.4.1 untuk memantau sistem.

Sistem Penyiram Tanaman Otomatis Berbasis ESP8266

Sistem Penyiram Tanaman Otomatis Berbasis ESP8266

Merawat tanaman secara rutin sering menjadi tantangan, terutama ketika kita memiliki kesibukan atau lupa melakukan penyiraman. Untuk mengatasi masalah tersebut, pada artikel ini kita akan membahas cara membuat Sistem Penyiram Tanaman Otomatis menggunakan ESP8266, sensor soil moisture, dan pompa air.

Sistem ini dirancang agar dapat bekerja secara mandiri tanpa koneksi internet, karena ESP8266 akan dijalankan dalam mode Access Point (AP). Selain itu, informasi kelembapan tanah dan status pompa air dapat dipantau melalui web browser dan LCD 16×2, sehingga mudah digunakan oleh siapa saja.

Sistem penyiram tanaman otomatis ini bekerja dengan cara membaca tingkat kelembapan tanah menggunakan sensor soil moisture. Ketika tanah terdeteksi dalam kondisi kering, ESP8266 akan mengaktifkan pompa air secara otomatis. Sebaliknya, jika tanah sudah cukup lembap, pompa air akan dimatikan.

Untuk memudahkan pemantauan, ESP8266 juga menyediakan halaman web sederhana yang dapat diakses langsung dari HP atau laptop. Informasi yang sama ditampilkan secara lokal melalui LCD 16×2.

Alat dan Bahan yang Dibutuhkan

Sebelum memulai perakitan, siapkan beberapa komponen berikut:

Nama KomponenGambar Komponen
NodeMcu esp8266
Soil Moisture Sensor
Pompa DC 5 Volt
Relay Module 1 Channel
LCD 16×2 I2C
Kabel Jumper
Breadboard

Gambar Rangkaian

NodeMcu esp8266Sensor Soil Moisture
pin A0AO
Vin / VuVCC (+)
GNDGND (-)
NodeMcu esp8266Relay
Pin D1IN
Vin /VUVCC (+)
GNDGND (-)
NodeMcu Esp8266LCD I2C
Pin D5SCL
Pin D6SDA
Vin / VuVCC
GNDGND

Cara Kerja Sistem

Secara sederhana, alur kerja sistem dapat dijelaskan sebagai berikut:

  1. Sensor soil moisture membaca tingkat kelembapan tanah dan menghasilkan nilai analog.
  2. ESP8266 membaca nilai tersebut melalui pin A0.
  3. Nilai kelembapan dibandingkan dengan batas ambang yang telah ditentukan.
  4. Jika tanah dalam kondisi kering, relay akan diaktifkan sehingga pompa air menyala.
  5. Jika tanah sudah cukup lembap, relay dimatikan dan pompa berhenti bekerja.
  6. Nilai kelembapan tanah dan status pompa ditampilkan pada LCD dan halaman web.

Library yang Digunakan

Pastikan beberapa library berikut sudah terpasang di Arduino IDE:

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • LiquidCrystal_I2C.h

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <LiquidCrystal_I2C.h>

#define SOIL_PIN A0
#define RELAY_PIN D1

LiquidCrystal_I2C lcd(0x27, 16, 2);

const char* ssid = "SmartWater_AP";
const char* password = "12345678";

AsyncWebServer server(80);

int soilValue = 0;
bool pumpState = false;

String pumpStatusText() {
  String text = "";

  if (pumpState == true) {
    text = "ON";
  } else {
    text = "OFF";
  }

  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 Watering</title>";
  html += "</head><body>";
  html += "<h1>Sistem Penyiram Tanaman</h1>";
  html += "<p>Nilai Kelembapan Tanah: " + String(soilValue) + "</p>";
  html += "<p>Status Pompa: " + pumpStatusText() + "</p>";
  html += "</body></html>";
  return html;
}

void setup() {
  lcd.init();
  lcd.backlight();

  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", htmlPage());
  });

  server.begin();
}

void loop() {
  soilValue = analogRead(SOIL_PIN);

  if (soilValue > 600) {
    digitalWrite(RELAY_PIN, LOW);
    pumpState = true;
  } else {
    digitalWrite(RELAY_PIN, HIGH);
    pumpState = false;
  }

  lcd.setCursor(0, 0);
  lcd.print("Soil: ");
  lcd.print(soilValue);
  lcd.print("   ");

  lcd.setCursor(0, 1);
  lcd.print("Pump: ");
  lcd.print(pumpStatusText());
  lcd.print("   ");

  delay(2000);
}

Cara Menggunakan Sistem

Setelah rangkaian dan program selesai dibuat, lakukan langkah-langkah berikut:

  1. Hubungkan semua komponen sesuai dengan skema koneksi.
  2. Unggah program ke ESP8266 menggunakan Arduino IDE.
  3. Pastikan pompa air mendapatkan sumber daya yang sesuai.
  4. Aktifkan WiFi pada HP atau laptop dan hubungkan ke jaringan SmartWater_AP.
  5. Buka browser dan akses alamat IP 192.168.4.1.
  6. Amati nilai kelembapan tanah dan status pompa air melalui halaman web dan LCD.

Monitoring Kualitas Udara dengan ESP8266 dan Sensor MQ-135

Monitoring Kualitas Udara dengan ESP8266 dan Sensor MQ-135

Pada tutorial ini kita akan membuat sistem Monitoring Kualitas Udara menggunakan sensor MQ-135. Sistem ini mampu mendeteksi gas dan asap di lingkungan sekitar, kemudian menampilkan hasilnya melalui Web Browser dan LCD 16×2.

ESP8266 akan dijalankan dalam mode Access Point (AP) dan menggunakan Async Web Server, sehingga sistem dapat diakses langsung dari HP atau laptop tanpa koneksi internet dan tanpa router.

Alat dan Bahan

Nama KomponenGambar Komponen
NodeMcu esp8266
Sensor kualitas udara MQ 135
LCD 16×2 I2C
Kabel Jumper
Breadboard

Gambar Rangkaian

NodeMcu esp8266MQ135
pin A0Aout
vin / vuVCC
GNDGND
NodeMcu esp8266LCD I2C
Pin D5SCL
Pin D6SDA
GNDGND
vin / vuVCC

Library yang Digunakan

Pastikan library-library ini sudah terinstal

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • LiquidCrystal_I2C.h

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <LiquidCrystal_I2C.h>

#define MQ_PIN A0

LiquidCrystal_I2C lcd(0x27, 16, 2);

const char* ssid = "AirQuality_AP";
const char* password = "12345678";

AsyncWebServer server(80);

int airValue = 0;
String airStatus = "";

String htmlPage() {
  String html = "";
  html += "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<title>Air Quality Monitor</title>";
  html += "</head><body>";
  html += "<h1>Monitoring Kualitas Udara</h1>";
  html += "<p>Nilai Sensor: " + String(airValue) + "</p>";
  html += "<p>Status Udara: " + airStatus + "</p>";
  html += "</body></html>";
  return html;
}

void setup() {
  lcd.init();
  lcd.backlight();

  pinMode(MQ_PIN, INPUT);

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", htmlPage());
  });

  server.begin();
}

void loop() {
  airValue = analogRead(MQ_PIN);

  if (airValue < 300) {
    airStatus = "Baik";
  } else if (airValue >= 300 && airValue < 600) {
    airStatus = "Sedang";
  } else {
    airStatus = "Buruk";
  }

  lcd.setCursor(0, 0);
  lcd.print("Air Value:    ");
  lcd.setCursor(11, 0);
  lcd.print(airValue);

  lcd.setCursor(0, 1);
  lcd.print("Status:      ");
  lcd.setCursor(8, 1);
  lcd.print(airStatus);

  delay(2000);
}

Cara Penggunaan Alat

  1. Rangkai sensor MQ dan LCD 16×2 sesuai dengan tabel koneksi yang telah dijelaskan.
  2. Hubungkan ESP8266 ke komputer dan unggah program menggunakan Arduino IDE hingga proses selesai tanpa error.
  3. Nyalakan ESP8266 dan pastikan modul mendapatkan sumber daya yang stabil.
  4. Aktifkan WiFi pada HP atau laptop, lalu hubungkan ke jaringan AirQuality_AP.
  5. Buka browser dan akses alamat IP 192.168.4.1.
  6. Amati nilai kualitas udara yang ditampilkan pada halaman web dan LCD.

Tutorial Monitoring Suhu & Kelembapan dengan ESP8266

Tutorial Monitoring Suhu & Kelembapan dengan ESP8266

Pada tutorial lanjutan ini, kita akan membuat sistem Monitoring Suhu dan Kelembapan menggunakan sensor DHT11 atau DHT22. Data suhu dan kelembapan akan ditampilkan secara real-time melalui Web Browser (menggunakan Async Web Server mode AP) serta ditampilkan secara lokal pada LCD.

Sama seperti tutorial sebelumnya, ESP8266 akan bekerja dalam mode Access Point (AP) sehingga sistem dapat digunakan tanpa koneksi internet dan tanpa router.

Fitur

Sistem monitoring ini dirancang untuk memberikan informasi kondisi lingkungan secara langsung dan mudah diakses. Fitur-fitur yang akan terdapat pada sistem ini bisa kita cek dibawah ini.

  • Monitoring suhu dan kelembapan menggunakan sensor DHT11 / DHT22
  • ESP8266 beroperasi sebagai WiFi Access Point (AP)
  • Data sensor ditampilkan pada Web Browser secara asynchronous
  • Data suhu dan kelembapan ditampilkan secara lokal pada LCD

Alat Dan Bahan

Nama KomponenGambar Komponen
NodeMcu esp8266
Sensor DHT 11
LCD 16×2 I2C
Kabel Jumper
Breadboard

Gambar Rangkaian

ESP8266DHT-11
pin D2pin Data
pin vin /vupin VCC (+)
pin GNDpin GND
ESP8266LCD I2C
pin D5SCL
pin D6SDA
pin vin /vuVCC
pin GNDGND

Cara Kerja Alat

  1. ESP8266 akan membaca data suhu dan kelembapan dari sensor DHT secara berkala.
  2. Data hasil pembacaan akan ditampilkan pada LCD sebagai monitoring lokal.
  3. ESP8266 akan membuat jaringan WiFi sendiri (Mode AP).
  4. Pengguna menghubungkan HP atau laptop ke WiFi ESP8266.
  5. Data suhu dan kelembapan ditampilkan pada halaman web melalui Web Server.

Library yang Digunakan

Pastikan library berikut ini sudah terinstal di Arduino IDE kamu:

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • DHT.h
  • LiquidCrystal_I2C.h

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN D2
#define DHTTYPE DHT11

LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "DHT_Monitor_AP";
const char* password = "12345678";

AsyncWebServer server(80);

float temperature = 0;
float humidity = 0;

String htmlPage() {
  String html = "";
  html += "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<title>DHT Monitor</title>";
  html += "</head><body>";
  html += "<h1>Monitoring Suhu & Kelembapan</h1>";
  html += "<p>Suhu: " + String(temperature) + " &deg;C</p>";
  html += "<p>Kelembapan: " + String(humidity) + " %</p>";
  html += "</body></html>";
  return html;
}

void setup() {
  lcd.init();
  lcd.backlight();

  dht.begin();

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", htmlPage());
  });

  server.begin();
}

void loop() {
  humidity = dht.readHumidity();
  temperature = dht.readTemperature();

  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print(" C");

  lcd.setCursor(0, 1);
  lcd.print("Hum : ");
  lcd.print(humidity);
  lcd.print(" %");

  delay(2000);
}

Petunjuk Pengerjaan dan Uji Coba

  1. Rangkai sensor DHT11/DHT22 dan modul LCD sesuai dengan tabel koneksi yang telah dijelaskan. Pastikan setiap pin terhubung dengan benar, terutama jalur VCC dan GND, agar sensor dan LCD dapat bekerja dengan normal.
  2. Hubungkan papan ESP8266 ke komputer menggunakan kabel USB, kemudian buka Arduino IDE. Pilih tipe board dan port yang sesuai, lalu unggah (upload) program monitoring suhu dan kelembapan ke ESP8266 hingga proses selesai tanpa error.
  3. Setelah upload berhasil, lepaskan ESP8266 dari komputer (opsional), lalu pastikan papan sudah mendapatkan sumber daya. Selanjutnya, aktifkan fitur WiFi pada HP atau laptop.
  4. Cari jaringan WiFi dengan nama DHT_Monitor_AP, kemudian hubungkan perangkat ke jaringan tersebut. Tunggu hingga perangkat berhasil terhubung.
  5. Buka aplikasi browser (Chrome, Firefox, atau sejenisnya), lalu ketik alamat IP 192.168.4.1 pada kolom alamat dan tekan Enter.
  6. Perhatikan halaman web yang tampil. Nilai suhu dan kelembapan akan ditampilkan secara real-time melalui web, sementara informasi yang sama juga dapat dilihat langsung pada layar LCD yang terpasang pada rangkaian.

Tutorial Smart Lamp (WiFi Control) dengan ESP8266

Tutorial Smart Lamp (WiFi Control) dengan ESP8266

Pada tutorial ini kita akan membuat Smart Lamp sederhana menggunakan ESP8266 + Relay, yang bisa dikontrol langsung dari HP atau browser tanpa internet.

ESP8266 akan berjalan dalam mode Access Point (AP), sehingga HP/laptop bisa langsung terhubung ke WiFi dari ESP8266, lalu mengontrol lampu lewat Web Server.

Alat & Bahan

Nama KomponenGambar Komponen
NodeMcu esp8266
Relay Module 1 Channel
Bola Lampu
Fitting Lampu
Kabel Jumper
Breadboard

Gambar Rangkaian

ESP8266Relay
pin D1pin S
vin / vupin +
GNDpin –

Library yang digunakan

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h

Code

#include <ESP8266WiFi.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>

#define RELAY_PIN D1

const char* ssid = "SmartLamp_AP";
const char* password = "12345678";

AsyncWebServer server(80);

bool lampState = false;

String processor() {
  String statusText = "";

  if (lampState == true) {
    statusText = "ON";
  } else {
    statusText = "OFF";
  }

  String html = "";
  html += "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<title>Smart Lamp</title>";
  html += "<style>";
  html += "body{font-family:Arial;text-align:center;margin-top:40px;}";
  html += "button{padding:15px 30px;font-size:18px;margin:10px;}";
  html += "</style>";
  html += "</head><body>";

  html += "<h1>Smart Lamp Control</h1>";
  html += "<p>Status: <b>" + statusText + "</b></p>";
  html += "<button onclick=\"fetch('/on')\">ON</button>";
  html += "<button onclick=\"fetch('/off')\">OFF</button>";

  html += "</body></html>";

  return html;
}

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", processor());
  });

  server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request){
    digitalWrite(RELAY_PIN, LOW);
    lampState = true;
    request->send(200, "text/plain", "ON");
  });

  server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){
    digitalWrite(RELAY_PIN, HIGH);
    lampState = false;
    request->send(200, "text/plain", "OFF");
  });

  server.begin();
}

void loop() {
  // Async Web Server tidak membutuhkan handleClient()
}

Petunjuk Penggunaan

  1. Unggah (upload) program Smart Lamp ke papan ESP8266 menggunakan Arduino IDE.
  2. Setelah proses upload selesai, aktifkan fitur WiFi pada perangkat HP atau laptop.
  3. Cari dan sambungkan perangkat ke jaringan WiFi dengan nama SmartLamp_AP.
  4. Buka aplikasi browser, kemudian akses alamat IP 192.168.4.1.
  5. Gunakan tombol ON atau OFF pada halaman web untuk mengendalikan kondisi lampu.

Sangat Perlu Untuk Diperhatikan

  1. Pastikan sumber listrik PLN dalam kondisi mati sebelum melakukan pemasangan atau perubahan rangkaian.
  2. Hindari menyentuh kabel AC, terminal relay, atau bagian logam lainnya saat rangkaian masih terhubung dengan sumber listrik.
  3. Gunakan box atau casing relay untuk melindungi rangkaian dari sentuhan langsung serta mengurangi risiko korsleting.
  4. Periksa kembali setiap sambungan kabel, pastikan terpasang dengan kuat dan tidak ada kabel yang terkelupas.
  5. Setelah semua komponen terpasang dengan benar, barulah sambungkan rangkaian ke sumber listrik dan lakukan pengujian secara bertahap.

Kendali LED berbasis WiFi menggunakan ESP8266

Kendali LED berbasis WiFi menggunakan ESP8266

Pada tutorial ini, akan dibahas langkah-langkah pembuatan sistem kendali LED berbasis WiFi menggunakan ESP8266. ESP8266 akan kita konfigurasikan sebagai Access Point (AP) sehingga kita dapat terhubung langsung tanpa menggunakan router tambahan. Selain itu, sistem web server yang digunakan bersifat asynchronous, sehingga respon kontrol menjadi lebih cepat dan halaman web tidak perlu dimuat ulang setiap kali status LED berubah.

1. Alat & Komponen

a. Perangkat Keras (Hardware)

Nama KomponenGambar Komponen
NodeMcu esp8266
LED
Resistor 220Ω
Kabel jumper
Breadboard

b. Perangkat Lunak (Software)

Gambar Rangkaian

LEDESP8266
Anoda (Kaki Panjang +)pin D5
Katoda (kaki pendek -) dan ResistorGND

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>

/* ================== AP CONFIG ================== */
const char* ap_ssid = "ESP8266_LED";
const char* ap_pass = "12345678";

/* ================== LED ================== */
#define LED_PIN D5

AsyncWebServer server(80);
bool ledState = false;

/* ================== HTML ================== */
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ESP8266 LED Control</title>
</head>
<body style="text-align:center; font-family:Arial; margin-top:40px;">
  <h2>ESP8266 LED Control</h2>
  <p>Status LED: <b id="status">OFF</b></p>
  <button onclick="toggle()">TOGGLE</button>

<script>
function toggle() {
  fetch('/toggle')
    .then(res => res.text())
    .then(data => {
      document.getElementById("status").innerHTML = data;
    });
}

setInterval(() => {
  fetch('/status')
    .then(res => res.text())
    .then(data => {
      document.getElementById("status").innerHTML = data;
    });
}, 1000);
</script>
</body>
</html>
)rawliteral";

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

  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  WiFi.softAP(ap_ssid, ap_pass);
  Serial.print("AP IP: ");
  Serial.println(WiFi.softAPIP());

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
    ledState = !ledState;

    if (ledState) {
      digitalWrite(LED_PIN, HIGH);
      request->send(200, "text/plain", "ON");
    } else {
      digitalWrite(LED_PIN, LOW);
      request->send(200, "text/plain", "OFF");
    }
  });

  server.on("/status", HTTP_GET, [](AsyncWebServerRequest *request){
    if (ledState) {
      request->send(200, "text/plain", "ON");
    } else {
      request->send(200, "text/plain", "OFF");
    }
  });

  server.begin();
}

void loop() {
  // Async WebServer tidak membutuhkan loop
}

Cara Menggunakan Sistem (Langkah Pengoperasian)

Setelah rangkaian dan program selesai dibuat, unggah kode ke papan ESP8266 menggunakan Arduino IDE. Saat ESP8266 sudah berhasil menyala, modul akan otomatis membuat jaringan WiFi sesuai dengan nama dan kata sandi yang telah ditentukan di dalam program (pastikan sudah dicatat). Selanjutnya, hubungkan laptop atau smartphone kamu ke jaringan WiFi tersebut.

Setelah terhubung, buka aplikasi browser dan masukkan alamat IP 192.168.4.1 pada bilah alamat. Halaman kontrol LED akan tampil dan menunjukkan status LED saat ini. Tekan tombol Toggle untuk mengubah kondisi LED dari mati menjadi menyala atau sebaliknya.

Simulasi Input Push Button dengan ESP32 dan MicroPython

Simulasi Input Push Button dengan ESP32 dan MicroPython

Assalamualaikum, Tutorial inii adalah lanjutan dari rangkaian tutorial simulasi ESP32 dan MicroPython dengan menggunakan simulator Wokwi. Pada tutorial ini kita akan memperagakan cara menerima input dari sebuah push button. Input dari push button ini nantinya akan kita manfaatkan untuk mengendalikan beberapa buah LED. Selain itu kita akan mempelajari beberapa fungsi dasar yang biasa digunakan. Langsung saja, yuk kita mulai

Seperti biasa, arahkan browser kamu ke wokwi.com, cari menu MicroPython, klik tombol new project dan pilih MicroPython on ESP32

Membuat Rangkaian

Langkah pertama dalam project ini adalah membuat rangkaian. Buatlah rangkaian pada panel sebelah kanan seperti gambar dibawah ini

Menulis Program / Coding

Supaya pin pada ESP32 bisa di program dan digunakan, maka kita perlu mengimpor class Pin yang terdapat pada modul machine. Class Pin ini berfungsi untuk mengatur fungsi input dan output untuk pin yang akan kita gunakan. Selain itu, kita juga perlu menggunakan modul time untuk mengatur delay waktu. Supaya kita bisa menggunakan ke dua modul tersebut, ketikkan dua baris dibawah ini pada panel sebelah kiri wokwi.

from machine import Pin
from time import sleep

Berikutnya, kita konfigurasikan pin yang akan kita gunakan sebagai input. Buatlah sebuah object bernama “button” yang merujuk pada penggunaan Pin 15 sebagai input (Pin.IN).

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN) 

Sekarang kita masuk ke program utama. ketikkan while True: agar perintah-perintah yang berada dalam indentasi fungsi ini berjalan berulang-ulang (loop) selama mesin hidup.

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN) 

while True:

Ketika kita menekan tombol, ESP32 akan membaca nilai 0 dari rangkaian dan untuk membuktikan bahwa tombol sedang ditekan, kita akan membuat console menampilkan pesan “tombol ditekan”.

Kondisi ini bisa kita tuliskan dalam bentuk perintah ini:

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN, Pin.PULL_UP)

while True:
    if button.value() == 0:
        print("Tombol ditekan")
    if button.value() == 0:
        print("Tombol ditekan")

Dua baris program diatas bermakna jika nilai pada rangkaian button terbaca bernilai 0, maka console akan mencetak tulisan “tombol ditekan”.

untuk membuat kondisi sebaliknya dimana nilai tombol terbaca bernilai 1, maka kita tambahkan else setelah logika if seperti ini:

    else:  
        print("Tombol dilepas")

lalu berikan delay waktu sebesar 0.1 detik dengan perintah sleep

   sleep(0.1)

Sampai disini program telah selesai dibuat. Keseluruhan program yang kia buat akan telihat seperti ini:

from machine import Pin
from time import sleep

button = Pin(15, Pin.IN)

while True:
    if button.value() == 0:  
        print("tombol ditekan")
    else:  
        print("tombol dilepas")
    sleep(0.1)

Hasil

Sampai disini kita sudah bisa mencoba program dan rangkaian yang kita buat dengan menekan tombol start simulation (tombol hijau panel kanan). Jika rangkaian dan coding yang kita buat sudah benar maka console pada bagian bawah panel sebelah kanan akan terlihat seperti ini

Tombol dilepas
Tombol ditekan

Rangkaian ini bisa kita gunakan untuk berbagai keperluan seperti untuk mengaktifkan atau menonaktifkan sensor, menjadikan push button sebagai sensor, dan mengganti nilai dari suatu variabel dan lain sebagainya. Kita kan membahas beberapa penggunaan push button ini pada tulisan berikutnya.

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.