
Все началось с простого вопроса о том, как устроен мир микроконтроллеров. Возникло желание не просто прочитать теорию об Arduino или подключить пару датчиков к плате. Хотелось понять саму суть — архитектуру, принципы работы и реальные возможности подобных систем.
Чтобы погружение не превратилось в набор разрозненных и бессистемных экспериментов, нужен был полноценный, амбициозный проект. Такой, что заставил бы разобраться в деталях на практике.
Выбор пал на создание робота-универсала. Такое устройство — целый мир механики, 3D‑печати, электроники, низкоуровневой разработки, веба и даже ИИ. Идея — создать машину, которая не просто перемещается в пространстве, а по-настоящему видит и понимает свое окружение.
Можно ли представить лучшую возможность поработать с различными типами датчиков и исполнительных механизмов? Также впереди ждали интересные задачи, например:
применение сетевого стека,
управление движением и навигацией,
оптимизация ресурсов и улучшение быстродействия системы.
Используйте навигацию, если не хотите читать весь текст


Статья носит исключительно учебно-развлекательный характер. Этот проект — не идеальное решение, а скорее марафон, полный компромиссов и упрощений. Важно помнить об этом, прежде чем пытаться повторить описанный путь.
Навигация
Прежде чем браться за паяльник и 3D-принтер, предстоял критически важный этап — выбор комплектующих. От этого решения зависела не только работоспособность устройства, но также возможность и удобство его дальнейшего улучшения.
На что стоило обратить внимание?
Прежде всего — на изучение рынка: какие есть готовые комплектующие, какие наиболее популярны и поддерживаются сообществом, насколько надежны и проверены временем. Далее предстояло учесть опыт других разработчиков: какие проблемы они решали, с какими трудностями сталкивались и какие подходы оказались наиболее удачными.
Ключевой фактор — доступность компонентов: их цена, возможность быстрой доставки и совместимость с остальными элементами. Центральная задача подобных систем — организация навигации. Робот должен как-то ориентироваться в пространстве, а для этого ему требуются «органы чувств». Здесь стоит рассмотреть несколько критически важных компонентов.
Дальномеры
Первым кандидатом был LiDAR — лазерный дальномер, способный строить точную карту окружения. Однако он оказался слишком дорогим для проекта, поэтому выбор пал на более доступные ультразвуковые датчики. В качестве основных модулей использовались популярные HC-SR04, способные измерять расстояние до 4 м. Хотя они уступают оптическим аналогам в точности, их характеристики казались достаточными для поставленных задач.
Уже после того, как система была спроектирована под HC-SR04, выяснилось, что существует более удачное решение — лазерные дальномеры VL53L0X. У них меньше дальность, зато точнее измерения, больший угол обзора и меньшая погрешность.

HC-SR04 (ультразвуковой) |
VL53L0X (лазерный ToF) |
RPLIDAR A1 (2D LiDAR) |
|
Технология |
Звуковая навигация и локация (Sonar) |
Инфракрасный датчик времени пролета (ToF) |
Лазерная триангуляция / ToF |
Примерная стоимость, руб. |
Менее 100 |
80−200 |
Более 10 000 |
Эффективная дальность, см |
2−400 |
До 200 |
15−1 200 |
Угловое разрешение |
Низкое |
Отличное (конус: менее 3°) |
Отличное |
Чувствительность к материалу цели |
Плохая для мягких и тканевых поверхностей |
Плохая для прозрачных и сильно отражающих поверхностей |
В целом надежен, могут быть проблемы с черными, поглощающими свет поверхностями |
Чувствительность к углу цели |
Очень высокая, но не работает на неперпендикулярных поверхностях |
Низкая, и в целом надежен на неперпендикулярных поверхностях |
Крайне низкая |
Работа к тому времени зашла уже слишком далеко, поэтому правильнее было остановиться на ультразвуковых HC-SR04. Для стабильной навигации необходимо использовать как минимум два таких сенсора: один устанавливается спереди, а второй — справа.
Гироскоп-акселерометр
Чтобы робот понимал свое положение в пространстве, ему требовался «внутренний слух» — гироскоп и акселерометр. Для этой цели идеально подошел модуль IMU GY-521 на базе чипа MPU-6050. Он объединяет оба сенсора, предоставляет данные по трем осям и, что немаловажно, подключается по шине I2C. Такое решение экономит драгоценные выводы микроконтроллера и отличается невысокой стоимостью.

Датчик Холла
Наконец, для точного измерения пройденного пути понадобится датчик Холла. Небольшой магнит, закрепленный на одном из колес, при каждом обороте генерирует сигнал. Так информация о перемещении поступает независимо от наличия препятствий. В связке с другими сенсорами удается скорректировать траекторию и обеспечить стабильное движение.
Сам датчик подключается к цифровому входу с использованием прерываний, что значительно упрощает обработку сигнала и не перегружает основной процессор постоянными опросами.


30+ бесплатных курсов на IT-темы в Академии Selectel
Для начинающих и опытных специалистов.
Платформа
Следующим фундаментальным решением стал выбор платформы.
Первое, что приходит на ум — микроконтроллер на базе фреймворка Arduino или мини-ПК Raspberry Pi, которые подходят идеально.
В будущем хочу реализовать подобный проект именно на Raspberry Pi Zero 2 W, добавить лазерные дальномеры LiDAR, а также камеру высокого разрешения.
Raspberry Pi 4 и 5 обладают высокой вычислительной мощностью. ARM-процессоры отличаются низким энергопотреблением при хорошем уровне производительности. В этом они зачастую превосходят даже аналогичные решения на базе x86−64. Оперативная память DDR4 — еще один плюс.
Дополнительно можно подключить модуль AI Kit. Тогда значительно ускорится обработка видео и изображений. Станет возможно в реальном времени запускать небольшие модели машинного обучения — например, YOLO.
Вычислительная мощность Raspberry Pi Zero 2 W меньше, зато он значительно дешевле. При этом также поддерживает камеры высокого разрешения, обладает множеством GPIO-входов и позволяет установить привычную операционную систему на базе Linux.
ESP32 |
Raspberry Pi Zero 2 W |
Raspberry Pi 4/5 |
|
Архитектура |
Микроконтроллер |
Одноплатный компьютер |
Высокопроизводительный одноплатный компьютер |
Примерная стоимость, руб. |
200−400 |
2 000−4 000 |
8 000−20 000 |
Вычислительная мощность |
Низкая |
Средняя |
Высокая |
Операционная система |
RTOS (FreeRTOS) |
Полноценная ОС |
Полноценная ОС |
ИИ и обработка видео |
Требует серверной обработки |
Ограниченная обработка на борту |
Обработка на борту (включая модели YOLO) |
Энергопотребление |
Очень низкое |
Низкое |
Умеренное |
Уровень сложности |
Низкоуровневый |
Высокоуровневый |
Высокоуровневый |
Стоит ли выбирать дорогую технику, которая справляется со всем самостоятельно? Или же отдать предпочтение более доступным решениям, но требующим дополнительной инфраструктуры?
Ведь существуют и микроконтроллеры, которые в десятки раз дешевле даже самых доступных мини-ПК. При этом они обладают неплохой вычислительной мощностью, достаточным количеством управляющих пинов и встроенной возможностью работы в сети.
Одна из ключевых идей проекта — создать недорогого робота, которого сможет повторить любой желающий. Не секрет, что Raspberry Pi и его аналоги, такие как Orange Pi и Banana Pi — это все-таки относительно дорогие устройства. Кроме того, микроконтроллер работает на другой операционной системе и функционирует на более низком уровне, что дает дополнительный опыт и знания.
После уточнения функциональных требований и обзора всех вариантов, пришло время определиться с «сердцем» устройства. Я рассматривал различные альтернативы, в том числе и STM32, но в итоге выбор пал на ESP32.
Главным аргументом стал встроенный модуль Wi-Fi. Даже такая мелочь оказалась существенной. Да, отдельный модуль подключить можно, но тем самым теряются драгоценные пины.
ESP32 имеет два физических ядра: одно может полностью заниматься управлением сетевым стеком и обработкой видеоданных с камеры, а второе — собирать информацию с датчиков и управлять двигателями.

Минимальный набор инструментов
Набор для пайки
Хороший паяльник с различными жалами: тонкими — для работы с мелкими компонентами, и большими — для эффективной теплоотдачи.
Качественный флюс для пайки SMD-компонентов, который удобно наносить шприцем. Он легко отмывается изопропиловым или этиловым спиртом — в отличие от канифоли, которая может пригорать.
Припой в виде проволоки, удобный для монтажа ножек компонентов.
Медная оплетка для демонтажа компонентов и удаления излишков припоя. Лучше выбирать узкую, чтобы тепло распределялось равномерно.
«Третья рука» — набор держателей и зажимов с лупой для удобства работы с мелкими деталями.
Изопропиловый спирт и щетка для удаления остатков флюса и очистки платы перед пайкой.
Пинцет из прочного сплава, устойчивый к деформации.
Бокорезы для перекусывания проводов и снятия изоляции.
Силиконовый коврик для защиты рабочей поверхности.
Расходные материалы
Провода различного сечения и цветов.
Неодимовые магниты 5×2 мм.
Силиконовый пруток диаметром 2 мм.
Набор винтов и гаек, включая мелкие крепежи из наборов для ремонта очков и часов.
Набор разъемов JST XH2.54 (как «мама», так и «папа»).
Основной инструмент
Набор отверток.
Пассатижи.
Мультиметр.
Штангенциркуль для точных измерений.
3D‑принтер — единственная дорогостоящая техника в проекте. Можно воспользоваться услугами печати у знакомых или заказать изготовление деталей.
Механика и форм-фактор
Проектирование корпуса началось с ключевого вопроса — как робот будет поворачивать? Рассматривалось три варианта.
Классическая рулевая рейка
Переусложненная конструкция с сервоприводом, где один электродвигатель передает крутящий момент через дифференциал и редуктор — не позволяет совершать разворот на месте. Во‑первых, это становится существенным ограничением при маневрах в узком месте. Во‑вторых, алгоритмы управления будут нетривиальными — возникает уже отдельная задача автопилотирования.
Гусеницы
На стороне такого подхода и высокая проходимость, и возможность поворота на месте. Однако конструкция получается сложной. Нужно продумывать подвеску и крепление катков, а также подыскивать подходящее гусеничное полотно. К тому же не было задачи преодолевать препятствия. Да и гусеницы занимают значительный объем внутри корпуса.
Колеса
В итоге был выбран третий вариант — два ведущих колеса с независимым приводом и дополнительное поворотное колесо без привода, свободно вращающееся вокруг вертикальной оси. Его рендер — на рисунке ниже.
Такое решение широко применяется в коммерческих роботах-пылесосах, поскольку обладает рядом преимуществ:
простота реализации алгоритмов управления;
использование двух двигателей, что снижает нагрузку на контроллер ввода-вывода и экономит количество задействованных пинов.

Управление определилось. Что с формой корпуса?
Пришлось изучить множество существующих решений: от самодельных проектов до коммерческих моделей пылесосов. Стало ясно: конструкция должна быть либо круглая, либо сглаженная — только так обеспечивается проходимость в углах.
Корпус и стал первым воплощенным элементом.
В плоскости он выглядит как квадрат с закруглениями. Несмотря на компактные размеры — 190×190 мм — внутри достаточно места для компонентов. Помимо управляющей платы, поместились разъемы подключения, датчики и аккумуляторный блок. Последний смещен ближе к опорному колесу, чтобы сбалансировать центр тяжести.
На рисунке ниже — рендер готового робота. Колеса вынесены наружу, в отличие от большинства коммерческих решений.

Главный принцип проектирования корпуса — разборная конструкция и возможность легкой замены отдельных деталей.
Часть элементов держится на специальных пинах диаметром 2,6 мм и высотой 2 мм, будто это конструктор LEGO. На ответной стороне предусмотрены отверстия диаметром 2,9 мм и глубиной 3 мм. Пины фиксируют съемные части корпуса: стенки, кронштейн камеры, блок аккумулятора и третьего колеса.
Благодаря такой плотной посадке отпадает необходимость в клее, что сохраняет разборность конструкции. На нижней плите корпуса добавлены ребра жесткости. В местах повышенных нагрузок предъявляются особые требования к прочности. Такие соединения усиливаются винтами — например, так сделано крепление ступицы к колесу.
Если элемент должен часто сниматься, то он дополняется неодимовыми магнитами высотой 2 мм и диаметром 5 мм. Так был добавлен специальный отсек для быстрого доступа к разъему USB Type-C микроконтроллера при перепрошивках робота. Рисунок ниже демонстрирует верхнюю крышку, закрепленную на корпусе с помощью магнитов, а также отдельные элементы в разобранном состоянии.

Печать крупногабаритных элементов заняла значительное время. Одна лишь несущая плита корпуса изготавливалась около шести часов. Будь корпус цельным, возникли бы серьезные трудности.
Во-первых, потребовалось бы использовать опорные структуры, генерируемые программами-слайсерами для поддержания нависающих элементов. Их последующее удаление усложняет процесс сборки и ухудшает качество печати.
Во-вторых, при длительном процессе возрастает вероятность брака. Если на шестом часу прервется подача пластика, например из-за обрыва прутка, вся деталь окажется испорченной. И материал пропадет, и время. Создание отдельных модулей минимизирует такие риски и позволяет быстро заменять поврежденные части корпуса.
Принципиальная схема
Электропитание системы организовано по трехуровневой схеме, включающей три основные линии.
Силовая шина 8,4 В создается двумя последовательно соединенными аккумуляторами 18650. К этой линии подключены зарядный модуль с BMS, а также понижающий преобразователь, обеспечивающий стабильное питание всех остальных узлов.
Рабочая шина 5 В формируется понижающим преобразователем из 8,4 В. Она питает микроконтроллер, ультразвуковые датчики, драйвер моторов, электродвигатели, а также датчик Холла.
Дополнительная шина 3,3 В используется для питания чувствительной периферии: камеры OV7670, модуля MPU-6050, датчика тока и напряжения INA219. Эта линия формируется стабилизатором, встроенным в микроконтроллер ESP32.
Может возникнуть вопрос: почему двигатели питаются от стабилизированных 5 В, а не напрямую от 8.4 В? Причина в стабильности. Литий‑ионные аккумуляторы со временем разряжаются, и напряжение на их выходе может опускаться до 6,4−7 В, что ведет к падению оборотов при постоянном управляющем сигнале. Использование стабилизированного напряжения 5 В позволяет добиться постоянной и предсказуемой скорости вращения двигателей независимо от уровня заряда аккумуляторов.
Вы, наверное, уже заметили, что рациональному использованию выводов микроконтроллера уделяется особое внимание. Поскольку камера OV7670 требует 18 пинов GPIO — из которых лишь два можно отбросить — возникает дефицит доступных выводов, сужается выбор периферийных устройств.
Чтобы высвободить ресурсы, пришлось пойти на несколько хитростей:
интерфейс I2C позволяет подключать несколько устройств к одной паре выводов — часть сенсоров повешены на общую шину;
управление ультразвуковых датчиков не требует отдельного пина — два HC-SR04 разделяют один триггер;
отключение или перезапуск камеры в прошивке робота не предполагается — у OV7670 игнорируются неиспользуемые линии RESET и PWDN, что экономит еще два вывода.
Таким образом, конфигурация подключения компонентов на рисунке ниже построена с учетом ограничений по ресурсам микроконтроллера. Важно, что при этом удалось обеспечить надежную работу всех подсистем при минимальной сложности разводки и энергопотребления.

Комплектующие
Для движения робота были выбраны небольшие шестивольтовые электродвигатели со встроенным редуктором. Высокая скорость была не нужна, а вот крутящий момент — критически важен. Эти моторы потребляют всего около 100 мА, что значительно упрощает схему питания, а также исключает сложности с отводом тепла у сильно греющихся компонентов.

Любому двигателю нужен драйвер. Выбор пал на MX1508. Он компактен, почти не греется и не требует радиатора. Важное преимущество — для управления двумя моторами с регулировкой скорости через ШИМ ему требуется всего четыре пина контроллера (против пяти‑шести у аналогов).

Энергией систему снабжают два элемента 18650, объединенные в аккумуляторный блок с зарядным устройством. За безопасность отвечает 2S BMS‑плата, которая защищает ячейки от перезаряда, переразряда, перегрева и других опасных режимов работы. Максимальное напряжение блока — 8,4 В.



DC-DC преобразователь LM2596 понижает напряжения до 5 В.

Датчик INA219 контролирует потребляемый ток и напряжение аккумуляторов. Благодаря подключению к шине I2C, не требует дополнительных ресурсов микроконтроллера.

Корпус и особенности 3d-печати
3D-принтер не может напрямую воспринять созданную трехмерную модель в формате STL. На помощь приходят программы‑слайсеры, которые изучают трехмерную модель и создают необходимый набор инструкций G-code, понятных принтеру. В них описывается, как именно должен перемещаться экструдер, на каком слое, с какой скоростью, температурой и толщиной печатать материал.
Помимо генерации путей, слайсеры позволяют задавать параметры поддержки, плотность заполнения, ориентацию модели, добавлять кайму, плоты или другие вспомогательные структуры, влияющие на качество печати.
Я воспользовался PrusaSlicer — одной из наиболее гибких и кастомизированных программ‑слайсеров, которая поддерживает много принтеров и материалов. Она позволяет визуально контролировать каждый слой, дает расширенные инструменты для оптимизации геометрии и качества деталей, что особенно полезно при печати функциональных изделий.
Печать осуществлялась на Flying Bear Ghost 6 — моделью с жесткой металлической рамой, прямым экструдером и достаточно высокой скоростью перемещения.
Такой принтер поддерживает работу с различными типами филамента, включая PLA, PETG и TPU, а также обладает точной калибровкой осей и стабильной подачей материала. Это особенно важно при печати мелких технических элементов с крепежами и пазами, где даже небольшое отклонение может повлиять на сборку устройства.
Встроенную прошивку принтера заменил на модифицированную, с интегрированным «Linear Advance». Принтеры с такой функцией печатают и быстрее, и точнее.
Корпус робота проектировался так, чтобы обойтись без поддержек при печати. Фаски и небольшие выступы выполнены под углом 45°, что позволяет принтеру формировать нависающие элементы «в воздухе» без опор, как показано на рисунке ниже.

Такой подход облегчает крепление датчиков и магнитов, а поверхность готовых деталей получается аккуратнее. Правда, этот метод непригоден для элементов с жесткими прямыми углами, например, арок колес или вырезов под ультразвуковые датчики, где без вспомогательных поддержек не обойтись.
При изготовлении крупных деталей более 100 мм приходится учитывать усадку пластика, которая часто приводит к деформации краев. Мне помогли два приема.
Во-первых, в слайсере добавлялась кайма, автоматически формирующая тонкую «юбку» вокруг, увеличивая тем самым адгезию детали к столу.
Во-вторых, на концах и углах крупных деталей вручную были спроектированы небольшие квадраты размером 20 × 20 мм и высотой 0,3 мм, выполняющие ту же функцию. После завершения печати все дополнительные элементы — кайма и вспомогательные квадраты — легко удалялись канцелярским ножом или бокорезами, не повреждая основную деталь.
Общая длительность печати основных узлов составила:
4,5 часа — несущая плита корпуса,
6 часов — боковые стенки,
3 часа — верхняя крышка,
4,5 часа — остальные мелкие элементы, которые видно на следующем скрине.
Для сборки всей конструкции потребовалось 30 винтов различных типов, 4 гайки, 18 неодимовых магнитов для удержания съемных крышек и креплений, а также 4 латексных кольца в качестве шин на колеса.

Корпус получился модульный и легко собираемый. Не пришлось тратить лишние усилия на удаление опорных структур и обработку деталей после печати. Все — благодаря правильному применению методов проектирования под 3D-печать и продуманной технологии крепления.

Материнская плата и электронные компоненты
Для сборки и отладки прототипа использовалась макетная плата. К ней через стандартные Dupont-штекеры «мама» подключались:
микроконтроллер ESP32,
гироскоп‑акселерометр MPU-6050,
драйвер моторов MX1508
понижающий регулятор LM2596.
Такой способ временного монтажа позволяет при необходимости быстро заменить любой из компонентов. Остальные подключения:
ультразвуковые датчики — через четырехконтактные разъемы XH 2.54,
питание —по двухконтактному разъему того же типа,
INA219 — через пятиконтактный XH 2.54;
камера OV7670 — через специально разработанный и напечатанный индивидуальный разъем, объединивший 16 Dupont-проводов.
Все соединения на печатной плате выполнены с использованием тонких Dupont-проводов, продетых через отверстия макетной платы.
Балансировочная плата, датчик INA219 и зарядное устройство распаяны навесным монтажом на аккумуляторном блоке и соединены с основной платой разъемами XH 2.54 соответствующего типа.
Пайка выполнялась с использованием флюса 6-412-А и припоя марки S-Sn62Pb36 05Ag1.95 с содержанием флюса 1%, диаметром прутка 0,75 мм. Температура жала — 300 °C. После пайки каждый узел проходил визуальную проверку на отсутствие холодных контактов, коротких замыканий и избытков припоя, как видно на фото ниже.

О программной составляющей — послезавтра.
Комментарии (2)
iliasam
05.10.2025 08:53"Первым кандидатом был LiDAR — лазерный дальномер, способный строить точную карту окружения. Однако он оказался слишком дорогим для проекта, поэтому выбор пал на более доступные ультразвуковые датчики"
А в сторону лидаров от пылесосов не смотрели?
Вот вариант за 1200р - https://aliexpress.ru/item/1005001684146142.html
j_aleks
лучше наверно омни-колеса использовать...