Introduction: RC Paper Tank - Bring Your 3D Models to Life

About: Hello, I'm a Software Engineer!
Bring your 3D models to life! In this instructable we will custom make a remotely controlled tank. We will infuse paper-craft with an arduino based system. This tank will be controlled on a android based phone though a bluetooth connection. I've strived to create something with a pleasing fit and finish. Remote control is also quite cheap and feasible for any project! I will show you how and why.

I want to show that It is possible to achieve a high level of visual aesthetic without the need for expensive machinery (no need for laser cutters, power tools or 3D printers).

I hope the pictures alone will guide and inspire you try new things! Show me what RC creations you have made in the comments below :)

Step 1: Create/Choose a Model

There are thousands among thousands of existing paper-craft models to choose from. If there isn't already a model you can always convert a 3D model into a foldable model using pepakura. Paper craft is powerful in that it lets us create 3D objects from paper. it is also relatively inexpensive to aquire. One bonus is that the models are designed hollow and leave room for skeleton circuitry.

tank

Step 2: Pick Features

There are thousands among thousands of existing papercraft models to choose from. What you want to remotely control is totally up to you. However there is always a few things to keep in mind
  • Keep it simple. Don't go all out if you aren't familiar with etiher sides of the spectrum
  • Know the limitations. the individual features of an ironman suit may be possible but it will not fit in a regular sized model
  • Commit. Taking on a paper model is a tedious task. Brining it to life seamlessly takes level of engineering and creativity.
RC features:
understand what you are capable of bringing to the model. what mechanisms already exist and how easily they are to implement. This takes experience. In other words don't go off building something impossible. 

For example... I want my RC tankto have :
  1. full ground movement
  2. led stop light
  3. push to start
  4. rotating turret
  5. speed control
  6. recoil


Step 3: Gather Materials

In this Instructable you will need:
  1. 4 Gear Motors - $24**
  2. 4 Wheels - $12**
  3. Motor Shield - eBay ($5)
  4. Arduino Uno - eBay ($10)
  5. 5xAA Battery Holder - ($2)**
  6. Foam Board - your local dollar store ($1)
  7. Bluetooth Adapter ($8)
  8. 1 Servo - eBay ($3)
  9. Paper
  10. Glue/Tape
*These parts came from a 4WD kit. (see next page) but can be sourced individually

Tools:
  1. Paper Cutter (Optional)
  2. Knife
  3. Pen
  4. Ruler
  5. Solder Iron

Step 4: Construct Arduino Proptype

Lets make sure everything work as intended before we dive into the paper model portion. This stage is to allow you to figure ouput how to configure and program the circuit. 

More information about how things are hookedup will be given on in the later stages.

Step 5: Build the Model

This part isnt documented as well. but as you can see in the picture above i did quickly contruct a white version of this tank before settling on the final design. We need to do this to figure out exacly how much space we have and how to shape our tank chasis before conrction

Step 6: Design Protoype

After building the model i noticed that the proportions just wouldn't be enough to fit the circuit and that every part would need to be closely pinned together. I attempted to create a base that would be as small as physically possible and resize the model to adjust for it. 

I used foam-board to space everything out and electrical tape to squeze everything together in a non-pernament fashion. Quickly put on wheels to see how it would look.

Step 7: Modifications to the Model

So the prototype proved that we needed to make some adjustments. Now we need to alter our original model and make room for our components. 



and... done.

Step 8: Papercraft.

Now that the final model is ready we can move onto the final cuts. I have used a paper cutter to cut all the pieces . However it is possible to do this task with a knife (which many do). 

I went over some of the folds with pen because the red construction paper bled white when cut. This is unfortunate but rather unoticable.

Step 9: Fitting

Lets piece everything together now to see how it fits.

Step 10: Repeat Previous Steps for Various Features of the Design

Now that we have wheels, lets decide now we are going to mount the turret and servo. HEre we will use foam board once again to space and fit everything closely together. 

Step 11: Attach Battery

With limited space we could only attach out battery pack to the bottom. If we had a smaller lip battery we could mount it in the turret instead . However the hull of the tank is relatively unnoticeable anyway so here we have it. (this also makes changing battery very easy)

Step 12: Add Decal and Minor Pieces

SO when we were proptyping with a intricate model its important not to spend too much time with these minor bits cause they take time and effor to create. However now that the core of the paper model is buyilt we should ad them to funtill the orginal design. Theses final finished are more difficult and takes percision to turn out well. I have used a pernament marker to create a black trim and over deval all around the body. 

It looks so much better.

Step 13: Final Touches

So these yellow wheels were bothering me so i went ahead and spray painted them black. Just some finishing touches :) 

Step 14: Done Papercraft Body

Perfect. Now lets add the electronics!

Step 15: Hook Up Components

Summary:
  1. Connect the four motors into their respective sockets and screw (it may take some figuring out how you may want to arrange this)
  2. Connect Ground and Power to the battery holder terminals
  3. Attach Servo to servo socket
  4. Plug-in bluetooth receiver - PWR to 5V, GND to GND, Rx to A4, Tx to A5
  5. Plug-in LED - A0 and GND
  6. Plug-in Switch - A1 and GND
There are still two free analog pins. If you've run out of space, consider switching to a ardunio mega which has many more points

Step 16: Programming

Here is the code I used it should be self explanatory if you go through it :

#include <AFMotor.h>
#include <SoftwareSerial.h> //Software Serial Port

#include <Servo.h>

Servo myservo;
int mySpeed;
int turretAngle;
char val;
char prevAction;
AF_DCMotor motor_1(1);
AF_DCMotor motor_2(2);
AF_DCMotor motor_3(3);
AF_DCMotor motor_4(4);


#define RED A0
#define SET A1
#define RxD A5 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD)
#define TxD A4

SoftwareSerial blueToothSerial(RxD,TxD);

int switchVal;
bool running;

void setup() {
  Serial.begin(9600); // Allow Serial communication via USB cable to computer (if required)
  pinMode(RxD, INPUT); // Setup the Arduino to receive INPUT from the bluetooth shield on Digital Pin 6
  pinMode(TxD, OUTPUT); // Setup the Arduino to send data (OUTPUT) to the bluetooth shield on Digital Pin 7
  pinMode(13,OUTPUT); // Use onboard LED if required.
  pinMode(RED, OUTPUT);  
  pinMode(SET,INPUT_PULLUP);  

  blueToothSerial.begin(9600);

  turretAngle = 90;
  switchVal = HIGH;


  mySpeed = 255;
  // turn on motor
  SetSpeed ();
  myservo.attach(9);
  Release();
}

void loop() {

  int sensorVal = digitalRead(SET);
  if (sensorVal == LOW)
  {
    running =! running;
    digitalWrite(RED, running? HIGH:LOW);
    delay (400);
  }


  if (true)
  {
    if(blueToothSerial.available())
    {
      val = blueToothSerial.read();
      Serial.print(val); // Print the character received to the Serial Monitor (if required)
      prevAction = val;

      if( val == 'F' ) //fwd         
      {
        SetSpeed();
        Forward();
      }
      else if( val == 'L' ) //left         
      {
        SetSpeed();
        Left();
      }
      else if( val == 'R' ) //right      
      {
        SetSpeed();
        Right();
      }
      else if( val == 'B' ) //reverse       
      {
        SetSpeed();
        Reverse();
      }
      else if( val == 'S' ) // top      
      {
        Release();
      }
      else if( val == 'G' ) // NW
      {
        NorthWest();
      } 
      else if( val == 'I' ) // NE  
      {
        NorthEast();
      } 
      else if( val == 'J' ) // SE
      {
        SouthEast();
      } 
      else if( val == 'H' ) // SW  
      {
        SouthWest();
      } 
      else if( val == '1' ) // speed
      {
        mySpeed = 255/10;
      }
      else if( val == '2' ) // speed
      {
        mySpeed = 255/10*2;
      }
      else if( val == '3' ) // speed
      {
        mySpeed = 255/10*3;
      }
      else if( val == '4' ) // speed 1 
      {
        mySpeed = 255/10*4;
      }
      else if( val == '5' ) // speed 1 
      {
        mySpeed = 255/10*5;
      }
      else if( val == '6' ) // speed 1 
      {
        mySpeed = 255/10*6;
      }
      else if( val == '7' ) // speed 1 
      {
        mySpeed = 255/10*7;
      }
      else if( val == '8' ) // speed 1 
      {
        mySpeed = 255/10*8;
      }
      else if( val == '9' ) // speed 1 
      {
        mySpeed = 255/10 *9;
      }
      else if( val == 'q' ) // speed 1 
      {
        mySpeed = 255;
      }
      else if( val == 'X' || val == 'x'  )
      {
        Reverse();
        delay(50);
        Forward();
        delay(50);
        Release();
      }
       else if( val == 'V' || val == 'v'  )
      {
          running =! running;
    digitalWrite(RED, running? HIGH:LOW);
      }

    }
    else
    {
      if( val == 'W'  )
      {
        TurretLeft();
      }
      else if( val == 'U' )
      {
        TurretRight();
      }
    }
  }
  else
  {
    Release();
  }
}

void MoveTurret()
{
  if (turretAngle < 30)
    turretAngle = 30;
  if (turretAngle > 150)
    turretAngle = 150;
  myservo.write(turretAngle);
}

void TurretLeft()
{
  turretAngle +=1;
  MoveTurret();
  delay(10);
}

void TurretRight()
{
  turretAngle -=1;
  MoveTurret();
  delay(10);
}

void Forward()
{
  motor_1.run(FORWARD);
  motor_2.run(FORWARD);
  motor_3.run(FORWARD);
  motor_4.run(FORWARD);
}

void Reverse()
{

  motor_1.run(BACKWARD);
  motor_2.run(BACKWARD);
  motor_3.run(BACKWARD);
  motor_4.run(BACKWARD);
}

void Left()
{
  motor_1.run(FORWARD);
  motor_2.run(BACKWARD);
  motor_3.run(BACKWARD);
  motor_4.run(FORWARD);
}

void Right()
{
  motor_1.run(BACKWARD);
  motor_2.run(FORWARD);
  motor_3.run(FORWARD);
  motor_4.run(BACKWARD);
}

void Release()
{
  motor_1.run(RELEASE);
  motor_2.run(RELEASE);
  motor_3.run(RELEASE);
  motor_4.run(RELEASE);
}


void NorthWest()
{
  SetSpeedLeft();


void NorthEast()
{
  SetSpeedRight();
  Forward();

void SouthEast()
{
  SetSpeedRight();
  Reverse();


void SouthWest()
{
  SetSpeedLeft();
  Reverse();
}

void SetSpeed()
{
  motor_1.setSpeed(mySpeed);
  motor_2.setSpeed(mySpeed);
  motor_3.setSpeed(mySpeed);
  motor_4.setSpeed(mySpeed);
}

void SetSpeedRight()
{
  motor_1.setSpeed(mySpeed/2);
  motor_2.setSpeed(mySpeed);
  motor_3.setSpeed(mySpeed);
  motor_4.setSpeed(mySpeed/2);
}

void SetSpeedLeft()
{
  motor_1.setSpeed(mySpeed);
  motor_2.setSpeed(mySpeed/2);
  motor_3.setSpeed(mySpeed/2);
  motor_4.setSpeed(mySpeed);
}

Step 17: Bluetooth

There are many apps you can use to control the tank over bluetooth, this one being my favourite as it came with the most buttons and is very well designed. Using the source code provided, the controller will automagicaly work!

Arduino Bluetooth RC Car.

It communicates by sending single character commands. When the arduino reads in this information, it knows what action to perform. with enough actions and pre-programmed intelligence, your design will come to life.

For example if i send the character 'f' via bluetooth to the car, the car will see 'f". it knows that when it see s'f' it needs to move forward and it moves all four motors accordingly.

Step 18: Play

If you've made it this far, I sincerely congratulate and thank you.

Please show off your creations :) 

Remote Control Contest

Second Prize in the
Remote Control Contest

Microcontroller Contest

Participated in the
Microcontroller Contest