Burn-E PaperCraft Robot
I am a software developer. I have read a lot about the field of robotics then I decided to enter into this interesting world.
Appeared in my mind a question Why did not make a robot to do some cool staff? then I have already started to learn programming of electrical circuits, and annexd to the talent in making paper craft models.
Robot Head
First step (The IDEA):
I used this paper craft model form paper-replika : Download the paper model from here
And I saw that, when I place the electronics parts inside the model and Make the MAQUETTE Alive, I think it will be cool Idea.
* I fold the Model Head then I put Ultrasonic sensor Inside, Instead of the robot's eyes.
Testing the Sensors
Testing the sensors after placing it inside the head.
I used an Arduino Uno and an ultrasonic sensor to make the robot measure the distance.
For example, if the object is 10 cm away from the sensor, and the speed of the sound is 340 m/s or 0.034 cm/µs the sound wave will need to travel about 294 u seconds. But what you will get from the Echo pin will be double that number because the sound wave needs to travel forward and bounce backward. So in order to get the distance in cm we need to multiply the received travel time value from the echo pin by 0.034 and divide it by 2.
Here is full tutorial how to use ultrasonic sensors : https://www.arduino.cc/en/Tutorial/Ping
Body Mechanism
To make the robot more realistic, I put three servo motors inside the body to control the movement of the head and arms.
Have a look what is servo motor and what its able to do :
Robot Arms
The Robot still miss two arms :) So I installed the structure of the Arm paper model as shown then I placed the servo gear inside it, so as to easily control them.
Circuit
The Circuit is very simple and its contents of:
1 Arduino Uno R3
1 Red LED 3 Micro Servo
1 Piezo
1 Ultrasonic Distance Sensor
1 150 ohm Resistor
1 Green LED
1 Slideswitch
1 Temperature Sensor [TMP36]
Testing & Code
update:
I've created multi moods for this robot, in this video I will show you how it works..
In this video the robot must be connected to PC via USB cable and I've build a graphical radar screen to show the objects that placed in the range of head sensors.
#include Servo.h
Servo Hservo,Rservo,Lservo; // create servo object to control a servo
// defines pins numbers const int trigPin = 6; const int echoPin = 7; int piezoPin = 11; int led = 13; const int temperaturePin = 0;
// defines variables long duration; int distance,val;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input pinMode(led, OUTPUT);
Serial.begin(9600); // Starts the serial communication
Rservo.attach(8); // right arm servo Hservo.attach(9); // head servo Lservo.attach(10); // left arm servo } void loop() {
float voltage, degreesC; voltage = getVoltage(temperaturePin); degreesC = (voltage - 0.5) * 100.0; // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; delay(50);
if (distance < 10) // { // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); // print the currnet distance on serial port tone(piezoPin, 1000, 500); // this will alarm the sound every time distance digitalWrite(led, HIGH); delay(1000); // wait 1 1second } else { noTone(piezoPin); digitalWrite(led, LOW); delay(50); }
if(Serial.available()) { String value = Serial.readStringUntil('\n'); // read the string from serial window Serial.println(value); if(value == "left") { Hservo.write(80); // moving the head little left delay(15); Lservo.write(60); // left arm up delay(15); Rservo.write(20); // right arm down delay(15); } else if(value == "right") { Hservo.write(40); // moving the head little right delay(15); Lservo.write(20); // left arm down delay(15); Rservo.write(60); // right arm up delay(15); } else if(value == "temp") { Serial.print("voltage: "); // print temperature Serial.print(voltage); Serial.print(" deg C: "); } } }
float getVoltage(int pin) { // point value, which is the true voltage on that pin (0 to 5V). return (analogRead(pin) * 0.004882814); }