Bipedal Robot

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)

Bipedal Robot Bipedal Robot

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

Bipedal Robot Bipedal Robot Bipedal Robot

For more information, please visit this project.


  Recommend