Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Робототехника

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.09.2013, 20:52   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Wi-Fi робот

Продолжение статьи "Как сделать робота"
Все детали для робота были приобретены здесь
Давно хотел сделать Wi-Fi робота
Наконец то сегодня модифицировал свой роутер wr703N
Прикрепил его с низу к платформе робота
Нажмите на изображение для увеличения
Название: wifibot.jpg
Просмотров: 8302
Размер:	224.2 Кб
ID:	1155

Установил web Камеру
Нажмите на изображение для увеличения
Название: wifibot1.jpg
Просмотров: 961
Размер:	219.8 Кб
ID:	1156

Нажмите на изображение для увеличения
Название: wifibot3.jpg
Просмотров: 20922
Размер:	245.5 Кб
ID:	1158

К прошивке CyberWrt написал модуль управления роботом
Для работы модуля нужно установить модуль "Драйвер Видео" и модуль "Драйвер FTDI"
Результаты можете увидеть на фото
К сожалению снять видео и управлять одновременно с планшета, у меня не получилось. Так что пока только фотографии
Нажмите на изображение для увеличения
Название: wifibot2.jpg
Просмотров: 24598
Размер:	221.9 Кб
ID:	1159

Для скетча 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=0i<12i++) beep(70random(1002000)); //звуковое оповещение готовности робота    
  
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<58speed=(inByte-47)*25+5;//принимает команду и преобразуем в скорость 
  
}   
 
wdt_reset(); //покормить собаку   
}  

void robot_go() 

  
D4_Low
  
analogWrite(5speed);  
  
analogWrite(6speed); 
  
D7_Low


void robot_back() 

   
D4_High;  
   
analogWrite(5255-speed);  
   
analogWrite(6255-speed); 
   
D7_High


void robot_stop() 

  
D4_Low;  
  
analogWrite(50);  
  
analogWrite(60); 
  
D7_Low;   


void robot_rotation_left() 

  
D4_Low
  
analogWrite(5speed);  
  
analogWrite(6255-speed);  
  
D7_High


void robot_rotation_right() 

  
D4_High;  
  
analogWrite(5255-speed);  
  
analogWrite(6speed);  
  
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
Как появится время буду оптимизировать
Admin вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:32. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика