Minggu, 06 September 2026

Single-Axis Solar Tracker Pelacak Matahari 1 Sumbu Otomatis Berbasis ESP32 & Blynk IoT (Cirkit Designer)

Single-Axis Solar Tracker Pelacak Matahari 1 Sumbu Otomatis Berbasis ESP32 & Blynk IoT (Cirkit Designer)

Mata Kuliah IoT (Internet of Things)

 

 

 

 

Disusun Oleh:

 

1. Muhamad Rizaldhani Darmawan

24051204004

2. Novanda Ega Arenta

24051204030

3. Muhammad Fiqih Mu'azaidin

24051204031

4. I Made Nandana Devadatta Giri

24051204090

 

 

 

 

 

 

 

 

 

 

Program Studi S1 Teknik Informatika UNIVERSITAS NEGERI SURABAYA 2026


 

BAB I PENDAHULUAN

 

1.1. Latar Belakang

 

Kebutuhan energi global yang terus meningkat menuntut adanya transisi yang cepat menuju pemanfaatan sumber energi terbarukan. Salah satu sektor yang paling menjanjikan adalah energi surya. Meskipun Pembangkit Listrik Tenaga Surya (PLTS) menawarkan solusi yang ramah lingkungan, implementasi panel surya statis (tetap) yang umum digunakan seringkali belum mencapai tingkat efisiensi penyerapan daya yang maksimal. Hal ini disebabkan oleh pergerakan semu matahari dari timur ke barat sepanjang hari, sehingga permukaan panel surya tidak selalu mendapatkan sudut iradiasi cahaya yang optimal.

Untuk mengatasi permasalahan efisiensi tersebut dan memaksimalkan penerimaan energi dari cahaya matahari terhadap panel surya, diperlukan inovasi berupa sistem pelacak matahari atau solar tracker (Jurnal Juliet UGM, 2024). Sistem elektromekanis ini dirancang agar dapat merespons perubahan intensitas cahaya dan secara otomatis menyesuaikan orientasi panel surya untuk selalu menghadap ke titik jatuhnya cahaya matahari terkuat. Penelitian menunjukkan bahwa implementasi Single-Axis Solar Tracker, yang berputar mengikuti pergerakan matahari pada satu sumbu rotasi, terbukti mampu meningkatkan efisiensi dan total energi listrik yang dihasilkan secara signifikan dibandingkan dengan instalasi panel surya statis (Aulia dkk., 2025; Jurnal Piston, 2026).

Sebagai bentuk implementasi praktis dari teori tersebut, proyek praktikum ini berfokus pada simulasi perancangan Single-Axis Solar Tracker. Proyek ini memanfaatkan mikrokontroler ESP32 sebagai pusat pemrosesan logika dan data yang terintegrasi dengan teknologi Internet of Things (IoT). Guna memfasilitasi perancangan dan pengujian algoritma tanpa keterbatasan fisik perangkat keras, seluruh rangkaian komponen disimulasikan secara virtual menggunakan platform Cirkit Designer. Sistem ini juga diintegrasikan dengan aplikasi Blynk IoT yang memungkinkan pemantauan status orientasi servo dan intensitas cahaya secara real-time dari jarak jauh (Alfian Learning Center, 2026).


 

  1. Rumusan Masalah

    1.  Bagaimana merangkai komponen ESP32, sensor LDR, LCD, dan Servo di dalam simulator Cirkit Designer?
    2. Bagaimana logika pergerakan motor servo berdasarkan input dari dua sensor LDR?
    3.  Bagaimana mengonfigurasi dashboard Blynk IoT untuk memonitor data pelacak matahari secara real-time?
  2. Tujuan Laporan

    1. Mampu merancang sistem pelacak matahari satu sumbu secara virtual.
    2. Memahami prinsip kerja sensor LDR dalam memberikan umpan balik pada pergerakan motor servo.
    3. Mampu melakukan integrasi antara sistem mikrokontroler dengan antarmuka aplikasi Blynk IoT.
  3. Manfaat Penulisan

Penyusunan laporan praktikum ini diharapkan dapat memberikan manfaat yang komprehensif, baik secara teoritis maupun praktis, di antaranya adalah:

  1. Bagi Penulis (Mahasiswa):
    1. Pengaplikasian Teori: Mengaplikasikan konsep dasar dari mata kuliah Organisasi dan Arsitektur Komputer secara langsung, khususnya terkait arsitektur mikrokontroler (ESP32), aliran interupsi data, serta antarmuka komunikasi antara sensor (LDR) dan aktuator (Motor Servo).
    2. Peningkatan Keterampilan Teknis: Melatih kemampuan pemrograman sistem tertanam (embedded system) berbasis bahasa C/C++ dan memperkenalkan penggunaan simulator perangkat keras virtual (Cirkit Designer) guna mereduksi biaya riset atau pengadaan komponen fisik

 

 

 

 

 

.


 

  1. Bagi Pembaca dan Akademisi:
    1. Referensi Pembelajaran: Menjadi sumber referensi literatur dan panduan praktis awal bagi mahasiswa atau peneliti lain yang ingin mempelajari dasar integrasi Internet of Things (IoT) pada sistem energi terbarukan.
    2. Pemahaman Sistem Cerdas: Memberikan gambaran visual dan logis mengenai bagaimana algoritma perbandingan nilai sensor dapat digunakan untuk membangun otomasi sistem pelacakan matahari (solar tracking).
  2. Bagi Pengembangan Teknologi:
    1. Model Purwarupa Efisien: Menyajikan model pengujian purwarupa (prototype) berbasis simulasi yang aman dan efisien. Model ini dapat digunakan untuk memvalidasi algoritma responsibilitas pergerakan panel surya dan stabilitas transmisi data ke dashboard Blynk IoT sebelum diimplementasikan ke perakitan perangkat keras berskala industri.


 

BAB II TINJAUAN PUSTAKA

  1. Dasar Teori

Kinerja dan efisiensi pembangkitan energi listrik pada panel surya (photovoltaic) sangat bergantung pada sudut jatuhnya iradiasi cahaya matahari. Penyerapan energi paling optimal terjadi apabila sinar matahari jatuh secara tegak lurus terhadap permukaan panel. Oleh karena matahari mengalami pergerakan semu harian, panel surya dengan instalasi statis seringkali tidak dapat menyerap energi secara maksimal. Sebagai perbandingan, hasil pengujian efisiensi daya pada panel surya statis dalam kondisi cuaca cerah hanya menghasilkan rata-rata efisiensi normalisasi sebesar 31,37%, sehingga diperlukan sistem solar tracker otomatis untuk memaksimalkan penyerapan energi tersebut (Jurnal Teknik Elektro UMT, n.d.).

Single-Axis Solar Tracker merupakan sebuah sistem kendali elektromekanis terpadu yang dirancang untuk merotasi orientasi panel surya mengikuti lintasan matahari pada satu sumbu putar. Sistem pelacak sumbu tunggal ini terbukti lebih efektif; implementasinya mampu menghasilkan efisiensi daya normalisasi hingga 51% pada kondisi cuaca cerah, yang mana nilainya jauh melampaui kemampuan panel surya statis (Jurnal Teknik Elektro UMT, n.d.). Rancang bangun pergerakan pelacak pada satu sumbu ini juga secara konsisten terbukti meningkatkan unjuk kerja keluaran tegangan listrik keseluruhan sistem (Muljanto, 2023).

Dari segi arsitektur, perangkat solar tracker ini menerapkan mekanisme sistem kendali lingkar tertutup (closed-loop control system). Mikrokontroler bertindak sebagai pusat pemrosesan yang membaca input dari transduser berbasis Light Dependent Resistor (LDR). LDR pada dasarnya adalah detektor intensitas cahaya yang terdiri dari cakram semikonduktor yang resistansinya akan menurun drastis ketika terkena paparan cahaya (Jurnal PoliUPG, n.d.).

Dalam aplikasinya, data tegangan dari beberapa sensor LDR yang diletakkan pada sisi orientasi berbeda akan diolah dan dibandingkan secara konstan.


 

Apabila terjadi disparitas nilai pembacaan intensitas cahaya, mikrokontroler akan mengeksekusi algoritma untuk menggerakkan aktuator mekanis (motor servo) menuju sisi paling terang. Pergerakan ini akan terus berlanjut hingga seluruh sensor mencapai titik ekuilibrium (keseimbangan), yang menjadi parameter bahwa panel surya telah tegak lurus kembali dengan sumber cahaya matahari (Sistem Kendali Solar Tracker JTEV, 2020).

 

 

  1. Komponen

    1. ESP32 - Jumlah Komponen = 1

 

ESP32 merupakan Mikrokontroler utama yang berfungsi untuk memproses data input analog yang diterima dari sensor LDR, mengkalkulasi algoritma perbandingan intensitas cahaya, mengirimkan sinyal kontrol ke aktuator, serta transmisi data operasional secara real-time ke platform cloud (Blynk IoT) melalui jaringan nirkabel.

  1. Sensor Photoresistor LDR - Jumlah Komponen = 2

 

LDR adalah komponen transduser pasif yang nilai resistansinya berbanding terbalik dengan intensitas cahaya yang mengenai permukaannya; semakin terang cahaya, semakin rendah nilai hambatannya. Pada sistem pelacak matahari satu sumbu ini, dibutuhkan dua buah sensor LDR yang diletakkan secara berseberangan (sisi kiri dan kanan). Keduanya berfungsi sebagai sistem umpan balik (feedback sensor) yang terus-menerus membaca perbedaan intensitas iradiasi. Selisih nilai analog dari kedua sensor inilah yang menjadi parameter penentu bagi mikrokontroler untuk mendeteksi posisi matahari dan menghitung titik ekuilibrium (keseimbangan) pencahayaan optimal.


 

  1. LCD (16 x 2) - Jumlah Komponen = 1

 

Liquid Crystal Display (LCD) 16x2 adalah layar antarmuka elektronik yang mampu menyajikan informasi sebanyak 16 karakter dalam 2 baris. Modul ini dilengkapi dengan backpack I2C yang sangat krusial dalam efisiensi desain arsitektur sistem. Keberadaan modul I2C mereduksi kebutuhan pengkabelan yang rumit menjadi hanya menggunakan dua jalur komunikasi data (SDA dan SCL), sehingga sangat menghemat ketersediaan pin I/O pada ESP32. Layar ini bertugas sebagai penampil data lokal untuk menyajikan pemantauan visual real-time mengenai sudut derajat panel, nilai rata-rata cahaya (Lux), dan status tracking, yang mempermudah proses debugging tanpa harus selalu bergantung pada antarmuka web.

  1. Motor Servo - Jumlah Komponen = 1

 

Motor servo bertindak sebagai aktuator elektromekanis utama yang mampu memberikan kontrol rotasi dengan tingkat presisi tinggi. Pergerakan motor servo dikendalikan melalui pengiriman sinyal Pulse Width Modulation (PWM) dari pin mikrokontroler ESP32. Dalam implementasi proyek ini, motor servo ditugaskan untuk memutar orientasi rangka panel surya secara dinamis sesuai arah datangnya cahaya dominan. Rentang sudut pergerakannya dibatasi sesuai dengan spesifikasi servo (umumnya 0 hingga 180 derajat), dan diatur agar bergeser secara halus dan bertahap guna menjaga stabilitas fisik struktur panel surya mekanis.


 

BAB III PEMBAHASAN

  1. Penjelasan Simulasi

    1. Arsitektur Perangkat Keras pada Simulator

Perakitan antarmuka perangkat keras virtual pada platform Cirkit Designer dilakukan dengan memetakan koneksi antar komponen menuju pin General Purpose Input/Output (GPIO) pada board mikrokontroler ESP32. Konfigurasi pengkabelan (wiring) disusun secara sistematis berdasarkan fungsi masing-masing pin:

  1. Sensor LDR Kanan dan Kiri: Masing-masing dihubungkan ke pin GPIO 34 dan 35. Pemilihan pin ini didasarkan pada fungsinya yang mendukung fitur Analog-to-Digital Converter (ADC), yang bertugas mengkonversi variasi nilai tegangan (akibat perubahan resistansi cahaya) menjadi data digital yang dapat diproses oleh mikrokontroler.
  2. Modul LCD 16x2 I2C: Untuk menghemat ketersediaan pin pada ESP32, antarmuka layar menggunakan protokol komunikasi serial Inter-Integrated Circuit (I2C). Pin komunikasi data atau Serial Data (SDA) dihubungkan ke pin 21, sedangkan pin sinkronisasi clock atau Serial Clock (SCL) dihubungkan ke pin 22.
  3. Motor Servo: Pin sinyal kontrol servo dihubungkan ke GPIO 18, yang memiliki kapabilitas Pulse Width Modulation (PWM) untuk mengatur sudut putaran poros motor secara presisi.
  1. Konfigurasi Cloud Server Blynk IoT

Untuk mengimplementasikan fitur Internet of Things (IoT) dan pemantauan jarak jauh (telemetri), sistem dihubungkan ke server Blynk IoT. Proses ini diawali dengan pembuatan Template proyek yang menjembatani data mikrokontroler dengan dashboard antarmuka pengguna (User Interface). Tiga buah jalur data (Data Stream) disiapkan menggunakan mekanisme Pin Virtual (Virtual Pin):


 

  1. Lux (Intensitas Cahaya): Dialokasikan pada pin virtual V0 dengan tipe data integer, berfungsi untuk memvisualisasikan rata-rata intensitas cahaya yang ditangkap oleh sensor ke dalam bentuk widget gauge.
  2. Solar Angle (Sudut Panel): Dialokasikan pada pin virtual V1. Rentang nilainya dibatasi antara 0 hingga 180 derajat sesuai dengan batasan mekanis maksimal (sudut putar) dari motor servo yang digunakan.
  3. Status Operasional: Menggunakan pin virtual V2 dengan tipe data string (teks), yang berfungsi untuk memberikan indikasi real-time kepada pengguna mengenai aktivitas tracking yang sedang berlangsung.
  1. Logika Operasional dan Algoritma Pelacakan

 

Secara algoritma, sistem kendali beroperasi dengan membandingkan nilai input intensitas cahaya dari kedua sensor LDR. Mikrokontroler akan menghitung selisih nilai analog dari sisi kanan dan kiri. Jika sensor bagian kanan menangkap intensitas cahaya yang melampaui nilai ambang batas (threshold) dibandingkan bagian kiri, ESP32 akan mengirimkan sinyal PWM untuk memutar poros servo ke arah kanan, mengarahkan panel untuk mengikuti titik jatuhnya cahaya tersebut.

Sebaliknya, jika iradiasi cahaya dominan pada sisi kiri, servo akan diinstruksikan bergerak ke arah kiri. Untuk memastikan kestabilan struktur dan mencegah overshoot (kebablasan arah) serta kerusakan mekanis pada penyangga panel fisik, pergerakan rotasi servo tidak dilakukan secara drastis, melainkan dieksekusi secara bertahap (inkremental) sebanyak 2 derajat per detik.

Pergerakan aktuator ini akan berlanjut secara otomatis hingga mencapai titik ekuilibrium (keseimbangan), yakni kondisi di mana kedua sensor LDR membaca nilai cahaya yang ekuivalen (seimbang) yang menandakan bahwa panel telah tegak lurus dengan sumber cahaya, sehingga servo akan diam di posisinya. Selama seluruh proses ini


 

berjalan, mikrokontroler secara konstan mengirimkan update nilai intensitas (Lux), derajat kemiringan aktual, dan status sistem (tracking) melalui konektivitas Wi-Fi menuju dashboard web Blynk IoT.

  1. Program

 

Kode program berbasis C++ yang dimuat ke ESP32 bertugas menginisialisasi modul WiFi bawaan serta menghubungkan perangkat ke Blynk Cloud menggunakan parameter token otentikasi. Program menjalankan instruksi looping untuk membaca data hambatan listrik menggunakan perintah analogRead() dari kedua sensor LDR. Apabila hasil perbandingan logika mendeteksi ketidakseimbangan terang cahaya (melewati nilai threshold), mikrokontroler akan memperbarui sudut posisi servo lewat perintah servo.write() lalu mengirim perubahannya ke UI (User Interface) aplikasi Blynk lewat fungsi Blynk.virtualWrite().

 






 

constexpr uint8_t I2C_SCL_PIN = 20;

 

 

 

constexpr float ADC_REFERENCE_VOLTAGE = 3.3f; constexpr float ADC_MAX_VALUE = 4095.0f; constexpr float GAMMA = 0.7f;

constexpr float RL10_KOHM = 50.0f;

 

constexpr float LDR_SERIES_RESISTOR_OHM = 2000.0f; constexpr float TOLERANSI_LUX = 25.0f;

constexpr int SUDUT_MIN = 10; constexpr int SUDUT_MAX = 170;

 

 

char auth[] = BLYNK_AUTH_TOKEN; char ssid[] = "CirkitWifi"; char pass[] = "";

 

 

LiquidCrystal_I2C lcd(0x27, 16, 2); BlynkTimer timer;

Servo trackerServo;

 

 

 

int sudutServo = 90;

 

 

 

float bacaLux(uint8_t pin)

 

{

 

const int adc = analogRead(pin);

 

if (adc <= 0 || adc >= static_cast<int>(ADC_MAX_VALUE)) { return 0.0f;

}


 

// The sensor modules are powered from 5 V in the circuit.

The ADC

 

// calculation uses the ESP32 ADC range; the result is kept bounded for

// stable display and control when the sensor is at either extreme.

const float voltage = (static_cast<float>(adc) * ADC_REFERENCE_VOLTAGE) / ADC_MAX_VALUE;

if (voltage <= 0.0f || voltage >= ADC_REFERENCE_VOLTAGE) { return 0.0f;

}

 

 

 

const float resistance = LDR_SERIES_RESISTOR_OHM * voltage /

 

(ADC_REFERENCE_VOLTAGE - voltage);

 

if (resistance <= 0.0f) { return 0.0f;

}

 

 

 

const float lux = powf(

 

(RL10_KOHM * 1000.0f * powf(10.0f, GAMMA)) / resistance, 1.0f / GAMMA);

return isfinite(lux) ? lux : 0.0f;

 

}

 

 

 

void prosesTracker()

 

{

 

const float luxKiri = bacaLux(LDR_KIRI_PIN); const float luxKanan = bacaLux(LDR_KANAN_PIN); const float avgLux = (luxKiri + luxKanan) / 2.0f;


 

String statusSistem;

 

 

 

if (avgLux < 20.0f) { statusSistem = "NIGHT MODE"; sudutServo = 90;

} else {

 

statusSistem = "TRACKING SUN";

 

if (fabsf(luxKiri - luxKanan) > TOLERANSI_LUX) { sudutServo += (luxKiri > luxKanan) ? 2 : -2;

}

 

}

 

 

 

sudutServo = constrain(sudutServo, SUDUT_MIN, SUDUT_MAX); trackerServo.write(sudutServo);

 

 

Blynk.virtualWrite(V0, avgLux); Blynk.virtualWrite(V1, sudutServo); Blynk.virtualWrite(V2, statusSistem);

 

 

lcd.setCursor(0, 0); lcd.print("Sudut: "); lcd.print(sudutServo); lcd.print(" Deg ");

 

 

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

lcd.print(static_cast<int>(avgLux)); lcd.print(" ");


 

lcd.print(statusSistem.substring(0, 8)); lcd.print(" ");

}

 

 

 

void setup()

 

{

 

Serial.begin(115200);

 

 

 

analogReadResolution(12); pinMode(LDR_KIRI_PIN, INPUT); pinMode(LDR_KANAN_PIN, INPUT);

 

 

ESP32PWM::allocateTimer(0); trackerServo.setPeriodHertz(50); trackerServo.attach(SERVO_PIN, 500, 2400);

 

 

Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN); lcd.init();

lcd.backlight(); lcd.clear(); lcd.print("Solar Tracker");

 

 

// Cirkit's virtual Wi-Fi uses these credentials rather than Wokwi-GUEST.

Blynk.begin(auth, ssid, pass); lcd.clear();

 

 

timer.setInterval(400L, prosesTracker);


 



 

 

BAB IV PENUTUP

  1. Kesimpulan

 

Simulasi Single-Axis Solar Tracker berbasis ESP32 berhasil dikembangkan di platform Cirkit Designer. Sistem mampu merespons arah perubahan sumber cahaya lewat perbandingan dua LDR dan merotasi motor servo menuju posisi optimal. Parameter kunci seperti sudut pelacakan (Solar Angle) dan intensitas cahaya (Lux) juga berhasil dipantau secara jarak jauh menggunakan widget gauge dan label pada platform Blynk IoT.

  1. Saran

 

Untuk pengembangan simulasi atau purwarupa selanjutnya, sistem dapat di-upgrade menjadi model Dual-Axis Solar Tracker dengan memanfaatkan dua motor servo dan empat sensor LDR. Hal ini memungkinkan pelacakan cahaya tidak hanya dari timur ke barat, tetapi juga dari kemiringan utara ke selatan.


 

 

DAFTAR PUSTAKA

 

Alfian Learning Center. (2026, Juni 18). DIY Single-Axis Solar Tracker Pelacak Matahari 1 Sumbu Otomatis Berbasis ESP32 & Blynk IoT (WOKWI). YouTube. https://youtu.be/OOu629NaOHc

Aulia, N. F., dkk. (2025). Single Axis Solar Tracker. Jurnal SENTRIKOM, Vol. 7, 182-190. Politeknik Negeri Semarang.

Jurnal Juliet. (2024). Rancang Bangun Sistem Monitoring PLTS. Universitas Gadjah Mada (UGM).

Jurnal Piston. (2026). Evaluasi Net Energy Gain Solar Tracker Single-axis Berbasis Relay. Universitas Halu Oleo (UHO).

Jurnal Teknik Elektro Universitas Muhammadiyah Tangerang. (n.d.). Analisis Efisiensi Daya Pada Panel Monocrystalline Single Axis Tracking System. Jurnal Teknik Elektro. Diakses dari jurnal.umt.ac.id/index.php/jte/id/article/view/15150

Muljanto, W. P. (2023). Rancang Bangun dan Analisa Unjuk Kerja Single Axis Solar Tracker Berbasis Logika Fuzzy. Jurnal Magnetika, 7(2), 365–373.

PoliUPG. (n.d.). Perancangan Sistem Kendali Solar Tracker Berdasarkan Intensitas Cahaya. Jurnal Politeknik Ujung Pandang (SNTEI). Diakses dari jurnal.poliupg.ac.id/index.php/sntei/article/view/4393/3794

Sistem Kendali Solar Tracker. (2020). Sistem Kendali Solar Tracker Satu Sumbu berbasis Arduino dengan sensor LDR. Jurnal Teknik Elektro dan Vokasional (JTEV), 6(1), 322. Universitas Negeri Padang.


 

Lampiran

 

link video: https://youtu.be/RKvhC5wjcgA

SISTEM DETEKSI OBJEK BERBASIS ARDUINO UNO DAN SISTEM KOMUNIKASI DUA ARAH BERBASIS ESP32 DAN PROTOKOL MQTT

SISTEM DETEKSI OBJEK BERBASIS ARDUINO UNO DAN SISTEM

KOMUNIKASI DUA ARAH BERBASIS ESP32 DAN PROTOKOL MQTT

Mata Kuliah Internet of Things

 

 

 

 

 

 

 

 

 

 

 

 

 

Disusun Oleh:

 

1. Muhammad Naufal Aziz

(24051204001)

2. Muhammad Rifqi Al Hafidh

(24051204009)

3. Ig. Krisna Wijaya Prihandono

(24051204032)

4. Ahmad Syihan Arijuddin

(24051204035)

 

Link Video : https://drive.google.com/file/d/1_4ZpnuIB_nOG-MnX3LqHAPLYgpz02e_z/view?usp=sharing

 

Prodi S1 Teknik Informatika UNIVERSITAS NEGERI SURABAYA


 

 

 

 

  1. Latar Belakang


 

BAB I PENDAHULUAN


 

Perkembangan teknologi komputasi dan mikroelektronika saat ini telah mendorong adopsi sistem cerdas dalam berbagai aspek kehidupan manusia. Dua konsep utama yang terus berkembang adalah sistem otomatisasi lokal berbasis sensor dan sistem komunikasi nirkabel berbasis Internet of Things (IoT). Melalui pemahaman yang mendalam mengenai Organisasi dan Arsitektur Komputer, mahasiswa Teknik Informatika dapat menganalisis bagaimana instruksi program dieksekusi secara efisien oleh prosesor pada unit mikrokontroler.

Laporan ini membahas implementasi dua sistem IoT yang dikembangkan oleh Kelompok 1. Sistem pertama adalah sistem deteksi objek lokal berbasis Arduino Uno. Sistem ini memanfaatkan sensor ultrasonik HC-SR04 untuk membaca jarak, motor servo sebagai aktuator fisik, dan LED sebagai indikator visual. Keunggulan teknis sistem pertama ini terletak pada penerapan algoritma timer non-blocking berbasis fungsi 'millis()'. Pendekatan non-blocking sangat penting dalam arsitektur komputer untuk menghindari pemborosan siklus clock CPU akibat instruksi tunggu (blocking delay) yang biasa ditimbulkan oleh fungsi 'delay()'.

Sistem kedua adalah arsitektur IoT dua arah berbasis ESP32 dan protokol MQTT (Message Queuing Telemetry Transport). Dalam sistem ini, ESP32 berperan sebagai node sensor nirkabel yang membaca suhu dan kelembaban udara melalui sensor DHT22, kemudian mengirimkannya dalam format JSON ke broker publik (broker.emqx.io) pada topik 'publish'. Di saat yang bersamaan, ESP32 juga dapat menerima perintah kontrol eksternal dari aplikasi pusat kendali MQTTX pada topik 'led' secara real-time. Kombinasi kedua sistem ini memberikan gambaran komparatif yang komprehensif antara sistem kontrol waktu nyata lokal dan sistem terdistribusi berbasis cloud.

 

 

  1. Rumusan Masalah

    • Bagaimana arsitektur dan konfigurasi pin sistem deteksi objek ultrasonik berbasis Arduino Uno dengan aktuator motor servo dan LED?
    • Bagaimana cara kerja algoritma non-blocking menggunakan fungsi 'millis()' pada Arduino Uno untuk mengendalikan beberapa periferal secara simultan?
    • Bagaimana struktur komunikasi data dua arah berbasis protokol MQTT pada perangkat ESP32 dengan sensor DHT22 dan aktuator LED?
    • Bagaimana mengonfigurasi MQTTX sebagai pusat kendali untuk memantau data sensor serta mengontrol LED pada ESP32 menggunakan payload plaintext maupun JSON?


 

  1. Tujuan Laporan

    • Mendokumentasikan konfigurasi perangkat keras dan pemrograman sistem deteksi objek berbasis Arduino Uno secara presisi.
    • Menganalisis efisiensi algoritma multi-tasking non-blocking menggunakan penunjuk waktu 'millis()' sebagai pengganti 'delay()'.
    • Menjelaskan mekanisme pertukaran data dua arah menggunakan protokol MQTT dengan arsitektur publish dan subscribe.
    • Menyediakan panduan pengaturan MQTTX untuk visualisasi data sensor DHT22 dan pengiriman pesan perintah kontrol ke ESP32.

 

 

  1. Manfaat Penulisan

Penulisan laporan ini diharapkan memberikan manfaat akademis dan praktis. Secara akademis, laporan ini memperjelas keterkaitan teori arsitektur komputer (seperti manajemen interupsi, polling, dan siklus instruksi) dengan penerapannya pada mikrokontroler AVR dan chip Tensilica Xtensa pada ESP32. Secara praktis, rancangan sistem ini dapat menjadi acuan dalam pengembangan sirkuit otomatisasi industri skala kecil atau media pembelajaran sistem tertanam terdistribusi.


 

 

 

 

  1. Dasar Teori


 

BAB II TINJAUAN PUSTAKA


 

Sistem mikrokomputer modern tersusun atas unit pemroses pusat (CPU), memori, serta modul masukan/keluaran (I/O). Pada mikrokontroler tipe sistem chip tunggal (system-on-chip/SoC) seperti ESP32 atau papan pengembangan seperti Arduino Uno, seluruh modul tersebut terintegrasi dalam satu papan sirkuit terpadu. Pengolahan data dari sensor fisik ke sistem kontrol lokal maupun jaringan global memerlukan pemahaman mendalam tentang prinsip-prinsip komunikasi data.

Dalam komunikasi data IoT, protokol MQTT menempati posisi yang sangat penting. MQTT dirancang khusus untuk kondisi bandwidth rendah dan latensi tinggi dengan mengandalkan sebuah 'broker' sebagai mediator pesan. Alur kerjanya terbagi menjadi dua peran utama: 1) Publish, yaitu aksi mengirim pesan dari pengirim ke topik tertentu di broker; dan 2) Subscribe, yaitu mendaftarkan diri pada broker untuk menerima pesan dari topik tertentu secara real-time. Melalui pola ini, perangkat IoT tidak perlu menjaga koneksi peer-to-peer secara langsung, sehingga sangat menghemat daya dan meningkatkan skalabilitas sistem jaringan.

 

 

  1. Komponen

Berikut adalah rincian komponen perangkat keras (hardware) dan

perangkat lunak (software) yang digunakan dalam implementasi kedua sistem simulasi berbasis Wokwi ini:

 

 

No

Nama Perangkat /

Komponen

Fungsi Utama dalam Sistem

1

Arduino Uno

Mikrokontroler 8-bit berbasis ATmega328P untuk kendali lokal

deteksi objek.

2

Sensor HC-SR04

Sensor jarak ultrasonik yang memancarkan gelombang suara 40

kHz.

3

Motor Servo

(SG90)

Aktuator putar untuk merespons objek terdeteksi (gerakan 20°

hingga 160°).

4

LED Indikator

Output visual untuk kedipan (250 ms) di Arduino dan indikator

status di ESP32.

5

Resistor

Hambatan pengaman arus listrik yang mengalir ke LED indikator.

6

ESP32 Board

Mikrokontroler 32-bit dual-core  dengan transceiver Wi-Fi

internal.

7

Sensor DHT22

Sensor digital pengukur suhu (°C) dan kelembaban (%) dengan

protokol serial.

8

Koneksi Wi-Fi

Infrastruktur jaringan nirkabel (SSID: 'Wokwi-GUEST') untuk

ESP32.


 

9

Broker EMQX

Broker MQTT publik (broker.emqx.io) sebagai perantara paket

data.

10

Aplikasi MQTTX

Klien visual untuk pengujian subskripsi data sensor dan kontrol

LED.

11

Kabel Jumper /

Breadboard

Komponen interkoneksi sinyal dan daya antar modul sirkuit.


 

 

 

 

  1. Penjelasan simulasi


 

BAB III PEMBAHASAN


 

 

 

  1. Sistem Deteksi Jarak Lokal Berbasis Arduino Uno

 

 



image


 

Gambar 1. Rangkaian Arduino dan alat-alat lain

Sistem deteksi objek lokal dikembangkan menggunakan papan pengembang Arduino Uno sebagai pusat kendali. Modul sensor jarak ultrasonik HC-SR04 dihubungkan secara elektrik ke pin digital mikrokontroler, dengan pin 'Trigger' dihubungkan ke pin digital 7 dan pin 'Echo' dihubungkan ke pin digital 6. Output dari sistem ini berupa aktuator motor servo pada pin digital 9 dan LED indikator visual pada pin digital 4.

Alur kerja sirkuit ini didasarkan pada interval waktu non-blocking (timer berbasis millis) untuk memastikan bahwa eksekusi loop utama program tidak terganggu oleh jeda waktu (delay). Sensor HC-SR04 diprogram untuk melakukan pembacaan setiap 60 milidetik. Pembacaan dilakukan dengan mengirimkan pulsa HIGH pada pin Trigger selama 10 mikrodetik. Durasi waktu perjalanan pulsa suara balik dibaca menggunakan fungsi 'pulseIn' dengan batas timeout 30.000 mikrodetik. Konversi dari waktu perjalanan pulsa menjadi jarak fisik menggunakan persamaan fisis:

Jarak = (Durasi × 0.0343) / 2

Di mana konstanta 0.0343 merepresentasikan kecepatan rambat gelombang suara di udara dalam satuan cm/μs. Hasil perhitungan dibagi dua karena pulsa menempuh perjalanan bolak-balik dari pemancar menuju permukaan objek lalu memantul kembali ke penerima. Jika jarak objek terdeteksi berada di antara 0 cm hingga batas aktif 20 cm, maka status 'objekTerdeteksi' bernilai 'true'. Kondisi ini memicu motor servo untuk bergerak memutar bolak-balik antara posisi sudut


 

minimal 20° dan sudut maksimal 160° dengan interval pembaruan 15 milidetik (setiap pembaruan merubah posisi sudut sebanyak 2°), serta membuat LED berkedip secara periodik setiap 250 milidetik. Sebaliknya, bila tidak ada objek yang berada di dalam batas jangkauan (≤ 20 cm), status LED langsung diset 'LOW' dan motor servo secara dinamis kembali ke posisi awalnya (20°).

 

 

  1. Sistem Komunikasi Dua Arah Berbasis ESP32 dan MQTT

 

 



image


 

Gambar 2. Rangkaian ESP32 dan alat-alat lain

Sistem komunikasi IoT dua arah memanfaatkan papan pengembang ESP32 yang terhubung ke jaringan nirkabel lokal Wi-Fi. Dalam simulasi ini, ESP32 dikonfigurasi untuk terhubung ke jaringan virtual 'Wokwi-GUEST' tanpa kata sandi. Perangkat keras sensor DHT22 dihubungkan ke pin digital 15 ESP32 untuk mendeteksi suhu dan kelembaban udara. Selain itu, LED indikator eksternal dihubungkan ke pin digital 2 sebagai target kontrol kendali.

ESP32 menjalankan program berbasis MicroPython yang menggunakan pustaka 'umqtt.simple' untuk mengelola koneksi soket ke broker MQTT publik 'broker.emqx.io' pada port 1883. Identifikasi unik klien diatur menggunakan Client ID 'wokwi-micropython'. Alur kerja utama sistem terbagi menjadi dua mekanisme simultan:

  1. Monitoring Lingkungan (Publish): Secara periodik setiap 1 detik, ESP32 menginstruksikan sensor DHT22 untuk melakukan pengukuran fisik. Data suhu (°C) dan kelembaban (%) dibaca secara digital, kemudian disusun ke dalam sebuah variabel dictionary. Dictionary tersebut dikonversi menjadi


 

representasi string dalam format JSON (misalnya, {"temperature": 24.5, "humidity": 60.0}) melalui fungsi 'ujson.dumps()' sebelum dipublikasikan ke   broker   EMQX   pada   topik   bernama 'publish'.

 

  1. Penerimaan Kontrol (Subscribe): Pada waktu yang bersamaan, ESP32 berlangganan (subscribe) secara aktif ke topik bernama 'led'. Ketika broker meneruskan paket data dari topik tersebut, fungsi 'control_callback()' dipicu untuk membaca isi pesan (payload). Logika pemrograman callback dirancang sangat fleksibel dengan menangani dua format pesan: Format Plaintext ('on' / 'off', 'led:on' / 'led:off') dan Format terstruktur JSON (contoh payload: {"device": "led", "action": "on"}). Ketika sinyal 'on' terdeteksi, pin LED diset HIGH (led.value(1)). Sebaliknya, sinyal 'off' diset LOW (led.value(0)).

 

 

 

 

 

  1. Prosedur Pengujian dan Pengaturan MQTTX

Aplikasi klien MQTTX bertindak sebagai pusat pemantauan dan kontrol dalam sistem IoT ini. Berikut adalah langkah-langkah sistematis konfigurasi koneksi dan pengujian:

  1. Inisiasi Koneksi: Buat profil koneksi baru di MQTTX dengan parameter Host 'mqtt://broker.emqx.io' dan Port '1883'. Pastikan Client ID dibiarkan sesuai nilai acak default bawaan (misalnya 'mqttx_3ba6bb31') dan TIDAK

diubah menjadi 'wokwi-micropython' untuk mencegah terjadinya kegagalan koneksi (connection crash) akibat bentrok identitas di broker. Username, Password, dan SSL/TLS dinonaktifkan.

  1. Pemantauan Sensor: Lakukan subscribe ke topik 'publish'. Setelah berhasil terhubung, MQTTX akan menerima paket data suhu dan kelembaban dalam bentuk pesan JSON secara berkala dan menampilkannya di panel obrolan.
  2. Pengiriman Perintah (Kontrol LED): Di area pengiriman pesan (Publish

panel), atur target topik ke 'led'. Atur format pesan ke 'Plaintext' dan kirimkan string 'on' untuk menyalakan LED fisik di simulator, atau 'off' untuk

mematikannya. Selain itu, pengujian juga dapat dilakukan dengan mengubah format payload menjadi 'JSON' dan mengirimkan instruksi berupa '{"device": "led", "action": "on"}' atau '{"device": "led", "action": "off"}' yang akan langsung diparsing oleh fungsi callback ESP32.


 

  1. Progam

Berikut adalah kode program lengkap yang digunakan dalam proyek implementasi sistem IoT ini. Kode program ditulis dan didefinisikan secara presisi untuk masing-masing mikrokontroler.

 

Kode Sumber 1. Pemrograman Non-Blocking Arduino Uno (C++)

 #include <Servo.h>


// =============================

// KONFIGURASI PIN

// =============================


const int trigPin = 7; const int echoPin = 6; const int ledPin = 4; const int servoPin = 9;


// Jarak aktivasi dalam centimeter const int jarakAktif = 20;


// =============================

// SERVO

// =============================


Servo servoMotor;


int posisiServo = 20; int arahServo = 1;


// Batas gerakan servo const int servoMin = 20; const int servoMax = 160;


// =============================

// TIMER

// =============================


unsigned long waktuServoTerakhir = 0; unsigned long waktuLedTerakhir = 0; unsigned long waktuSensorTerakhir = 0;


// Kecepatan gerakan servo

const unsigned long intervalServo = 15;


// Kecepatan kedip LED

const unsigned long intervalLed = 250;


// Interval pembacaan sensor

const unsigned long intervalSensor = 60;

// =============================

// STATUS

// =============================


bool statusLed = false;

bool objekTerdeteksi = false; float jarak = 0;

// =============================

// SETUP

// =============================


void setup() {


Serial.begin(9600);


pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);


pinMode(ledPin, OUTPUT); servoMotor.attach(servoPin);

// Posisi awal servo servoMotor.write(servoMin);


// LED awal mati digitalWrite(ledPin, LOW);


Serial.println("Sistem dimulai...");

}


// =============================

// LOOP

// =============================


void loop() { bacaSensor();

if (objekTerdeteksi) { gerakkanServo(); kedipkanLed();

} else {


// Matikan LED digitalWrite(ledPin, LOW);

statusLed = false;


// Servo kembali ke posisi awal posisiServo = servoMin; servoMotor.write(posisiServo);

}

}


// =============================

// MEMBACA HC-SR04

// =============================


void bacaSensor() {


unsigned long waktuSekarang = millis();


if (waktuSekarang - waktuSensorTerakhir >= intervalSensor) { waktuSensorTerakhir = waktuSekarang;

// Pastikan TRIG LOW digitalWrite(trigPin, LOW); delayMicroseconds(2);


// Kirim pulse 10 microsecond digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);


// Membaca pantulan

long durasi = pulseIn(echoPin, HIGH, 30000);


// Jika tidak ada pantulan if (durasi == 0) {


jarak = -1; objekTerdeteksi = false;


} else {


// Mengubah waktu menjadi jarak (cm) jarak = durasi * 0.0343 / 2;


// Mengecek apakah objek berada

// dalam batas jarak

if (jarak > 0 && jarak <= jarakAktif) { objekTerdeteksi = true;

} else {


objekTerdeteksi = false;

}

}


// Tampilkan jarak pada Serial Monitor Serial.print("Jarak: ");


if (jarak == -1) { Serial.println("Tidak terdeteksi");

} else { Serial.print(jarak); Serial.println(" cm");

}

}

}


// =============================

// GERAKAN SERVO

// =============================


void gerakkanServo() {


unsigned long waktuSekarang = millis();


if (waktuSekarang - waktuServoTerakhir >= intervalServo) { waktuServoTerakhir = waktuSekarang;

posisiServo += arahServo * 2;


// Sampai batas kanan

if (posisiServo >= servoMax) {


posisiServo = servoMax; arahServo = -1;

}


// Sampai batas kiri

else if (posisiServo <= servoMin) {


posisiServo = servoMin; arahServo = 1;

}


servoMotor.write(posisiServo);

}

}


// =============================

// LED BERKEDIP

// =============================


void kedipkanLed() {

unsigned long waktuSekarang = millis();


if (waktuSekarang - waktuLedTerakhir >= intervalLed) { waktuLedTerakhir = waktuSekarang;

statusLed = !statusLed;


digitalWrite(ledPin, statusLed);

}

}


Kode Sumber 2. Pemrograman Komunikasi ESP32 & MQTT (MicroPython)

import network import time

from umqtt.simple import MQTTClient import dht

from machine import Pin import ujson


ssid = 'Wokwi-GUEST' password = ''

mqtt_server = 'broker.emqx.io' client_id = 'wokwi-micropython' topic = 'publish'

topic_control = 'led'


DHT_PIN = 15

LED_PIN = 2


dht_pin = Pin(DHT_PIN) sensor = dht.DHT22(dht_pin) led = Pin(LED_PIN, Pin.OUT) led.value(0)


wifi = network.WLAN(network.STA_IF) wifi.active(True)

wifi.connect(ssid, password) while not wifi.isconnected():

time.sleep(0.5)

print('WiFi connected, IP:', wifi.ifconfig()[0]) def control_callback(topic_recv, msg):

try:

print('Control message received:', topic_recv, msg)

text = msg.decode() if isinstance(msg, (bytes, bytearray)) else str(msg)

t = text.strip().lower()

if t == 'on' or t == 'led:on': led.value(1)

print('LED turned ON') return

if t == 'off' or t == 'led:off': led.value(0)

print('LED turned OFF') return


try:

js = ujson.loads(text) if isinstance(js, dict):

if js.get('device') == 'led' and js.get('action')

== 'on':

led.value(1)

print('LED turned ON (json)')

elif js.get('device') == 'led' and js.get('action')

== 'off':

led.value(0)

print('LED turned OFF (json)') except Exception:

pass

except Exception as e:

print('Error in control callback:', e)


client = MQTTClient(client_id, mqtt_server, port=1883) client.set_callback(control_callback)

client.connect() client.subscribe(topic_control)

print('Connected to MQTT broker and subscribed to', topic_control)


while True: try:

try:

client.check_msg()

except Exception as e:

print('MQTT check_msg error:', e)


sensor.measure()

temp = sensor.temperature() hum = sensor.humidity()

data = {'temperature': temp, 'humidity': hum} print('Publish:', data) client.publish(topic, ujson.dumps(data))

except Exception as e:

print('Failed to read/publish:', e) time.sleep(1)


  1. Kesimpulan

BAB IV PENUTUP


 

Berdasarkan hasil perancangan, implementasi program, dan simulasi yang telah dilaksanakan, dapat ditarik beberapa kesimpulan akademis sebagai berikut:

  1. Sistem deteksi objek lokal berbasis Arduino Uno berhasil diimplementasikan dengan memanfaatkan sensor HC-SR04, motor servo, dan LED. Logika non-blocking menggunakan fungsi 'millis()' terbukti efektif menggantikan fungsi 'delay()' yang bersifat blocking. Dengan demikian, prosesor dapat membagi siklus kerjanya untuk menggerakkan servo (setiap 15 ms), mengedipkan LED (setiap 250 ms), dan membaca jarak sensor (setiap 60 ms) secara simultan.
  2. Sistem komunikasi IoT dua arah berbasis ESP32 berhasil dibangun menggunakan protokol MQTT. Data fisik lingkungan berupa suhu dan kelembaban berhasil diukur oleh sensor DHT22 dan dikirimkan secara periodik setiap 1 detik dalam format data JSON yang terstruktur (menggunakan 'ujson.dumps') ke topik 'publish' pada broker EMQX.
  3. Mekanisme subscribe pada topik 'led' dan eksekusi callback pada ESP32 berhasil menerima instruksi dari aplikasi pusat kendali MQTTX. Sistem secara adaptif mengenali input perintah baik dalam format Plaintext standar ('on'/'off') maupun format JSON terstruktur ('{"device": "led", "action": "on"}') untuk memicu perubahan tingkat tegangan (HIGH/LOW) pada pin LED.

 

  1. Saran

Untuk pengembangan dan penelitian sistem lebih lanjut, beberapa saran konstruktif yang dapat diajukan adalah:

  1. Aspek Keamanan: Mengingat broker EMQX publik (broker.emqx.io) tidak mensyaratkan otentikasi kata sandi dan enkripsi data, pengembangan

selanjutnya disarankan menggunakan broker privat yang mendukung protokol MQTTS (MQTT over SSL/TLS) serta otentikasi username/password untuk

mencegah penyadapan data sensor dan pengambilalihan kontrol aktuator.

  1. Antarmuka Pengguna: Integrasi dengan platform visualisasi (dashboard) seperti Node-RED, Blynk, atau Grafana dapat diterapkan untuk menyajikan data sensor secara grafis dan menyediakan tombol kontrol interaktif yang lebih ramah pengguna (user-friendly) dibandingkan antarmuka terminal

MQTTX.

  1. Skalabilitas Sistem: Pemanfaatan mode deep-sleep pada ESP32 dapat dikaji untuk mengoptimalkan efisiensi konsumsi energi, khususnya ketika sistem diimplementasikan pada perangkat bertenaga baterai di lapangan.


 

DAFTAR PUSTAKA

EMQX Team. (2024). MQTTX: Cross-platform MQTT 5.0 Desktop Client. EMQ Technologies Co., Ltd. Retrieved from https://mqttx.app/

Kurniawan, A. (2020). IoT Projects with ESP32 and MicroPython: Learning System-on-Chip Programming. Jakarta: Penerbit Informatika.

Stallings, W. (2018). Computer Organization and Architecture: Designing for Performance (10th ed.). Boston: Pearson Education.

Tanenbaum, A. S., & Austin, T. (2013). Structured Computer Organization (6th ed.).

Boston: Pearson.

Wokwi. (2024). Wokwi: Embedded System Simulator Online. Retrieved from https://wokwi.com/