Cara Memecah Kode Arduino Menjadi Beberapa File

Jika kamu pernah mengembangkan proyek Arduino atau ESP, kamu mungkin sering menghadapi kode yang semakin panjang dan sulit dibaca. Salah satu cara terbaik untuk mengelola proyek dengan lebih baik adalah menggunakan modular programming, yaitu memisahkan kode ke beberapa file.

Dalam artikel ini, kita akan membahas bagaimana cara membuat kode terstruktur untuk menyalakan LED menggunakan Arduino, dengan pendekatan modular coding.

Mengapa Modular Programming?

Membuat kode lebih rapi – Dengan memisahkan kode menjadi beberapa file, setiap bagian dari program menjadi lebih jelas dan mudah dimengerti.
Memudahkan penggunaan ulang – Kamu dapat menggunakan kembali modul tanpa harus menulis ulang seluruh kode.
Mempermudah debugging – Jika terjadi kesalahan, kamu bisa lebih mudah menemukannya tanpa harus mencari di file yang panjang.

Struktur Proyek Arduino dengan Modular Coding

Sebelum mulai coding, kita buat struktur folder seperti ini:

/modular_led
│── modular_led.ino   → Kode utama
│── led.h             → Header LED
│── led.cpp           → Implementasi LED

Di sini, kita akan membuat tiga file utama:

  1. led.h → Deklarasi fungsi dan kelas untuk kontrol LED.
  2. led.cpp → Implementasi fungsi LED.
  3. main.ino → Kode utama yang mengontrol bagaimana LED bekerja.

Membuat Modul LED

1. File led.h (Header untuk LED)

File led.h berisi deklarasi kelas dan fungsi yang kita gunakan:

#ifndef LED_H
#define LED_H

#include <Arduino.h>

class LED {
public:
    LED(int pin);  // Konstruktor
    void begin();  // Inisialisasi LED
    void turnOn(); // Menyalakan LED
    void turnOff(); // Mematikan LED

private:
    int ledPin; // Menyimpan pin LED
};

#endif

Menggunakan kelas LED untuk mengelola fungsi LED dengan lebih efisien.
Menentukan metode begin() untuk inisialisasi, turnOn() untuk menyalakan, dan turnOff() untuk mematikan LED.

2. File led.cpp (Implementasi LED)

Berisi kode implementasi untuk setiap fungsi yang ada di led.h:

#include "led.h"

LED::LED(int pin) {
    ledPin = pin;
}

void LED::begin() {
    pinMode(ledPin, OUTPUT);
}

void LED::turnOn() {
    digitalWrite(ledPin, HIGH);
}

void LED::turnOff() {
    digitalWrite(ledPin, LOW);
}

Fungsi begin() mengatur pin sebagai output, sehingga LED bisa dikontrol.
Metode turnOn() dan turnOff() mengontrol status LED secara langsung.

3. File modular_led.ino (Kode Utama)

Terakhir, kita tuliskan kode utama yang akan menjalankan program:

#include "led.h"

LED led(13);  // Gunakan pin 13 untuk LED

void setup() {
    led.begin();
}

void loop() {
    led.turnOn();
    delay(1000);
    led.turnOff();
    delay(1000);
}

Memanggil kelas LED dengan LED led(13); untuk mengontrol LED di pin 13.
Menyalakan dan mematikan LED setiap 1 detik dengan delay(1000);.

Cara Menjalankan Kode

  1. Pastikan semua file (led.h, led.cpp, maodular_led.ino) berada dalam folder yang sama.
  2. Buka modular_led.ino di Arduino IDE atau PlatformIO.
  3. Upload ke board Arduino, dan lihat LED berkedip setiap 1 detik.

Kesimpulan

✔ Modular programming membantu membuat kode lebih terstruktur, mudah dibaca, dan mudah digunakan kembali.
✔ Dengan memisahkan fungsi LED ke dalam kelas dan file terpisah, program menjadi lebih rapi dan efisien.
✔ Teknik ini bisa digunakan untuk proyek yang lebih kompleks, seperti sensor, komunikasi serial, atau sistem berbasis IoT.

Pengalaman Membaca PZEM-017 dengan ESP WeMos D1 Mini

Sebagai seseorang yang sedang belajar mendalami teknologi IoT dan integrasi sensor, saya menghadapi berbagai tantangan saat mencoba membaca data dari PZEM-017 menggunakan ESP8266 WeMos D1 Mini. Meskipun awalnya tampak seperti proses sederhana, ternyata ada berbagai hambatan teknis yang perlu diatasi. Berikut adalah perjalanan saya dalam menyelesaikan masalah yang muncul hingga akhirnya sistem berjalan dengan stabil.

1. Kendala Awal: Label PCB dalam Bahasa Mandarin

Saat pertama kali menerima modul PZEM-017, saya dihadapkan pada tantangan yang tidak terduga—label pada PCB menggunakan Bahasa Mandarin.

Hal ini tentu menyulitkan dalam menentukan koneksi yang benar. Saya kemudian mencari referensi dari berbagai sumber, membandingkan dengan modul serupa, dan melakukan verifikasi menggunakan multimeter untuk memastikan koneksi TX, RX, VCC, dan GND sudah sesuai.

Bagi yang mengalami kendala serupa, saya menyarankan untuk mencari diagram koneksi atau datasheet resmi agar mendapatkan kejelasan mengenai pengkabelan.

2. LED TX & RX Tidak Menyala: Masalah pada Kabel Jumper

Setelah memahami koneksi, saya segera melakukan penyambungan dan menyalakan sistem. Namun, LED TX dan RX tidak menyala sama sekali.

Awalnya saya menduga adanya kesalahan konfigurasi atau kerusakan pada modul RS485 to TTL, tetapi setelah melakukan pengecekan menyeluruh, ternyata penyebabnya adalah kabel jumper dengan kualitas kurang baik. Padahal, kabel yang sama telah digunakan untuk eksperimen lain tanpa kendala.

Solusi yang saya temukan cukup sederhana—mengganti kabel jumper dengan kualitas lebih baik dan memastikan koneksi benar-benar kuat. Setelah perbaikan tersebut, LED TX dan RX akhirnya dapat berfungsi dengan normal.

3. Data Terbaca di Serial Monitor, tetapi Tidak Stabil

Setelah berhasil membaca data tegangan, arus, daya, dan energi melalui Serial Monitor, saya mendapati bahwa pembacaan kadang terbaca dengan baik, namun kadang terjadi error tanpa alasan jelas.

Awalnya saya mengira masalah ini berkaitan dengan kode atau pengaturan baud rate, namun setelah berbagai percobaan, saya mencoba mengganti power supply dari 3V ke 5V—dan hasilnya pembacaan menjadi stabil tanpa error.

Kesimpulan dari permasalahan ini adalah bahwa tegangan suplai harus cukup agar komunikasi antara perangkat dapat berjalan dengan baik.

4. LED TX Menyala Terus tetapi Redup: Masalah Grounding

Setelah sistem berjalan dalam beberapa waktu, muncul tantangan baru—LED TX tidak lagi berkedip sesuai sinyal, melainkan menyala terus dalam kondisi redup.

Ketika saya memeriksa Serial Monitor, ternyata terjadi error lagi. Setelah melakukan analisis, saya menemukan penyebab utama masalah ini: ground dari ESP8266 dan RS485 converter tidak terhubung dengan baik.

Setelah menghubungkan ground ESP ke ground RS485, sistem kembali berfungsi secara normal, dan pembacaan data tidak mengalami gangguan lagi.

5. Pengujian Stabilitas: Berjalan Tanpa Masalah Setelah Ditinggalkan Semalaman

Setelah menyelesaikan seluruh troubleshooting, saya memutuskan untuk membiarkan sistem menyala semalaman guna memastikan kestabilannya. Keesokan harinya, saya memeriksa kembali dan sistem berjalan dengan sempurna tanpa kendala.

Dari pengalaman ini, saya dapat menyimpulkan beberapa hal penting:
Pastikan koneksi perangkat sesuai dengan diagram yang benar, terutama jika terdapat label asing pada PCB.
Gunakan kabel jumper dengan kualitas baik, karena koneksi yang buruk bisa menghambat komunikasi data.
Power supply yang cukup sangat krusial, terutama untuk perangkat komunikasi seperti RS485.
Pastikan ground terhubung dengan baik untuk menghindari gangguan sinyal dan komunikasi.

Pengalaman ini menunjukkan bahwa trial & error adalah bagian penting dalam eksplorasi teknologi, dan setiap tantangan dapat diselesaikan dengan pendekatan yang sistematis. Semoga pengalaman ini dapat membantu bagi siapa pun yang menghadapi kendala serupa!

Membangun PLTS Atap: Backup PLN

Pada tulisan sebelumnya tentang Membangun PLTS Atap: UPS Modif, saya telah berbagi cerita mengenai awal mula pencarian energi alternatif untuk PC saya. Saat itu, saya mulai mencari solusi agar perangkat saya tetap bisa beroperasi dengan sumber daya yang lebih efisien dan berkelanjutan. Kini, saya akan melanjutkan ke tahap berikutnya dalam pengembangan sistem ini.

Upgrade ke LiFePO4: Investasi untuk Masa Depan

Setelah mempertimbangkan berbagai opsi, akhirnya saya memutuskan untuk membeli baterai LiFePO4 sebagai penyimpanan daya utama. Keunggulan utama dari teknologi ini adalah umur pakai yang lebih panjang, efisiensi yang lebih tinggi, dan kestabilan daya yang lebih baik dibandingkan baterai SLA atau AGM. Dengan kapasitas yang mencukupi, LiFePO4 memberikan fleksibilitas dalam sistem cadangan daya saya.

Memaksimalkan Daya dengan Inverter 3000 Watt

Agar bisa memanfaatkan baterai LiFePO4 secara optimal, saya juga memilih untuk menggunakan inverter 3000W. Keputusan ini didasarkan pada kebutuhan daya yang cukup besar, terutama untuk backup lampu, server, dan bahkan AC saat terjadi pemadaman listrik. Dengan inverter berkapasitas besar, sistem ini mampu memberikan cadangan energi yang lebih andal dan dapat menangani beban daya lebih tinggi tanpa kendala.

Sistem Sementara: Backup PLN Tanpa Solar Panel

Saat ini, saya belum memiliki solar panel dan solar charge controller (SCC), sehingga sistem sementara ini hanya berfungsi sebagai cadangan daya untuk PLN. Artinya, baterai diisi ulang dari listrik PLN, lalu digunakan sebagai UPS untuk menjaga perangkat tetap menyala saat terjadi pemadaman listrik. Meskipun belum sepenuhnya mandiri, langkah ini sudah menjadi awal yang baik dalam transisi menuju energi terbarukan.

Langkah Berikutnya: Pemasangan Solar Panel dan SCC

Tahap selanjutnya dalam proyek ini adalah memasang solar panel dan SCC agar sistem ini benar-benar bisa bekerja secara off-grid. Dengan adanya solar panel, baterai tidak lagi bergantung pada PLN untuk pengisian daya, melainkan dapat menggunakan energi matahari secara langsung. SCC berperan penting dalam mengatur aliran daya dari panel ke baterai, memastikan efisiensi pengisian yang optimal dan melindungi sistem dari overcharge.

Kesimpulan: Menuju Energi Mandiri

Membangun PLTS Atap bukanlah proses instan, melainkan perjalanan bertahap yang membutuhkan pemikiran strategis dan investasi yang tepat. Dari UPS modif, baterai LiFePO4, inverter 3000W, hingga perencanaan pemasangan solar panel dan SCC, setiap langkah membawa saya lebih dekat menuju sistem energi yang lebih efisien, berkelanjutan, dan mandiri.

Membangun PLTS Atap: UPS Modif

Pertama yang ingin saya ceritakan adalah, hobi ini ternyata adalah hobi mahal. Bukan mau sombong punya hobi mahal, tapi sebagai self aware juga kalau harus penuh pertimbangan yang waras dalam menentukan prioritas, terutama buat budget terbatas seperti saya. Walaupun, ternyata hobi orang lain ternyata mahal juga, seperti hobi lari ternyata budget nya besar juga kalau nuruti yang “bagus” mulai dari spatu, outfit, wearable, dll.

Saya mulai bangun PLTS atap di rumah setelah perjalanan panjang selama dua tahun berurusan dengan energi listrik. Dua tahun lalu ketika menempati rumah sebut saja ruma A, saya membutuhkan supply listrik alternatif untuk mini PC yang tidak punya baterai seperti laptop. Supply ini saya perlukan karena sering kali listrik mati. Walaupun listrik mati hanya beberapa detik, tapi sudah membuat PC jadi restart. Kalau keseringan bisa membuat PC rusak. Jadi diperlukan semacam UPS untuk backup PLN.

UPS Modif

Perburuan di e-commerce online tentang UPS menemukan adanya UPS modif yang bisa menggunakan aki mobil dan ada kabel penghubung untuk disambung ke aki mobil di luar kotak UPS nya. Saya sampai beli dua kali karena merasa daya yang ditangani terlalu kecil, yaitu 350 VA, untuk pembelian pertama. Di pembelian kedua saya beli yang tipe 450 VA, dimana saya pikir cukup untuk menangani lampu seluruh rumah dan mini PC yang memiliki daya kecil setara dengan laptop. Pembelian kedua ini sekaligus proyeksi saya ketika pindah ke umah B, dimana saya sedang atur ulang jalur kelistrikanya pada waktu itu.

Sistem dengan UPS modif ini lumayan bertahan sekitar dua tahun belakangan sampai suatu ketika UPS nya bermasalah, yaitu ditandai dengan seringnya ELCB utama turun atau trip. Selain itu juga aki mobil yang sudah mulai drop. Hal ini teramati ketika mati lampu waktu siang dan cuma bertahan 1 jam dari yang sebelumnya bisa bertahan 3 atau 4 jam lebih. Mati lampu terakhir pas malam hari jadi was-was dan harus mematikan semua peralatan hingga tersisa peralatan minimal saja yang nyala.

Upgrade Baterai LifePo4

Dari kejadian batrei drop, saya kepikiran untuk upgrade baterai dengan tipe LifePo4 yang dikenal awet dan stabil. Pada saat itu saya sudah sering melihat vlog tentang PLTS, tetapi tidak ada niat untuk kearah sana karena budget nya yang tidak murah. Saya beli baterai 4 pcs yang 3.2 v 100Ah, kemudian saya seri dengan ditambah BMS daly yang saya beli secara terpisah.

Upgrade baterai ini saya rasa cukup sukses dan saya puas. Sistem ini bisa bertahan menangani daya 80 watt an sampai 8 jam lebih. Secara hitungan teori, dengan efisiensi 80% bakal mampu bertahan hingga 12 jam. Kapasitas ini cukup untuk backup listrik mati dengan beban hanya lampu, cctv, dan perangkat network seprti router, switch, akses poin, dll.

Menuju PLTS Atap

Ternyata kepuasan terhadap upgrade baterai tidak bertahan lama. Sekitar seminggu setelah upgrade, saya mulai membuka kemungkinan untuk masuk ke dunia PLTS. Hal ini mulai muncul karena saya berfikir sumber daya baterai yang bagus ini sangat sayang kalau sering nganggur karena listrik mati juga jarang terjadi akhir-akhir ini. Ditambah lagi, mini PC yang awalnya jadi alasan utama saya pakai sistem backup UPS ini, rusak total dan tidak bisa diperbaiki menurut dua tempat service yang saya kunjungi (motherboard kena dan gak jelas service nya bakal kayak gimana).

to be continued >>

Menata Ulang Jalur Panel MCB

Dengan bertambahnya kapasitas Inverter untuk suplay tenaga listrik di rumah, maka jalur yang dibackup sama inverter yang dulunya hanya lampu saja, perlu ditambah opsi atau pilihan agar jalur lain bisa menggunakan juga. Kemampuan untuk memilih jalur ini bisa diwujudkan di panel MCB yang sudah ada.

Saya sudah menyiapkan empat jalur untuk membagi beban berdasarkan kegunaan, seperti lampu, AC, stop kontak, dan keperluan berkaitan dengan air. Untuk keperluan listrik yang berhubungan dengan air saya tambahkan ELCB 10 ma, tingkat sensitifitas lebih tinggi dari ELCB umumnya yang 30 ma.

Pemilihan jarus sumber ini saya buat di panel MCB dengan menggunakan COS atau change over switch. COS saya pasang per jalur beban, sehinga kita bisa aktifkan per jalur. Dengan konfigurasi ini kita bisa memilih untuk mengaktifkan PLTS untuk Lampu saja atau kombinasi dengan yang lain.