- Published on
Actuator Modular
- Authors
🧪 Modul 7 – Actuator Modular
- 🧭 Prolog Modul: Posisi dan Peran Modul 7
- 🧠 Konteks Pengetahuan: Relasi Antar Modul
- 🎯 Tujuan Modul (Learning Objectives)
- 🧩 Masalah yang Diselesaikan Modul Ini
- 🏗️ Konsep Inti yang Diperkenalkan
- 🛠️ Desain Teknis & Arsitektur
- 🧪 Implementasi Bertahap (High-Level)
- 1️⃣ Identifikasi jenis actuator (relay/servo/output digital)
- 2️⃣ Mendesain class actuator turunan dari
ComponentBase - 3️⃣ Menentukan logika aktif HIGH/LOW
- 4️⃣ Implementasi method kontrol dasar
- 5️⃣ Integrasi actuator dengan data sensor
- 6️⃣ Pengujian aksi berdasarkan kondisi tertentu
- 7️⃣ Validasi perilaku actuator
- Catatan penting (praktis)
- 🧾 Validasi dan Pengujian
- 🔁 Refleksi dan Keterkaitan ke Modul Lain
- 🧭 Navigasi Modul
- 📌 Penutup Analitis
🧭 Prolog Modul: Posisi dan Peran Modul 7
Modul 7 memperkenalkan actuator sebagai lapisan aksi dalam arsitektur firmware IoT modular. Setelah Modul 6 menyediakan data lingkungan melalui sensor, modul ini menambahkan kemampuan sistem untuk mengubah kondisi fisik secara langsung melalui output seperti relay, servo, atau digital output.
Pada titik ini, firmware telah memiliki:
- Arsitektur komponen yang konsisten (
ComponentBase) - Mekanisme event asinkron (interrupt)
- Sumber data terstruktur (sensor)
Modul 7 melengkapi rantai sistem dengan menempatkan actuator sebagai komponen OOP penuh, bukan sekadar pemanggilan digitalWrite(). Dengan demikian, sistem mulai membentuk alur yang lengkap dan eksplisit: input → proses → aksi, yang menjadi dasar seluruh sistem IoT operasional.
🧠 Konteks Pengetahuan: Relasi Antar Modul
🔙 Prasyarat Konseptual
Modul 7 bergantung langsung pada modul-modul berikut:
Modul 4 – ComponentBase Digunakan untuk:
- kontrak lifecycle komponen (
begin(),update()) - pengelolaan actuator secara polimorfik
- kontrak lifecycle komponen (
Modul 6 – Sensor Modular Digunakan sebagai:
- sumber data yang memicu perubahan state actuator
- contoh integrasi data → aksi
Modul 2 – LED Modular dengan Class Digunakan sebagai:
- referensi dasar desain actuator
- pembanding antara actuator sederhana dan actuator modular
Tanpa pemahaman modul-modul ini, actuator tidak dapat diintegrasikan secara konsisten.
🔜 Digunakan Kembali di Modul Selanjutnya
Class actuator yang dibangun pada Modul 7 akan digunakan langsung pada:
Modul 8 – MQTT Integration Actuator menjadi target perintah jarak jauh.
Modul 9 – Final Project Actuator menjadi elemen aksi utama sistem IoT.
Artinya, desain actuator pada Modul 7 mengikat perilaku sistem hingga tahap akhir proyek.
🎯 Tujuan Modul (Learning Objectives)
Setelah menyelesaikan Modul 7, pembaca harus mampu secara praktis:
- Menempatkan actuator sebagai komponen aksi dalam sistem IoT
- Mendesain class actuator berbasis OOP yang terenkapsulasi
- Mengisolasi logika hardware output dari logika aplikasi
- Menangani perbedaan aktif HIGH / aktif LOW secara konsisten
- Menghubungkan actuator dengan data sensor dan event tanpa menambah kompleksitas di
firmware.ino
Jika actuator masih dikendalikan langsung dari loop(), modul dianggap gagal.
🧩 Masalah yang Diselesaikan Modul Ini
Masalah umum pada pengendalian actuator tanpa struktur:
- Logika kontrol tersebar di
loop() - Perubahan perilaku actuator membutuhkan banyak perubahan kode
- Setiap jenis output memiliki pola kontrol berbeda
- Penambahan actuator baru merusak struktur firmware
Dampak langsung:
- Firmware sulit dirawat
- Sulit diskalakan
- Tidak siap diintegrasikan dengan sistem eksternal
Modul 7 menyelesaikan masalah ini dengan:
Menjadikan actuator komponen mandiri
Menyatukan pola kontrol output dalam class
Memisahkan:
- logika keputusan (kapan aktif)
- logika hardware (bagaimana aktif)
🏗️ Konsep Inti yang Diperkenalkan
Konsep Utama
Actuator sebagai komponen OOP Actuator memiliki lifecycle dan state sendiri.
Logika aktif HIGH vs aktif LOW Perbedaan hardware ditangani di dalam class, bukan di aplikasi.
Abstraksi output digital Aksi direpresentasikan sebagai method (
on(),off(),set()).Integrasi actuator dengan data sensor Actuator bereaksi terhadap kondisi, bukan dipicu manual.
Kontrol aksi berbasis kondisi Sensor → kondisi → actuator, tanpa coupling langsung.
Konsep yang Tidak Dibahas di Modul Ini
Secara eksplisit di luar scope Modul 7:
- MQTT dan komunikasi jaringan
- Kontrol jarak jauh
- Rule engine dan automasi kompleks
- Safety, interlock, dan fail-safe lanjutan
Fokus modul ini hanya pada kontrol output lokal yang terstruktur.
🛠️ Desain Teknis & Arsitektur
Pada level arsitektur, actuator diperlakukan sebagai:
- Komponen aktif yang mengubah kondisi fisik
- Dikendalikan melalui antarmuka method yang eksplisit
- Tunduk pada lifecycle
ComponentBase
Tanggung jawab class actuator:
- Inisialisasi pin dan mode output
- Menyimpan state internal (ON/OFF)
- Menerjemahkan perintah logis ke sinyal hardware
Sumber keputusan aktivasi actuator dapat berasal dari:
- Data sensor
- Event tombol (interrupt)
- Logika aplikasi lokal (sementara, sebelum MQTT)
firmware.ino tidak:
- mengatur pin output
- menentukan logika aktif HIGH/LOW
- mengandung logika hardware actuator
Dengan desain ini, actuator dapat ditambah, diganti, atau dikombinasikan tanpa mengubah arsitektur firmware utama.
🧪 Implementasi Bertahap (High-Level)
Modul 7 – Actuator Modular (Engineer-grade, rinci, siap compile)
Contoh actuator yang dipakai: Relay 1-channel (digital output) karena paling umum dan mewakili kasus aktif HIGH / aktif LOW. Sensor yang dipakai: DHT22 dari Modul 6 (data suhu sebagai pemicu aksi). Event tambahan (opsional): tombol dari Modul 5 bisa ditambahkan belakangan—tidak wajib untuk modul ini.
0️⃣ Struktur Folder (artefak wajib)
firmware/
├── ComponentBase.h
├── LedController.h
├── LedController.cpp
├── DhtSensor.h
├── DhtSensor.cpp
├── RelayActuator.h
├── RelayActuator.cpp
└── firmware.ino
1️⃣ Identifikasi jenis actuator (relay/servo/output digital)
Untuk modul ini, kita definisikan 1 jenis actuator yang wajib tuntas:
✅ Relay / Digital Output
Karakteristik:
Controlled via GPIO (HIGH/LOW)
Memiliki state: ON/OFF
Ada variasi hardware:
- Active HIGH (ON saat GPIO HIGH)
- Active LOW (ON saat GPIO LOW) → paling sering pada board relay murah
Servo/PWM sengaja tidak dimasukkan agar fokus modul tidak melebar.
2️⃣ Mendesain class actuator turunan dari ComponentBase
Tujuan class actuator
Mengenkapsulasi:
- pin output
- logika aktif HIGH/LOW
- state internal
Menyediakan API:
on(),off(),set(bool),toggle(),isOn()
RelayActuator.h
#ifndef RELAY_ACTUATOR_H
#define RELAY_ACTUATOR_H
#include <Arduino.h>
#include "ComponentBase.h"
class RelayActuator : public ComponentBase {
public:
enum class ActiveLevel : uint8_t {
ACTIVE_HIGH = 1,
ACTIVE_LOW = 0
};
RelayActuator(uint8_t pin, ActiveLevel activeLevel, bool initialOn = false);
void begin() override;
void update() override;
void on();
void off();
void toggle();
void set(bool on);
bool isOn() const;
private:
uint8_t _pin;
ActiveLevel _activeLevel;
bool _state; // logical state: true=ON, false=OFF
void applyHardware();
};
#endif
3️⃣ Menentukan logika aktif HIGH/LOW
Rules yang dipakai di class:
- State logis
true= actuator ON - Sinyal hardware tergantung active level:
| Active Level | ON | OFF |
|---|---|---|
| ACTIVE_HIGH | HIGH | LOW |
| ACTIVE_LOW | LOW | HIGH |
Implementasinya dilakukan di applyHardware().
4️⃣ Implementasi method kontrol dasar
RelayActuator.cpp
#include "RelayActuator.h"
RelayActuator::RelayActuator(uint8_t pin, ActiveLevel activeLevel, bool initialOn)
: _pin(pin), _activeLevel(activeLevel), _state(initialOn) {}
void RelayActuator::begin() {
pinMode(_pin, OUTPUT);
applyHardware();
}
void RelayActuator::update() {
// Actuator tidak perlu polling pada Modul 7
// Keputusan aktivasi dilakukan di logic aplikasi (mis. firmware.ino) berdasarkan data sensor
}
void RelayActuator::on() {
set(true);
}
void RelayActuator::off() {
set(false);
}
void RelayActuator::toggle() {
set(!_state);
}
void RelayActuator::set(bool on) {
_state = on;
applyHardware();
}
bool RelayActuator::isOn() const {
return _state;
}
void RelayActuator::applyHardware() {
// Translate logical state -> electrical level
if (_activeLevel == ActiveLevel::ACTIVE_HIGH) {
digitalWrite(_pin, _state ? HIGH : LOW);
} else {
digitalWrite(_pin, _state ? LOW : HIGH);
}
}
5️⃣ Integrasi actuator dengan data sensor
Kita buat aturan kondisi sederhana:
Jika suhu >= THRESHOLD_C → relay ON Jika suhu < THRESHOLD_C - HYSTERESIS_C → relay OFF
Alasan pakai hysteresis:
- mencegah relay chatter (ON/OFF cepat) saat suhu berada di sekitar threshold.
Parameter:
THRESHOLD_Ccontoh 30.0HYSTERESIS_Ccontoh 1.0
6️⃣ Pengujian aksi berdasarkan kondisi tertentu
firmware.ino(FINAL – UTUH)
#include <Arduino.h>
#include "ComponentBase.h"
#include "DhtSensor.h"
#include "RelayActuator.h"
// ===== Konfigurasi pin =====
#define DHT_PIN 4
#define DHT_TYPE DHT22
#define RELAY_PIN 5
// ===== Parameter kontrol =====
static const float THRESHOLD_C = 30.0;
static const float HYSTERESIS_C = 1.0;
// ===== Komponen =====
DhtSensor dht(DHT_PIN, DHT_TYPE, 2000); // update tiap 2 detik
// Set active level sesuai hardware relay Anda:
// - Banyak relay module: ACTIVE_LOW
// - Jika relay ON saat GPIO HIGH: ACTIVE_HIGH
RelayActuator relay(RELAY_PIN, RelayActuator::ActiveLevel::ACTIVE_LOW, false);
// Registry komponen
ComponentBase* components[] = { &dht, &relay };
const size_t COMPONENT_COUNT = sizeof(components) / sizeof(components[0]);
void setup() {
Serial.begin(115200);
delay(200);
for (size_t i = 0; i < COMPONENT_COUNT; i++) {
components[i]->begin();
}
Serial.println("Modul 7: Actuator Modular (Relay) + Sensor DHT");
}
// Logic keputusan: data sensor -> actuator
void processControlLogic() {
if (!dht.isValid()) return;
float t = dht.getTemperature();
// Hysteresis control
if (!relay.isOn() && t >= THRESHOLD_C) {
relay.on();
Serial.println("[ACT] Relay ON (temp >= threshold)");
}
else if (relay.isOn() && t < (THRESHOLD_C - HYSTERESIS_C)) {
relay.off();
Serial.println("[ACT] Relay OFF (temp < threshold-hyst)");
}
}
void loop() {
// Jalankan lifecycle komponen
for (size_t i = 0; i < COMPONENT_COUNT; i++) {
components[i]->update();
}
// Konsumsi data sensor & kontrol actuator
if (dht.isValid()) {
Serial.print("[SEN] Temp: ");
Serial.print(dht.getTemperature());
Serial.print(" C | Hum: ");
Serial.print(dht.getHumidity());
Serial.println(" %");
}
processControlLogic();
}
7️⃣ Validasi perilaku actuator
Checklist validasi teknis (wajib)
Actuator merespons kondisi sensor
- Saat suhu melewati threshold → relay ON
- Saat suhu turun melewati threshold-hysteresis → relay OFF
Tidak ada logika hardware actuator di
firmware.inopinMode,digitalWritehanya ada diRelayActuator
Logika aktif HIGH/LOW terenkapsulasi
Mengubah active level cukup ganti:
RelayActuator::ActiveLevel::ACTIVE_LOWtanpa ubah
firmware.inologic kontrol
Firmware modular
Menambah actuator kedua:
- tambah object
RelayActuator relay2(...) - tambah ke registry
- tanpa ubah struktur loop
- tambah object
Stabil (no chatter)
- Hysteresis mencegah relay flicker ON/OFF di sekitar threshold
Catatan penting (praktis)
Jika relay Anda menyala saat boot padahal
initialOn=false, kemungkinan:- relay module aktif LOW, tapi Anda set ACTIVE_HIGH (atau sebaliknya)
Ubah
ActiveLevelsampai perilaku sesuai.
🧾 Validasi dan Pengujian
Modul 7 dinyatakan lulus secara teknis apabila seluruh kriteria berikut terpenuhi:
Actuator merespons kondisi sensor dengan benar Perubahan nilai sensor (melewati threshold dan hysteresis) memicu perubahan state actuator sesuai logika kontrol.
Tidak ada logika hardware di
firmware.inoTidak terdapatpinMode,digitalWrite, atau detail aktif HIGH/LOW difirmware.ino. Seluruhnya terenkapsulasi di class actuator.Firmware tetap modular dan mudah diperluas Penambahan actuator baru cukup dengan:
- membuat instance class actuator
- menambahkannya ke registry komponen tanpa mengubah struktur loop utama.
Serial Monitor menunjukkan perubahan state actuator Log serial mencerminkan transisi ON/OFF actuator yang sinkron dengan kondisi sensor.
Penambahan actuator tidak memengaruhi sistem lain Sensor, event, dan actuator lain tetap berjalan normal tanpa side effect.
Jika satu poin gagal → arsitektur tidak valid.
🔁 Refleksi dan Keterkaitan ke Modul Lain
Kondisi sistem setelah Modul 7:
- Firmware mampu melakukan aksi fisik nyata
- Rantai input → process → output telah terbentuk secara eksplisit
- Sensor menghasilkan data
- Logika menentukan kondisi
- Actuator mengeksekusi aksi
Batasan saat ini:
- Seluruh aksi masih lokal (on-device)
- Tidak ada kontrol atau observasi dari sistem eksternal
Keterbatasan ini disengaja dan akan diselesaikan pada Modul 8, dengan mengintegrasikan firmware ke sistem luar melalui MQTT.
🧭 Navigasi Modul
⬅️ Modul sebelumnya – Modul 6: Sensor Modular Menyediakan data lingkungan terstruktur.
➡️ Modul selanjutnya – Modul 8: MQTT Integration Menjadikan actuator dan sensor dapat dikendalikan dan dipantau dari luar perangkat.
📌 Penutup Analitis
Modul 7 menandai titik di mana firmware berdampak langsung pada dunia fisik. Dengan actuator modular, sistem IoT tidak lagi sekadar mengamati dan melaporkan, tetapi mengambil tindakan berdasarkan data dan event, secara terstruktur, teruji, dan siap diperluas ke kontrol terdistribusi pada modul berikutnya.
Catatan Penyusunan Artikel ini disusun sebagai materi edukasi dan referensi umum berdasarkan berbagai sumber pustaka, praktik lapangan, serta bantuan alat penulisan. Pembaca disarankan untuk melakukan verifikasi lanjutan dan penyesuaian sesuai dengan kondisi serta kebutuhan masing-masing sistem.