Продолжение статьи "
Как сделать робота"
Все
детали для робота были
приобретены здесь
Давно хотел сделать Wi-Fi робота
Наконец то сегодня модифицировал свой
роутер wr703N
Прикрепил его с низу к платформе робота
Установил web Камеру
К
прошивке CyberWrt написал модуль управления роботом
Для работы модуля нужно установить модуль "Драйвер Видео" и модуль "Драйвер FTDI"
Результаты можете увидеть на фото
К сожалению снять видео и управлять одновременно с планшета, у меня не получилось. Так что пока только фотографии
Для скетча wifi робота для Arduino Nano и UNO, требуется
библиотека CyberLib
PHP код:
#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); //Сторожевая собака 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;
}
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
PHP код:
#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); //Сторожевая собака 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(); //покормить собаку
}
Скетч для работы с
4-мя моторами и
Arduino MotorShield driver
PHP код:
#include <AFMotor.h> // Подключаем библиотеку для управления двигателями
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;
case 'S': //назад
robot_back();
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
Как появится время буду оптимизировать