Introduction: Tele-responsive WALL-E Robot

Inspired from a science fiction romance film WALL-E by Pixar Animation Studios. WALL-E also known as Waste Allocation Load Lifter- Earth Class is a curious robot that clean up trashed planet Earth from the movie. Make sure to be loaded with filament beforehand for post-processing and assembly to bring WALL-E to life. The robot uses a single-board computer or microcontroller to be controlled and programmed; in this project we will use Arduino UNO and 3D Printing to create own miniature version of world-saving WALL-E robot. Though very small, it has lots of movable pieces and controlled through sound commands that help to reproduce the characteristics expressions and sounds with great charm. 


Supplies

Since there are 3D parts, hardware and electronics are the listed below:

  • Hardware
  • M3 Bolt (10mm length) – x14
  • M3 Bolt (20mm length) – x12
  • M3 Bolt (6mm length) – x2
  • M3 Nut – x26
  • Paper clips (used for linkages) – x3
  • Plano-convex lens for the eyes (between ⌀31.5-32.5mm) – x2
  • Electronics
  • High Torque Micro Servo – x7
  • 12V DC geared Motor (100-150RPM, ⌀37mm, off-center output shaft) – x2
  • Arduino UNO (or equivalent) – x1
  • Motor Controller Shield – x1
  • i2c Servo Controller Board – x1
  • 12V DC Battery Pack – x1

For example:

  • 2200mAh 11.1V 30 C LiPo
  • LiPo Battery charger
  • XT60 Battery connectors
  • 12V to 5V DC Buck Converter – x1
  • (optional) USB Camera – x1
  • (optional) Small Speaker – x1


To make WALL·E look more realistic, I took apart some old binoculars and used the lenses as the eyes. I think that the shine and reflections on the glass adds a lot of soul to the robot and make him look even cuter.

Step 1: Print 3D Model WALL-E

I used the 3D model by Chilibasket, so using the images and 3D models as references for the 3D printing. As the aim of the design process to split the robot into small pieces enough to fit and integrate motors and electronics components.

STL Link: https://drive.google.com/drive/folders/1OQ6YMb921c41Y6ldHbr-t6RvSBLLQeH1?usp=drive_link


Step 2: Sand Unnecessary Parts

After the printing process, sand the parts to remove unnecessary lines and to give polish finishing. To fully bring back WALL-E to life I use the same or close to the color of the robot in the film.


Step 3: Assemble the Robot

It is important to put the parts together in right order. Most parts are fastened together using bolts. Figuring out how to connect the motors in the eyes of the robot to the controller of the body is definitely the trickiest part of the assembling. Make sure the angle of the motor is correct before attaching the servo motors since the servo can only rotate 180 degrees. 

1.      The sketch is used to calibrate the maximum and minimum PWM pulse lengths required to move each servo motor across its desired range of motion. The standard LOW and HIGH positions of each of the servos is shown in the images below.

2.      When starting the sketch and opening the serial monitor, a message should appear after 2-3 seconds, saying that it is ready to calibrate the LOW position of the first servo motor (the head rotation).

3.      Send the character ‘a’ and ‘d’ to move the motor backwards and forwards by -10 and +10. For finer control, use the characters ‘z’ and ‘c’ to move the motor by -1 and +1.

4.      Once the motor is position in the correct position (as shown in the images below), send the character ‘n’ to proceed to the calibration step. It will move on to the HIGH position of the same servo, after which the process will repeat for each of the 7 servos in the robot.

5.      When all joints are calibrated, the sketch will output an array containing the calibration values to the serial monitor.

Step 4: Wiring and Electronics

Diagram of electronic components

Step 5: Programming

The programming of the robot uses the code for the Arduino micro-controller. The Arduino controls all the motors within the robot, determining how they should move. Also added a velocity controller, so that the servo motors don’t suddenly jump at full speed, but instead start and stop gently.


Step 6: Installation

1.      Ensure that the wiring of the electronics matches the circuit diagram.

3.      Download the Arduino IDE from the official website.

5.      Install the Adafruit_PWMServoDriver.h library

Go to Sketch -> Include Library -> Manage Libraries…

Search for Adafruit PWM Servo Driver.

Install latest version of the library.

6.      Connect to the computer to the Arduino UNO with a USB cable. Ensure that the correct Board and Port are selected in the Toolsmenu.

7.      Upload the sketch to the micro-controller.

Step 7: Testing the Program

1.      Once the sketch has been uploaded to the Arduino, power on the 12V battery while the micro-controller is still connected to the computer.

2.      Open the Serial Monitor (button in top-right of Arduino IDE). Set the baud rate to 115200.

3.      To control the movement of the robot, send the characters ‘w’, ‘a’, ‘s’ or ‘d’ to move forward, left, back or right respectively. Send ‘q’ to stop all movement.

4.      To move the head, send the characters ‘j’, ‘l’, ‘i’ or ‘k’ to tilt the head left or right and the eyes upwards or downwards. At this stage, the servos may try to move further than they should and may look uncoordinated. This will be solved by performing the servo motor calibration steps.

Step 8: Servo Motor Calibration & Animation

To do other movements. WALL-E,ino replicate scenes from the movie, the eye movement when booting up.

1.      Open up the file WALL-E.ino, which is linked up below.

2.      Each animation command consists of the positions you want each of the servo motors to move to, and the amount of time the animation should wait until moving on to the next instruction.

3.      You can add a new animation by inserting an extra case section into the switch statement. You should slot your extra code into the space above the default section.

4.      The time needs to be a number in milliseconds (for example, 3.5 seconds = 3500)

5.      The servo motor position commands need to be an integer number between 0 to 100, where 0 = LOW and 100 = HIGH servo position as calibrated in the WALL-E.ino sketch.

6.      If you want to disable a motor for a specific move, you can use -1.

Step 9: Battery Level Detection

When using batteries to power WALL-E, it is important to keep track of how much power is left. Some batteries may break if they are over-discharged or not enough power delivered.

1.      To use the battery level detection feature on the Arduino, connect the following resistors and wiring as shown in the image. The resistors (potential divider) reduce the 12V voltage down to a value below 5V, which is safe for the Arduino to measure using its analogue pins. The recommended resistor values are R1 = 100kΩ and R2 = 47kΩ.

2.      Uncomment line54 in the main Arduino sketch WALL-E.ino.

3.      If you are using different resistor values, change the value of the potential divider gain factor on line 54 of the sketch, according to the formula: POT_DIV = R2 / (R1 + R2).

4.      The program should now automatically check the battery level every 10 seconds.

Step 10: Adding Sounds

1.     By default the Arduino should show an option whether to output audio.

2.     Make sure that all the sound files you want to use are of type *.ogg. Most music/sound editors should be able to convert the sound file to this format.

3.     For more organized files. Change the file name so that it has the following format: [group name]_[file name]_[length in milliseconds].ogg. For example: voice_eva_1200.ogg. In the web interface, the audio files will be grouped using the “group name” and sorted alphabetically.

4.     Upload the sound file to Arduino in the following folder: ~/walle-replica/web_interface/static/sounds/

5.     All the files should appear in the web interface when you reload the page.

Step 11: LED Display

oLED display which will show the battery level of the robot on the front battery indicator panel. This feature requires the battery level detection circuit in the previous section to be enabled, and the screen will update every time the battery level is calculated.

1.      To use the Led display feature on the Arduino, connect an i2c Led display on the i2c bus on the servo motor module (see diagram).

2.      Install the U8g2 library in the Arduino library manager:

A.     Go to Sketch -> Include Library -> Manage Libraries…

B.      Search for U8gt. The library publisher is “oliver”.

C.      Install latest version of the library.

3.      Uncomment line 74 #define LED in the main Arduino sketch WALL-E.ino.

Step 12: Video Instruction

Video documentation on how the WALL-E Is assembled by Simon Bluett same process of assembling parts and electronic components.


References:

chillibasket. Available at: https://wired.chillibasket.com/3d-printed-wall-e/

bluett, simon (2019) Wall-E Assembly Instructions. 7 July. Available at: https://youtu.be/ZRK9f4FZlD8?si=dlaz8HmTBIzNG3W5

‘3D Printed Wall-E’ (no date) Chillibasket. Available at: https://wired.chillibasket.com/3d-printed-wall-e/