6 Wheel Arduino Rover with NASA Rocker Bogie | Bluetooth Control & Live Video

How to Make a Bluetooth Rover with Rocker Bogie Mechanism Using BT Lab App (With Live Video Streaming)


Building your own Bluetooth-controlled rover is one of the most exciting DIY electronics projects, especially when it includes a rocker bogie suspension system and real-time video streaming. In this project, we demonstrate how to build a 6-wheel Bluetooth rover using the BT Lab Android app, inspired by NASA’s Curiosity Rover.

This rover is designed to handle rough and uneven terrain smoothly while providing live video feedback, making it perfect for robotics enthusiasts, students, and hobbyists.


🔧 Project Overview

In this project, we build a Bluetooth Rover / RC Car with the following key features:

📡 Bluetooth control using BT Lab App
🎥 Real-time live video streaming
🚗 6-wheel Rocker Bogie Mechanism

The rocker bogie mechanism allows all six wheels to maintain ground contact, giving the rover excellent stability and obstacle-climbing ability.

🛰️ What Is a Rocker Bogie Mechanism?

The Rocker Bogie suspension system is a passive mechanical design used in space exploration rovers like NASA’s Curiosity Rover.

Advantages:
  • Maintains traction on uneven terrain
  • Can climb obstacles nearly twice the wheel diameter
  • No springs required (simple and durable design)
  • Ideal for rough, rocky, or outdoor environments
  • The rocker bogie suspension distributes weight evenly across all six wheels.

Because of this mechanism, the rover performs exceptionally well on rough surfaces, slopes, and obstacles compared to normal 4-wheel or 2-wheel robots.

 BT Lab App – Smart Bluetooth Control with Live Video

The BT Lab Android App is used to:
  • Control rover movement via Bluetooth
  • Send real-time commands to Arduino
  • Display live video streaming from the rover
  • This combination transforms a simple Bluetooth car into a smart exploration rover.

🔰 Electronics Components

  • Arduino Nano – Main microcontroller
  • HC-06 Bluetooth Module – Wireless control
  • L298N Motor Driver – Controls 6 DC gear motors
  • 12.6V Li-ion Battery Pack with BMS – Stable power supply
  • Buzzer – Alerts and sound feedback
  • LED Lights – Front and rear lighting
  • 6 DC Gear Motors and Wheels

 The circuit diagram and Arduino code in below


/*
  =========================================================
  Project : Bluetooth Rocker Bogie Rover with BT LAB
  Author  : BT Lab
  Board   : Arduino Nano
  Driver  : L298N Motor Driver
  Control : Bluetooth (HC-06)
  
  Description:
  This code controls a 6-wheel rover using an L298N motor
  driver. Commands are received via Bluetooth and used to
  control motor direction, speed, lights, and buzzer.
  This code for BT Lab app's Default Joystick Settings


  Note:
  Modify pin numbers if your wiring is different.
  =========================================================
*/

#define ENA     3  
#define ENB     5 
#define IN1     4  
#define IN2     6  
#define IN3     7 
#define IN4     8
#define Buzzer  9 
#define Light1  10  
#define Light2  11 
#define Light3  12

String buffer ="";
int speed = 153;
int speedArray[5] = {51 , 102 , 153 , 204 , 255};


char action;

void setup() {
  Serial.begin(9600);
  pinMode(ENA , OUTPUT);
  pinMode(ENB , OUTPUT);
  pinMode(IN1 , OUTPUT);
  pinMode(IN2 , OUTPUT);
  pinMode(IN3 , OUTPUT);
  pinMode(IN4 , OUTPUT);
  pinMode(Light1 , OUTPUT);
  pinMode(Light2 , OUTPUT);
  pinMode(Light3 , OUTPUT);
  pinMode(Buzzer , OUTPUT);


}

void setupSpeed(int newSpeed){
  if(action == 'f' || action == 'b' || action == 'l' || action == 'r'){
    changeSpeed(newSpeed , newSpeed);
  }else if(action == 'a' || action == 'd'){
    changeSpeed(newSpeed/2 , newSpeed);
  }else if(action == 'c' || action == 'e'){
    changeSpeed(newSpeed , newSpeed/2);
  }

}
void setupMotors(String value){

char charValue = value.charAt(0);
String z;
int newSpeed;

switch(charValue){
    case 'z':
     z = value.substring(1);
     newSpeed = z.toInt();
     if(newSpeed <= 4){
      speed = speedArray[newSpeed];
      setupSpeed(speed);
     }
    
     break;
    case 's':
     action ='s';
     controlM(LOW , LOW , LOW , LOW);
     changeSpeed(0 ,0);
     break;
    case 'f':
     action ='f';
     controlM(HIGH , LOW , HIGH , LOW);
     changeSpeed(speed ,speed);
     break;
    case 'b':
     action ='b';
     controlM(LOW , HIGH , LOW , HIGH);
     changeSpeed(speed ,speed);
     break;
    case 'l':
     action ='l';
     controlM(HIGH , LOW , LOW , HIGH);
     changeSpeed(speed ,speed);
     break;
    case 'r':
     action ='r';
     controlM(LOW , HIGH , HIGH , LOW);
     changeSpeed(speed ,speed);
     break;
    case 'a':
     action ='a';
     controlM(HIGH , LOW , HIGH , LOW);
     changeSpeed(speed/2 , speed);
     break;
    case 'c':
     action ='c';
     controlM(HIGH , LOW , HIGH , LOW);
     changeSpeed(speed , speed/2);
     break;
    case 'd':
     action ='d';
    controlM(LOW , HIGH , LOW , HIGH);
     changeSpeed(speed/2 , speed);
     break;
    case 'e':
    action ='e';
    controlM(LOW , HIGH , LOW , HIGH);
     changeSpeed(speed , speed/2);
     break;
  }
}



void getAction(String value){
  setupMotors(value);
  lightsAndBuzzer(value);

  

}

void lightsAndBuzzer(String value){
  char val = value.charAt(0);
  switch(val){
    case 'i':
      digitalWrite(Light1 , HIGH);
      break;
    case 'j':
      digitalWrite(Light1 , LOW);
      break;
    case 'g':
      digitalWrite(Buzzer , HIGH);
      break;
    case 'h':
      digitalWrite(Buzzer , LOW);
      break;
    case 'k':
       digitalWrite(Light2 , HIGH);
      break;
    case 'm':
       digitalWrite(Light2 , LOW);
      break;
    case 'n':
       digitalWrite(Light3 , HIGH);
      break;
    case 'o':
       digitalWrite(Light3 , LOW);
      break;
  }
}

void changeSpeed(int speedB , int speedA){
  analogWrite(ENA , speedA);
  analogWrite(ENB , speedB);
}

void controlM(bool in1 , bool in2 , bool in3 , bool in4){
  digitalWrite(IN1 , in1);
  digitalWrite(IN2 , in2);
  digitalWrite(IN3 , in3);
  digitalWrite(IN4 , in4);

}

void loop() {
  if(Serial.available()){
  char data = Serial.read();

  if(data == '\n'){
    getAction(buffer);
    buffer ="";
  }else{
    buffer = buffer + data;
  }
}

}

Post a Comment

Previous Post Next Post

Slider Maximum 10 sliders