ILUSTRASI RANGKAIAN
Daftar Bahan:
1. Arduino Uno R3
2. Motor Control Shield for Arduino (AFMotor Shield V1)
3. Bluetooth HC-05
4. 4x DC Gear Motor / TT Motor lengkap dengan ban
5. Step Down Buck Converter LM2596
6. Holder Baterai 18650 (3 slot)
7. Baterai 18650 (3 buah)
Pengaturan Tegangan LM2596:
1. Susun 3 baterai 18650 secara seri → menghasilkan tegangan total sekitar 11.1V – 12.6V
2. Sambungkan kabel dari holder:
- Kabel + (merah) → ke IN+ LM2596
- Kabel – (hitam) → ke IN– LM2596
3. Hubungkan voltmeter digital ke OUT+ dan OUT– LM2596
4. Putar trimpot (pakai obeng minus kecil) perlahan hingga voltmeter menunjukkan sekitar 9V
(boleh sedikit lebih, misal 9.2V, tapi jangan lebih dari 9.5V untuk menjaga suhu motor)
5. Setelah tegangan stabil, sambungkan output LM2596 ke Motor Shield:
- OUT+ LM2596 → ke +M Motor Shield
- OUT– LM2596 → ke GND Motor Shield
KONEKSI PIN DAN WIRING:
Power:
Holder baterai (+) → IN+ LM2596
Holder baterai (–) → IN– LM2596
OUT– LM2596 → GND Motor Shield
OUT+ LM2596 → +M Motor Shield
Motor (Sesuai Ilustrasi):
M1 → Motor Kiri Belakang
M2 → Motor Kiri Depan
M3 → Motor Kanan Belakang
M4 → Motor Kanan Depan
⚠️ Jika arah gerak motor terbalik, tukar posisi kabel pada terminal Mx
Bluetooth HC-05:
VCC → 5V Motor Shield
GND → GND Motor Shield
TX HC-05 → D0 Arduino (RX)
RX HC-05 → D1 Arduino (TX)
⚠️ RX Arduino tidak boleh disambung saat upload program. Lepas sambungan RX sementara saat upload sketch, lalu sambungkan kembali
Code Arduino:
#include <AFMotor.h>
// Deklarasi motor
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);
// Pin Lampu, Klakson, dan Ekstra
const int frontLights = A0;
const int backLights = A1;
const int horn = A2;
const int extra = A3;
// Variabel untuk perintah dan kecepatan
char command;
int speedVal = 255; // default 100%
// ⬇️ Variabel timeout untuk deteksi disconnect
unsigned long lastCommandTime = 0;
const unsigned long timeoutDuration = 1000; // 1 detik
bool motorsRunning = false;
void setup() {
Serial.begin(9600);
// Inisialisasi pin output
pinMode(frontLights, OUTPUT);
pinMode(backLights, OUTPUT);
pinMode(horn, OUTPUT);
pinMode(extra, OUTPUT);
Stop();
}
void loop() {
if (Serial.available()) {
command = Serial.read();
handleCommand(command);
lastCommandTime = millis(); // catat waktu terakhir command diterima
motorsRunning = true;
}
// Cek timeout jika tidak ada data masuk dalam durasi tertentu
if (motorsRunning && (millis() - lastCommandTime > timeoutDuration)) {
Stop();
motorsRunning = false;
// Matikan juga fitur lain kalau perlu
// digitalWrite(horn, LOW);
// digitalWrite(extra, LOW);
// digitalWrite(frontLights, LOW);
// digitalWrite(backLights, LOW);
}
}
void handleCommand(char cmd) {
switch (cmd) {
// Gerakan
case 'F': forward(); break;
case 'B': back(); break;
case 'L': left(); break;
case 'R': right(); break;
case 'G': forwardLeft(); break;
case 'I': forwardRight(); break;
case 'H': backLeft(); break;
case 'J': backRight(); break;
case 'S': Stop(); break;
// Lampu depan A0
case 'W': digitalWrite(frontLights, HIGH); break;
case 'w': digitalWrite(frontLights, LOW); break;
// Lampu belakang A1
case 'U': digitalWrite(backLights, HIGH); break;
case 'u': digitalWrite(backLights, LOW); break;
// Klakson A2
case 'V': digitalWrite(horn, HIGH); break;
case 'v': digitalWrite(horn, LOW); break;
// Ekstra A3
case 'X': digitalWrite(extra, HIGH); break;
case 'x': digitalWrite(extra, LOW); break;
// Kecepatan
case '0' ... '9': speedVal = map(cmd - '0', 0, 9, 0, 90); speedVal = speedVal * 255 / 100; break;
case 'q': speedVal = 255; break; // 100%
// Stop all
case 'D':
Stop();
digitalWrite(frontLights, LOW);
digitalWrite(backLights, LOW);
digitalWrite(horn, LOW);
digitalWrite(extra, LOW);
break;
}
}
// Fungsi: Maju lurus
void forward() {
// Semua motor maju dengan kecepatan speedVal
motor1.setSpeed(speedVal); motor1.run(FORWARD);
motor2.setSpeed(speedVal); motor2.run(FORWARD);
motor3.setSpeed(speedVal); motor3.run(FORWARD);
motor4.setSpeed(speedVal); motor4.run(FORWARD);
}
// Fungsi: Mundur lurus
void back() {
// Semua motor mundur dengan kecepatan speedVal
motor1.setSpeed(speedVal); motor1.run(BACKWARD);
motor2.setSpeed(speedVal); motor2.run(BACKWARD);
motor3.setSpeed(speedVal); motor3.run(BACKWARD);
motor4.setSpeed(speedVal); motor4.run(BACKWARD);
}
// Fungsi: Belok kiri di tempat (berputar ke kiri)
void left() {
// Roda kiri mundur, roda kanan maju → mobil berputar ke kiri
motor1.setSpeed(speedVal); motor1.run(BACKWARD);
motor2.setSpeed(speedVal); motor2.run(BACKWARD);
motor3.setSpeed(speedVal); motor3.run(FORWARD);
motor4.setSpeed(speedVal); motor4.run(FORWARD);
}
// Fungsi: Belok kanan di tempat (berputar ke kanan)
void right() {
// Roda kiri maju, roda kanan mundur → mobil berputar ke kanan
motor1.setSpeed(speedVal); motor1.run(FORWARD);
motor2.setSpeed(speedVal); motor2.run(FORWARD);
motor3.setSpeed(speedVal); motor3.run(BACKWARD);
motor4.setSpeed(speedVal); motor4.run(BACKWARD);
}
// Fungsi: Maju serong ke kiri
void forwardLeft() {
// Roda kiri lebih lambat dari roda kanan → maju ke kiri
motor1.setSpeed(speedVal/2); motor1.run(FORWARD);
motor2.setSpeed(speedVal/2); motor2.run(FORWARD);
motor3.setSpeed(speedVal); motor3.run(FORWARD);
motor4.setSpeed(speedVal); motor4.run(FORWARD);
}
// Fungsi: Maju serong ke kanan
void forwardRight() {
// Roda kanan lebih lambat dari roda kiri → maju ke kanan
motor1.setSpeed(speedVal); motor1.run(FORWARD);
motor2.setSpeed(speedVal); motor2.run(FORWARD);
motor3.setSpeed(speedVal/2); motor3.run(FORWARD);
motor4.setSpeed(speedVal/2); motor4.run(FORWARD);
}
// Fungsi: Mundur serong ke kiri
void backLeft() {
// Roda kiri lebih lambat dari roda kanan → mundur ke kiri
motor1.setSpeed(speedVal/2); motor1.run(BACKWARD);
motor2.setSpeed(speedVal/2); motor2.run(BACKWARD);
motor3.setSpeed(speedVal); motor3.run(BACKWARD);
motor4.setSpeed(speedVal); motor4.run(BACKWARD);
}
// Fungsi: Mundur serong ke kanan
void backRight() {
// Roda kanan lebih lambat dari roda kiri → mundur ke kanan
motor1.setSpeed(speedVal); motor1.run(BACKWARD);
motor2.setSpeed(speedVal); motor2.run(BACKWARD);
motor3.setSpeed(speedVal/2); motor3.run(BACKWARD);
motor4.setSpeed(speedVal/2); motor4.run(BACKWARD);
}
// Fungsi: Stop semua motor
void Stop() {
motor1.setSpeed(0); motor1.run(RELEASE);
motor2.setSpeed(0); motor2.run(RELEASE);
motor3.setSpeed(0); motor3.run(RELEASE);
motor4.setSpeed(0); motor4.run(RELEASE);
}
* ⚠️upload code wajib lepas koneksi RX dari HC-05 ke mainboard, biar gak konflik.
Fitur-Fitur:
✅ Lampu depan
✅ Lampu belakang
✅ Klakson
✅ Ekstra
✅ Maju lurus
✅ Belok kiri di tempat (berputar ke kiri)
✅ Belok kanan di tempat (berputar ke kanan)
✅ Maju serong ke kiri
✅ Maju serong ke kanan
✅ Mundur serong ke kiri
✅ Mundur serong ke kanan
✅ Stop semua motor
✅ Kontrol Kecepatan Dinamis
✅ Auto Stop saat Bluetooth Disconnect
✅ Kompatibel dengan aplikasi Android Bluetooth RC Control
LED disusun secara terpisah (paralel), masing-masing dengan resistor sendiri.
Rangkaian dihubungkan ke pin Analog 0 (A0) pada Motor Control Shield for Arduino.
Anoda (kaki panjang) LED → ke resistor 100Ω, lalu ke pin A0
Katoda (kaki pendek) LED → langsung ke GND
Jika menggunakan 2 LED, masing-masing harus memiliki resistor 100Ω sendiri.
Jika menggunakan 1 LED saja, tetap harus menggunakan 1 resistor 100Ω.
Kalau pakai LED Oranye? Bisa!
Gunakan resistor 150Ω untuk tiap LED
Disusun terpisah (paralel) sama seperti LED putih
Lampu Belakang:
Gunakan 2 LED merah bening 5mm
Disusun terpisah, masing-masing diberi resistor 150Ω–220Ω Sebelum terhubung ke pin A1
Klakson:
Untuk klason, pakai Buzzer 5V dan langsung disambungkan ke pin A2
Ekstra:
Bisa digunakan untuk lampu parkir / aksesoris lainnya pada pin A3
Gunakan LED 5mm warna bebas (merah, putih, oranye dll)
Masing-masing diberi resistor sesuai warna:
Putih → 100Ω
Oranye → 150Ω
Biru, Ungu → 100Ω–150Ω
Hijau, Kuning, Merah → 150Ω–220Ω
Susunan tetap terpisah (paralel) seperti lampu depan/belakang
Kalau tidak mau ribet, bisa beli LED 5V (kalau ada)




0 $type={blogger}:
Posting Komentar