Fully 3D-printed
A few years ago, I found a Wall-E project from Chaos Core Tech. Unfortunately there were a few problems with the motor and the design. Regarding this I dropped off and forget this idea a while.
After some years, there is a fork of this project. Simon designed the printable parts from scratch and do a great work. I´m excited about the precision of the stl files. All parts fits fine. You can find the project of Simon on his page. A new project was born.

Electronic parts
Simon uses a mix of electronic parts like Arduino and Raspberry. My project should use other parts to realize remote control of the Wall-E:
ESP32-CAM
For video distribution I will use an esp32-cam module. It´s programmable via Arduino IDE. You can buy it for less then 10€.

ESP8266 with motorshield
To control motors, I will use the motorshield with esp8266 on top. This will be my base for controlling all remote parts like the motors, the servos, sound and perhaps the solar display.

I2C Servo shield
The servo shield should control all servos of Wall-E. It´s connected via I2C and able to control 16 servos.

Sound chip DFPlayer mini
I used the DFPlayer in other projects like the kids radio. This module owns a serial interface to play mp3 files. The module includes a 2W emplifier to connect a speaker directly. This will be the module for sound effects.

Power source
As power source I will use three Li-Ion cell 18650 and a balance board. This will support 12V and protection system to the Li-Ion cells. Also charging is possible by using 12V source.

Wall-E Solar panel
I ordered a small OLED display with I2C connector to use as Wall-E solar panel. This is a nice add-on, if all works fine.

Assemble the first wheel construction

Motor mount

Modified chain

I changed the design to use metal as connectors between the chain parts. I changed the design in sketchup and printed some test parts. Now it fits and works perfect. Let’s print the rest of the chain.








Today I run a short test program to trigger all servo`s. Next step will be implement a calibration routine who will store all values in the EEPROM.
Hi, do you have more information on how you did make the oled display to work like that?
Looks good.
Regards.
In Setup part:
// Initialising the UI will init the display too.
display.init();
display.flipScreenVertically();
This are the sub routines:
void drawBatt10() {
// Fill the rectangle
display.fillRect(108,0,16,64);
}
void drawBatt20() {
display.fillRect(96,0,7,64);
}
void drawBatt30() {
display.fillRect(84,0,7,64);
}
void drawBatt40() {
display.fillRect(72,0,7,64);
}
void drawBatt50() {
display.fillRect(60,0,7,64);
}
void drawBatt60() {
display.fillRect(48,0,7,64);
}
void drawBatt70() {
display.fillRect(36,0,7,64);
}
void drawBatt80() {
display.fillRect(24,0,7,64);
}
void drawBatt90() {
display.fillRect(12,0,7,64);
}
void drawBatt100() {
display.fillRect(0,0,7,64);
}
void battMess() {
// Calculating battery level and draw it on display
battery = analogRead(analogPin); // read pin
Serial.print(“Analog : “);
Serial.println(battery); // print out value to display
// my analog value ist at 12 volt = 641, 8 volt = 430
// Calculate battery capacity and push it to display
if ( inRange(battery, 599, 1024) )
{
if ( battery_level != 10 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
drawBatt60();
drawBatt70();
drawBatt80();
drawBatt90();
drawBatt100();
display.display();
}
battery_level = 10;
}
if ( inRange(battery, 579, 598) )
{
if ( battery_level != 9 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
drawBatt60();
drawBatt70();
drawBatt80();
drawBatt90();
display.display();
}
battery_level = 9;
}
if ( inRange(battery, 559, 578) )
{
if ( battery_level != 8 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
drawBatt60();
drawBatt70();
drawBatt80();
display.display();
}
battery_level = 8;
}
if ( inRange(battery, 539, 558) )
{
if ( battery_level != 7 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
drawBatt60();
drawBatt70();
display.display();
}
battery_level = 7;
}
if ( inRange(battery, 519, 538) )
{
if ( battery_level != 6 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
drawBatt60();
display.display();
}
battery_level = 6;
}
if ( inRange(battery, 499, 518) )
{
if ( battery_level != 5 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
drawBatt50();
display.display();
}
battery_level = 5;
}
if ( inRange(battery, 479, 498) )
{
if ( battery_level != 4 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
drawBatt40();
display.display();
}
battery_level = 4;
}
if ( inRange(battery, 459, 478) )
{
if ( battery_level != 3 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
drawBatt30();
display.display();
}
battery_level = 3;
}
if ( inRange(battery, 439, 458) )
{
if ( battery_level != 2 ) {
display.clear();
display.display();
drawBatt10();
drawBatt20();
display.display();
}
battery_level = 2;
}
if ( inRange(battery, 0, 438) )
{
if ( battery_level != 1 ) {
display.clear();
display.display();
drawBatt10();
display.display();
}
battery_level = 1;
}
}
I messure the battery level through the analog in and show it on the display. Tell me, if you need more infos.
Lars
Hi, great project, compliments. is there any wiring to the components? that would be great
Hi
Actually not. It is described in the code of arduino indirectly. I does not found time in the last days to go forward with that project.
OK. the A0 Pin is connected to what?
Hi can you send me a pic from your kabel plan please i have the parts and noch plan
ups no plan
Hi, this is what I searched as alternative to chillibaskets solution with the raspi an the arduino in combination.
Is there anywhere the code available?
And how do you control the wall-e?
Hi Tobias
I will upload this to my github soon. I realized an internal network via Wifi. The esp32-cam component supports the web-cam stream, the esp8266 owns a motor driver board and providing the control of servos and motor. The esp8266 working as an Accesspoint with DHCP. The esp32-cam connects to the esp8266 and stream the video to the provided webpage of the esp8266. The webpage provide a touch control for motors to drive the robot. You will see the camerastream as live background image. The code is not ready yet. This is an ongoing project. If you will get news, you are able to follow me on https://github.com/eisbaeeer
Greets Lars
Very cool, thank you. I’m following you on github now.
I‘ve finished printing a week ago and have assembled my Wall-e now including the servos. I have the esp with the motorshield and the servo board at home but are waiting for the motors and battery pack from China.
Oh and I have the dfplayer Module and a 12 to 5 Volt Converter Board.
This project is so cool and i‘m looking forward how it works at the and 😉
There should be some modifications regarding the both 3D-printed motor holder. I will change the design and print it again. In my case the holder is broken. This is an ongoing project, you know?
Actually my Wall-E is on hold regarding really important projects like a CO2-traffic light for my kids on shool.
It´s good to follow me on github or kidbuild.de
Greets Lars
uups, the project is on github a while. You will find the project in this repo:
https://github.com/Eisbaeeer/Wall-E
Hi Lars,
i started programming the esp32 cam and the esp8266 with your code from github, but I’m a little confused. It seems that the esp8266 and the esp32 cam also want to connect to the ssid WALL-E, but they can’t because there is no ap with this.
In the documentation it seems that the cam module should not connect but serve the ap and the esp8266 should connect to the cam’s ap as well as the user? Am I right?
Ok. I found your Comment: so the esp32-cam is the Client and the esp8266 is the ap.
How dies the Streaming of the cam to the webinterface of the esp8266 work? I can‘t find anything in your Code.
Hold on. I change it, regarding the video stream through the esp8266. It is a better performance, if the esp32 act as AP and the esp8266 as wifi client. Otherwise the whole videostream must go through the esp8266 wifi. So I changed it. Greets