
Mendeskripsikan alur pemrograman berbasis blok (node-based visual programming) untuk pengontrolan Traffic Light (Lampu Lalu Lintas) dan Motor Servo berbasis mikrokontroler ESP32.
Struktur ini mengatur sekuens nyala lampu indikator sekaligus pergerakan posisi servo berdasarkan pewaktuan (timer).
Komponen Utama Node
ESP32 Board: Bertindak sebagai pengontrol utama seluruh logika visual.
Timer & Wave Generator:
squareWave: Menghasilkan sinyal periodik (frekuensi 0.5 Hz) untuk memicu pewaktuan dasar.
timer: Menghitung waktu hingga 5000 ms (5 detik) untuk mengatur durasi siklus.
delay: Memberikan jeda waktu (2500 ms) antar peralihan kondisi.
pulse: Mengirimkan pulsa sinyal berdurasi tertentu (100 ms dan 9400 ms) untuk memicu aksi beruntun.
Logika Pembanding & Keputusan:
compare: Membandingkan nilai timer dengan ambang batas (misalnya >= 5000 ms) untuk mengaktifkan kondisi berikutnya.
ifElse: Menentukan nilai keluaran berdasarkan kondisi logika (mengatur sudut servo: 0°, 90°, atau 180°).
Aktuator & Output:
digitalWrite: Mengontrol status PIN GPIO ESP32 (Lampu/LED pada Pin 12, 13, 14, 15, 32, 33).
servo: Mengontrol pergerakan motor servo pada Pin 13 berdasarkan sudut yang dihasilkan dari blok logika.
bulb & serialLog: Menampilkan status visual (lampu menyala/mati) serta log serial (SYSTEM:READY) pada antarmuka pemantauan.
Cara Kerja Sistem
Inisialisasi Pewaktuan: squareWave memicu timer untuk berjalan hingga mencapai target 5 detik.
Pengujian Kondisi (compare): Ketika timer mencapai nilai >= 5000, sinyal pemicu dikirimkan ke logika perantara dan indikator visual (bulb).
Peralihan & Jeda (delay & ifElse): Blok delay menahan sinyal selama 2,5 detik sebelum meneruskannya ke percabangan ifElse. Sinyal ini menentukan output angka (0, 90, atau 180) yang mewakili derajat posisi.
Eksekusi Servo & LED:
Output angka dikirim ke blok servo pada Pin 13 untuk menggerakkan lengan servo ke sudut target (misalnya palang pintu/rambu).
Nilai sudut yang bernilai 90° atau 180° diverifikasi ulang melalui blok pembanding lanjutan untuk mengaktifkan/dematikan barisan pin LED digital (digitalWrite Pin 32 & 33) serta indikator traffic light.
Reset Otomatis: Setelah rangkaian delay dan pulse selesai, sinyal dialirkan kembali ke pin reset pada timer untuk mengulang siklus secara kontinu.
{
"name": "trafic_light-servo",
"board": "esp32",
"nodes": [
{
"id": "timer-1781659366219",
"type": "timer",
"position": {
"x": 400.79358324187234,
"y": 47.10116825945781
},
"data": {
"value": 5000,
"pin": "0",
"currentTime": 5000,
"lastTick": 1788011502326,
"targetSec": 5
},
"measured": {
"width": 318,
"height": 201
},
"selected": false,
"dragging": false
},
{
"id": "squareWave-1781659369656",
"type": "squareWave",
"position": {
"x": 142.68194490462213,
"y": -132.71548123412416
},
"data": {
"value": 1,
"pin": "0",
"frequency": 0.5
},
"measured": {
"width": 183,
"height": 176
},
"selected": false,
"dragging": false
},
{
"id": "bulb-1781659381499",
"type": "bulb",
"position": {
"x": 453.1639893894662,
"y": 298.2491778833472
},
"data": {
"value": true,
"pin": "0"
},
"measured": {
"width": 160,
"height": 148
},
"selected": false,
"dragging": false
},
{
"id": "serialLog-1781659396395",
"type": "serialLog",
"position": {
"x": 1108.3282369506196,
"y": 92.40442053303434
},
"data": {
"value": 5000,
"pin": "0",
"lastMessage": "SYSTEM:READY"
},
"measured": {
"width": 178,
"height": 125
},
"selected": false,
"dragging": false
},
{
"id": "compare-1781659417695",
"type": "compare",
"position": {
"x": 164.81321778260963,
"y": 254.58426762084775
},
"data": {
"value": true,
"pin": "0",
"mode": ">="
},
"measured": {
"width": 178,
"height": 165
},
"selected": false,
"dragging": false
},
{
"id": "number-1781659439140",
"type": "number",
"position": {
"x": 122.52676503357529,
"y": 74.48293530484668
},
"data": {
"value": 5000,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "delay-1781659625594",
"type": "delay",
"position": {
"x": 756.94351592982,
"y": 71.25802647892922
},
"data": {
"value": false,
"pin": "0",
"pendingValue": true,
"delayMs": 2500,
"targetTime": 1788011503688
},
"measured": {
"width": 210,
"height": 154
},
"selected": false,
"dragging": false
},
{
"id": "bulb-1781659730081",
"type": "bulb",
"position": {
"x": 401.40314519833277,
"y": -126.77276885855349
},
"data": {
"value": 1,
"pin": "0"
},
"measured": {
"width": 160,
"height": 148
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1781660526857",
"type": "digitalWrite",
"position": {
"x": 927.8544079530694,
"y": -146.24549590070615
},
"data": {
"value": true,
"pin": "13",
"lastStateKey": "13-true-false",
"disabled": false
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
},
{
"id": "pulse-1781660538709",
"type": "pulse",
"position": {
"x": 603.7562297647195,
"y": -131.9110161054237
},
"data": {
"value": false,
"duration": 100,
"pin": "0",
"lastTrigger": true,
"endTime": 1788011502302
},
"measured": {
"width": 209,
"height": 154
},
"selected": false,
"dragging": false
},
{
"id": "bulb-1781661230879",
"type": "bulb",
"position": {
"x": 756.7091740307612,
"y": 297.6294971757705
},
"data": {
"value": false,
"pin": "0"
},
"measured": {
"width": 160,
"height": 148
},
"selected": false,
"dragging": false
},
{
"id": "delay-1781661247124",
"type": "delay",
"position": {
"x": 450.30658655180287,
"y": 674.307074461502
},
"data": {
"value": false,
"pin": "0",
"pendingValue": true,
"delayMs": 2500,
"targetTime": 1788011503688
},
"measured": {
"width": 210,
"height": 154
},
"selected": false,
"dragging": false
},
{
"id": "ifElse-1781662093854",
"type": "ifElse",
"position": {
"x": 1057.7871252089844,
"y": 898.7952574397362
},
"data": {
"value": 1,
"pin": "0"
},
"measured": {
"width": 160,
"height": 201
},
"selected": false,
"dragging": false
},
{
"id": "number-1781662102764",
"type": "number",
"position": {
"x": 440.16064038407967,
"y": 842.6949853852078
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "bulb-1781662143439",
"type": "bulb",
"position": {
"x": 1242.4885743640518,
"y": 294.30220715393034
},
"data": {
"value": false,
"pin": "0"
},
"measured": {
"width": 160,
"height": 148
},
"selected": false,
"dragging": false
},
{
"id": "number-1781662190795",
"type": "number",
"position": {
"x": 745.2221128805983,
"y": 1017.240449473853
},
"data": {
"value": 1,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "pulse-1781662349090",
"type": "pulse",
"position": {
"x": 1351.609909933688,
"y": 974.1776936756711
},
"data": {
"value": false,
"duration": 9400,
"pin": "0",
"lastTrigger": true,
"endTime": 1788011402531
},
"measured": {
"width": 209,
"height": 154
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1781662913413",
"type": "digitalWrite",
"position": {
"x": 430.52581396149117,
"y": 478.29415244373916
},
"data": {
"value": true,
"pin": "14",
"lastStateKey": "14-true-undefined",
"inverted": false
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1781662928524",
"type": "digitalWrite",
"position": {
"x": 739.1136528428194,
"y": 522.5269708130623
},
"data": {
"value": false,
"pin": "12",
"lastStateKey": "12-false-undefined",
"inverted": false
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1781662936304",
"type": "digitalWrite",
"position": {
"x": 1149.8438736986711,
"y": 469.7912223154065
},
"data": {
"value": false,
"pin": "15",
"lastStateKey": "15-false-undefined",
"inverted": false
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
},
{
"id": "serialLog-1781663113471",
"type": "serialLog",
"position": {
"x": 1344.4656899960337,
"y": 111.79440456746156
},
"data": {
"value": false,
"pin": "0",
"lastMessage": "SYSTEM:READY"
},
"measured": {
"width": 184,
"height": 125
},
"selected": false,
"dragging": false
},
{
"id": "ifElse-1784705349118",
"type": "ifElse",
"position": {
"x": 1651.8417276085795,
"y": 310.7426428514923
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 201
},
"selected": false,
"dragging": false
},
{
"id": "number-1784705357973",
"type": "number",
"position": {
"x": 1421.9384460190909,
"y": 407.207876569662
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "serialLog-1784705390044",
"type": "serialLog",
"position": {
"x": 1956.593917402489,
"y": 557.8502770547436
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 125
},
"selected": false,
"dragging": false
},
{
"id": "ifElse-1784705441259",
"type": "ifElse",
"position": {
"x": 1315.1771700981856,
"y": 659.4964869039359
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 201
},
"selected": false,
"dragging": false
},
{
"id": "number-1784705480876",
"type": "number",
"position": {
"x": 949.1713709136864,
"y": 705.8568162431794
},
"data": {
"value": 90,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "serialLog-1784705512251",
"type": "serialLog",
"position": {
"x": 1536.5939174024888,
"y": 767.9278722816642
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 125
},
"selected": false,
"dragging": false
},
{
"id": "ifElse-1784705549371",
"type": "ifElse",
"position": {
"x": 2017.1771700981853,
"y": 1107.4964869039359
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 201
},
"selected": false,
"dragging": false
},
{
"id": "number-1784705552179",
"type": "number",
"position": {
"x": 1706.81282001228,
"y": 1170.0180172501769
},
"data": {
"value": 180,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "serialLog-1784705677987",
"type": "serialLog",
"position": {
"x": 2351.7360000206654,
"y": 1003.8091759604488
},
"data": {
"value": 0,
"pin": "0"
},
"measured": {
"width": 160,
"height": 125
},
"selected": false,
"dragging": false
},
{
"id": "servo-1784706006110",
"type": "servo",
"position": {
"x": 2768.455287033006,
"y": 765.865738191349
},
"data": {
"value": 0,
"pin": "13",
"lastWritten": 0
},
"measured": {
"width": 160,
"height": 161
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1784706351603",
"type": "digitalWrite",
"position": {
"x": 2625.081033449037,
"y": 223.0959972561246
},
"data": {
"value": false,
"pin": "32",
"lastStateKey": "32-false-undefined"
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
},
{
"id": "compare-1784706412713",
"type": "compare",
"position": {
"x": 2117.9469067380696,
"y": 150.0221389986857
},
"data": {
"value": false,
"pin": "0",
"mode": "=="
},
"measured": {
"width": 178,
"height": 165
},
"selected": false,
"dragging": false
},
{
"id": "number-1784706432501",
"type": "number",
"position": {
"x": 1677.761783222458,
"y": 146.7049277357581
},
"data": {
"value": 90,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "compare-1784706471481",
"type": "compare",
"position": {
"x": 2443.170210117846,
"y": 471.07079108863917
},
"data": {
"value": false,
"pin": "0",
"mode": "=="
},
"measured": {
"width": 178,
"height": 165
},
"selected": false,
"dragging": false
},
{
"id": "number-1784706479913",
"type": "number",
"position": {
"x": 2053.315176462904,
"y": 448.9768832054883
},
"data": {
"value": 180,
"pin": "0"
},
"measured": {
"width": 210,
"height": 121
},
"selected": false,
"dragging": false
},
{
"id": "digitalWrite-1784706496201",
"type": "digitalWrite",
"position": {
"x": 2731.0357075374154,
"y": 461.180244839709
},
"data": {
"value": false,
"pin": "33",
"lastStateKey": "33-false-undefined"
},
"measured": {
"width": 167,
"height": 164
},
"selected": false,
"dragging": false
}
],
"edges": [
{
"source": "squareWave-1781659369656",
"target": "timer-1781659366219",
"targetHandle": "run",
"id": "xy-edge__squareWave-1781659369656-timer-1781659366219run"
},
{
"source": "timer-1781659366219",
"target": "serialLog-1781659396395",
"id": "xy-edge__timer-1781659366219-serialLog-1781659396395"
},
{
"source": "number-1781659439140",
"target": "compare-1781659417695",
"targetHandle": "b",
"id": "xy-edge__number-1781659439140-compare-1781659417695b"
},
{
"source": "timer-1781659366219",
"target": "compare-1781659417695",
"targetHandle": "a",
"id": "xy-edge__timer-1781659366219-compare-1781659417695a"
},
{
"source": "compare-1781659417695",
"target": "delay-1781659625594",
"id": "xy-edge__compare-1781659417695-delay-1781659625594"
},
{
"source": "delay-1781659625594",
"target": "timer-1781659366219",
"targetHandle": "reset",
"id": "xy-edge__delay-1781659625594-timer-1781659366219reset"
},
{
"source": "squareWave-1781659369656",
"target": "bulb-1781659730081",
"id": "xy-edge__squareWave-1781659369656-bulb-1781659730081"
},
{
"source": "squareWave-1781659369656",
"target": "pulse-1781660538709",
"id": "xy-edge__squareWave-1781659369656-pulse-1781660538709"
},
{
"source": "compare-1781659417695",
"target": "delay-1781661247124",
"id": "xy-edge__compare-1781659417695-delay-1781661247124"
},
{
"source": "delay-1781661247124",
"target": "ifElse-1781662093854",
"targetHandle": "condition",
"id": "xy-edge__delay-1781661247124-ifElse-1781662093854condition"
},
{
"source": "number-1781662190795",
"target": "ifElse-1781662093854",
"targetHandle": "falseVal",
"id": "xy-edge__number-1781662190795-ifElse-1781662093854falseVal"
},
{
"source": "pulse-1781662349090",
"target": "bulb-1781662143439",
"id": "xy-edge__pulse-1781662349090-bulb-1781662143439"
},
{
"source": "number-1781662102764",
"target": "ifElse-1781662093854",
"targetHandle": "trueVal",
"id": "xy-edge__number-1781662102764-ifElse-1781662093854trueVal"
},
{
"source": "pulse-1781660538709",
"target": "digitalWrite-1781660526857",
"id": "xy-edge__pulse-1781660538709-digitalWrite-1781660526857"
},
{
"source": "pulse-1781662349090",
"target": "digitalWrite-1781662936304",
"id": "xy-edge__pulse-1781662349090-digitalWrite-1781662936304"
},
{
"source": "delay-1781661247124",
"target": "bulb-1781661230879",
"id": "xy-edge__delay-1781661247124-bulb-1781661230879"
},
{
"source": "delay-1781661247124",
"target": "digitalWrite-1781662928524",
"id": "xy-edge__delay-1781661247124-digitalWrite-1781662928524"
},
{
"source": "delay-1781661247124",
"target": "serialLog-1781663113471",
"id": "xy-edge__delay-1781661247124-serialLog-1781663113471"
},
{
"source": "compare-1781659417695",
"target": "digitalWrite-1781662913413",
"id": "xy-edge__compare-1781659417695-digitalWrite-1781662913413"
},
{
"source": "compare-1781659417695",
"target": "bulb-1781659381499",
"id": "xy-edge__compare-1781659417695-bulb-1781659381499"
},
{
"source": "ifElse-1781662093854",
"target": "pulse-1781662349090",
"id": "xy-edge__ifElse-1781662093854-pulse-1781662349090"
},
{
"source": "ifElse-1784705349118",
"sourceHandle": "default",
"target": "serialLog-1784705390044",
"targetHandle": "default",
"id": "xy-edge__ifElse-1784705349118default-serialLog-1784705390044default"
},
{
"source": "ifElse-1784705441259",
"sourceHandle": "default",
"target": "serialLog-1784705512251",
"targetHandle": "default",
"id": "xy-edge__ifElse-1784705441259default-serialLog-1784705512251default"
},
{
"source": "number-1784705552179",
"sourceHandle": "default",
"target": "ifElse-1784705549371",
"targetHandle": "trueVal",
"id": "xy-edge__number-1784705552179default-ifElse-1784705549371trueVal"
},
{
"source": "ifElse-1784705549371",
"sourceHandle": "default",
"target": "serialLog-1784705677987",
"targetHandle": "default",
"id": "xy-edge__ifElse-1784705549371default-serialLog-1784705677987default"
},
{
"source": "number-1784705357973",
"sourceHandle": "default",
"target": "ifElse-1784705349118",
"targetHandle": "trueVal",
"id": "xy-edge__number-1784705357973default-ifElse-1784705349118trueVal"
},
{
"source": "number-1784705480876",
"sourceHandle": "default",
"target": "ifElse-1784705441259",
"targetHandle": "trueVal",
"id": "xy-edge__number-1784705480876default-ifElse-1784705441259trueVal"
},
{
"source": "ifElse-1784705441259",
"sourceHandle": "default",
"target": "ifElse-1784705349118",
"targetHandle": "falseVal",
"id": "xy-edge__ifElse-1784705441259default-ifElse-1784705349118falseVal"
},
{
"source": "ifElse-1784705549371",
"sourceHandle": "default",
"target": "ifElse-1784705441259",
"targetHandle": "falseVal",
"id": "xy-edge__ifElse-1784705549371default-ifElse-1784705441259falseVal"
},
{
"source": "ifElse-1784705349118",
"sourceHandle": "default",
"target": "ifElse-1784705549371",
"targetHandle": "falseVal",
"id": "xy-edge__ifElse-1784705349118default-ifElse-1784705549371falseVal"
},
{
"source": "ifElse-1784705349118",
"sourceHandle": "default",
"target": "servo-1784706006110",
"targetHandle": "default",
"id": "xy-edge__ifElse-1784705349118default-servo-1784706006110default"
},
{
"source": "compare-1781659417695",
"sourceHandle": "default",
"target": "ifElse-1784705349118",
"targetHandle": "condition",
"id": "xy-edge__compare-1781659417695default-ifElse-1784705349118condition"
},
{
"source": "delay-1781661247124",
"sourceHandle": "default",
"target": "ifElse-1784705441259",
"targetHandle": "condition",
"id": "xy-edge__delay-1781661247124default-ifElse-1784705441259condition"
},
{
"source": "pulse-1781662349090",
"sourceHandle": "default",
"target": "ifElse-1784705549371",
"targetHandle": "condition",
"id": "xy-edge__pulse-1781662349090default-ifElse-1784705549371condition"
},
{
"source": "compare-1784706412713",
"sourceHandle": "default",
"target": "digitalWrite-1784706351603",
"targetHandle": "default",
"id": "xy-edge__compare-1784706412713default-digitalWrite-1784706351603default"
},
{
"source": "number-1784706432501",
"sourceHandle": "default",
"target": "compare-1784706412713",
"targetHandle": "b",
"id": "xy-edge__number-1784706432501default-compare-1784706412713b"
},
{
"source": "ifElse-1784705349118",
"sourceHandle": "default",
"target": "compare-1784706412713",
"targetHandle": "a",
"id": "xy-edge__ifElse-1784705349118default-compare-1784706412713a"
},
{
"source": "ifElse-1784705349118",
"sourceHandle": "default",
"target": "compare-1784706471481",
"targetHandle": "a",
"id": "xy-edge__ifElse-1784705349118default-compare-1784706471481a"
},
{
"source": "number-1784706479913",
"sourceHandle": "default",
"target": "compare-1784706471481",
"targetHandle": "b",
"id": "xy-edge__number-1784706479913default-compare-1784706471481b"
},
{
"source": "compare-1784706471481",
"sourceHandle": "default",
"target": "digitalWrite-1784706496201",
"targetHandle": "default",
"id": "xy-edge__compare-1784706471481default-digitalWrite-1784706496201default"
}
]
}
Buka Arduflow IDE sekarang dan implementasikan logika program di atas tanpa ribet!