Перевод проекта ESP32 Wall Climbing RobotCircuit Digest.

Мы видим роботов, лазающих по стенам, от хоббийных до серьёзных проблемно-ориентированных, которые используются для инспекции, наблюдения, очистки и т.д. Когда мы говорим о роботах вообще, робот может быть пожарным роботом, роботом-следопытом, самобалансирующим роботом или любого другого типа, который имеет какие-то специфические функции или решает конкретную проблему. Если говорить о роботах, лазающих по стенам, они полагаются на большие дроновые моторы, 5-дюймовые пропеллеры и громоздкие LiPo-батареи для генерации достаточной удерживающей силы для лазания по вертикальным поверхностям.

В этом проекте ESP32 wall climbing robot мы бросаем себе вызов построить гораздо меньшую версию. Цель — создать лёгкого робота, лазающего по стенам, достаточно маленького, чтобы уместиться на ладони, при этом всё ещё генерирующего достаточное разрежение для лазания по стенам и ползания по потолкам. Вместо того чтобы он выглядел как очередной робот, мы собираемся спроектировать его в виде настоящего жука с помощью кастомного лёгкого 3D-печатного панциря. Если вы wondering, как сделать простого робота, лазающего по стенам, дома с помощью ESP32, эта сборка проведёт через весь процесс, от теории разрежения до кода.

Что такое робот, лазающий по стенам?#

Робот, который лазит по стенам — это тип робота, который может прикрепляться и перемещаться по вертикальным или перевёрнутым поверхностям, таким как стены или потолки. Один из методов, который этот тип робота использует, чтобы убедиться, что он способен прилипнуть к поверхности — это вакуумные насосы, магнитная адгезия (в случае железных поверхностей) или вращающиеся пропеллеры, которые создают зону низкого давления на нижней стороне робота. Промышленные версии роботов этого типа используются для проведения инспекций, очистки резервуаров или разведывательных миссий в недоступных для человека местах. Этот проект пытается построить робота того типа, который был бы размером с маленького жука и управлялся бы с помощью микроконтроллера ESP32.

Ключевые преимущества этого ESP32 Wall Climbing Robot#

Понимание преимуществ этого ESP32 wall climbing robot по сравнению с типичными конструкциями может помочь осознать, почему его стоит построить:

  • Лёгкий и компактный: Весит около 102 граммов, позволяя уместиться в руке, не being as cumbersome as production devices.
  • Без клея и сухих остатков: Этот робот не может повредить стены и потолки, поскольку использует воздух, а не какие-либо липкие вещества.
  • Нужен только один мотор: Он производит более 360 г силы сцепления с помощью всего 1 BLDC-двигателя, экономя и энергию, и сложность.
  • Преимущество беспроводного соединения: Может управляться через собственный веб-сервер ESP32 с использованием браузера с мобильного телефона.
  • Низкая цена: Устройство может быть собрано из широко доступных деталей, делая его доступным для любителей.
  • Доступный ремонт: Все компоненты можно легко скачать.

Компоненты, использованные для создания робота, лазающего по стенам#

Ниже полный список компонентов, использованных для создания этого робота, лазающего по стенам, вместе с тем, что каждая часть делает в общей системе.

КомпонентОписаниеКоличество
14300KV Brushless DC MotorОбеспечивает разрежение / удерживающую силу робота1
23-inch Drone PropellerДействует как основной пропеллер1
3ESP32 Development BoardОсновной контроллер1
4100 RPM N20 MotorsОбеспечивает движение робота2
5Lightweight WheelsКолёса с резиновыми grips дают лучшее сцепление4
62S, 6-8A ESCУправляет BLDC-мотором1
77.4V 350mAh Li-Po BatteryПитает всего робота1
8MX1508 Motor DriverУправляет моторами N201
9MP1584 Buck converterОбеспечивает стабильные 5V для ESP321
Компоненты, использованные для создания робота, лазающего по стенам, включая ESP32, BLDC-мотор, ESC, моторы N20 и батарею, разложенные на столе

Компоненты, использованные для создания робота, лазающего по стенам

Как работает разрежение робота, лазающего по стенам?#

Вместо использования клейких подушечек или вакуумных насосов, этот робот использует высокоскоростной BLDC-мотор и пропеллер для генерации области низкого давления под шасси.

Когда пропеллер вращается, он непрерывно вытягивает воздух из-под робота и выбрасывает его вверх. Это создаёт разницу давления между внутренностью корпуса и окружающей атмосферой. Более высокое атмосферное давление снаружи прижимает робота к стене или потолку, создавая удерживающую силу, необходимую для лазания. Чем сильнее разница давления, тем больше удерживающая сила.

Измерение удерживающей силы#

Вся сборка была помещена на весы. Весы, которые я использую, показывают положительные значения, когда вес находится сверху, и отрицательные значения, когда мы тянем платформу вверх. После взвешивания всех электронных компонентов, включая батарею, плату ESP32, BLDC-мотор, ESC и движущие моторы, общий вес составил приблизительно 137 граммов.

Для надёжного лазания сила разрежения должна быть значительно выше собственного веса робота. Безопасная и оптимальная удерживающая сила — около двух раз от общего веса. Поэтому наша целевая удерживающая сила —至少 274 грамма. После испытаний и оптимизации конструкции мы получили силу разрежения 360 граммов.

Принципиальная схема ESP32 Wall Climbing Robot#

Ниже принципиальная схема для Wall Climbing Beetle robot.

Принципиальная схема ESP32 Wall Climbing Robot

Принципиальная схема ESP32 Wall Climbing Robot

Мозг робота — модуль разработки ESP32. Моторы N20 подключены к выходным пинам драйвера моторов MX1508. 4 входа драйвера моторов подключены к GPIO 16, 17, 18 и 19 ESP32 соответственно. ESC мотора подключён к выходным пинам 2S ESC, который подключён к GPIO pin 4. Если вам нравится смотреть больше проектов на ESP32, посмотрите нашу коллекцию проектов ESP32.

Понижающий преобразователь, которым является MP1584, подключён напрямую к батарее 7.4V 350mAh LiPo. Выход 5V используется для питания ESP32, а также драйвера моторов. 2S ESC также подключён напрямую к батарее, чтобы мы получили полный потенциал батареи.

3D-модель Beetle Robot#

Давайте подробно рассмотрим 3D CAD-модель Beetle Robot. Ниже виды сверху и снизу робота.

Виды сверху и снизу 3D CAD-дизайна шасси робота-жука, лазающего по стенам

Виды сверху и снизу 3D CAD-дизайна шасси робота-жука

Нижняя часть, или шасси, на которой смонтированы все компоненты, имеет толщину 0.5 мм. Изначально колёса были reused от старой игрушечной машины, но всё же, для уменьшения веса, они были напечатаны на 3D-принтере с толщиной 0.5 мм, и мы reused резиновые grips для лучшего сцепления на стенах и потолках. Обычный 2-мм стержень был cut и использован как ось с передними колёсами. Задние колёса были смонтированы напрямую на валы моторов. Рога и ноги жука приклеены к основному корпусу. Рога действительно выглядят как два отдельных, но для simplicity они спроектированы как единая деталь, чтобы быть stronger together.

Верх жука имеет толщину 0.4 мм. Чтобы правильно смонтировать верх и низ, мы добавили slots в нижнюю часть, которые match отдельные полосы верха жука. Просто connect отдельные полосы к соответствующим slots и apply some glue; обе части соединены. STL-файлы можно скачать и напечатать на 3D-принтере по необходимости.

Проектирование верхнего панциря жука#

Теперь давайте посмотрим на различные шаги, involved в проектировании верхней части жука.

Диаграмма процесса проектирования, показывающая преобразование паттерна панциря жука в паттерн Вороного с использованием Fusion 360 и Meshmixer

Процесс проектирования панциря жука

Самая крутая и интересная часть всего проекта — дизайн верха жука. Это involved изрядное количество навыков дизайна, механических знаний и некоторой креативности. В инженерии многие advancements inspired by nature. Для нашего жука мы также planned имитировать некоторые паттерны настоящих жуков. Но для sure будет gap между дизайном и реальностью. Мы looked for различные дизайны и паттерны, которые seen у real-life жука, made hand sketches, и got suggestions от ChatGPT. Мы picked honeycomb-like pattern, который был given by ChatGPT, и converted it в Voronoi pattern. Весь процесс проектирования показан в simple diagram ниже. Изначально у нас была 3D-модель в Autodesk Fusion. Мы converted it в Surface model design и then imported it в Autodesk Meshmixer, где мы flattened the design. Мы again imported flattened design в Fusion, fixed overlapping issues, которые happened when flattening the design, resized it to match actual size и then 3D printed. После 3D-печати дизайна мы mounted it к нижней части жука и glued the joints together.

3D-печать тела жука#

Ниже шаги от начала до конца, involved в проектировании, fabrication и modelling тела жука.

3D-печатные части панциря робота-жука в красном и чёрном цвете, разделённые на две половины перед сборкой

3D-печатные части панциря робота-жука

Печать curved pattern немного complicated, так как она только 0.5 мм thick и requires a lot of supports to hold the curves. Также chances are high, что мы going to break the design trying to remove the supports. После того как первая 3D-печать failed, я planned flatten the design for printing, и после того как печать done, reshape it в actual design by heating it. Flattened top design был large enough, что didn’t fit the print bed. Так что design был sliced в two halves. Как seen в image выше, red beetle top был two halves. Then they were glued together. Остальные части были printed в black colour. Файлы can be downloaded from link below и printed with colours of your choice.

Сборка робота, лазающего по стенам#

Ниже детали сборки робота для reference.

Полная сборка компонентов робота-жука ESP32, лазающего по стенам, показывающая BLDC-мотор, батарею и layout проводки

Полная сборка робота-жука

Как вы можете see, выше — полная сборка Beetle. В heart — BLDC-мотор с пропеллером. ESP32 и Battery были moved to the center as much as possible to reduce tripping torque. Buck converter и motor driver mounted on top of the N20 motor mounting clamps. Jumper wires from previous version были replaced with normal wires и were organized properly. После properly assembling all the parts, робот closely resembled a beetle while remaining lightweight enough for wall-climbing. Завершённый робот successfully climbed vertical walls, crawled across ceilings, и demonstrated how careful optimization of weight distribution, structural design and airflow adjustment can produce an effective miniature wall-climbing beetle robot.

Веб-приложение для управления роботом#

Ниже detailed description мобильного веб-приложения, которое мы используем для управления жуком.

Интерфейс мобильного веб-приложения для управления роботом ESP32, лазающим по стенам, со слайдером BLDC suction и кнопками направленного движения

Веб-приложение для управления роботом

После того как код flashed в плату ESP32 using Arduino IDE, serial monitor displays IP Address of the ESP32. Enter it in your browser, and you’ll be taken to following Web page. It has a really simple interface. starts with BLDC motor control. Then you have controls for N20 motors as well. For Forward, both motors spin in CCW direction; for Backwards, both spin in CW direction; for Left, left motor spins in CCW and right motor in CW direction and vice versa for Right. For Stop, both motors stop spinning. Есть several other similar kinds of IoT based projects that we have made. All of them listed on our website as IoT projects.

ESP32 Wall Climbing Robot Code Explanation#

Ниже detailed code explanation для этого проекта.

#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "wifi_name";
const char* password = "wifi_password7";
WebServer server(80);
// ESC
const int escPin = 4;
const int pwmFreq = 50;
const int pwmResolution = 16;
// MX1508
const int L1 = 16;
const int L2 = 17;
const int R1 = 18;
const int R2 = 19;
bool bldcEnabled = false;
int throttle = 0;
uint32_t usToDuty(uint16_t us)
{
  uint32_t maxDuty = (1UL << pwmResolution) - 1;
  return (uint32_t)((us / 20000.0) * maxDuty);
}

Библиотеки initialized, WiFi и GPIO pins configured для BLDC motor и N20 Motors. Эта функция “uint32_t usToDuty” converts pulse width (in microseconds) в corresponding PWM duty cycle required by ESC.

void setThrottle(int percent)
{
  if (!bldcEnabled)
  {
    ledcWrite(escPin, usToDuty(1000));
    return;
  }
  percent = constrain(percent, 0, 100);
  uint16_t pulse =
      map(percent, 0, 100, 1000, 2000);
  ledcWrite(escPin, usToDuty(pulse));
}

Эта функция controls BLDC motor speed от 0 до 100%

void stopRobot()
{
  digitalWrite(L1, LOW);
  digitalWrite(L2, LOW);
  digitalWrite(R1, LOW);
  digitalWrite(R2, LOW);
}
void forward()
{
  digitalWrite(L1, HIGH);
  digitalWrite(L2, LOW);
  digitalWrite(R1, HIGH);
  digitalWrite(R2, LOW);
}
void backward()
{
  digitalWrite(L1, LOW);
  digitalWrite(L2, HIGH);
  digitalWrite(R1, LOW);
  digitalWrite(R2, HIGH);
}
void left()
{
  digitalWrite(L1, LOW);
  digitalWrite(L2, HIGH);
  digitalWrite(R1, HIGH);
  digitalWrite(R2, LOW);
}
void right()
{
  digitalWrite(L1, HIGH);
  digitalWrite(L2, LOW);
  digitalWrite(R1, LOW);
  digitalWrite(R2, HIGH);
}

Вышеуказанные функции responsible for stopping the robot, moving forward, backwards, left and right. It functions by turning corresponding GPIO pins High/Low.

void handleRoot()
{
}

Эта функция generates HTML web page that contains clickable buttons for controlling Beetle Robot.

void handleSpeed()
{
  throttle =
      server.arg("value").toInt();
  setThrottle(throttle);
  server.send(200, "text/plain", "OK");
}
void handleBLDCOn()
{
  bldcEnabled = true;
  setThrottle(throttle);
  server.send(200, "text/plain", "ON");
}

Эта функция executes whenever browser sends request to /speed, и speed value extracted, converted into integer и passed to setThrottle() to update ESC throttle. When ON button pressed, variable “bldcEnabled” allows ESC to receive throttle values.

void setup()
{
}

setup() initialises serial communication, configures motor pins as outputs, prints assigned IP address on serial monitor и starts web server.

void loop()
{
  server.handleClient();
}

Функция loop() here is to continuously check whether any browser has sent new HTTP request.

Final Result#

Ниже how we got final results и how efficiently it operates.

Готовый робот-жук ESP32, лазающий по вертикальной стене

Готовый робот-жук ESP32, лазающий по стене

Despite its compact size, robot generates more than 360 grams of holding force, weighs only around 104 grams, and is capable of climbing walls and ceilings using only a single BLDC motor for suction. Проект also demonstrates an iterative engineering approach, where multiple failed prototypes ultimately led to successful design. Along the way, techniques such as suction testing, lightweight optimization, AI-assisted concept visualization, Voronoi modelling, and mesh unfolding were combined to create a functional and visually unique beetle-inspired robot. In addition to this Beetle project, here is a collection related to robotics projects for reference.

Troubleshooting#

Robot vibrating too much on the ceiling. Cause is that suction is not enough. You need to increase suction by increasing slider value in web app, which keeps beetle firm to ceiling.

BLDC motor restarts continuously and makes startup beep sequences and reboots. Battery should be low, which is not able to provide enough power for motor operation. Recharge your battery.

I built robot, but it’s not sticking to walls or ceilings. Check your wheel clearances. Keep wheel diameter minimum so that body to wall/ceiling distance is minimum.

Conclusion#

This project shows that building a compact wall-climbing robot is not just about using a powerful motor, but it requires careful balancing of airflow, structural weight and mechanical design. By testing multiple enclosure designs, optimizing body thickness, and developing a lightweight Voronoi-inspired shell, we were able to build a palm-sized robot capable of climbing walls and crawling across ceilings.

While there is still room for improvement, such as using a custom PCB, lighter electronics, and more advanced controls, this prototype serves as a solid foundation for future versions. It also demonstrates how we can turn a challenging idea into a working engineering project. Further, one can extend this project to make it a floor cleaning robot or a ceiling cleaning robot, just like this Arduino-based Vacuum Cleaner Robot that we have built some time back.

ESP32 Wall Climbing Robot GitHub#

This repository provides complete source code and documentation for building an ESP32-based wall-climbing robot. It enables users to replicate, modify, and enhance robot’s design and functionality for research and development.