Introduction: Blitzkrieg: the Bluetooth Controlled 110lb Combat Robot.

We all loved watching 'Robowars' a serial TV show. The sheer sound of metal clashing against metal, robots being chucked about by the arena flipper, sparks being thrown up by Dead Metal, being paraded around by Killalot, getting torched a bit and having Mr Psycho's hammer make a nice loud noise on the shell were some of the thrills I used to get on watching the show. But what if.....I could build one and really be in the midst of it??? 

On completing my High School and having passed out of 10th Grade, I decided to build a battle-bot. It took me months of research and hard work, to build a war machine. Now in the 11th Grade ( Age 17 ) the machine was ready for battle, created with the primary aim of destruction.We chose the name ‘Blitzkrieg' for the war machine because of its nimbleness, speed and strength which gives it an advantage over its opponents.

The ' Blitzkrieg ' robot is a middle weight ( 110lb/ 50 Kg) shell spinner robot. It produces a staggering 40 Nm of torque and has a top speed of 8 mph. The main feature of this robot is that it is controlled through bluetooth. The ' Blitzkrieg ' can be operated from any Laptop, Computer or Android Phone. We were awarded the ' Most Innovative ' title for the use of Bluetooth in the robot at the Indian Institute of Technology ( IIT ) Mumbai's techfest.

This instructable is a guide on how I built the ' Blitzkrieg ' robot. Instructions for making a similar bluetooth controlled robot is also provided in this instructable.


Step 1: Parts of the Robot :

Blitzkrieg robot can be divided into the following sections :

1. Body and Armor.

2. Drive System.

3. Weapons.

4. Electronics.

5. Batteries.

The following steps will explain the building of each section of the  Blitzkrieg  Robot.

Step 2: 1. Body and Armor :

The entire chassis and armor of the robot is made of steel. The base plate (chassis) of the robot is 50cms x 50cms x 1cm steel sheet. The base plate is only 2.5cms above the ground. Being heavy and closely situated to the ground, the robot has a low centre of gravity.

The robot also features a rotating armor (Shell). The armor is cylindrical in shape. It weighs 42lbs (19Kgs) and is made of 0.3 cm thick steel sheet. It is supported by a frame made of steel bars which are 1cm thick and 3cms broad. The cylindrical shape of the armor helps it to deflect attacks on it by other ramming robots. 

For cutting these parts a plasma cutter was used. The finishing touches were given with the help of a grinding machine.

Step 3: 2. Drive System :

The drive system of ' Blitzkrieg ' is its most powerful weapon. Its drive system is very robust and reliable and delivers huge amounts of torque. During our robot fights, we rely 80% on the drive system and only 20% on the weapon.
The following are the parts of Blitzkrieg's drive system :- 

1. Motors :

The ' Blitzkrieg' features an all wheel drive (4x4) and is powered by four 12v 300watts motors. Each motor is of 2000rpm and has a stall torque of 25kgs/cm. The unique feature of these motors is that it delivers very high initial torque. 

2. Gears :

The power is transmitted to the wheels through gears of the ratio 4:1. This ratio gives the ' Blitzkrieg ' a deadly combination of speed, acceleration and torque. This robot can easily carry an additional load of about 80 Kgs. 

3. Wheels :

The wheels play a very crucial role in the construction of a combat robot. If you do not select the right type of wheels, the high torque will make it ineffective in its attack or defense as the wheels will just keep skidding or after getting an initial inertia, you will not be able to maneuvre your robot to the intended destination. For the ' Blitzkrieg ' we have used industrial grade solid rubber wheels, each capable of carrying a load of 150 Kgs. The use of soft compound, rubber wheels provides a lot of friction and prevents the wheels from skidding.

Step 4: 3. Weapons :

The primary weapon of  ' Blitzkrieg ' is its 19 Kgs. spinning  shell ( Armor ) . The  armor spins at around 600 rpm at its peak. Being heavy and spinning at a very high rpm, the rotating armor acts as a flywheel, storing huge kinetic energy.

The edges of the armor is fitted with teeth for ripping apart the opponent's armor. These teeth are made of hardened tool steel.

The armor is powered with a 12v 400w motor. The armor has directly been attached to the motor shaft. (However I would like to advise here, that one should not  attach the motors directly to the armor; as during attacks, the motor bears all the brunt of the attack and the armor can even get detached from the motor). Hence my advice is to use a V-Belt pulley design so as to protect the precious motor and achieve higher angular acceleration.

The ' Blitzkrieg ' also features interchangeable weaponry. A Shell spinner combat robot is particularly weak against powerful rammers and wedge robots. So to tackle this issue, we made a wedge of steel sheet of 0.3cms thick, which could be screwed onto our armor. We used this wedge against ramming robots and robots having powerful drums as their weapon. In this way we negated the effects of the powerful drums which would just spin on our wedge. At the same time with our high torque, we would ram the robot wherever we wanted to and the drums of these robots were made ineffective.    


Step 5: 4. Electronics and Schematic Diagram:

The best feature of the ' Blitzkrieg ' robot is that it is controlled by a bluetooth. The robot can be controlled by any laptop, computer or android phone having a bluetooth connectivity. The use of bluetooth ensures a secure and high-speed connection between the robot and the computer. Bluetooth prevents radio interference caused due to other rc controllers of robots. The advantage of using bluetooth is that unlike other RC transmitters and recievers we are not limited by the number of channels. 

The same bluetooth  system can also be applied to other robots of smaller dimensions:

The following are the parts needed for the electronics :-

1. Arduino Uno :
The Arduino Uno serves as the microprocessor for the ' Blitzkrieg '. One can also use an Arduino Mega instead of the Uno if more controls are required.

2. Bluetooth Tranceiver Chip ( Serial Bluetooth Modem ) :
I used the following bluetooth transciever (link).This module is cheap and has a lot of features to     fiddle around with.The bluetooth module from Sparkfun can also be used. The Sparkfun Module will not require a level shifter.

3. The Level Shifter :
The arduino sends serial output of 5v through the Tx pin, whereas the bluetooth transceiver module uses    3.3v logic. So a voltage divider circuit ( level shifter ) is required to convert this 5v output to 3.3v.
The following parts are needed for the Level Shifter :-
  1. 10 KOhm Resistor.
  2. 20KOhm Resistor.
4. Motor Controller :
                                   Since the arenas in India are small, hence I did not need variable speed. So I used relays for the motor controller which drive the motors at a constant speed. 
The following parts are needed for the Motor Controller :-
  1. 6pcs of 12v 60A SPDT Relays.
  2. 6pcs of IN4007 Diode.
  3. 6pcs of NPN Transistor ( 2N2222 ).
  4. 6pcs of Resistor ( 100 Ohms ).
5. Batteries :
The Batteries used in Blitzkrieg are two 12v 7Ah SLA Batteries. The batteries are fitted in a battery holder which keeps the battery in place even if the the robot is flipped over. 

6. Male Header Pins (Straight).
7. Wires.



►Schematic Diagrams :

The circuit of the ' Blitzkrieg ' has been divided into two parts :-

1. The Motor Controller :

To make the motor controller, follow the circuit given in Pic. 6. The following are the components of the Motor controller circuit :-

K1 - K6   ⇒  12v 60A SPDT Relay.
D1 - D6  ⇒   IN4007 Diode.
Q1 - Q6  ⇒   2N2222 NPN Transistor
R1 - R6  ⇒  100 Ohm Resistor.

2. The Bluetooth Module and Level-Shifter Circuit  :-

Follow the cicuit diagram given in Pic. 7 for the Bluetooth module and level-shifter circuit.













Step 6: Programming the Arduino

The following is the source code for the Arduino. Copy the code below and load it on the Arduino :-


int M1_A = 4; // variable for Rotating Armor Motor 
int M1_B = 5; // variable for Rotating Armor Motor
int M2_A = 8; // variable for Left Drive-Train Motors
int M2_B = 9; // variable for Left Drive-Train Motors
int M3_A = 10; // variable for Right Drive-Train Motors
int M3_B = 11; // variable for Right Drive-Train Motors
// variable to store serial data
int incomingByte = 0;

void setup()
{

   // Start serial monitor at 9600 bps
   Serial.begin(9600); //change this value depending on the baud rate of your bluetooth module 
   pinMode(M1_A, OUTPUT);  
   pinMode(M1_B, OUTPUT);
   pinMode(M2_A, OUTPUT);
   pinMode(M2_B, OUTPUT);
   pinMode(M3_A, OUTPUT);
   pinMode(M3_B, OUTPUT);
   // turn motors Off by default
   M1_stop();
   M2_stop();
   M3_stop();
   delay(500);
}

////////////////////////////////////

void loop()
{



     if (Serial.available() > 0)
     {
// read the incoming byte:
     incomingByte = Serial.read();    
// delay 25 milliseconds to allow serial update time
     delay(25);

     if (incomingByte == 32)// if byte is equal Space Bar, halt.
   {
      Serial.println("Stop");
      M2_stop();  
      M3_stop();
      delay(25);
   }

   if (incomingByte == 67) //if incoming byte from Android phone is equal to "C" , halt.
   {
      Serial.println("Stop");
      M2_stop();  
      M3_stop();
      delay(25);
   }

      if (incomingByte == 99)// if byte is equal to "c" , turn Rotor Clockwise
   {

      M1_Clock();  
      delay(25);
   }

   if (incomingByte == 101)//if incoming byte from Android phone is equal to "e", turn Rotor Clockwise
   {

      M1_Clock();  
      delay(25);
   }

   if (incomingByte == 118)// if byte is equal to "v" , turn Rotor Anti-Clockwise
   {

      M1_AntClock(); 
      delay(25);
   } 

   if (incomingByte == 102)//if incoming byte from Android phone is equal to "f", turn Rotor Anti-Clockwise
   {

      M1_AntClock(); 
      delay(25);
   } 

   if (incomingByte == 120)// if byte is equal to "x" , Stop turning Rotor
   {

      M1_stop(); 
      delay(25);
   }

   if (incomingByte == 103)//if incoming byte from Android phone is equal to "g", Stop turning Rotor
   {

      M1_stop(); 
      delay(25);
    }


    // if byte is equal to "w" , go forward
    else if (incomingByte == 119 )
   {
    Serial.println("FORWARD");
    M2_forward();
    M3_forward();
    delay(25);
   }

    else if (incomingByte == 85 )// if incoming byte from Android phone is equal to "U" , go forward
   {
    Serial.println("FORWARD");
    M2_forward();
    M3_forward();
    delay(25);
   }

   // if byte is equal to "a" , go left
      else if (incomingByte == 97 )
   {
      Serial.println("LEFT");
      M2_reverse();
      M3_forward();
      delay(25);
   }

   // if incoming byte from Android phone is equal to "L" , go left
   else if (incomingByte == 76 )
   {
      Serial.println("LEFT");
      M2_reverse();
      M3_forward();
      delay(25);
   }

  // if byte is equal to "d" , go right
      else if (incomingByte == 100 )
   {
      Serial.println("RIGHT");
      M2_forward();
      M3_reverse();
      delay(25);
   }

   // if incoming byte from Android phone is equal to "R" , go right
   else if (incomingByte == 82 )
   {
      Serial.println("RIGHT");
      M2_forward();
      M3_reverse();
      delay(25);
   }

  // if byte is equal to "s" , go reverse
   else if (incomingByte == 115 )
   {
     Serial.println("REVERSE");
     M2_reverse();
     M3_reverse();
     delay(25);
   }

   // if incoming byte from Android phone is equal to "D" , go reverse
   else if (incomingByte == 68 )
   {
    Serial.println("REVERSE");
     M2_reverse();
     M3_reverse();
     delay(25);
   }

   else
  {
    Serial.println("STOP");

    M2_stop();
    M3_stop();
    delay(25);
  }


     }



}




    void M1_Clock()
    {
     digitalWrite(M1_B, LOW);
     digitalWrite(M1_A, HIGH);

    }

     void M1_AntClock()
    {
     digitalWrite(M1_A, LOW);
     digitalWrite(M1_B, HIGH);

    }

     void M2_forward()
    {
     digitalWrite(M2_A, HIGH);
     digitalWrite(M2_B, LOW);

    }

    void M2_reverse()
    {
     digitalWrite(M2_A, LOW);
     digitalWrite(M2_B, HIGH); 

    }

    void M3_forward()
    {
      digitalWrite(M3_A, HIGH);
      digitalWrite(M3_B, LOW);

    }

    void M3_reverse()
    {
      digitalWrite(M3_A, LOW);
      digitalWrite(M3_B, HIGH);

    }

     void M1_stop()
    {
     digitalWrite(M1_B, LOW);
     digitalWrite(M1_A, LOW);    
    }

    void M2_stop()
    {
     digitalWrite(M2_B, LOW);
     digitalWrite(M2_A, LOW);    
    }

     void M3_stop()
    {
     digitalWrite(M3_B, LOW);
     digitalWrite(M3_A, LOW);
    }

Step 7: Software for Computer and Android :

Application for Android Phone :-

► What is Blue Control ?

 Blue Control is a basic universal Remote Control for Blue-Tooth enabled serial devices such as Blue Tooth modules connected to a micro-controller. For each button pressed, the corresponding ASCII code for the label will be sent. For example pressing buttons A-H will send the characters "a" - "h". The up, down, left, right, and center buttons will send "U","D","L","R", and "C" characters.

►Downloading the Blue-Control App :

Blue-Control App can be downloaded from the following link.


Application for Windows Computer :-

► What is PuTTy ?

PuTTY is an SSH and telnet client, developed originally by Simon Tatham for the Windows platform. PuTTY is open source software that is available with source code and is developed and supported by a group of volunteers.

►Downloading PuTTy :

PuTTy can be downloaded from the following link.

►Configuring PuTTy :

After downloading and installing PuTTy, follow the steps below for configuring it according to your bluetooth module :

1.   Search for the bluetooth device named " Omnitek_Bluetooth ".  ( Pic. 2 )
2.   Right Click on the " Omnitek_Bluetooth " icon and click " Connect Bluetooth Serial Port ".  ( Pic. 3 )
3.   A pop-up displaying " Connecting to Omnitek Bluetooth... " will appear. Remember the COM Port number displayed in the pop-up ( As in my case COM9 ) ( Pic. 4 ).
4.   You are connected with the Bluetooth module. The " Omnitek_Bluetooth " icon must now turn green. 
5.   Open the PuTTy Application and click on the Serial Check Box.
6.   Enter the COM Port number in Serial Line, and the baud rate in Speed, then Click OK ( As in my case Serial Line - COM9 and Speed 9600 )  ( Pic. 5 ).
7.   You are now done with the configuration of the software. A black screen appears in which you type in the commands. Jump to the next step to see the controls ( Pic. 6 ).




Step 8: Driving the " Blitzkrieg "

You are done with constructing the Blitzkrieg robot. It's time to drive the monster. Feel its power and torque running through your veins....   

The robot can be controlled by an Android Phone or a Computer. The controls for each are explained below :



► Controlling the ' Blitzkrieg ' using an Android Phone :

The following are the steps :-
1.  Connect to the robot using the Android Phone as mentioned in Step 7.
2.  Controls :  Up Arrow          - Continuous FORWARD
                         Down Arrow    - Continuous REVERSE
                         Left Arrow        - Continuous LEFT TURN
                         Right Arrow     - Continuous RIGHT TURN
                         Center Button -  STOP
                          "E" Button       -  Rotate Armor Clockwise
                          "F" Button       -  Rotate Armor  Anti-Clockwise
                          "G" Button      -  Stop Armor Rotation  

► Controlling the ' Blitzkrieg ' using a Windows Computer :

The following are the steps :-
1.  Connect to the robot to the Computer as mentioned in Step 7.
2.  Remember to always keep Caps Lock off.  
      Controls :  "w" key           - Continuous FORWARD
                         "s" key           - Continuous REVERSE
                         "a" key           - Continuous LEFT TURN
                         "d" key           - Continuous RIGHT TURN
                         Spacebar      -  STOP
                          "c" key       -  Rotate Armor Clockwise
                          "v" Button       -  Rotate Armor  Anti-Clockwise
                          "x" Button      -  Stop Armor Rotation

The reason for using such controls is because I experienced some lag when controlling the robot using Key Press and Release  method. 


It could so happen that the robot goes in an undesired direction. Under such cases, invert the wires going to the motor which side goes in the wrong direction.

Here is a video of the Blitzkrieg in action.



And there you go, these are steps for building ' Blitzkrieg '- the Combot.

If you have any difficulties building your Combat Robot, do feel free to ask.

GREAT!!!!! NOW GO AHEAD AND CONSTRUCT ONE YOURSELF!!!!! : )

Wheels Challenge

Finalist in the
Wheels Challenge

Remote Control Challenge

Participated in the
Remote Control Challenge

Robot Challenge

Participated in the
Robot Challenge