Микроконтроллеры семейства ESP32 давно завоевали популярность среди любителей электроники благодаря сочетанию высокой производительности, встроенного Wi-Fi и доступной цены. Одним из наиболее интересных применений таких плат является создание радиоуправляемых устройств с передачей видео. В этой статье рассмотрим проект машинки с камерой на базе ESP32-S3 CAM, которой можно управлять через обычный браузер со смартфона или компьютера.
Что представляет собой проект
По своей сути это небольшая роботизированная платформа на колёсах, оснащённая видеокамерой и беспроводным интерфейсом управления. Машинка создаёт собственную точку доступа Wi-Fi или подключается к домашней сети, после чего пользователь открывает веб-страницу управления и получает изображение с камеры в реальном времени.
Одновременно с просмотром видео можно управлять движением: ехать вперёд и назад, поворачивать влево и вправо, а также изменять скорость. В результате получается простейший FPV-робот (First Person View), позволяющий наблюдать за окружающей обстановкой глазами установленной камеры.
Такой проект отлично подходит для изучения робототехники, беспроводных технологий и программирования микроконтроллеров.
Почему именно ESP32-S3 CAM
Раньше для подобных проектов приходилось использовать несколько отдельных модулей: микроконтроллер, Wi-Fi адаптер и камеру. ESP32-S3 CAM объединяет всё это в одном устройстве.
Основные преимущества платы:
- встроенный модуль Wi-Fi;
- поддержка камеры;
- высокая производительность;
- большое количество GPIO-пинов;
- поддержка современных средств разработки;
- низкая стоимость.
Благодаря этому удаётся существенно упростить конструкцию и уменьшить количество проводов.
Необходимые компоненты
Для сборки понадобятся:
- плата ESP32-S3 CAM;
- шасси для роботизированной машинки;
- два двигателя постоянного тока с редукторами;
- драйвер двигателей L298N или DRV8833 + L2596;
- аккумуляторный блок;
- выключатель питания;
- комплект проводов;
- крепёжные элементы.
В качестве шасси можно использовать готовый набор для начинающих. Такие комплекты продаются во многих магазинах электроники и обычно включают платформу, моторы, колёса и крепёж.
Зачем нужен драйвер двигателей
Микроконтроллер не способен напрямую питать электродвигатели. Для этого используется специальный модуль — драйвер двигателей.
Он выполняет сразу несколько функций:
- подаёт необходимый ток на моторы;
- позволяет менять направление вращения;
- обеспечивает регулировку скорости;
- защищает микроконтроллер от перегрузки.
Наиболее распространёнными являются драйверы L298N, TB6612FNG и их аналоги. Для небольших машинок обычно предпочтительнее современные драйверы с меньшими потерями энергии.
Питание проекта
Большинство проблем начинающих связано именно с питанием.
Во время запуска двигатели потребляют значительно больший ток, чем в установившемся режиме. Если источник питания не способен обеспечить необходимую мощность, возможны:
- самопроизвольные перезагрузки;
- зависания микроконтроллера;
- обрывы видеотрансляции;
- нестабильная работа Wi-Fi.
Поэтому рекомендуется использовать качественные литий-ионные аккумуляторы 18650 или готовые аккумуляторные сборки.
Для повышения стабильности рядом с драйвером двигателей часто устанавливают электролитический конденсатор большой ёмкости, который сглаживает кратковременные просадки напряжения.
Сборка механической части
Процесс сборки начинается с установки двигателей на шасси. После этого закрепляются колёса и аккумуляторный отсек.
Плату ESP32-S3 CAM желательно разместить в верхней части конструкции. Такое расположение обеспечивает лучший обзор для камеры и уменьшает вероятность повреждения электроники при столкновениях.
Камеру следует направить немного вверх относительно горизонтали. Это позволяет видеть не только пол перед машинкой, но и объекты на расстоянии нескольких метров.
Подключение электроники
После сборки механической части необходимо соединить между собой микроконтроллер, драйвер двигателей и источник питания.
Микроконтроллер передаёт драйверу управляющие сигналы, а драйвер уже управляет моторами. Важно соблюдать соответствие выводов, указанное в программе.
Перед первым включением рекомендуется ещё раз проверить:
- правильность подключения питания;
- отсутствие коротких замыканий;
- надёжность соединений;
- полярность аккумуляторов.
Ошибки на этом этапе могут привести к выходу компонентов из строя.
Подготовка программного обеспечения
Для разработки удобно использовать Visual Studio Code с расширением PlatformIO.
Такой подход имеет несколько преимуществ:
- автоматическая установка необходимых библиотек;
- удобная компиляция проекта;
- простая загрузка прошивки;
- встроенные средства отладки.
После открытия проекта необходимо указать параметры своей сети Wi-Fi или настроить режим точки доступа. Параметры и используемые выходы ESP можно задать в файле Config/src/Config.h.
// WiFi credentials
#define WIFI_SSID "YOUR_SSID"
#define WIFI_PWD "YOUR_PASSWORD"
// Access Point mode
// + true = creates a WiFi network without internet connection
// the car IP will always be http://192.168.4.1:8000
// + false = connect to an existing WiFi with internet connection
// the car IP will be assigned by the router http://X.X.X.X:8000
#define WIFI_AP_MODE true
// Set minimum motor speed (0 to 255)
#define MIN_MOTOR_SPEED 80
// Enable debug (prints car speed and direction in the serial)
#define JOYSTICK_DEBUG false
// Set camera model
#define CAMERA_FREENOVE_ESP32S3_CAM
// #define CAMERA_MODEL_XIAO_ESP32S3
// #define CAMERA_MODEL_AI_THINKER
// Set JPEG quality (0 to 63 - lower means higher quality)
// NOTE: Higher image quality reduces CPU usage for compression.
#define JPEG_QUALITY 15
// Improve FPS by using double buffering (usually works perfectly
// for ESP32S3 family)
#define INCREASE_FPS true
// Customize PINS
#if defined(CAMERA_FREENOVE_ESP32S3_CAM)
#define PIN_M1_IN1 42
#define PIN_M1_IN2 41
#define PIN_M2_IN1 40
#define PIN_M2_IN2 39
#define PIN_FRONT_LED 3
#define PIN_RGB_LED 48
// NOTE: higher resolutions affect framerate
#define FRAME_SIZE FRAMESIZE_VGA
#elif defined(CAMERA_MODEL_XIAO_ESP32S3)
#define PIN_M1_IN1 1
#define PIN_M1_IN2 2
#define PIN_M2_IN1 3
#define PIN_M2_IN2 4
#define PIN_FRONT_LED 9
#define PIN_BOARD_LED 7
// NOTE: higher resolutions affect framerate
#define FRAME_SIZE FRAMESIZE_VGA
#elif defined(CAMERA_MODEL_AI_THINKER_V2)
#define PIN_M1_IN1 14
#define PIN_M1_IN2 47
#define PIN_M2_IN1 38
#define PIN_M2_IN2 39
#define PIN_FRONT_LED 40
#define PIN_RGB_LED 48
// NOTE: higher resolutions affect framerate
#define FRAME_SIZE FRAMESIZE_VGA
#elif defined(CAMERA_MODEL_AI_THINKER)
#define PIN_M1_IN1 14
#define PIN_M1_IN2 15
#define PIN_M2_IN1 12
#define PIN_M2_IN2 13
#define PIN_FRONT_LED 3
#define PIN_BOARD_LED 33
// NOTE: higher resolutions affect framerate
#define FRAME_SIZE FRAMESIZE_VGA
#else
#error "Camera model not selected"
#endif
Тонкую настройку параметров можно выполнить в отдельных файлах, таких как DCMotor.h, для изменения параметров скорости.
#ifndef DCMOTOR_H
#define DCMOTOR_H
#include <Arduino.h>
class DCMotor
{
public:
DCMotor(uint8_t pinIn1, uint8_t pinIn2);
void backward(uint8_t speed = 100);
void forward(uint8_t speed = 100);
void setMinAbsSpeed(uint8_t absSpeed);
void stop();
private:
uint8_t pinIn1;
uint8_t pinIn2;
uint8_t absSpeed = 0;
uint8_t maxAbsSpeed = 255;
uint8_t minAbsSpeed = 50;
uint8_t ignoreAbsSpeed = 30;
void setSpeed(uint8_t speed);
};
Затем выполняется компиляция и загрузка программы в память ESP32-S3 CAM.
Как работает управление
После запуска микроконтроллер поднимает веб-сервер и начинает передавать изображение с камеры.
Пользователь открывает браузер и переходит по адресу устройства. На экране появляется панель управления с видеопотоком и кнопками движения.
При нажатии кнопок браузер отправляет команды через Wi-Fi, а микроконтроллер преобразует их в сигналы управления двигателями.
В результате задержка обычно составляет всего несколько десятков или сотен миллисекунд, чего достаточно для комфортного управления.
Мышь
По умолчанию управление автомобилем осуществляется через веб-страницу с виртуальным джойстиком.
Клавиатура
Чтобы использовать клавиатуру, в любой момент нажмите клавишу Enter. Нажмите её ещё раз, чтобы вернуться к виртуальному джойстику.
- Включить/Выключить: Нажмите Enter
- Левая/Правая: A/D, или ←/→
- Вверх: W или ↑
- Обратный ход: S или ↓
- Камера: P или C
- Передние светодиоды: L или F
- Максимальная скорость: от 1 (10) до 0 (100)
Геймпад
Чтобы использовать USB-геймпад, совместимый с PlayStation 3, нажмите кнопку Start в любое время. Нажмите ее еще раз, чтобы вернуться к виртуальному джойстику.
- Включить/Выключить: Запуск
- Левая/Правая сторона: левый аналоговый джойстик
- Вверх: R2
- Обратный ход: L2
- Камера: △
- Передние светодиоды: □
Если у вас "Белый" IP адрес, то данным роботом можно управлять из любой точки мира, где есть интернет. Для этого в роутере необходимо:
- Назначить статический IP адрес;
- Настроить следующие правила переадресации портов:
- 8000 (веб-страница);
- 8001 (видеостриминг);
- 8002 (команды WebSocket / джойстика);
- Настроить службу DDNS (например, No-IP).
Возможные доработки
После успешной сборки базовой версии можно постепенно расширять возможности проекта.
Популярные улучшения:
- сервопривод для поворота камеры;
- светодиодные фары;
- инфракрасная подсветка;
- датчики препятствий;
- автоматическое торможение;
- запись видео на карту памяти;
- управление через Интернет;
- интеграция с системами умного дома.
Подобные доработки превращают простую игрушку в полноценную экспериментальную роботизированную платформу.
Заключение
Машинка на базе ESP32-S3 CAM — отличный проект для знакомства с робототехникой и беспроводными технологиями. Она сочетает в себе управление двигателями, передачу видео по Wi-Fi и работу встроенного веб-интерфейса. При относительно небольших затратах можно получить интересную платформу для экспериментов, дальнейшего обучения и разработки собственных проектов.
| ZIP-архив с исходным кодом | 📥 Скачать |