MIA-1 Open Source Advanced Hand Made Humanoid Robot!

Introduction: MIA-1 Open Source Advanced Hand Made Humanoid Robot!

About: A Computer Science and Engineering student and a Hobbyist. love to make robots,electric devices,diy things and Programming them by Myself. My youtube channel https://www.youtube.com/fussebatti Follow me on gi…

Hi everyone, today I'll be showing how I made the robot MIA-1, which is not only Advanced and unique but also Open source and can be made without 3D printing!! Yes, you got it, this robot is completely hand made. And open source means - you get the codes and every details for free, you too can make this robot if you wish to.

Here we see only her speech, but there's many more things she can do!

Here are the things she can do:

  • Can listen and talk back to you
  • Can see and recognize you using her left eye's camera
  • can detect motion and capture photo
  • has a GUI with touch screen LCD to command her
  • shows images on her lcd
  • download images and shows on her screen
  • can target things using a laser pointer on her right hand
  • moves hands while talking
  • Stands on her feet without any help of others
  • She can also bow (watch the video)

and many more, lets make her!

Supplies

To make this robot I've used all the things that are available at our local store.

MicroControllers + Computers (The brain):

  • Arduino Mega (for controlling the servo motors)
  • A full computer (You can use raspberry pi, but I'be used my laptop as her brain initially)

Servo Motors:

MIA-1 has 13 degrees of freedom.

  • LDX227 dual axis servo motors 8x
  • MG996r / MG996 servo motors 3x
  • For figers ive used micro servo sg90

Note that I have added a robotic claw and it uses another MG996r servo motor.

And jumper wires and etc

Buy electronic components at utsource.net

Vision:

For image processing such as taking photo and detecting faces etc. I've used an USB camera.

NOTE: This tutorial is for intermediate and advanced level makers, I'll be focusing mainly on codes as it is the code that makes MIA-1, MIA-1. And if you get the code everything is easy for you.

Step 1: Body and Motor Layout

The body is made using PVC sheet, different pieces are attached using Hot Glue and screws (see picture). I've cut the pvc sheet using cutter knife (be very careful!! don't cut your fingers instead!!). From picture one and two you can see the servo layout. As I was making a girl robot I have given it a female body shape and figure.

The servo connectors are made using thin pvc sheets as they bend well.

The head is made using a balloon, blew air in the balloon (see picture), added small wet pieces of papers and then dried it. After adding 8 layers it has become strong and sustainable.

Then just colored it white (whole body) using spray color.

Turned out the design is so amazingly balanced and she (MIA-1) stands right on two feet of her!!

Adding the display:

After that just used some screws and hot glues to mount the lcd on her chest (last photo).

Step 2: Circuit Diagram

The circuit diagram looks complex but it isn't. I drew the circuit as the motor layout on body so that you can understand it more easily. Make sure to common the ground. The arduino takes power from the computer via its usb cable. There is a laser diode which enables mia to target things takes power from pin 13(led pin) of arduino.

As you can see that all the motors and the arduino itself is on the back side of the body. I also have put all the cables from back. Bought an extended USB cable so that it can be connected to the computer.

Step 3: The CODE

As you know I've used an arduino mega. The arduino mega controls the Servo motors, the motors are pre-programmed. Get the motors code from here. Please note the default servo positions, while building the robot maintain this. Just power the motors with arduino without making the body and the servo motors will reach to the default position (default pos below)

<p>/*default/standby position of servos*/<br>  komor.write(4);      #waist servo
  left1.write(120);
  rFinger.write(0);
  servo1.write(55);
  
  clawOpen();
  rightStandBy();
  leftStandBy();
  
  headTilt.write(134);
  headPan.write(90);</p>

The motor control code is of more than 750 lines (be careful while editing).

The main processing is done using a python3 script.

Python has pySerial library that communicates with the arduino over serial. Mind the 'COM PORT'.

<p>#Connect with mia motor driver board over serial communication<br>try:
    mia = serial.Serial("COM28", 9600)
except:
  pass</p>

You also need to pip install these libraries

<p>"""import necessary libraries"""<br>#import requests             #for making post/get requests
import pyttsx3               #offline text to speech
import speech_recognition as sr   #Speech to text (requires internet to function)
import time
from random import randint   #random integer picking library
import tkinter               #tkinter gui library
from tkinter import Tk, Button, Label, Tk  #import necessary things
import serial                #serial library for serial communication over USB
from PIL import Image        #fro showing image
import cv2                   #Computer Vision library
import wikipedia             #to get data direcly from wikipedia</p>

Everything is easy using pip install. For opencv type in the command prompt:

<strong>pip install opencv-contrib-python</strong>

The GUI (Graphical User Interface) your'e seeing is developed using tkinter. For this and every other libraries you can install by this command:

pip install library_name

then it will be installed.

Also take a look if your're using a webcam it is more likely the cam is denoted as 1

<p>cap = cv2.VideoCapture(1)   #camera</p>

And if you want to know more on how this robot actually talks back please read this instructables.

MIA-1's code is just an extended version of this.

As of commanding the arduino, computer sends a bite, the arduino takes actions according to the bites it receives, thus it looks Mia's movement and talking is asynchronous.

<p>mia.write(b'p')  #command to head up then down<br>count_down(3)
respond("Smile please", 100)</p>

Now to get the code go the link below.

Download MIA-1 's code from here.

Step 4: Power and Finishing

I've powered the robot using a 7.4 v lipo battery. The LDX227 servos are very power hungry (but are of good quality) so make sure they get at least 7.3 v any time. On the other hand the MG996r servo motors are cheap can be damaged easily, make sure they don't get more than 7.8V. So the highest power supply for this robot should be in between 7.4 to 7.8 volts.

Happy making!! If you like this robot be sure to support by subscribing the channel for more amazing projects and please vote me for the robotic challenge.

This robot is the first ever open source humanoid robot of Bangladesh!! And the cheapest of it's kind. I made this robot open source so that other students and interested people can know the logic of robots. May in future nobody will ever take robotics as science fiction. To the robot era!!
Robotics Contest

Participated in the
Robotics Contest

Be the First to Share

    Recommendations

    • Micro:bit Contest

      Micro:bit Contest
    • Halloween Contest

      Halloween Contest
    • Soup & Stew Speed Challenge

      Soup & Stew Speed Challenge

    30 Comments

    0
    robooo
    robooo

    1 year ago

    You have mentioned about wikipedia library but how do I use it on your code.

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    If it is the case then assign any other value to val other than the values the python code sends. val="" is used to clear the val variable. assigning it with any other value should do the work. I hope you can understand.
    But this should not cause any problems as I did run the bot in a press conference and several other programs.

    0
    robooo
    robooo

    Reply 1 year ago

    I also had the same error How can I assign any other value.Can you test the code once by yourself on arduino IDE and update it on Github .It wont require arduino to just test the program on IDE.

    0
    robooo
    robooo

    1 year ago

    Sir, I am getting error with arduino mia_motors code. Can you give short explanation on how I can fix this error.

    E:\MIA-Open-Source-Humanoid-Robot-master (1)\MIA-Open-Source-Humanoid-Robot-master\mia_motors\mia_motors.ino: In function 'void loop()':

    E:\MIA-Open-Source-Humanoid-Robot-master (1)\MIA-Open-Source-Humanoid-Robot-master\mia_motors\mia_motors.ino:734:11: warning: invalid conversion from 'const char*' to 'byte {aka unsigned char}' [-fpermissive]
    val = ""; //clear the value
    ^~

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    Okay, it means two things
    1. The serial connection could not be established with Arduino
    2. You haven't install pySerial.
    If you have, then check the correct com port, it's different in linux systems.

    0
    AayushThapa
    AayushThapa

    Reply 1 year ago

    yeah, but the com port is right. I thing the problem is with the arduino code because there is an error.Tis is the error I am facing with the arduino code:

    G:\MIA-1-Open-Source-Humanoid-Robot-master (1)\MIA-1-Open-Source-Humanoid-Robot-master\mia_motors\mia_motors.ino: In function 'void loop()':

    G:\MIA-1-Open-Source-Humanoid-Robot-master (1)\MIA-1-Open-Source-Humanoid-Robot-master\mia_motors\mia_motors.ino:734:11: warning: invalid conversion from 'const char*' to 'byte {aka unsigned char}' [-fpermissive]
    val = ""; //clear the value
    ^~

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    I'm sorry, when it says "something is not defined" in this case mia is not defined which means it is unable to establish a connection my friend.

    0
    AayushThapa
    AayushThapa

    Reply 1 year ago

    Thanks, I figured out the problem.How can I add wiki to answer my question.Can you do this last favour please.

    0
    niloygazi4
    niloygazi4

    Question 1 year ago

    Did you use any speaker for making it talk.
    And how you done the wiring of the LCD display

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    LCD screen is simple to use using an HDMI cable and a USB (for touch and power).
    Use any speaker/aplifier.

    0
    7e1705his
    7e1705his

    Reply 1 year ago

    But an Arduino has no hdmi place

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    The LCD screen is connected to the pc, not to Arduino.

    0
    mayshastudent
    mayshastudent

    Reply 1 year ago

    But Arduino mega has no hdmi cable place.

    0
    Ashraf Minhaj
    Ashraf Minhaj

    Reply 1 year ago

    Like I said, I used my laptop as the brain of this robot. So, Arduino MEGA, HDMI LCD everything is connected on my pc. The python code runs on my pc that control everything.

    0
    7e1705his
    7e1705his

    Reply 1 year ago

    Bro can we chat in social media like Facebook or massanger because I want to make it and show my friend because that always tell me a loser and I become angry
    But I can not any thing them.
    Fb link:-https://www.facebook.com/niloygazi4

    0
    7e1705his
    7e1705his

    Reply 1 year ago

    Buy I don't have any pc my father had laptop at office but he can bring for at night only can I do with raspberry pi

    0
    7e1705his
    7e1705his

    Reply 1 year ago

    But how I will install pip and gui on the raspberry pi and how to join with raspberry pi with Arduino mega for responding.

    0
    mayshastudent
    mayshastudent

    Reply 1 year ago

    And how I will install pip and gui on display