All Terrain Modular Rover Project


Project at Purdue University

About Project:

This project is a modular payloads platform, where the payloads could include sensors, attachments, and batteries to a computer. The motion of the platform is similar to that of robotic car and is controlled via Bluetooth. Similar to an RC car, the platform has suspensions for every wheel. There are four 12V DC motors connected to each wheel that perform as a four wheel drive. These motors are controlled using an Arduino Mega micro-controller embedded on the platform. The Arduino obtains its instructions from a computer that is connected via Bluetooth. The platform also has an onboard micro-computer – The Raspberry Pi. The Raspberry Pi is used for processing data received from Audio/Video packages. The Raspberry Pi will also send and receive data from the Arduino. The modular payloads are to be plug-and-play. The user can replace one payload module for another and will be able to receive data from it. Other components on this platform are modular, including the walls and a battery bay. All modular
pieces of the platform are connected with quarter turn fasteners. With one or more depending if a conformal surface twist of the fastener, the user can unmount the payload and replace it with a different package.

Rover Isometric View
Rover CAD Drawing
Rover CAD Exploded View

Some Arduino Code Excerpts:

// Bluetooth and IR Readings

int pin = 0; // sharp IR sensor
float reading;
//int pin1 = 5; // potentiometer for time delay
float reading2 = 0;
int i;

void setup(){
  Serial.begin(9600);
}

void loop(){
  //I take five delayed readings and average them
  for(i = 0; i < 5; i++){
  reading = analogRead(pin);
  reading = (243.46 *  (1 / reading));
  reading2 = reading2 + reading;
  delay(2);
}  
  Serial.println(100 * (reading2 / 5));
  reading2 = 0;
  delay(100);
}
// Motor Control

char val;
int LeftMotorPin = 7;
int RightMotorPin = 13;

void setup() {
  pinMode(LeftMotorPin, OUTPUT);
  pinMode(RightMotorPin, OUTPUT);
  Serial.begin(9600);
  digitalWrite(LeftMotorPin, LOW);
  digitalWrite(RightMotorPin, LOW);
}

void loop() {
  if(Serial.available())
  {
  val = Serial.read();
  }
  if(val == 'L')
  { 
    digitalWrite(LeftMotorPin, HIGH);
    digitalWrite(RightMotorPin, LOW);
  }
  else if(val == 'R')
  {
    digitalWrite(RightMotorPin, HIGH);
    digitalWrite(LeftMotorPin, LOW);
  }
  else if(val == 'F')
  { 
    digitalWrite(RightMotorPin, HIGH);
    digitalWrite(LeftMotorPin, HIGH);
  }
  delay(100);

}