В сети выложено огромное количество инструкций по сборке различных моделей роботов. Попробуем собрать свою собственную модель домашнего Wi-Fi робота используя информацию с форума Cyber-place, детали частично с интернет-магазина Сarduino. Многие запчасти выгодно заказывать напрямую из Китая (Ebay, Aliexpress). Это значительно уменьшит бюджет.
Свой взгляд на теорию и проектирование современных роботов изложен здесь.
Функциональный вид робота
- Перемещение по поверхности согласно командам оператора,
- Трансляция видео с широким углом обзора.
Блок управления
Универсальный контроллер Carduino Nano V7
Микроконтроллер: ATmega328
Входное напряжение: от 5V до 30V
Тактовая частота: 16 МГц
Flash память: 32 KB
Оперативная память (SRAM): 2 Кб
Материнская плата робота «CyberBot»
Плата предназначена для подключения к ней различных устройств Arduino или аналогов устройств через стандартные интерфейсы.
Модуль управления двигателями — Motor Shield
К нему можно подключить и управлять двумя двигателями постоянного тока или 4 шаговыми двигателями. Содержит двухканальный драйвер двигателя HG7881.
Питание: 2.5V до 12V
Потребление тока на один канал:: до 800 мА
Редукторные двигатели
Мотор-редуктор с передаточным соотношением 1:48
Диапазон напряжения от 3V до 6V.
Скоростью вращения колеса 48 м/мин.
Ток холостого хода (6в): 120mA
Уровень шума: <65dB
Модуль связи
Беспроводной WiFi маршрутизатор TP-Link 3020MR
Данная модель идеально подходит для установки сторонних прошивок. Для управления нашим роботом выбрана CyberWRT. Прошивка создана на базе прошивки OpenWRT версии r37816.
Управление роутером производится из любого web-браузера через Web-интерфейс. Также доступно управление через telnet, SSH. Расширение функционала производится за счет установки дополнений из каталога. Доступная память для приложений 1,2Mb.
Web-камера Logitech E3500
Камера с возможностью коррекции изображения.
USB-хаб
Блок для связи USB-устройств между собой: arduino, маршрутизатор, web-камера.
Вспомогательные элементы
Платформа
Колеса
Снабжены резиновыми шинами и валом для возможной установки диска оптического энкодера, идеально подойдет для перемещения платформы на поверхности.
Батарейный отсек
Необходим для установки элементов питания. Для нашей версии робота достаточно 4 элементов питания размера AA.
Крепеж, провода
Вспомогательные инструменты для соединения отдельных элементов.
Процесс сборки робота
Подготовка платы робота «CyberBot» является самым сложным для начинающих, т.к. подразумевает использование паяльника. Необходимо припаять:
- Блокирующие конденсаторы от 0,1 мкф и выше
- Электролитический конденсатор от 100 мкф х 16в и выше
- Резистор 150 Ом
Резисторы необходимо устанавливать из расчета — по одному электролиту и блокирующему конденсатору для каждого установленного модуля. В результате мы должны получить следующее:
Разъемы позволят дополнять микросхему дополнительными датчиками и избавят нас от постоянной перепайки деталей.
К плате контроллера подключаем модуль управления двигателями — Motor Shield. Прикручиваем батарейный отсек. Для крепления двигателей к платформе понадобятся болты М3х30. На двигатели надеваем колеса.
На вторую часть платформы прикрепляем остальное: web-камеру, маршрутизатор, USB-хаб. Провода стягиваем скобами и аккуратно укладываем чтобы они не мешали другим элементам.
Программное обеспечение
Прошивка маршрутизатора TP-Link 3020MR
Загружаем прошивку отсюда. В меню оригинальной прошивки маршрутизатора выбираем пункт «Обновить программное обеспечение» и выбираем загруженный ранее файл CyberWrt-v1.4.bin.
После обновления адрес маршрутизатора изменится на http://192.168.1.100
В разделе «Настройка Wi-Fi» необходимо выбрать режим «Клиент Wi-Fi сети» и указать данные к подключаемой Wi-Fi сети домашнего маршрутизатора. Например:
Если вы на каком либо этапе допустили ошибку (неправильно указали IP, шлюз) или устройство оказалось недоступно, то для решения проблемы необходимо подключить роутер с ПК с помощью LAN кабеля, зайти в настройки и указать правильные данные.
Теперь домашний роутер, к которому будет подключаться маршрутизатор, установленный на роботе, будет являться узлом для связи с внешним миром через сеть Интернет.
Установка драйверов
Драйвера_USB-Serial
Модуль устанавливает драйвера USB-Serial, такие как FTDI, Prolifis, CP2110x для USB-serial моста.
Драйвер_WebCam
Драйвер для UVC WebCam.
Установка модулей
Модуль Робот-Шпион3 (CyberBot3)
Модифицированный модуль для управления Wi-Fi роботом CyberBot-3 через веб браузер.
Интерфейс модуля
Загрузка скетча в Arduino
Загрузка скетча осуществляется через среду разработки Arduino. Для этого необходимо загрузить дистрибутив:
Для Windows скачать
Для Linux 32bit скачать
Для Linux 64bit скачать
Для MacOS X скачать
После установки и запуска среды разработки необходимо выбрать тип используемой платы и порт через который будет осуществляться обмен данными между контроллером и компьютером. Данные настройки осуществляются через меню «Tools» «Board menu».
При использовании платы Arduino Nano CH340G в системе Windows необходима установка драйвера CH341SER
Плата должна определяться в системе как USB2.0 Serial.
Перед загрузкой скетча проверяем его на наличие ошибок. В меню «ЭСКИЗ» выбираем «ПРОВЕРИТЬ/СКОМПИЛИРОВАТЬ».
Если возникнут ошибки при проверке компилятор укажет на строку с неправильным кодом. Если ошибок не найдено, то в меню «ЭСКИЗ» выбираем «ВГРУЗИТЬ».
Скетч для Arduino Nano и Arduino UNO
Для работы скетча необходима библиотека CyberLib
#include <CyberLib.h> #define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;} uint8_t inByte; uint8_t speed=255; void setup() { motors_init; D11_Out; D11_Low; randomSeed(A6_Read); for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); робота UART_Init(57600); wdt_enable (WDTO_500MS); } void loop() { if (UART_ReadByte(inByte)) { switch (inByte) { case 'x': robot_stop(); break; case 'W': robot_go(); break; case 'D': robot_rotation_left(); break; case 'A': robot_rotation_right(); break; case 'S': robot_back(); break; } if(inByte>47 && inByte<58) speed=(inByte-47)*25+5; } wdt_reset(); } void robot_go() { D4_Low; analogWrite(5, speed); analogWrite(6, speed); D7_Low; } void robot_back() { D4_High; analogWrite(5, 255-speed); analogWrite(6, 255-speed); D7_High; } void robot_stop() { D4_Low; analogWrite(5, 0); analogWrite(6, 0); D7_Low; } void robot_rotation_left() { D4_Low; analogWrite(5, speed); analogWrite(6, 255-speed); D7_High; } void robot_rotation_right() { D4_High; analogWrite(5, 255-speed); analogWrite(6, speed); D7_Low; }
Скетч для Arduino Mega
#include <CyberLib.h> #define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;} #define robot_go {D4_Low; D5_High; D6_High; D7_Low;} #define robot_back {D4_High; D5_Low; D6_Low; D7_High;} #define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} #define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} #define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;} uint8_t inByte; void setup() { motors_init; D11_Out; D11_Low; randomSeed(analogRead(6)); Serial.begin(57600); wdt_enable (WDTO_500MS); } void loop() { if (Serial.available()) { inByte = Serial.read(); switch (inByte) { case 'x': robot_stop; break; case 'W': robot_go; break; case 'D': robot_rotation_left; break; case 'A': robot_rotation_right; break; case 'S': robot_back; break; } } wdt_reset(); }
Исходный код взят с cyber-place.ru
Сервис
Утилита «Терминал»
Модуль для работы с консолью из веб браузера.
Список часто используемых команд в CyberWrt
uname -a — Версия ядра Linux;
cat /proc/cpuinfo — информация о железе
cat /proc/meminfo — расширенная информация о занимаемой оперативной памяти
free -m — Информация о используемой и свободной оперативной памяти
ls /dev — отображение всех устройств в системе
id — сводную информация по текущему пользователю (логин, UID, GID);
ps — все загруженные процессы;
date — просмотр даты/времени
dmesg — log-файл загрузки
lsmod — Список модулей загруженных в ядро
netstat -rn — таблица маршрутизации
netstat -an | grep LISTEN — список всех открытых портов
netstat -tup — Активные соединения с интернетом
fdisk -l Информация о всех подключенных дисках;
blkid — UUID информация о всех доступных накопителей в системе;
mount /dev/sda1 /mnt — Монтирует раздел /dev/sda1 к точке монтирования /mnt;
mount — полная информация о примонтированных устройствах;
umount /mnt — Отмонтирует раздел от точки монтирования /mnt;
clear — Очистка окна терминала;
reboot — Перезагрузка устройства;
exit — Завершение сеанса;
passwd — смена пароля текущего пользователя;
opkg update – обновление списка пакетов
opkg upgrade – обновление всех установленных пакетов;
opkg list-installed – вывод на экран списка установленных пакетов.
Проверка работоспособности двигателей в среде разработки
В меню «ИНСТРУМЕНТЫ» выбираем «МОНИТОР ПОСЛЕДОВАТЕЛЬНОГО ПОРТА». В терминальной строке набираем команду движения:
echo x > /dev/ttyUSB0
Если все подключено и настроено правильно, то после нажатия кнопки «ОТПРАВИТЬ» моторы должны начать крутиться.
Остановить движение можно по команде:
echo W > /dev/ttyUSB0
Проблемы
Несовместимость микроконтроллера Arduino Nano V3 CH340 с маршрутизатором TP-LINK TL-MR3020
Найденные решения на форуме:
- Подключение резистора 100 Ом на пин RST и на +5V
- Понижение скорости соединения до 9600
- Удаление конденсатора или перерезка дорожки на Arduino
- Подключение микроконтроллера к маршрутизатору через UART интерфейс
Как показывала практика ни один из вышеописанных способов не помог. Только после замены микроконтроллера на Carduino Nano V7 робот начал работать через маршрутизатор.
Бюджет
Деталь | Цена |
---|---|
1. Платформа | 450 руб. |
2. Управляющая микросхема | 300 руб. |
3. Carduino V7 | 1049 руб. |
4. Доставка по России | 200 руб. |
5. Двигатели, колеса, датчики | 629 руб. |
6. Электрические компоненты (разъемы, провода, резисторы) | 182 руб. |
7. Беспроводной WiFi маршрутизатор TP-Link 3020MR | 1425 руб. |
8. Usb хаб | 410 руб. |
9. Крепеж | 170 руб. |
Итого | 4815 руб. |