Беспроводной wi fi робот

Беспроводной wi fi робот

Продолжение статьи «Как сделать робота»
Все детали для робота были приобретены здесь
Давно хотел сделать Wi-Fi робота
Наконец то сегодня модифицировал свой роутер wr703N
Прикрепил его с низу к платформе робота

К прошивке CyberWrt написал модуль управления роботом
Для работы модуля нужно установить модуль «Драйвер Видео» и модуль «Драйвер FTDI»
Результаты можете увидеть на фото
К сожалению снять видео и управлять одновременно с планшета, у меня не получилось. Так что пока только фотографии

Для скетча wifi робота для Arduino Nano и UNO, требуется библиотека CyberLib

#define motors_init
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 ); //Сторожевая собака 0,5сек.
>

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;

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 ;
>

void setup ()
<
motors_init ; //инициализация выходов моторов
D11_Out ; D11_Low ; //динамик
randomSeed ( analogRead ( 6 )); //Получить случайное значение
Serial . begin ( 57600 ); //инициализация порта для связи с роутером
wdt_enable ( WDTO_500MS ); //Сторожевая собака 0,5сек.
>

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 (); //покормить собаку
>

#include // Подключаем библиотеку для управления двигателями

AF_DCMotor motor1 ( 1 ); //создаем мотор №1
AF_DCMotor motor2 ( 2 ); //создаем мотор №2
AF_DCMotor motor3 ( 3 ); //создаем мотор №1
AF_DCMotor motor4 ( 4 ); //создаем мотор №2

int inByte ; //в этой переменной храним поступившие данные

void setup ()
Serial . begin ( 57600 ); //включаем передачу данных на скорости 9600 бит/c
motor1 . setSpeed ( 255 ); //Скорость движка №1
motor2 . setSpeed ( 255 ); //Скорость движка №2
motor3 . setSpeed ( 255 ); //Скорость движка №1
motor4 . setSpeed ( 255 ); //Скорость движка №2
>

void loop ()
<
if ( Serial . available ()) //если что то пришло
<
inByte = Serial . read ();
switch ( inByte ) //смотрим какая команда пришла
<
case ‘x’ : //стор
robot_stop ();
break;

case ‘W’ : //вперед
robot_go ();
break;

case ‘D’ : //лево
robot_left ();
break;

case ‘A’ : //право
robot_right ();
break;

void robot_go ()
motor1 . run ( FORWARD ); //движемся вперед
motor2 . run ( FORWARD ); //движемся вперед
motor3 . run ( FORWARD ); //движемся вперед
motor4 . run ( FORWARD ); //движемся вперед
>

void robot_back ()
motor1 . run ( BACKWARD ); //движемся назад
motor2 . run ( BACKWARD ); //движемся назад
motor3 . run ( BACKWARD ); //движемся назад
motor4 . run ( BACKWARD ); //движемся назад
>

void robot_left ()
motor2 . run ( FORWARD ); //Повернем влево
motor3 . run ( FORWARD ); //Повернем влево
>

void robot_right ()
motor1 . run ( FORWARD ); //Повернем вправо
motor4 . run ( FORWARD ); //Повернем вправо
>

void robot_stop ()
motor1 . run ( RELEASE ); //Останавливаем колеса
motor2 . run ( RELEASE ); //Останавливаем колеса
motor3 . run ( RELEASE ); //Останавливаем колеса
motor4 . run ( RELEASE ); //Останавливаем колеса
>

Управление осуществляется из любого браузера, на любых платформах. Нажимаем кнопку робот движется, отпускаем он останавливается
На PC кроме экранных кнопок можно управлять еще с клавиатуры, клавишами W, A , D, S, X
Пробовал управлять роботом удаленно из другого района города, есть небольшая задержка, но я так подозреваю что это из -за высокого разрешения камеры(большой трафик), потому что я выбрал разрешение 960х720
Как появится время буду оптимизировать

Читайте также:  Леново b590 есть wifi

Источник

Собираем Wi-Fi робота

Давно мечтал сделать Wi-Fi робота, которым можно было бы управлять удаленно. И вот наконец настал тот день когда я смог управлять роботом через интернет, видеть и слышать все что происходит вокруг него.
Заинтересовавшихся приглашаю под кат

Для создания робота использовались следующие комплектующие:

Вот так выглядит собранный мной робот, без верхней крышки.

Теперь все по порядку:

image

Расположение компонентов на материнской плате. Я установил только Arduino Nano, драйвер двигателей и звуковой излучатель HC:

image

Роутер wr703N прикрепил к нижней части платформы робота на двухсторонний скотч:

Веб камера прикреплена на мебельный уголок, к штатным отверстиям платформы, предусмотренных для сервомоторов:

СyberWrt — это прошивка собранная на базе OpenWrt и предназначенная в первую очередь для роботов, умного дома и других устройств построенных на базе популярных моделей роутеров Tp-Link mr3020 b Wr703N. У СyberWrt максимально возможный объем свободного места для инсталляции пакетов — 1.25Мб. По умолчанию установлен веб сервер и все операции можно проводить через встроенный веб интерфейс. Сразу после перепрошивки, роутер доступен в сети по кабелю и по WiFi, как точка доступа. Через веб-интерфейс можно работать в режиме «командной строки» — через веб терминал и в файловом менеджере, в котором можно редактировать, загружать, удалять, создавать, копировать файлы и многое другое.

После прошивки роутера, он доступен как WiFi точка доступа с именем «CyberBot», подключаемся к нему заходим на главную страницу роутера. Вот так выглядит веб интерфейс сразу после прошивки.

Устанавливаем модули Драйвер FTDI, Драйвер video и CyberBot-2.

Прошиваем контроллер ардуино.

Код программы робота получился достаточно простым, но его достаточно для того что бы удаленно управлять роботом через локальную сеть или интернет.
Код адаптирован под контроллеры Arduino с ATmega168/328 на борту и использует библиотеку CyberLib.
Эта библиотека помогает из контроллера выжать максимум его возможностей и уменьшить объем конечного кода
В коде используется WDT, для того что бы робот не смог зависнуть.
Так же код поддерживает управление камерой по осям X и Y, но у меня не было свободных сервомоторов и я не смог воспользоваться этой функцией:

#include #include Servo myservo1; Servo myservo2; long previousMillis; http://cyber-place.ru/attachment.php?attachmentid=600&d=1389429469 uint8_t LedStep = 0; // Счетчик int i; boolean light_stat; uint8_t inByte; uint8_t speed=255; //максимальная скорость по умолчанию #define init void setup() < myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A6_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); >void loop() < unsigned long currentMillis = millis(); if (LedStep == 0 && currentMillis - previousMillis >500) < // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 1; >if (LedStep == 1 && currentMillis - previousMillis > 500) < // Задержка 0,5 сек. previousMillis = currentMillis; LedStep = 2; >if (LedStep == 2 && currentMillis - previousMillis > 500) < // Задержка 0,5 сек. LedStep = 0; >if (UART_ReadByte(inByte)) //Если что то пришло < switch (inByte) // Смотрим какая команда пришла < case 'x': // Остановка робота robot_stop(); break; case 'W': // Движение вперед robot_go(); break; case 'D': // Поворотjт влево robot_rotation_left(); break; case 'A': // Поворот вправо robot_rotation_right(); break; case 'S': // Движение назад robot_back(); break; case 'U': // Камера поднимается вверх myservo1.write(i -= 20); break; case 'J': // Камера опускается вниз myservo1.write(i += 20); break; case 'H': // Камера поворачивается вправо myservo2.write(i += 20); break; case 'K': // Камера поворачивается влево myservo2.write(i -= 20); break; case 'B': // Бластер D12_High; break; case 'C': // Клаксон horn(); break; case 'V': // Включить/Выключить фары if(light_stat) < D8_Low; light_stat=false; >else < D8_High; light_stat=true; >break; > if(inByte>47 && inByte <58) speed=(inByte-47)*25+5; //принимаем команду и преобразуем в скорость >wdt_reset(); > void horn() < for(uint8_t i=0; ivoid 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()

Все собрано и прошито, теперь включаем робота и управляем им удаленно.
На PC кроме экранных кнопок можно управлять еще с клавиатуры, клавишами W, A, D, S, X

В дальнейшем планирую научить робота ориентироваться в пространстве и рисовать карту помещения.

Источник

Оцените статью
Adblock
detector