В сети выложено огромное количество инструкций по сборке различных моделей роботов. Попробуем собрать свою собственную модель домашнего Wi-Fi робота используя информацию с форума Cyber-place, детали частично с интернет-магазина Сarduino. Многие запчасти выгодно заказывать напрямую из Китая (Ebay, Aliexpress). Это значительно уменьшит бюджет.
Свой взгляд на теорию и проектирование современных роботов изложен здесь.

Функциональный вид робота

  1. Перемещение по поверхности согласно командам оператора,
  2. Трансляция видео с широким углом обзора.

Блок управления

Универсальный контроллер Carduino Nano V7

Микроконтроллер: ATmega328
Входное напряжение: от 5V до 30V
Тактовая частота: 16 МГц
Flash память: 32 KB
Оперативная память (SRAM): 2 Кб

arduino

Материнская плата робота «CyberBot»

Плата предназначена для подключения к ней различных устройств Arduino или аналогов устройств через стандартные интерфейсы.

controller

Модуль управления двигателями — Motor Shield

К нему можно подключить и управлять двумя двигателями постоянного тока или 4 шаговыми двигателями. Содержит двухканальный драйвер двигателя HG7881.
Питание: 2.5V до 12V
Потребление тока на один канал:: до 800 мА

motor_driver

Редукторные двигатели

Мотор-редуктор с передаточным соотношением 1:48
Диапазон напряжения от 3V до 6V.
Скоростью вращения колеса 48 м/мин.
Ток холостого хода (6в): 120mA
Уровень шума: <65dB

motor

Модуль связи

Беспроводной WiFi маршрутизатор TP-Link 3020MR

Данная модель идеально подходит для установки сторонних прошивок. Для управления нашим роботом выбрана CyberWRT. Прошивка создана на базе прошивки OpenWRT версии r37816.
Управление роутером производится из любого web-браузера через Web-интерфейс. Также доступно управление через telnet, SSH. Расширение функционала производится за счет установки дополнений из каталога. Доступная память для приложений 1,2Mb.

tp_link

Web-камера Logitech E3500

Камера с возможностью коррекции изображения.

web_camera

USB-хаб

Блок для связи USB-устройств между собой: arduino, маршрутизатор, web-камера.

hub

Вспомогательные элементы

Платформа

box

Колеса

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

wheels

Батарейный отсек

Необходим для установки элементов питания. Для нашей версии робота достаточно 4 элементов питания размера AA.

battery

Крепеж, провода

Вспомогательные инструменты для соединения отдельных элементов.

cables

Процесс сборки робота

Подготовка платы робота «CyberBot» является самым сложным для начинающих, т.к. подразумевает использование паяльника. Необходимо припаять:

  1. Блокирующие конденсаторы от 0,1 мкф и выше
  2. Электролитический конденсатор от 100 мкф х 16в и выше
  3. Резистор 150 Ом

Резисторы необходимо устанавливать из расчета — по одному электролиту и блокирующему конденсатору для каждого установленного модуля. В результате мы должны получить следующее:

controller

Разъемы позволят дополнять микросхему дополнительными датчиками и избавят нас от постоянной перепайки деталей.

controller

К плате контроллера подключаем модуль управления двигателями — Motor Shield. Прикручиваем батарейный отсек. Для крепления двигателей к платформе понадобятся болты М3х30. На двигатели надеваем колеса.
На вторую часть платформы прикрепляем остальное: web-камеру, маршрутизатор, USB-хаб. Провода стягиваем скобами и аккуратно укладываем чтобы они не мешали другим элементам.

Программное обеспечение

Прошивка маршрутизатора TP-Link 3020MR

Загружаем прошивку отсюда. В меню оригинальной прошивки маршрутизатора выбираем пункт «Обновить программное обеспечение» и выбираем загруженный ранее файл CyberWrt-v1.4.bin.

После обновления адрес маршрутизатора изменится на http://192.168.1.100
В разделе «Настройка Wi-Fi» необходимо выбрать режим «Клиент Wi-Fi сети» и указать данные к подключаемой Wi-Fi сети домашнего маршрутизатора. Например:

cyberwrt

Если вы на каком либо этапе допустили ошибку (неправильно указали IP, шлюз) или устройство оказалось недоступно, то для решения проблемы необходимо подключить роутер с ПК с помощью LAN кабеля, зайти в настройки и указать правильные данные.

Теперь домашний роутер, к которому будет подключаться маршрутизатор, установленный на роботе, будет являться узлом для связи с внешним миром через сеть Интернет.

Установка драйверов

Драйвера_USB-Serial

Модуль устанавливает драйвера USB-Serial, такие как FTDI, Prolifis, CP2110x для USB-serial моста.

Драйвер_WebCam

Драйвер для UVC WebCam.

cyberwrt

Установка модулей

Модуль Робот-Шпион3 (CyberBot3)

Модифицированный модуль для управления Wi-Fi роботом CyberBot-3 через веб браузер.

cyberwrt

Интерфейс модуля

cyberwrt

Загрузка скетча в 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

Список часто используемых команд в 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 руб.