RC Paper Tank - Bring Your 3D Models to Life

by alstroemeria in Circuits > Remote Control

76811 Views, 630 Favorites, 0 Comments

RC Paper Tank - Bring Your 3D Models to Life

IMG_2976.jpg
turn.gif
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 :)

Create/Choose a Model

main_top.jpg
m0152.jpg
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

Pick Features

IMG_2898.jpg
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


Gather Materials

IMG_2676.jpg
IMG_2667.jpg
IMG_2669.jpg
IMG_2679.jpg
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

Construct Arduino Proptype

origin.gif
IMG_2663.jpg
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.

Build the Model

IMG_2719.jpg
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

Design Protoype

IMG_2685.jpg
IMG_2686.jpg
IMG_2687.jpg
IMG_2689.jpg
IMG_2691.jpg
IMG_2692.jpg
IMG_2693.jpg
IMG_2694.jpg
IMG_2696.jpg
IMG_2698.jpg
IMG_2699.jpg
IMG_2705.jpg
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.

Modifications to the Model

IMG_2714.jpg
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.

Papercraft.

IMG_2707.jpg
IMG_2710.jpg
IMG_2714.jpg
IMG_2720.jpg
IMG_2725.jpg
IMG_2726.jpg
IMG_2729.jpg
IMG_2731.jpg
IMG_2733.jpg
IMG_2735.jpg
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.

Fitting

IMG_2750.jpg
IMG_2734.jpg
IMG_2735.jpg
IMG_2744.jpg
IMG_2796.jpg
IMG_2748.jpg
IMG_2751.jpg
Lets piece everything together now to see how it fits.

Repeat Previous Steps for Various Features of the Design

IMG_2755.jpg
IMG_2756.jpg
IMG_2759.jpg
IMG_2761.jpg
IMG_2796.jpg
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. 

Attach Battery

IMG_2790.jpg
IMG_2792.jpg
IMG_2795.jpg
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)

Add Decal and Minor Pieces

IMG_2804.jpg
IMG_2805.jpg
IMG_2809.jpg
IMG_2811.jpg
IMG_2814.jpg
IMG_2820.jpg
IMG_2867.jpg
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.

Final Touches

IMG_2890.jpg
IMG_2892.jpg
IMG_2893.jpg
IMG_2896.jpg
IMG_2894.jpg
So these yellow wheels were bothering me so i went ahead and spray painted them black. Just some finishing touches :) 

Done Papercraft Body

IMG_2906.jpg
IMG_2901.jpg
IMG_2902.jpg
Perfect. Now lets add the electronics!

Hook Up Components

IMG_2912.jpg
IMG_2915.jpg
IMG_2920.jpg
IMG_2930.jpg
IMG_2933.jpg
IMG_2934.jpg
IMG_2935.jpg
IMG_2936.jpg
IMG_2938.jpg
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

Programming

IMG_2963.jpg

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);
}

Bluetooth

IMG_2949.jpg
Capture.PNG
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.

Play

turn.gif
IMG_2984.jpg
If you've made it this far, I sincerely congratulate and thank you.

Please show off your creations :)