Bipedal Robot
I’ve always been interested in 3D printing and building cool stuff with it. So, I created this bipedal robot! It uses custom-printed 3D parts, four servo motors, an ultrasonic motor and a microcontroller.
Here’s the parts list:
- 3D Printed Parts
- 4 x 9G Servo Motors
- 1 x Ultrasonic Module HC-SR04 Distance Measuring Transducer Sensor M2
- Micro-controller (Currently using Arduino but will later port to Particle Photon)
Sample code:
#include <Servo.h>
/**
* Bipedal Robot
*/
// Initialize servo objects (Max 8)
Servo ankle_R;
Servo ankle_L;
Servo knee_R;
Servo knee_L;
// SPEAKER (PWM pin)
int speaker_pin = 11;
// LED (Use pin 13 for built-in LED)
int led_pin = 13;
// Variable to store the servo position
int pos = 0;
// Attaches the servo on respective pins to the servo object
void setup() {
ankle_R.attach(9);
ankle_L.attach(10);
knee_R.attach(5);
knee_L.attach(6);
pinMode(led_pin, OUTPUT);
pinMode(speaker_pin, OUTPUT);
}
// Main loop
void loop() {
reset();
confirm();
shake(2000);
jump(3000);
walk_in_place(3000);
dance(3000);
split();
jump(1000);
tip_toe();
}
// Reset servo motors to original position
void reset() {
// Reset
knee_R.write(90);
knee_L.write(90);
ankle_R.write(90);
ankle_L.write(90);
delay(1000);
}
// Confirmation sequence
void confirm() {
for(pos = 45; pos < 90; pos += 1) {
ankle_R.write(pos);
ankle_L.write(180 - pos);
delay(5);
}
for(pos = 45; pos < 90; pos += 1) {
ankle_R.write(pos);
ankle_L.write(180 - pos);
delay(5);
}
delay(3000);
}
// Jump
void jump(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration) {
for(pos = 45; pos < 90; pos += 1) {
ankle_R.write(pos);
ankle_L.write(180 - pos);
delay(3);
}
}
delay(1000);
}
// Walk in place
void walk_in_place(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration) {
for(pos = 45; pos < 90; pos += 1) {
ankle_R.write(pos);
delay(10);
}
for(pos = 135; pos>=90; pos-=1) {
ankle_L.write(pos);
delay(10);
}
}
delay(1000);
}
// Shake for a specified time duration
void shake(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration) {
for(pos = 45; pos < 90; pos += 1) {
knee_R.write(pos);
ankle_R.write(pos);
}
for(pos = 135; pos>=90; pos-=1) {
knee_L.write(pos);
ankle_L.write(pos);
}
}
delay(1000);
}
// Werk it
void dance(unsigned long duration) {
unsigned long start = millis();
while (millis() - start <= duration) {
// Right Up
for(pos = 45; pos < 90; pos += 1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
for(pos = 45; pos < 90; pos += 1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
// Left Up
for(pos = 135; pos>=90; pos-=1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
for(pos = 135; pos>=90; pos-=1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
// Right-Left Up
for(pos = 45; pos < 90; pos += 1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
for(pos = 135; pos>=90; pos-=1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
for(pos = 45; pos < 90; pos += 1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
for(pos = 135; pos>=90; pos-=1) {
knee_R.write(pos);
knee_L.write(pos);
ankle_R.write(pos);
ankle_L.write(pos);
delay(15);
}
}
delay(1000);
}
// Tip toe
void tip_toe() {
ankle_L.write(150);
ankle_R.write(30);
delay(1000);
}
// Banana split
void split() {
ankle_L.write(0);
ankle_R.write(180);
delay(1000);
}
For more information, please visit this project.
Recommend