Переносная система видеонаблюдения: робот с камерой на Raspberry Pi и Arduino
Компоненты и материалы
- Arduino Pro Mini 328 5V/16MHz — 1 шт.
- Колёса с редукторами + крепления — 2 комплекта (передний привод)
- L298 Dual H-Bridge (SparkFun) — 1 шт.
- Raspberry Pi 3 Model B — 1 шт.
- Raspberry Pi Camera Module — 1 шт.
- Плексиглас / пластик для шасси
- 2 любых поворотных колеса (задняя ось)
- Мини-фонарик (превращается в фарю)
- 2 IR-датчика препятствий (перед/зад)
- PCB, транзистор (для фары), L7805CV (5V), 3.3V стабилизатор (UART Pi↔Arduino)
- XT-60 разъём, 2S LiPo 1300 mAh, 5V пауэрбанк, выключатель
- Корпус Raspberry Pi, microSD (≥4 GB)
Инструменты
- FTDI USB-UART адаптер (прошивка Pro Mini)
- Arduino IDE
- Дрель, мелкозубная пила, отвёртки, паяльник, кусачки
О проекте
Сложный, но полезный проект: от проектирования робота до Linux-настроек (Docker, systemd, uv4l), Android-приложения и MQTT-управления. Робот ездит независимо двумя передними колесами, поворачивает разницей скоростей, имеет фару, стримит видео с Pi Camera на телефон по Wi-Fi.
Технологии
- Платформы: Arduino, Raspberry Pi, Android
- Электроника: H-мост, ключевой транзистор, IR-датчики
- Linux: Docker, docker-compose, systemctl, видеостриминг (uv4l)
- Программирование: Android (Java/Kotlin), Python, Arduino C++, UART, MQTT
Этап 1: Механика
База 18×13 см из плексигласа. Передние моторы-редукторы на металлических кронштейнах. L298 на дне базы. Задние колеса на 20-мм шестигранных стойках. Большое отверстие для проводов наверх. Верх — две Г-образные пластины (12×13 и 6.5×13 см), склеенные — закрывают электронику, держат фарю и корпус Pi. Соединены с основанием 60-мм стойками.


Этап 2: Электроника
Pinout Arduino Pro Mini:
- Фара: D3
- Левый мотор: PWM D5, EN1 A4, EN2 A5
- Правый мотор: PWM D6, EN1 A3, EN2 A2
- IR-датчики: перед A0, зад A1
- UART к Raspberry Pi: TX D11, RX D10 (через 3.3V стабилизатор)
Печатная плата: разъёмы для Pro Mini, H-моста, IR-датчиков, фары, питания, UART. Стабилизаторы 5V и 3.3V, транзистор для фары. Все провода по схеме Fritzing.

Сборка PCB
- IR-датчики на металлических пластинах Л-образной формы спереди и сзади.
- Фара: вырезан головка фонарика, приклеена в центр верха, провода через отверстие.
- Корпус Pi: вставьте microSD с Raspbian, подключите камеру, закройте корпус.
- Паяйте PCB по фрицingu: разъёмы, стабилизаторы, транзистор, провода.
- Соедините: 5V пауэрбанк → USB-A → microUSB Pi + пины Pro Mini; LiPo 2S через выключатель → клеммник на PCB → H-мост и моторы.
- Проверьте мультиметром перед установкой Pro Mini.
Этап 3: Код Arduino
Arduino — промежуточный слой: безопасность (дешевле заменить), реальное время (PWM, опрос датчиков без ОС), надёжность (watchdog не зависит от Linux).
Протокол по UART (9600):
M:-25:16;— поворот налево (левый -25%, правый +16%), мощность 16M:44:19;— направоL:1;/L:0;— фара вкл/выкл
Arduino опрашивает IR-датчики каждые 500 мс и шлёт: F=3:B=0; (расстояние 0..10).
Библиотека TextMotorCommandsInterpretter парсит команды. Скетч на GitHub.
Этап 4: Raspberry Pi — Docker, uv4l, MQTT, Python
Архитектура:
- Android-приложение → WebView (uv4l stream) + кнопки → MQTT (mosquitto)
- Python-сервер в Docker → подписка на MQTT → UART команды Arduino
- Arduino → UART данные датчиков → Python → MQTT → Android

Подготовка Pi
- Raspbian + включённая камера + SSH.
git clone https://github.com/danionescu0/robot-camera-platform.gitв/home/pi(путь жёстко задан в docker-compose.yml).- Отключите serial console на Pi (нужен UART для Arduino).
uv4l (видеостриминг)
chmod +x uv4l/install.sh uv4l/start.sh
sh ./uv4l/install.sh
sh ./uv4l/start.sh # настройте порт, пароль, фпс в start.sh
Проверка: https://ip_pi:9090/stream.
Docker + docker-compose
Установка: официальный блог.
В config.py укажите пароль MQTT, UART порт/baud. В docker-container/mosquitto/Dockerfile — логин/пароль mosquitto.
Автозапуск через systemd
cp systemctl/* /etc/systemd/system/
sudo systemctl enable robot-camera.service robot-camera-video.service
reboot
Этап 5: Android-приложение
git clone https://github.com/danionescu0/android-robot-camera- Android Studio, включите Developer Options на телефоне.
- Откройте проект, в
app/src/main/res/values/passwords.xmlпропишите MQTT-хост/порт и стриминг URL. - Build → Run на телефоне.
Интерфейс приложения
- Лево: видео (WebView uv4l).
- Право: руль (тач-управление), кнопка фары.
- Верхний правый угол: статус — стрелка препятствия, «Batt», «Connected/Disconnected».

Отладка
- Arduino: FTDI на второй UART (RX←D11, TX→D10) → посылайте команды вручную.
- Pi:
docker ps,netstat -nltp(порты 9090, 1883),ls -l /dev/ttyS0,picocom -b 9600 /dev/ttyS0для ручного теста. - Android: проверьте passwords.xml, логи в Android Studio, статус «Connected».
Расширения
- Следование за объектом по цвету (OpenCV, HSV-фильтр) — см. папку
navigation/. - Распознавание лиц, патрулирование, 3G-модем вместо Wi-Fi.
Код
Схемы
- Fritzing:
sketch_nWf7cZeUWL.fzz - Ссылки на репозитории выше.
Производственный процесс
- Эволюция и дизайн современных камер
- Понимание объективов камер: дизайн, история и будущие инновации
- MrRobot: Ubuntu Mobile-приложение для управления роботом Rapiro голосом, касанием и встряхиванием
- Roomberry: Робот-наблюдатель на базе Roomba с Raspberry Pi Zero W
- Bluetooth-контролируемый моторизированный камерный слайдер на Arduino для плавных кинематографических кадров
- Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
- Освоение распознавания и синтеза речи на Arduino Due