This is my first instructable, so be gentle. The RomoBOT was a project of mine in the senior year of my Mechanical Engineering degree. It was an Independent Study and focused on robotics. The project changed several times and the original plan required a laser cutter or a 3d printer. I decided to make it without these expensive tools and here is how i did it.
This was a long process of trial and error, but I will stick to the successes and try not to dwell on the impediments. I will tell you other possible thoughts we had while making it as well as some areas for improvement. Here is the final product, prior to adding sensors and a wooden box.
Doctor Ricardo Romo is the President of UTSA here in San Antonio, Texas. The picture of his face was drawn by
Michael Hogue. Any face or picture could be used though. Lets get to the build...
Step 1: Step 1 - Materials Needed
Here is the required materials for this project as well as the tools needed. (i hope im not forgetting anything major)
- Erector set (I used this because it was laying around. I guess you could use legos or wood even.)
- Clear Acrylic board
- 5x servo motors (90g, micro)(lot of 10 micro servos)
- 1x larger servo motor (US MG996R Metal Digital High Torque Gear Servo For RC Model Car Boat Helicopter)
- Wooden shaft (to mount plastic marbles on for eyes)
- Arduino Mega (an UNO could work if you got the correct MP3 shield)
- Plastic marble(from kid's toy)
- MP3 arduino shield (NEW VS1053B MP3 Music shield board with TF card slot work with Arduino UNO MEGA)
- Push-rods from RC cars (could use a coat-hanger)
- Plastic mask
- Ball joint for push-rods (5pcs M2xd5xL16mm Ball Link/Joint for M2 Push Rod, White, RC TH023-00601)
- Computer Speakers (preferred would be a small independent speaker you could hide inside robot)
- Micro SD Card
- Soda bottle
- MDF Board
- Allen Wrench
- Hot Glue Gun
- Drimmel tool
- Soldering Iron
- Wire Strippers
- Butane torch
- Wood glue
Step 2: Step 2 - Building the Eye Mechanisim
The frame of the robot was built using an Erector set. The Erector set gave me an easy to assemble frame for the robot. Ill let you look at the pictures to figure out how to build the structure because there are several different ways it could be done.
I started with the eye assembly. This is the most difficult part in my opinion. The ball socket method was chosen over the 2-axis gimble, but both were considered and prototyped. The ball socket allows for the addition of eyelids without many issues. The gimble also created problems with the range of motion; one of the motors would need to be put on a platform that is allowed to move with the eye causing need for more powerful motors. The eye ball is constructed of a whiffle golf ball cut in half (a ping pong ball could have been used). The ball socket was created with a soda bottle, a plastic marble and a wooden rod.
To make the ball socket, first, the receiver for the ball was fabricated with the soda bottle. A section of the plastic soda bottle was cut off and wrapped around a glass marble, and clamped with C-clamps while a torch was used to heat and form the plastic around the marble. Special care was taken to allow easy removal of the glass marble after cooling. Using a pair of dykes, the plastic was trimmed to allow full rotation of eye when plastic marble/rod assembly is in place. This took several attempts to make two plastic receivers. Good thing soda bottles are plentiful. Next, the plastic marble received a hole drilled to the size of the wooden rod. The rod was then glued into place using wood glue to affix to the plastic marble. The fabricated plastic bottle receivers should be able to snap on and off the plastic marble. The plastic whiffle golf ball was cut in half using a dremmel. The fabricated ball-receivers (soda bottle pieces) were attached to the center of the whiffle ball using epoxy putty. This was done for each eye.
Next, a frame was constructed using the erector set to support the eyes and required motors. 4 motors were used for the eye movement (each eye has 2 motors; 1 for x-axis movement, 1 for y-axis movement). This could have been reduced to 2 motors since eyes don’t normally move individually but in tandem, however, fabrication was problematic with the tools and materials available. The wooden eye shafts were attached to the frame and some epoxy putty was used to hold shafts in place. The positions of the eyes are critical. They need to be positioned such that they are behind the face and symmetric to each other. At this time it should be noted that the face was already printed. This allowed me to have the proper sizing and positioning for the eyes prior to using the epoxy.
To get the eyes moving 4 small servo motors were used, 2 motors for each eye. See picture to get orientation. Each motor must be adjusted individually to limit the destructive possibilities of too much or incorrect movement (too much movement could bend rods or break your eye assembly). Each of the eye motors was adjusted using the “motor adjustment” Arduino file. Each motor was set to rest at 90 degrees giving it positive and negative mobility. A four sided servo motor horn was used on each (these came with the servos).
A ball socket pushrod mount for RC cars was mounted to each motor horn and one on each axis of the eye ball (see picture) and a pushrod for RC cars was cut for each eye (total of 4). The rod assigned to move each eye in the Y-axis had to be bent slightly to increase range of motion and mobility. This completes the initial assembly of the eyes.
Step 3: Step 3 - Jaw and Face
Next, the frame is constructed to attach the eye section to a base while allowing space for the rest of the face. A lower mandible was constructed (bottom jaw) with the erector set. This piece was secured to the upper jaw using zip-ties to create a hinge. This could have been done many other ways, but this was functional. Now is a good time to adjust the large servo motor to 90 degrees as before. Using more zipties, the large servo motor was attached inside the mouth securely to the upper jaw, and the servo horn was wired to the lower jaw.
The plastic mask was used to create a structure to glue the printed face to. The mask was cut as needed to create a support structure for the face to be glued to. Orange file folders were used where the mask didn’t fit. The eye balls were covered with the printed eyes that were cut from the printed images. A total of 2 color pictures (8.5” by 11”) were printed of Doctor Romo, to cut up and glue to the facial frame.
Step 4: Step 4 - Nose and Mustache
Once the eyes and mouth were completed, it was apparent RomoBOT was missing something, his nose and mustache. It was decided to add another motor to give his nose and mustache movement. The motor as adjusted in the same orientation as the others and zip tied and hot glued to secure it. Special care needs to be taken to allow movement of eyes, nose, and mouth without any impediments.
Step 5: Step 5 - Adding the Audio
The audio was a sample taken from a youtube video using various softwares to turn the video file into an audio file and then cutting to the proper length. The original youtube address of the video I wanted was copied and pasted on the Zamzar.com website so the video could be downloaded and manipulated (follow instructions on website). The program, Audacity, was used to turn the video file into an audio file and it allowed the audio to be clipped and saved an an MP3. This MP3 audio file was then saved to a micro SD card. The card was then placed into the MP3 shield, and the shield is then carefully attached to Arduino Mega, being careful to no bend the pins.
An attempt of using syllables to distinguish when the mouth opens and closes was used to no avail. It was decided to use the maximum (yellow dot) and minimum (red dot) seen in the picture below to simplify the movements (my mind tends to make things more complex than they need to be). When there is a high spot the mouth should be open, and when it is closest to the center minimum it should be closed. This took some trial and error, but it got close. Next time I will look into making this automatic with a sensor to distinguish high and low, open and closed. This would allow the robot to say anything and he would move accordingly without having to translate the speech into open mouth and closed mouth. .
Step 6: Setp 6 - Code for the Eyes
Code was written for the eye movements. It was decided that he would roll his eyes and wiggle his nose after the mouth movement. This wasn’t really necessary but it let me use the eyes that I spent so much time making and gave a little humor to the project. (See the code for notes on the code.)
Step 7: Step 7 - Box
Finally, a box was made out of MDF with a clear back made from acrylic. The dimensions are 12” tall by 9.5” wide by 5" deep. (It should have been a little deeper.) The wood was cut with a jigsaw and assembled with wood glue and clamps. The acrylic was cut with an acrylic cutting tool to keep plastic from cracking. The hinges were screwed to the wood and some epoxy putty was used on the acrylic side due to interference created by the screws. This creates an enclosure for the face and hides the mechanics. It also allows easy access to the brains of the head.
Step 8: Step 8 - Wiring
Here is a wiring schematic. The pins to the arduino are incorrect. This is my first time using Fritzing too. I couldnt change colors like i wanted and i assigned the pins to incorrect values. oops.
A box should be constructed for the arduino and circuit board if your not using a breadboard. I used a piece of felt and ziptied the felt to the arduino and circuit board.
Step 9: Step 9+ - Changes I Would Make
Some changes I would make to improve the robot would be as follows in no particular order:
- Use a small speaker instead of the computer speakers. This would allow the speaker to be hidden inside the head.
- Integrate a web camera into the eye
- Use a raspberry pi to allow for more complex movements
- Use stepper motors to allow for more precise and fluid movement. This is really more of an assumption since I have never used steppers, but from my understanding steppers would allow greater precision.
- I would put infrared sensors and more motors to allow the face to track you.
- Work on using this robot for Skype phone calls.
- Add eyelids with random blinks
- 3d print everything (check out the InMoov project)