Few robots are more recognisable than WALL·E; his cute appearance and distinctive personality make him instantly endearing to anyone who sees him! In this project, I designed a WALL·E replica with the aim to allow each of the robot’s joints to be moveable by hand or using servo motors.

Loosely based on the dimensions and design of ChaosCoreTech’s Wall-E replica, this version was designed from scratch in Solidworks and allows 7 of the joints to be actuated, including the arms, neck, head and eyes. The robot design has the following features:

  • Each eye can be raised and lowered independently with servo motors.
  • There is room in each eye to add a small camera.
  • The head can look left and right using a servo motor.
  • The neck is actuated at two joints, allowing the head to look up/down and to be raised/lowered.
  • Each arm has a motor at the shoulder to move it up/down.
  • The arms consist of pressure fit joints, hands and fingers, which can be manually posed.
  • The tank treads (skid steering) are fully 3D printed and can be powered using two 12V DC geared motors.

This is an ambitious project, aimed at people who want to build a fully animatronic WALL·E robot with servo controlled joints. It took me about 3 months to design and assemble the robot, with more than a month spent on just 3D printing all of the parts. In total, there are 310 parts (although 210 of those are very small and make up the tank treads).


1. List of 3D Printed Parts

The robot comprises of 310 individual parts, so this definitely is not an easy project suitable for people who don’t have much experience with 3D printing! Personally, I spent more than a month printing all the parts, with the printer running almost every day. The largest components (the main body parts) took up to 14 hours of print time each, while the smaller parts took 5-6 hours. If you are interested in making your own robot, I have uploaded the 3D files for all the components on Thingiverse.


2. List of other Components

A variety of other hardware is used to fasten the 3D printed parts together and bring the robot to life. A list of the hardware and electronic parts that I used is shown below. 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.

Note: Links are for reference only, and are not where I bought my parts. Please shop around to find the best supplier near you!

While it is possible to use a Wifi/bluetooth connected Arduino micro-controller to control the robot, I decided to use a Raspberry Pi instead. Since the Raspberry Pi is essentially a small computer, it can be used to play sound effects, stream the video from a USB camera, and host a web interface through which the robot can be controlled.


3. 3D Design and Printing

I designed all the components in Solidworks, using images and other 3D models as reference. The main aim in the design process was to split the robot into small enough pieces so that they would fit into the 3D printer, and also to integrate all the motors and electronic components. I tried to make the robot as small as possible, while still leaving enough room for the motors.


4. Painting

After 3D printing each of the parts, I spent a lot of time sanding the parts to remove all of the print lines and give them a smooth finish. Two coats of filler-primer were then applied, with more sanding done between each of the coats. Using a primer is important, as it helps the paint to stick to the plastic and not rub off as easily. It is also useful as it makes imperfections and bumps on the part more obvious, showing where further sanding needs to be done.

Each of the parts was then individually painted with lacquer spray paints. I only used yellow, white, light grey, dark grey, black, and red spray paints to paint the whole robot. By splattering light layers of black and red paint onto the parts that were painted grey, it was possible to add texture and make them look a lot more like real metal.

Finally, after fully assembling the robot, I used black and brown acrylic paints to weather the robot. This involves applying the paint liberally onto all the surfaces, and roughly wiping away most of it with a towel. The paint that isn’t wiped away stays in the corners and crevices of the parts, making the overall replica look older and more realistic.


5. Assembly

The video below shows how to assemble the robot. Overall, the assembly is not too difficult, but it is important to put the parts together in the right order. While a couple of small parts needs to be glued together, most parts are fastened together using bolts. This makes assembly and disassembly easy if any parts need to be fixed or replaced. The trickiest part was probably the wiring, figuring out how to connect the motors in the eyes of the robot to the controller in the body.


6. Wiring and Electronics

The wiring diagram is shown below, illustrating how each of the electronic components were connected in the robot. The USB port of the Arduino Uno was then connected to the USB port of the Raspberry Pi. If the 12v to 5v DC buck converter is capable of delivering up to 5 amps, then the Raspberry Pi can be directly powered from the converter. Otherwise, it should be connected to a separate 5v battery.


7. Programming

The programming of the robot can be split into two main parts; the code for the Arduino micro-controller, and the web-server on the Raspberry Pi. I’ve uploaded all my code onto GitHub; the link is shown below.

The Arduino controls all of the motors within the robot, determining how they should move. In the code I added a velocity controller, so that the servo motors don’t suddenly jump into life at full speed, but instead start and stop gently.

The Raspberry Pi is connected to the Arduino via a USB cable, and can send user commands to the Arduino to make the robot move in a specific way. The Pi is also connected to a USB webcam and a speaker, and can play sound effects. The code is written in Python, and uses ‘Flask’ to generate a webserver. Any computer on the same local network can then access the page and remote control the robot.


8. Arduino Installation Guide

[a] Basic Installation

  1. Ensure that the wiring of the electronics matches the circuit diagram.
  2. Download/clone the folder “wall-e” from the GitHub repository.
  3. Open wall-e.ino in the Arduino IDE; the files MotorController.hpp and Queue.hpp should automatically open on separate tabs of the IDE as well.
  4. Install the Adafruit_PWMServoDriver.h library
    1. Go to Sketch -> Include Library -> Manage Libraries…
    2. Search for Adafruit Servo.
    3. Install version 1.0.2 of the library; the newest version has a bug and does not work properly.
  5. Connect to the computer to the micro-controller with a USB cable. Ensure that the correct Board and Port are selected in the Tools menu.
  6. Upload the sketch to the micro-controller.

[b] Testing the Main 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.
  5. Only move on to using the Raspberry Pi if all these functions are working correctly!

[c] Servo Motor Calibration

Coming soon!


9. Raspberry Pi Web Server

[a] Basic Installation

  1. Setup the Raspberry Pi to run the latest version of Raspbian/NOOBS. The setup instructions can be found on the Raspberry Pi website.
  2. Open the command line terminal on the Raspberry Pi.
  3. Ensure that the package list has been updated (this may take some time): sudo apt-get update
  4. Install Flask – this is a Python framework used to create webservers:
    1. Ensure that pip is installed: sudo apt-get install python-pip
    2. Install Flask and its dependencies: sudo pip install flask
  5. Clone repository into the home directory of the Raspberry Pi:
    cd ~
    git clone https://github.com/chillibasket/walle-replica.git 
  6. Connect to the Arduino/micro-controller:
    1. Plug the Arduino/micro-controller into the USB port of the Raspberry Pi.
    2. Use the following command to list the connected USB devices. Record the name of the device you want to connect to:
      result=$(python <<EOF
      import serial.tools.list_ports
      for p in serial.tools.list_ports.comports():
          print(p)
      EOF
      )
      echo $result
    3. Open app.py: nano ~/walle-replica/web_interface/app.py
    4. Paste the exact name of the micro-controller into line 92, where is says ARDUINO. To jump to a specific line number in the editor, you can press CTRL + _.
  7. Set the web server password:
    1. On line 180 of app.py where is says put_password_here, insert the password you want to use for the web interface.
    2. Press CTRL + O to save and CTRL + X to exit the nano editor.

[b] Using the Web Server

  1. To determine the current IP address of the Raspberry Pi on your network, type the command: hostname -I
  2. To start the server: python3 ~/walle-replica/web_interface/app.py
  3. To access the web interface, open a browser on any computer/device on the same network and type in the IP address of the Raspberry Pi, follow by :5000. For example 192.168.1.10:5000
  4. To stop the server press: CTRL + C

[c] Adding a Camera Stream

  1. Install mjpg-streamer – this is used to stream the video to the webserver. A good description of the installation procedure is described here. Complete the Install & Setup steps, as well as creating the Auto Start Manager Script. Stop when you reach the Start on Boot section.
  2. Make sure that the manager script you created has the correct name and is in the correct directory: /home/pi/mjpg-streamer.sh

[d] Automatically start Server on Boot

Coming soon!

[e] Adding new Sounds

  1. By default the Raspberry should automatically select whether to output audio to the HDMI port or the headphone jack. However, you can ensure that it always uses the headphone jack with the following command: amixer cset numid=3 1
  2. Create the folder in which to store the sounds, using the command: mkdir ~/walle-replica/web_interface/static/sounds
  3. Make sure that all the sound files are of type *.ogg. Most music/sound editors should be able to convert the sound file to this format.
  4. Change the file name so that it has the following format: [file name]_[length in milliseconds].ogg. For example: eva_1200.ogg
  5. Upload the sound file to Raspberry Pi in the following folder: ~/walle-replica/web_interface/static/sounds/
  6. All the files should appear in the web interface when you reload the page. If the files do not appear, you may need to change the privileges required to access the folder: sudo chmod -R 755 ~/walle-replica/web_interface/static/sounds
If you have any questions or comments, please leave a reply below.

This Post Has 79 Comments

  1. i have problem with arduiuno code
    exit status 1
    expression cannot be used as a function

  2. My wall-e is moving ! In web interface, I click on “settings” and arduino connection was not connected, So I connected it and… Tadaaaa ! It is moving.
    but (^^) :
    – My Wall-e go forward if I put the joystick on the left (-X axle). If I put the joystick on the top, It go on the right. If I put the joystick on the bottom, It go on the left. If I put the joystick on the right, it go backward. I have an azerty keyboard, it change maybe something ?
    – I had a problem with the sound, milollo’s comment resolve it
    – I have problem with eyes servo and neck bottom for this moment.

    I connected a bluetooth speaker with a 3mm audio jack (your program seems no working with bluetooth sound ?) to have a louder sound.
    In the instruction, you said to use ctrl + – and not to go to a specific line. I have to use ctrl + – on my raspberry (ctrl + _ zoom out the display)

  3. New question :
    9. Raspberry Pi Web Server A)6)D)
    I have to replace ARDUINO by my device name ?
    echo $result command display me this :
    /dev/ttyUSB0 - USB2.0-Serial /dev/ttyAMA0 - ttyAMA0
    My device name is ttyAMA0 ?
    I tried to replace at line 92 “ARDUINO” to “ttyAMA0” but it doesn’t work, when I try to connect into the IP address, after adding my password and click on “submit”, I have an error :
    Internal Server Error
    The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

    Thank you for your help

    1. Everything was the same as yours, the name did not change, it left “Arduino”, to connect the server you need to create a folder for sounds. Everything worked !!

    2. Hi, I don’t replace “Arduino” at line 92 and I create folder for sounds (and add sound). Now I can connect to the server, thank you (nothing’s happened when I move the joystick, and I can’t see the name of sound and I can’t launch sound at this moment). I nearly managed to !
      https://zupimages.net/up/19/42/1spd.jpg

  4. Hi, I believe there is a little mistake on your circuit diagram. 12V to 5V dc buck converter has two “IN +”, it’s “IN-” for the black wire, isn’t it?
    I’m going to test my wall-e. Step 3 of “Testing the Main Program”, my wall-e doesn’t react. No problem to upload the program on my UNO copy (no error). In the Arduino IDE: Serial monitor displays this: 23: 39: 05.364 -> ⸮⸮⸮⸮⸮⸮ (it add a “⸮” when i send command “a” for example).
    My USB cable is connected to my UNO, and the battery is connected to the 12V to 5V buck converter (the same connection in UNO is not plugged to the battery). Sorry for my english, I hope you can help me (and understand me! ^^). I’m a beginner, this is my first “serious” electric project. Thanks
    https://cdn.thingiverse.com/assets/e1/ca/ea/16/73/general.jpeg
    https://cdn.thingiverse.com/assets/11/15/a1/22/5e/whereiplugbattery.jpeg
    https://cdn.thingiverse.com/assets/d3/e9/c1/e8/7f/whereidontplugbattery.jpeg

    1. I’ll correct the minor misprint in the diagram when I have time. Your wiring looks alright to me. The serial monitor often shows weird symbols like that if you mistakenly use the wrong baud rate. Make sure you set the rate to 115200. Also make sure that you are using the newest version of the Arduino code. I fixed some bugs in the code about a month ago. Please also check out this comment.

    2. The rate wasn’t 115200. Motors are working now ! thx

  5. Hello ı wanna start my usb camera on web interfrance but ı do all of details to adding a camera stream bu ı taked this eror how i slove this thank you

    File "/home/pi/walle-replica/web_interface/app.py", line 248, in settings
        if onoff_streamer() == 1:
      File "/home/pi/walle-replica/web_interface/app.py", line 143, in onoff_streamer
        result = subprocess.run(['/home/pi/mjpg-streamer.sh', 'stop'], stdout=subprocess.PIPE).stdout.decode('utf-8')
      File "/usr/lib/python3.7/subprocess.py", line 472, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
        restore_signals, start_new_session)
      File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
        raise child_exception_type(errno_num, err_msg, err_filename)
    FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/mjpg-streamer.sh': '/home/pi/mjpg-streamer.sh'
    1. As the error says, it can’t find the “mjpg-streamer.sh” file. Make sure that you put the script file into the correct location in the /home/pi/ folder and that the name of the file is correct; otherwise the python program won’t be able to find it.

    2. thank you for support yes ı change name mjpg-streamer.sh.save = mjpg-streamer.sh its solved my problem but ı taked this eror again how ı fix that?

      Turning on/off MJPG Streamer: 1
      /bin/sh: 1: /home/pi/mjpg-streamer.sh: Permission denied
  6. Simon…
    say, what do you have to do to use the automatic sound function?
    Or the chain play of the drive in motion, e.g. sounded great in the video.
    It would be great if we could realize something like this in our own replica.
    Greetings
    Michael

    1. At the moment there is no automatic sound function; I haven’t gotten around to programming it yet! The squeaking sounds you hear in the video were the mechanical sounds my robot actually made when in motion. I guess I didn’t oil it enough 😀

  7. Sir, everything is working fine except motors are not starting,what could be the reason for the same?

    1. Are you refering to the 12v motors or the servo motors? Are they the motors getting sufficient power? Are you using the same equipment and wiring as in my diagram? Have you tested the motors on their own to make sure that they work properly? Please provide more information.

    2. sorry for short information, both motors are not working either 12v motors or the servo motors. Yes, the motors getting sufficient power (I checked with multimeter). I don’t find the rev3 shield, instead, I’m using L298N Driver which has the same Driver Ic that Rev 3 has. I checked the normal program for rev3 for my wiring, it is working fine.
      problem is coming when I give command with the serial monitor( I Make sure that the baud rate it 115200 and the line ending is set to ‘Newline’). The character ‘w’ does not appear in the serial monitor, and it is not showing that it has been received. For hit and trail, I comment on the line No.-160 setupTimer1(100);, then after only serial monitor starts showing starting program and start receiving character.

    3. The problem you are experiencing has already been fixed, however you are using an old version of the code. In the new version, the function setupTimer1() has been removed since it conflicted with the PWM servo library, causing the Arduino sketch to crash. Please use the newest version of the code (available on GitHub), and make sure you are using version 1.0.2 of the Adafruit_PWMServoDriver.h library.

  8. Hello Simon !

    In the manual mode of the web interface, can you control individual servos somehow, such as by entering shortcuts (as with the serial control via Arduino IDE) ?
    Is this somehow feasible?

    Greetings
    Michael

    1. At the moment the code does not support this, but it is definitely something I’m thinking of adding in the future.

  9. On your part list it says the following, is this for just one set of tracks? Or is this the right amount in total?

    60 tread-plate-x70
    61 tread-pin-x140

    1. It is the total amount; 35 plates and 70 pins for each side.

  10. Hello!
    I use the Rasphberry Pi 4 with Noobs 3.2.1 with Raspbian. However, audio output only works via HDMI. If I select the analog output on the volume control when the headphones are plugged in (green check mark), the slider cannot be moved and lingers at “2” volume level. After that, there is no green check mark left in the output selection, neither analog nor HDMI. When I select HDMI again, the volume of the HDMI output can be controlled again. Only the analog output cannot be selected or regulated. Is this a bug of the Pi 4, or do I need to install a special software or jack adapter? Thank you, with kind greeting, Michael

    1. Oh yeah, I remember I needed to use the command amixer cset numid=3 1 to ensure the Pi only output audio to the headphone jack (I’ve updated this in the instructions above). I didn’t notice any issues with the volume slider, so I’m not sure what else could be causing that.

  11. Hi
    I have just started printing parts and have ordered all the hardware but being new to this I have questions that I hope aren’t too daft:
    Firstly, in the video we briefly see a tablet being used to control WALL-E – what app is used and where can I get it?
    Secondly, you make reference to a Pi – I assumed inside WALL-E to control sound and harvest video – but it is not shown in the wiring diagram, so how is it connected? Or is it standalone?

    Also, rather than print the track pins I thought it would be easier to buy or make metal pins – what size would they need to be?

    I thank you in advance for any assistance and that of others.

    Thanks
    Steve

    1. What you see on the tablet is the web interface which is run directly on the Raspberry Pi. You can access it from any computer on the same Wifi network. The USB port of the Raspberry Pi is connected to the USB port on the Arduino. You should be able to run the Pi using the same 5V power as the servo motors (the 12v-5v converter I listed has a USB port from which you can power the Pi directly). The tracks are designed to only work with the printed pins. You will need to redesign them if you want to use metal pins.

  12. Hi!
    Have the electronics now so far that I get the movements of the drive with the web interface controlled. Only the servo motors will not move when I try to control them in the Arduino IDE in the serial window.
    The movements of the drive function with ‘w’, ‘a’, ‘s’ or ‘d’ works well.
    Only the servo control with ‘j’, ‘l’, ‘i’ or ‘k’ does not react.

    Is this due to the fact that the calibration of the servos is not yet possible, or did I destroy the Adafruit PWM servo board? I use the library 1.0.2 for the PWM servo board.

    Sincerely

    1. The servo motors should move, even if they are not calibrated properly. The first thing I would check is that all the wires are connected properly, and that the motors are getting constant 5V power. I bought a non-official replica of the PWM servo board and found that one of the transistors was missing, stopping the power from the screw terminals from being supplied to the motors. I solved this by adding a wire to bridge the gap between two of the pads, as shown in the image. If you got the official Adafruit version, this should not be an issue.

      PWM Servo Controller Fix

    2. Hi!
      Maybe it’s a stupid question, but does the PWM servo board work without a capacitor, or does a capacitor have to be soldered in?

    3. Yes it should work without the capacitor. The capacitor helps to smooth out power spikes/drops when the motors suddenly need a lot of current.

    4. Hi Simon!
      I have now bought the same pwm board, and soldered the same solder bridge as in your picture.
      Now the servos are moving !!
      I’m very happy about it 🙂
      Only the neck bottom servo does not move.
      Could it be that the positioning information in the sketch for the neck bottom servo is not ok? They all stand at -1 for the neck bottom servo ?!
      Or is that for a reason?

      Thank you with a friendly greeting

    5. Yes, -1 disables the servo. If you change the numbers so that they are similar to the other servos, it should work. Originally the design for the neck bottom servo was different, and it didn’t work properly so I had to disable it on my robot. I have since updated the design, and am in the process of upgrading my own Wall-E at the moment (this is the reason why it is taking me a while to publish the calibration instructions; I need to get my own robot working before I can test the steps).

    6. Nice job, it’s great to see it working! I quite proud of that random movement code; especially the eye movements really give life to the robot 😀

  13. Hi Simon,
    A little thing.
    It would be interesting to know, at the time of mounting the servomotors, in what angle / position we have to mount each according to how the programming is carried out.

    My Wall-e makes strange movements.

    1. Good point, I’ll include that when I add the calibration instructions.

  14. Hola, estoy con problemas en Arduino. Lanza este mensaje:
    Hello, I am having problems in Arduino. Launch this message:

    sketch\Queue.hpp: In member function 'T Queue::peek()':
    Queue.hpp:174:16: error: expression cannot be used as a function
      return qFront();

    Do you know why it is?
    Thank you

    Sabe a que se debe?
    Gracias

  15. Hello Simon!
    My Wall-e project is very advanced. I had problems with the audio. I could not play the ogg files. I’ve solved it by fixing some lines of the code in “app.py”

    I added in line 15 “import time”
    I have modified on line 274 the address “./static/sounds/” by “/home/pi/walle-replica/web_interface/static/sounds/

    I have deleted the “#” leaving the following active lines:

    start_time = time.time ()
    while pygame.mixer.music.get_busy () == True:
      continue
    elapsed_time = time.time () - start_time
    print (elapsed_time)

    I want to see wall-e move !!

    1. Very beautiful!
      This also fixes my audio problem.
      Thanks!

  16. Hi Simon!
    I already have all the pieces printed and Wall-e assembled. Now I am involved with electronics and programming. What speaker did you put on wall-e? Does the raspberry pi have enough output power?

    1. I used an old mono-amplifier board I had lying around, which is powered by a separate 9V battery. Instead, you could simply use a small battery powered speaker [such as this one] which could clip directly into the Raspberry Pi.

  17. hi Simon B.
    Excellent work my congratulations.
    It would be possible to get the files in SolidWorks, I would like to work with my students.

  18. Hi Simon,
    Thanks for a great tutorial. I am about halfway through printing all of the parts and so far everything is coming out great.
    With regards to controlling Wall-E, I want to use a PS3 controller over Bluetooth. I am not very far advanced through setting up the electronics (focus now is all the printing) but would like your thoughts on this.
    I have installed libraries and setup the PS3 controller to the raspberry pi and so far am receiving raw input signals. Would you have any recommendations on how I would integrate this with your program?

    1. Yes that definitely is possible to do. I think you can use the python “pygame” library to interface with the controller (for example like this). If you look at lines 191 to 200 of “app.py”, you can see how the web interface gets the current X and Y axis values of the javascript joystick, and converts these values into numbers between 0-100 which are sent to the Arduino. You could copy this code and create a function which runs at regular intervals (for example every 25 milliseconds), reading the value from your PS3 and sending it to the Arduino.

  19. i take this eror

    Hello from the pygame community. https://www.pygame.org/contribute.html
    Traceback (most recent call last):
      File "app.py", line 17, in 
        app.secret_key = os.environ.get("SECRET_KEY") or os.random(24)
    AttributeError: module 'os' has no attribute 'random'
    1. I fixed it by replacing os.random(24) by os.urandom(24) in the code (line 17)

  20. Amazing work, thank you 🙂

    I’ve been having issues fitting the parts together after printing (especially the body), is that something that you experienced as well or could you just fit them with no effort ? for example the holes for the M3 nuts are not big enough, I have to pretty much file/cut my way through everything in order for the parts to fit together, I don’t mind doing it but I’m just wondering if there might be an issue either with the model or with my printer/slicer

    Thank you again for this great project, this will keep me busy for a while 🙂

    1. I made a lot of improvements to the Wall-E design after I built my version, including adding all of the slots for the M3 hardware. As a result, I haven’t actually tested the fit of the improved design in person. I did add a tolerance of 0.2mm to all the slots and connections, and I double-checked all the files in CAD to make sure that the hardware should fit. Four other people have already uploaded their “Makes” of Wall-E onto Thingiverse, so you should ask them if they had the same issue.

      It could be that your 3D printer is over-extruding, causing the slots to be tighter than they should be. You should measure the size of the slot on the parts you printed, and compare it to the CAD model. Another potential issue might be that your X, Y, or Z axes need to be recalibrated.

    2. Thank you for your answer, I use an Ultimaker 3 and have usually very little issues, but here I had weird behaviour which I think came from my rather old version of Cura, it was sometimes pausing mid print but still extruding material, causing blobs so maybe that’s the culprit.

      I’m printing the arms for the moment and have encountered no issues, maybe it’s worth reprinting the body we’ll see.

      Do you mind telling me the type of camera that you used for the eye ? I don’t know which one to buy since they usually don’t publish the size of the board inside the enclosure 🙂

      Thanks !

    3. I used an old Creative! webcam I had lying around; it’s not great and I’ll probably replace it at some point (I also had to cut some edges off the circuit board to make it fit). The official Raspberry Pi Camera seems to fit into the head fine, but rewiring the ribbon cable to make it longer may be difficult. You can find a list of USB webcams that work with the Raspberry Pi here; you should select one that can be powered directly from the Raspberry Pi (without a powered hub), and is relatively small.

    4. Thank you, I’ll try with the Pi stock camera and a longer ribbon, it will be tricky for this to be discreet on the robot 🙂
      I also found the culprit for the printing issue I had, I was printing with all windows open because I was painting indoor at the same time, there was just enough warping to make me lose my mind, I reprinted everything in an enclosure and everything fits fine now with minimum sanding/filing, a few hammer strokes for the M3 nuts

      Thank you again !

  21. Hello, could you please help with the dc 12v battery pack and the camera ? Can you suggest a model ?

  22. I get this error; what I need to do
    ImportError: No module named 'Queue'

    1. You need to download all the files from the “wall-e” folder in the GitHub repository, as it says in the instructions above! This includes “Queue.hpp” and “MotorController.hpp”; they should appear in the Arduino IDE when you open “wall-e.ino”

  23. When I start the web interface I take this error what I need to do

    pi@raspberrypi:~ $ python3 ~/walle-replica/web_interface/app.py
      File "/home/pi/walle-replica/web_interface/app.py", line 161
        if item.endswith(".ogg")
                               ^
    SyntaxError: invalid syntax
    1. Replace line 161 of app.py with this: if item.lower().endswith('.ogg'):
      The line needs to end with a colon. If it still isn’t working, make sure you have the newest version of python3 installed.

    1. I just tested my code again, and that problem is happening for me as well (it was working perfectly a few months ago!). It seems the newest version of the Adafruit PWM library is causing the issue. Try installing an earlier version of the library (1.0.2 seems to work), by going to Sketch->Include Library->Manage Libraries…

      I’m also noticing a problem with the timer interrupt function (wasn’t happening before either, perhaps being caused by a new incompatibility). I might update the code so that it uses software timers instead of hardware interrupts.

    2. Ok, I’ve updated the code on GitHub now so that the second issue is resolved. I’ve tested it with version 1.0.2 of the Adafruit PWM Servo Library and it definitely works.

  24. Thanks for the tutorial. I’ll install it tomorrow

  25. Hey Simon, Great Job. I was wondering if you have any advice on what battery to use?

    1. I would get 12V lithium ion battery, maybe with a capacity of around 4800mAh.

  26. Has anyone ever tried to use an ESP 32 Instead the Pi and an Arduino?
    My first attempts were not so successful.
    maybe beause i didn’t connected the OE of the Servo board.
    It seem to be not so easy to make an Webpage. But if you reduce it to Text, Slider and Button it looks like possible.
    Don’t know if you can play sounds and how to connect the 12V DC motors.
    I didn’t get the motors yet.
    I think it should be worth to try it.
    The EPS 32 hat WiFi, Bluetooth, 2 * I2C, and lots of GPIOs.
    And it is cheaper than an Arduino.

  27. Very well done!
    I’m not ready at all. But while i was testing the Servos i had a timing problem in the wall-e.ino.
    In the Initial Setup the program stopped during the call “queueAnimation”. I don’t know how to debug that.
    So I inserted a line just before:
    Serial.println("2. Servo test!");
    The output in the Arduino IDE stoped at
    2. (Servo test! is missing)

    Then I inserted the two lines with the serial print:

    void queueAnimation(int seq[][SERVOS+1], int length) {
    	for (int i = 0; i < length; i++) {
    		for (int j = 0; j < SERVOS+1; j++) {
    			Serial.print("i: "); Serial.println(i);
    			Serial.print("j: "); Serial.println(j);
    			queue.push(seq[i][j]);
    		}
    	}
    }
    

    Then it works without problems. Strange.

  28. Hi, I got to enter the web. But it doesn’t connect me to the arduino and the usb camera.
    I installed:
    python3
    python3-flask
    python3-serial
    python3-pygame
    USB detects it as / dev / ttyUSB0 and / dev / video0
    What is the problem?

    1. To connect to the micro-controller, you need to insert the correct name of the device in line 94 of app.py, for example try “Arduino”.

      I used “mjpg-streamer” to connect to the USB camera and display the image on the web-interface, so that is another package you need to install. I am putting together some installation and setup instructions for the web-interface at the moment, but it will probably be another week or two before I get that finished.

    2. It would be very interesting a turorial. I have modified some stl files to put laser between the eyes and functional buttons on the body and I have also added LED ring to the eyes.
      If you are interested, I can send it to you by mail.
      When I get home tonight I show you pictures.
      Thank you for the work you have done.

    3. Those modifications sound great; I’m definitely interested to see what it looks like! You should upload the images to Thingiverse as a ‘Make’ to showcase your version of the robot.

    4. Tonight I upload the modified files and send the link.
      I will add you as the original author of the project.

  29. Very good project. What is the control page password?

    1. You can set your own password on line 181 of app.py. By default it is: put_password_here

  30. Hello how i control Wall-e with my laptop?
    ı use to Visual Studio Code and open app.py everything is good (arduino connect pc and i can open wall-e controller on internet)
    but when i play with joystick wall-e robot not move.

    1. The app.py web interface controller is intended for use on a Raspberry Pi, but I guess it is also possible to use it on a computer (I don’t have any experience with this, so I might not be able to help you out). In the web interface, go to the ‘Settings’ tab and click on the ‘Connect to Arduino’ button. Does the interface say that the connection is successful?

      When you move the joystick, the numbers displayed below it will turn green if they have been successfully sent to the robot. It is also possible to control the robot using the Serial Monitor in the Arduino IDE. You can send the characters ‘w’, ‘a’, ‘s’ and ‘d’ to move the robot around.

    2. The interface seems to be running correctly in the images. Perhaps the issue is with the Arduino…
      The serial monitor should be empty when you open it. Try sending the character ‘w’, which should make both motors move forward. Make sure that the baud rate it 115200 and the line ending is set to ‘Newline’. The character ‘w’ should then appear in the serial monitor, showing that it has been received.

  31. Nice job! Really neat! 🙂

Leave a Reply