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
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
tank
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
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
Construct Arduino Proptype
More information about how things are hookedup will be given on in the later stages.
Build the Model
Design Protoype
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
and... done.
Papercraft.
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
Repeat Previous Steps for Various Features of the Design
Attach Battery
Add Decal and Minor Pieces
It looks so much better.
Final Touches
Done Papercraft Body
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
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);
}
Bluetooth
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
Please show off your creations :)