Simpan BITCOIN mu untuk masa depan. Ayo menambang dan GRATIS.

[Lengkap] Arduino RC Car Bluetooth

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

Lampu Depan:


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}: