Big Trak Obstacle Avoiding Robot


Goal:

To customize the programmable toy "Big Trak" with an Arduino brain thus adding in new functionality using Arduino And creating an Obstacle Avoiding Robot.

 


The Exterior & User Interface

I began a teardown of the Big Trak to get to the interior and learned how the User Interface / keypad was wired into the Print Control Board.


 

The Inter-workings

I was able to get an understanding of how the PCB was wired to the DC motor and how it powered the wheels as well as understanding how light and sound effects were wired up as well.

 


The Old Brain.

Here is a close-up of the PCB and the main processing chip (black square). This is what processes the command from the interface to the wheels, light and speaker.

old brain

 


Breaking Down Existing Interactive Features.

This is a schematic of how everything comes together to work and power the Big Trak.

 


Introducing the New Functionality.

Now I replaced the PCB with the Arduino Board and added a Proximity Sensor in the front of the Big Trak. Also I replaced the D battery powered source with a much more efficient rechargeable set of 3 lithium ion batteries.

 


Breakdown of the New Functionality.

This is a schematic of how the new Arduino processor powers an H bridge which then powers the DC motor. Also the Proximity Sensor is seen here - hardwired to the Arduino board.

 


Hand-code & Flash the Arduino

Here we can see a good amount of code that is required to get the Arduino to execute the new commands based on its new brain and built in sensor. This code is uploaded directly from the computer to the Arduino board.

 


Summary:

The goal of this project was to take an existing device and to add some new functionality using the Arduino and some C+ code. I chose to take an old favorite toy originally released in 1979 called the Big Trak, and make some modifications. The Big Trak was a robotic toy vehicle that introduced programming distances and movements into a keypad interface that would tell the Big Trak motors what to do. I found a reproduction of the Big Trak made in 2010 that I performed a teardown to figure out how it functioned overall. The first step was to de-solder off the existing PCB from the DC Motor contacts and cut the power switch connection. Also I cut the connection to the LED and the speaker and detached the ribbon cable from the keypad. I then added in an Arduino Uno to act as the new brain along with an H Bridge that would power the DC Motors and turn the wheels. I went with 3 lithium ion batteries or 18650 batteries to power the whole thing. I added in the original slide switch to be able to cut the power and not fumble with the batteries to add and remove power. Next I added a proximity sensor that could determine distances to objects or obstacles in the path of the Big Trak and based on code make an evasive maneuver. This proximity sensor was attached to the Arduino Uno 5V and common ground as well as pins for the Trig and Echo connections. Then there was the code which basically told the Big Trak to proceed by firing the motors in a  forward direction when the distance was measured by the sensor as greater than 20 cm. In the case that the sensor registered a reading that an object was within 19 cm or under the motors would come to a stop and run the motors in reverse. The motor would then turn the vehicle about 15 degrees and proceed with the code from the beginning and go straight if the distance reading registered greater than 20 cm. In addition to make the vehicle slow down a bit from the full blast speed that was causing it to drive wildly and unable to react to receive the readings from the proximity sensor in time, I took off the jumpers on the EA and EB pins to be able to tap into the PWM functionality - or pulse width modulation and therefore select more exactly a manageable speed to run the Big Trak.

In Action:

Code:

int trigPin = 12; // trig pin of HC-SR04 int echoPin = 13; // Echo pin of HC-SR04
const int IN1 = 6;
const int IN2 = 7;
const int IN3 = 4;
const int IN4 = 5;

const int ENA = 9;
const int ENB = 3;

long duration, distance;

void setup() {

delay(2000);
Serial.begin(9600);

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT); // Pulse Width Modulation allow to control of speed
pinMode (ENB, OUTPUT); // Pulse Width Modulation allow to control of speed

// Turn off motors - Initial state
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

void loop() {
float duration, distance;
v digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // receive reflected waves
distance = (duration/2) / 29.1; // Convert to centimeters
if (distance > 20)
{
analogWrite(ENA, 45); //Control speed when moving forward
analogWrite(ENB, 45);

digitalWrite(IN1, HIGH); // Proceed forward
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
else if (distance < 21)
{
analogWrite(ENA, 60); //Control speed in reverse
analogWrite(ENB, 60);

digitalWrite(IN1, LOW); //Stop
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);

delay(350);
digitalWrite(IN1, LOW); //Move backward
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(1500);
digitalWrite(IN1, LOW); //Stop
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(1500);
digitalWrite(IN1, HIGH); //turn slightly
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(350);
}

}