Menggunakan Node-RED & Arduino Uno/Nano
Berikut ini langkah-langkah pembuatan alat penggerak kamera menggunakan Node-RED dan Arduino Uno.
1. Siapkan rangkaian Arduino seperti berikut.
Ada 4 jenis komponen yang diperlukan dalam rangkaian di atas:
- Arduino (bisa Uno/Nano, atau lainnya)
- Driver Motor (bisa L298 atau lainnya )
- Motor Encoder
- Limit Switch (LS1, LS2)
Keterangan rangkaian:
- Arduino digunakan untuk membaca data posisi Encoder, mengirimkan datanya melalui komunikasi serial dan menerima data dari komunikasi serial untuk menggerakkan Motor.
- Driver Motor digunakan untuk menguatkan sinyal Arduino agar mampu menggerakkan Motor.
- Motor Encoder digunakan untuk menggerakkan kamera dan memberikan data posisi.
- Limit Switch LS1 dan LS2 ditempatkan di ujung-ujung rel, digunakan sebagai pembatas gerakan kamera, menghentikan Motor, dan khusus untuk LS1, digunakan sebagai titik 0 Encoder.
Koneksi kaki I/O Arduino:
- D2 terhubung ke output E1 Encoder
- D3 terhubung ke output E2 Encoder
- D4 terhubung ke LS1, yang memutus/hubungkan D4 ke Ground
- D5 terhubung ke LS2, yang memutus/hubungkan D5 ke Ground
- D8 terhubung ke IN1 L293
- D9 terhubung ke IN2 L293
- D10 terhubung ke Enable L293
File unduhan:
- Teman-teman bisa mengunduh file Proteus di atas, di link ini: file Proteus
2. Buat program Arduino seperti berikut:
#include <Encoder.h>Encoder myEnc(2, 3);unsigned long b = 0;int ena = 0;int in1 = 0; //cwint in2 = 0; //ccwvoid setup() {Serial.begin(9600);pinMode(4, INPUT_PULLUP);//ls1pinMode(5, INPUT_PULLUP);//ls2pinMode(8, OUTPUT);//in1pinMode(9, OUTPUT);//in2pinMode(10, OUTPUT);//ena}void loop() {long a = myEnc.read();if (millis() - b >= 100) {Serial.println(a);b = millis();}if (!digitalRead(4)) {myEnc.write(0);in2 = 0;}if (!digitalRead(5)) {in1 = 0;}digitalWrite(8, in1);digitalWrite(9, in2);analogWrite(10, ena);}void serialEvent() {while (Serial.available()) {int c = Serial.parseInt();int d = Serial.parseInt();int e = Serial.parseInt();if (Serial.read() == char(13)) {in1 = c;in2 = d;ena = e;}}}
Keterangan program Arduino:
- Program di atas pada intinya membaca sensor Encoder, mengirimkan data Encoder ke port Serial, kemudian mengambil data dari port Serial untuk mengatur gerakan Motor DC melalui Driver L298.
- Ada 3 variabel untuk mengatur motor DC melalui Driver L298, yaitu in1, in2 dan ena. Variabel in1 dan in2 digunakan untuk mengatur arah putaran. Apabila in1 = 1 dan in2 = 0, maka arah putaran akan searah jarum jam (cw), sebaliknya apabila in1 = 0 dan in2 = 1, maka arah putaran akan berlawanan jarum jam (ccw). Variabel ena digunakan untuk mengatur besarnya kecepatan, yang dibuat dengan sinyal PWM. Semakin besar nilai PWM (dari 0 - 255), semakin besar kecepatan yang dihasilkan.
- Di samping sensor Encoder dan Driver Motor, ada 2 buah Limit Switch (LS1 dan LS2), yang digunakan untuk menghentikan motor, dan khusus untuk LS1, apabila aktif, akan mereset nilai Encoder, menggunakan instruksi myEnc.write(0). Kemudian ketika motor berhenti karena menabrak Limit Switch, maka agar motor bisa digerakkan ke arah yang berlawanan, maka penghentian motor dilakukan dengan membuat 0, variabel arah (in1 atau in2) yang saat itu sedang bernilai 1.
File unduhan:
- Teman-teman bisa mengunduh file program Arduino di atas, di link ini: program Arduino
- Program Arduino di atas memerlukan library Encoder. Teman-teman bisa mengunduh file library Encoder di link ini: library Encoder
3. Buat program Node-RED seperti berikut:
Keterangan program Node-RED:
- Program Node-RED di atas terdiri dari 17 node:
- node serial in (Terima)
- node mqtt in (posisiKamera)
- node mqtt in (pwmKamera)
- node mqtt out (enkoderKamera)
- node function (Number)
- node ui dashboard (Slider Posisi)
- node ui dashboard (Slider PWM)
- nodeui dashboard (Gauge Posisi)
- node mqtt out (enkoderKamera)
- node join
- node function (String)
- node filter
- node inject (0,1,255)
- node inject (1,0,255)
- node inject (0,0,255)
- node debug (msg.payload)
- node serial out (Kirim)
- Flow atau program Node-RED di atas berjalan sebagai berikut: data Encoder dari Arduino, yang dikirimkan melalui komunikasi serial, diterima di node serial in (Terima) dalam bentuk tipe String.
- Agar bisa ditampilkan di Dashboard dalam bentuk Gauge Posisi, tipe String ini harus diubah menjadi Integer, dengan bantuan node function (Number).
- Agar nilai Encoder ini juga bisa ditampilkan di HP, digunakan node mqtt out (enkoderKamera) untuk mengirimkan data enkoder ke MQTT Broker.
- Berikutnya, untuk keperluan pengaturan gerakan motor, 2 buah node mqtt in (posisiKamera dan pwmKamera) digunakan untuk mendapatkan data dari HP melalui komunikasi MQTT, dan mengirimkan datanya berturut-turut ke node Slider Posisi dan PWM.
- Diinginkan data posisi dan data PWM tersebut dapat dikirimkan melalui komunikasi serial dengan format data: "arah1,arah2,pwm", di mana variabel arah1 hanya akan bernilai 1 apabila data posisi yang diterima nilainya lebih besar dari nilai Encoder.
- Nilai variabel arah2 berkebalikan dengan nilai arah1. Agar data yang digabungkan dengan node join tersebut dapat diubah tipe datanya menjadi String, digunakan bantuan node function String.
- Node filter ditambahkan di sini, agar data yang dikirimkan ke komunikasi serial hanyalah data yang berbeda dengan data sebelumnya. Apabila data tidak berubah, maka tidak akan dilakukan pengiriman data.
- Node debug (msg.payload) digunakan untuk menampilkan data yang akan dikirimkan ke komunikasi serial, dengan bantuan node serial out (Kirim).
- Untuk tujuan pengetesan, digunakan 3 buah node inject. Node inject pertama: 0,1,255, akan membuat Motor berputar ccw, dengan pwm 255. Node inject kedua: 1,0,255, akan membuat Motor berputar cw, dengan pwm 255. Node inject ketiga: 0,0,255, aan membuat Motor berhenti berputar.
File unduhan:
- Teman-teman dapat mengunduh program Node-RED di atas di link ini: program Node-RED
- Untuk membuka program Node-RED tersebut, buka Node-RED di localhost, klik pada menu yang berada di pojok kanan atas, pilih Import, tekan tombol select a file to import, arahkan lokasi pencarian di file program yang sudah diunduh.
4. Buat program MIT App Inventor seperti berikut:
Keterangan program App Inventor:
- Ada 2 tampilan pada program App Inventor, yaitu tampilan Designer, yang dapat digunakan untuk menempatkan objek-objek, baik yang terlihat oleh pengguna (seperti Label, Button, Slider, dll.), maupun yang tersembunyi (seperti mqtt contohnya). Tampilan kedua dinamai Block, yang digunakan untuk memprogram objek-objek yang telah ditempatkan di tampilan Designer. Terlihat pada gambar di atas, ada 5 subrutin program, yang berturut-turut berisi:
- Subrutin when mqtt.ConnectionStateChanged: Subrutin ini digunakan untuk memeriksa apakah mqtt broker sudah terhubung, jika belum terhubung, maka diminta untuk menekan tombol connect, yang juga membuat aksi subscribe ke topic enkoderKamera.
- Subrutin when mqtt.MessageReceived: Subrutin ini digunakan untuk mengambil data apabila topic yang di-subscribe (enkoderKamera) mempublish data. Data yang diambil tersebut kemudian ditampilkan di Label dan Slider Encoder.
- Subrutin when button1.click: Subrutin ini digunakan untuk memutus/menghubungkan koneksi ke MQTT Broker dengan penekanan tombol.
- Subrutin when Slider.PositionChanged: Subrutin ini digunakan untuk mempublish data melalui MQTT dengan topic pwmKamera.
- Subrutin when Slider2.PositionChanged: Subrutin ini digunakan untuk mempublish data melalui MQTT dengan topic posisiKamera.
- Program App Inventor di atas membutuhkan tambahan ekstensi mqtt. Unduh file ekstensi mqtt di link berikut ini: fileExtensiMQTT. Untuk menambahkan file ekstensi tersebut ke program App Inventor, buka Extension yang ada di bagian paling bawah dari Palette, dan kemudian tekan tombol Import Extension, dan arahkan ke lokasi file unduhan.
- Teman-teman dapat mengunduh program MIT App Inventor seperti gambar di atas di link ini: program App Inventor (aia)
- Untuk file aplikasi hasil Build Android apk program di atas dapat diunduh di link ini: program aplikasi (apk)
5. Berikut ini video pembuatan dan hasil simulasinya:
6. Berikut ini video hasil implementasinya:
Tidak ada komentar:
Posting Komentar