Diagram Sistem & Alur Kerja
Robot ini menggunakan tiga sensor api (kiri, tengah, kanan) untuk mendeteksi lokasi api. Saat api terdeteksi, robot bergerak mendekati api dan menyiramkan air melalui pompa mini serta servo yang menggerakkan selang ke kiri-kanan.
A. Daftar Bahan yang Dibutuhkan
| No | Nama Barang | Jumlah |
|---|---|---|
| 1 | Arduino Uno R3 | 1 |
| 2 | Buzzer Aktif 5 Volt | 1 |
| 3 | Pompa Air Mini 5V | 1 |
| 4 | LCD OLED 0.96 Inch | 1 |
| 5 | Sensor Api | 3 |
| 6 | Roda Motor DC | 2 |
| 7 | Kabel Jumper Male to Male | 10 |
| 8 | Kabel Jumper Male to Female | 10 |
| 9 | Kabel Jumper Female to Female | 10 |
| 10 | Breadboard 400 Lubang | 1 |
| 11 | Servo MG90S | 1 |
| 12 | Baterai 18650 | 3 |
| 13 | Tempat Baterai 18650 (isi 2) | 1 |
| 14 | Tempat Baterai 18650 (isi 1) | 1 |
| 15 | Sakelar Kecil 2 Pin | 1 |
| 16 | 1 Channel Relay Module 5V | 1 |
| 17 | Chasis Mobil 4WD | 1 |
| 18 | Selang 5 mm | 5 meter |
| 19 | Expansion Shield / Board Arduino Nano R3 | 1 |
| 20 | LED RGB Arduino | 3 |
| 21 | Adaptor 9V 2A Port Arduino | 1 |
Catatan: Roda Motor DC dibeli 2 karena sudah ada 2 unit sebelumnya. Driver motor L298N tidak dibeli karena masih tersedia. Chasis mobil bersifat opsional karena sudah memiliki versi 2WD, namun direncanakan upgrade ke 4WD dengan rangka yang lebih besar.
B. Estimasi Harga Semua Barang
| No | Barang | Harga Satuan | Qty | Subtotal (Rp) |
|---|---|---|---|---|
| 1 | Arduino Uno R3 | 110.000 | 1 | 110.000 |
| 2 | Buzzer Aktif 5V | 6.000 | 1 | 6.000 |
| 3 | Pompa Air Mini 5V | 10.000 | 1 | 10.000 |
| 4 | LCD OLED 0.96" | 26.500 | 1 | 26.500 |
| 5 | Sensor Api | 5.400 | 3 | 16.200 |
| 6 | Roda Motor DC | 16.000 | 2 | 32.000 |
| 7 | Kabel Jumper M-M | 8.000 | 1 | 8.000 |
| 8 | Kabel Jumper M-F | 8.000 | 1 | 8.000 |
| 9 | Kabel Jumper F-F | 8.000 | 1 | 8.000 |
| 10 | Breadboard 400 lubang | 6.360 | 1 | 6.360 |
| 11 | Servo MG90S | 28.750 | 1 | 28.750 |
| 12 | Baterai 18650 | 15.000 | 3 | 45.000 |
| 13 | Tempat baterai (2 slot) | 8.050 | 1 | 8.050 |
| 14 | Tempat baterai (1 slot) | 5.000 | 1 | 5.000 |
| 15 | Sakelar kecil 2 pin | 1.300 | 1 | 1.300 |
| 16 | Relay 1 ch 5V | 5.512 | 1 | 5.512 |
| 17 | Chasis Mobil 4WD | 95.000 | 1 | 95.000 |
| 18 | Selang 5mm | 3.000 | 5 | 15.000 |
| 19 | Expansion Shield Nano | 30.000 | 1 | 30.000 |
| 20 | LED RGB | 5.000 | 3 | 15.000 |
| 21 | Adaptor 9V 2A | 30.400 | 1 | 30.400 |
| TOTAL ESTIMASI | Rp 520.872 | |||
C. Kode Program Arduino
Salin kode berikut ke IDE Arduino dan pastikan library Servo.h sudah tersedia.
#include <Servo.h>
// Define flame sensor pins
#define FLAME_SENSOR_LEFT A0
#define FLAME_SENSOR_CENTER A1
#define FLAME_SENSOR_RIGHT A2
// Define motor driver pins
#define MOTOR_L1 5 // Left Motor Forward
#define MOTOR_L2 6 // Left Motor Backward
#define MOTOR_R1 9 // Right Motor Forward
#define MOTOR_R2 10 // Right Motor Backward
// Define relay for water pump
#define RELAY_PIN 7
// Define servo motor pin
#define SERVO_PIN 3
// Create Servo object
Servo waterServo;
// Flame sensor threshold
#define FIRE_DETECTED_THRESHOLD 800 // Adjust based on sensor readings
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Set motor pins as output
pinMode(MOTOR_L1, OUTPUT);
pinMode(MOTOR_L2, OUTPUT);
pinMode(MOTOR_R1, OUTPUT);
pinMode(MOTOR_R2, OUTPUT);
// Set relay as output
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Ensure relay (pump) is OFF at startup
// Initialize servo motor
waterServo.attach(SERVO_PIN);
waterServo.write(90); // Set initial servo position to center
// Set flame sensor pins as input
pinMode(FLAME_SENSOR_LEFT, INPUT);
pinMode(FLAME_SENSOR_CENTER, INPUT);
pinMode(FLAME_SENSOR_RIGHT, INPUT);
Serial.println("🚀 Fire Fighting Robot Initialized...");
}
void loop() {
// Read flame sensor values
int flameLeft = analogRead(FLAME_SENSOR_LEFT);
int flameCenter = analogRead(FLAME_SENSOR_CENTER);
int flameRight = analogRead(FLAME_SENSOR_RIGHT);
// Print sensor values to Serial Monitor
Serial.print("Flame Left: ");
Serial.print(flameLeft);
Serial.print(" | Flame Center: ");
Serial.print(flameCenter);
Serial.print(" | Flame Right: ");
Serial.println(flameRight);
// Check flame detection
if (flameCenter < FIRE_DETECTED_THRESHOLD) {
Serial.println("🔥 Fire Detected at Center! Moving Forward...");
moveForward();
activateWaterPump();
}
else if (flameLeft < FIRE_DETECTED_THRESHOLD) {
Serial.println("🔥 Fire Detected at Left! Turning Left...");
turnLeft();
activateWaterPump();
}
else if (flameRight < FIRE_DETECTED_THRESHOLD) {
Serial.println("🔥 Fire Detected at Right! Turning Right...");
turnRight();
activateWaterPump();
}
else {
Serial.println("✅ No Fire Detected. Stopping...");
stopMotors();
deactivateWaterPump(); // Ensure pump is OFF when no fire is detected
}
delay(500); // Delay for stability
}
// Function to move forward
void moveForward() {
digitalWrite(MOTOR_L1, HIGH);
digitalWrite(MOTOR_L2, LOW);
digitalWrite(MOTOR_R1, HIGH);
digitalWrite(MOTOR_R2, LOW);
}
// Function to turn left
void turnLeft() {
digitalWrite(MOTOR_L1, LOW);
digitalWrite(MOTOR_L2, HIGH);
digitalWrite(MOTOR_R1, HIGH);
digitalWrite(MOTOR_R2, LOW);
delay(500); // Adjust timing
stopMotors();
}
// Function to turn right
void turnRight() {
digitalWrite(MOTOR_L1, HIGH);
digitalWrite(MOTOR_L2, LOW);
digitalWrite(MOTOR_R1, LOW);
digitalWrite(MOTOR_R2, HIGH);
delay(500); // Adjust timing
stopMotors();
}
// Function to stop motors
void stopMotors() {
digitalWrite(MOTOR_L1, LOW);
digitalWrite(MOTOR_L2, LOW);
digitalWrite(MOTOR_R1, LOW);
digitalWrite(MOTOR_R2, LOW);
}
// Function to activate water pump and move servo
void activateWaterPump() {
Serial.println("🚰 Activating Water Pump...");
digitalWrite(RELAY_PIN, HIGH); // Turn ON the water pump
// Move the servo from left to right
for (int pos = 60; pos <= 120; pos += 5) {
waterServo.write(pos);
delay(100);
}
// Move the servo from right to left
for (int pos = 120; pos >= 60; pos -= 5) {
waterServo.write(pos);
delay(100);
}
delay(2000); // Pump stays on for 2 seconds
deactivateWaterPump(); // Turn off the water pump
}
// Function to deactivate water pump
void deactivateWaterPump() {
Serial.println("✅ Deactivating Water Pump...");
digitalWrite(RELAY_PIN, LOW); // Turn OFF the water pump
waterServo.write(90); // Reset servo to center position
}