Welcome to another project in which we will build a small Robot which can walk and dance. The project aims in teaching you how to make small hobby robots using Arduino and how to program your Servo motors for such applications. At the end of the project you will be able to make this walking and dancing robot that takes command from an Android Mobile Phone to perform some pre-defined actions. You can also use the program (given at the end of the tutorial) to easily manipulate the actions of your very own robot by controlling the position of the servo motors using the Serial monitor. Having a 3d printer will make this project more interesting and look cool. But, if you do not have one you can use any of the online services or just use some cardboard to build the same.
Materials Required:
The following are the materials required for building this robot:
- Arduino nano
- Servo SG90 – 4Nos
- Male berg sticks
- HC-05/HC-06 Bluetooth module
- 3D printer
As you can see this 3D printed robot requires very minimal electronics parts to build to keep the cost of the project as low as possible. This project is only for conceptual and fun purpose and does not have any real time application so far.
3D printing the required parts:
3D printing is an amazing tool that can contribute a lot when building prototype projects or experimenting with new mechanical designs. If you have not yet discovered the benefits of a 3D printer or how it works you can read The beginners Guide to 3D printing .
In this project the body of the Robot shown above is completely 3D printed. You can download the STL files from here. Load these files on your 3D printing software like Cura and directly print them. I have used a very basic printer of mine to print all the parts. The printer is FABX v1 from 3ding which comes at an affordable price with a print volume of 10 cubic cm. The cheap price comes with a trade off with low print resolution and no SD card or print resuming function. I am using software called Cura to print the STL files. The settings that I used to print the materials are given below you can use the same or change them based on your printer.
Once you print all the parts clean the supports (if any) and then make sure the holes on the leg and belly part are big enough to fit a screw. If not, use a needle to make the hole lightly bigger. Your 3D printed parts will look like something below.
Hardware and Schematics:
The Hardware for this Mobile Phone Controlled Biped Arduino Robot is really simple. The complete schematics is shown in the below image
I have used a Perf board to make the above connections. Make sure that your circuit will also fit inside the head of the robot. Once your Perf board is ready it should look something like below.
Assembling the robot:
Once the Hardware and the 3D printed parts are ready we can assemble the robot. Before fixing the motors make sure you place the motors in the below angles so that the program works flawlessly.
Motor Number |
Motor place |
Motor position |
1 |
Left Hip motor |
110 |
2 |
Right Hip motor |
100 |
4 |
Right Ankle Motor |
90 |
5 |
Right Hip motor |
80 |
These angles can be set by using the program given at the end of the tutorial. Simply upload the program to your Arduino after making the above connections and type in the following in the serial monitor (Note: Baud rate is 57600).
1, 100, 110
2,90,100
4,80,90
5,70,80
Your Serial monitor should look something like this after placing all your motors in position.
Once the motors are set in the corresponding angles mount them as shown in above figure.
If you are confused on how to assemble the motors follow the video at the end of this tutorial. Once the Robot is assembled it is time to program our dancing robot
Programming the Arduino for Biped Robot:
Programming the BBB Robot (Bluetooth Biped Bob) is the most interesting and fun part in this tutorial. If you are very good in programming servo motors with Arduino then I would recommend you to make your program. Bt, if you want learn how to use servo motors for robotic applications like this, then this program will be very helpful for. You can learn more about arduino programming in our arduino projects category.
The complete program is given at the end of this tutorial, or you can download the complete code from here. I will explain the segments of the same below. The program is capable of controlling the Robots actions through serial monitor or Bluetooth. You can also make your own moves by controlling every individual motor using the serial monitor.
servo1.attach(3); servo2.attach(5); servo4.attach(9); servo5.attach(10);
The above lines of code it use to mention which servo motor is connected to which pin of the Arduino. Here in our case Servo 1,2,4 and 5 are connected to pins 3,5,9 and 10 respectively.
Bot_BT.begin(9600); //start the Bluetooth communication at 9600 baudrate Serial.begin(57600);
As said earlier our walking robot can work on Bluetooth commands and also from commands from the serial monitor. Hence the Bluetooth serial communication works with a Baud Rate of 9600 and the serial communication works with Baud Rate of 57600. The name of our Bluetooth object here is “Bot_BT”.
switch (motor) { case 1: // For motor one { Serial.println("Executing motor one"); if(num1<num2) // Clock wise rotation { for ( pos =num1; pos<=num2; pos+=1) { servo1.write(pos); delay( 20); }} if(num1>num2) // Anti-Clock wise rotation { for ( pos =num1; pos>=num2; pos-=1) { servo1.write(pos); delay( 20); }} break; } ////////JUST DUPLICATE FOR OTHER SERVOS//// case 2: // For motor 2 { Serial.println("Executing motor two"); if(num1<num2) { for ( pos =num1; pos<=num2; pos+=1) { servo2.write(pos); delay( 20); }} if(num1>num2) { for ( pos =num1; pos>=num2; pos-=1) { servo2.write(pos); delay( 20); }} break; } case 4: // for motor four { Serial.println("Executing motor four"); if(num1<num2) { for ( pos =num1; pos<=num2; pos+=1) { servo4.write(pos); delay (20); }} if(num1>num2) { for ( pos =num1; pos>=num2; pos-=1) { servo4.write(pos); delay (20); }} break; } case 5: // for motor five { Serial.println("Executing motor five"); { for ( pos =num1; pos<=num2; pos+=1) if(num1<num2) { servo5.write(pos); delay (20); }} if(num1>num2) { for ( pos =num1; pos>=num2; pos-=1) { servo5.write(pos); delay (20); }} break; }
The switch case shown above is used to control the servo motors individually. This will help in making your own creative moves with your robot. With this segment of code you can simply tell the motor number, from angle and to angle to make a particular motor move to a desired location.
For example if we want to move the motor number 1 which is the left hip motor from its default location of 110 degree to 60 degree. We can simply write “1,110,60” in the serial monitor of Arduino and hit enter. This will come in handy to make your own complex moves with your Robot. Once you experiment with all the from angel and to angle you can then make your own moves and repeat them by making it as a function.
if(Serial.available()>0) //Read whats coming in through Serial { gmotor= Serial.parseInt(); Serial.print(" selected Number-> "); Serial.print(gmotor); Serial.print(" , "); gnum1= Serial.parseInt(); Serial.print(gnum1); Serial.print(" degree , "); gnum2= Serial.parseInt(); Serial.print(gnum2); Serial.println(" degree "); flag=1; }
If a Serial data is available the number before the first “,” is considered as gmotor and then the number before the second “,” is considered as gnum1 and the number after the second “,” is considered as gnum2.
if (Bot_BT.available()) //Read whats coming in through Bluetooth { BluetoothData=Bot_BT.read(); Serial.print("Incoming from BT:"); Serial.println(BluetoothData); }
If the Bluetooth receives some information, the received information is stored in the variable “BluetoothData”. This variable is then compared to the pre-defined values to execute a particular action.
if (flag ==1 ) call(gmotor,gnum1,gnum2); //call the respective motor for action //Execute the functions as per the commond received through the Serial monitor or Bluetooth// if (gmotor ==10) left_leg_up(); if (gmotor ==11) right_leg_up(); if (gmotor ==12) move_left_front(); if (gmotor ==13) move_right_front(); if (BluetoothData ==49 || gmotor ==49) say_hi(); if (BluetoothData ==50 || gmotor ==50) walk1(); if (BluetoothData ==51 || gmotor ==51) walk2(); if (BluetoothData ==52 || gmotor ==52) dance1(); if (BluetoothData ==53 || gmotor ==53) dance2(); if (BluetoothData ==54 || gmotor ==54) {test();test();test();}
This is where the functions are called based on the values received from the serial monitor or the Bluetooth. As shown above the variable gmotor will have the value of serial monitor and BluetoothData will have the value from Bluetooth device. The numbers 10,11,12 upto 53,54 are pre-defined numbers.
For example if you enter the number 49 in the serial monitor. The say_hi() function will be executed where the robot will wave you a hi.
All the functions are defined inside the page “Bot_Functions”. You can open it and see what actually happens inside each function. All these functions were created by experimenting th e from angel and to angel of every motor using the switch case explained above. If you have any doubt you can use the comment section to post them and I will be happy to help you out.
Processing based Android Application:
The Android application to control the Robot was build using the Processing Android mode. If you want to make some changes to the Application you can download the complete Processing program from here.
If you simply want to use the application you can download it from here as an APK file and directly install it on your mobile phone.
Note: Your Bluetooth module should be named HC-06 else the application will not be able to connect to your Bluetooth Module.
Once the application is installed, you can pair the Bluetooth module with your Phone and then launch the application. It should look something like this below.
Read more: Arduino based Bluetooth Biped Bob (Walking & Dancing Robot)