Introduction: RC Paper Tank - Bring Your 3D Models to Life
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
- 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.
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 :
- full ground movement
- led stop light
- push to start
- rotating turret
- speed control
- recoil
Step 3: Gather Materials
- 4 Gear Motors - $24**
- 4 Wheels - $12**
- Motor Shield - eBay ($5)
- Arduino Uno - eBay ($10)
- 5xAA Battery Holder - ($2)**
- Foam Board - your local dollar store ($1)
- Bluetooth Adapter ($8)
- 1 Servo - eBay ($3)
- Paper
- Glue/Tape
Tools:
- Paper Cutter (Optional)
- Knife
- Pen
- Ruler
- 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
- Connect the four motors into their respective sockets and screw (it may take some figuring out how you may want to arrange this)
- Connect Ground and Power to the battery holder terminals
- Attach Servo to servo socket
- Plug-in bluetooth receiver - PWR to 5V, GND to GND, Rx to A4, Tx to A5
- Plug-in LED - A0 and GND
- Plug-in Switch - A1 and GND
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 :)
Second Prize in the
Remote Control Contest
Participated in the
Microcontroller Contest