Node-RED dengan Arduino (I/O Analog)
Berikut contoh program Arduino dan Node-RED untuk mengontrol input/output analog melalui komunikasi serial. Kita akan membuat sistem:
- **Arduino**: Membaca nilai analog dari potensiometer (input) dan mengirimkannya ke Node-RED. Node-RED akan mengirim nilai PWM (0-255) untuk mengontrol kecerahan LED (output analog).
### **1. Program Arduino** (Membaca Input Analog & Output PWM)
- const int potPin = A0; // Potensiometer terhubung ke pin A0
- const int ledPin = 9; // LED terhubung ke pin PWM 9
- int potValue = 0; // Nilai pembacaan potensiometer (0-1023)
- int pwmValue = 0; // Nilai PWM untuk LED (0-255)
- void setup() {
- Serial.begin(9600);
- pinMode(ledPin, OUTPUT);
- }
- void loop() {
- // Baca nilai analog dari potensiometer
- potValue = analogRead(potPin);
- // Kirim ke Node-RED dalam format "Pot:XXX"
- Serial.print("Pot:");
- Serial.println(potValue);
- // Baca perintah PWM dari Node-RED
- if (Serial.available() > 0) {
- // Baca nilai integer (0-255) dari serial
- pwmValue = Serial.parseInt();
- // Pastikan nilai dalam rentang valid
- pwmValue = constrain(pwmValue, 0, 255);
- // Terapkan ke LED
- analogWrite(ledPin, pwmValue);
- }
- delay(100); // Delay untuk stabilisasi
- }
### **2. Node-RED Flow** (Pemrosesan Data Analog)
#### **Komponen yang Dibutuhkan**:
1. `serial in` - Membaca data dari Arduino.
2. `function` - Memproses data potensiometer.
3. `chart/gauge` (dari node-red-dashboard) - Visualisasi data.
4. `slider` (dari node-red-dashboard) - Kontrol PWM.
5. `serial out` - Mengirim nilai PWM ke Arduino.
#### **Flow Configuration**:
1. **Baca Data Potensiometer**:
- Tambahkan node `serial in`:
- **Serial port**: Port Arduino (misal: `COM3` atau `/dev/ttyUSB0`).
- **Baud rate**: `9600`.
- Hubungkan ke node `function` untuk ekstraksi data:
// Fungsi: Ekstrak nilai potensiometer
let rawData = msg.payload.trim();
let data = rawData.split(":");
if (data[0] === "Pot") {
msg.payload = {
pot: parseInt(data[1]) // Konversi ke integer (0-1023)
};
}
return msg;
- Tambahkan node `chart` atau `gauge` untuk menampilkan data.
2. **Kontrol PWM LED**:
- Tambahkan node `slider` dari dashboard:
- **Range**: 0-255.
- **Step**: 1.
- Hubungkan ke node `serial out` untuk mengirim nilai ke Arduino.
#### **Contoh Flow JSON**:
```json
[
{
"id": "a1b2c3d4",
"type": "serial in",
"z": "flow",
"name": "Arduino Serial",
"serial": "arduino_port",
"x": 150,
"y": 100,
"wires": [["b1b2c3d4"]]
},
{
"id": "b1b2c3d4",
"type": "function",
"z": "flow",
"name": "Process Potentiometer",
"func": "let rawData = msg.payload.trim();\nlet data = rawData.split(\":\");\n\nif (data[0] === \"Pot\") {\n msg.payload = {\n pot: parseInt(data[1])\n };\n}\nreturn msg;",
"outputs": 1,
"x": 350,
"y": 100,
"wires": [["c1c2c3d4"]]
},
{
"id": "c1c2c3d4",
"type": "ui_chart",
"z": "flow",
"name": "Potentiometer Chart",
"group": "dashboard",
"order": 1,
"width": "6",
"height": "4",
"label": "Potentiometer Value",
"chartType": "line",
"legend": "false",
"xformat": "HH:mm:ss",
"interpolate": "linear",
"nodata": "",
"dot": false,
"ymin": "0",
"ymax": "1023",
"x": 550,
"y": 100,
"wires": []
},
{
"id": "d1d2d3d4",
"type": "serial out",
"z": "flow",
"name": "Send PWM to Arduino",
"serial": "arduino_port",
"x": 550,
"y": 200,
"wires": []
},
{
"id": "e1e2e3e4",
"type": "ui_slider",
"z": "flow",
"name": "LED Brightness",
"label": "PWM Value (0-255)",
"tooltip": "",
"group": "dashboard",
"order": 2,
"width": "6",
"height": "1",
"passthru": true,
"outs": "all",
"topic": "pwm",
"min": 0,
"max": 255,
"step": 1,
"x": 350,
"y": 200,
"wires": [["d1d2d3d4"]]
}
]
### **Cara Kerja**:
1. **Arduino**:
- Membaca nilai analog dari potensiometer (0-1023) dan mengirimnya ke Node-RED via serial.
- Menerima nilai PWM (0-255) dari Node-RED dan mengatur kecerahan LED.
2. **Node-RED**:
- Menampilkan nilai potensiometer dalam bentuk grafik atau gauge.
- Menggunakan slider untuk mengirim nilai PWM ke Arduino.
### **Instalasi Node-RED**:
1. Pastikan paket dashboard dan serialport terinstal:
2. Restart Node-RED dan akses dashboard di `http://localhost:1880/ui`.
### **Skema Rangkaian Arduino**:
- **Potensiometer**:
- Pin tengah → A0.
- Pin lainnya → 5V dan GND.
- **LED**:
- Anoda (+) → Pin 9 (PWM).
- Katoda (-) → Resistor 220Ω → GND.
### **Testing**:
- Upload program ke Arduino.
- Deploy flow Node-RED.
- Buka dashboard di `http://localhost:1880/ui`:
- Gerakkan potensiometer, nilai akan terupdate di grafik.
- Geser slider untuk mengubah kecerahan LED.
Dengan ini, Anda bisa memantau data analog dan mengontrol perangkat fisik melalui antarmuka Node-RED! 🔄💡
Comments
Post a Comment