Arduino Tank управление через Wi-Fi



В этой статье информация о том как собрать свой танк, оснащенный Web Камерой и управляемый посредством Wifi роутера.

Необходимые материалы:

  1. Web Camera
  2. Роутер TP-Link TL-MR3020
  3. Сервоприводы SG90 - 2шт
  4. Camera Platform Anti-Vibration
  5. Аккумулятор 7.2V 5000mah
  6. Аккумулятор 5V 2000mah
  7. Nano 3.0 Atmel ATmega328
  8. L298N motor driver
  9. Провода, термотрубки, USB хаб, диоды и другое.
  10. Платформа на ваш вкус, я выбрал DD1-1


Сборка нашего монстра
Настройка Роутера MR3020.
Первым делом начнем с роутера. Я долго думал что выбрать OR-WRT или CyberWRT. OR-WRT гибок в настройках, но все редактирование и внесения своих настроек осуществляется через терминал с помощи программы Putty. А так как Я боялся на тот момет работать через терминал, Я выбрал где есть графический интерфейс это CyberWRT, плюс возможно подключение через USB порт.
Для того что бы изменить прошивку нашего роутера, нужно скачать прошивку CyberWrt MR3020.

Как мы скачали, делаем следующее:

1) Включить роутер и подождать загрузки.
2) Зайти и залогиниться на 192.168.0.254 (по умолчанию admin\admin)
3) Найти в меню слева System Tools, там пункт System Upgrade и залить прошивку через веб-форму
4) Дождаться перезагрузки (порядка 4х минут)
Роутер готов к настройке.

Далее делаем как так.
Введите в браузере адрес: 192.168.1.100
- если Вы хотите использовать роутер через Wi-Fi – найдите в списке доступный сетей сеть CyberWrt.



Можно выбрать один из режимов: «Точка доступа» и «Клиент Wi-Fi сети». Для настройки режима Клиента:
- выберите режим «Клиент Wi-Fi сети»
- IP адрес Вашего устройства (по этому адресу будет доступно Ваше устройство. Постарайтесь выбрать незанятый IP. Например: 192.168.1.100)
- Маска подсети (255.255.255.0)
- Шлюз (например, IP Вашего домашнего роутера или шлюза - 192.168.1.1)
- Тип шифрования (тип шифрования, используемый в Вашей домашней сети)
- Пароль (пароль, для доступа к Вашей домашней сети)

Если сделали все правильно, то у вас пойдет RSS строка в нижней части экрана.

Когда все заработала, у вас появятся раздел модули, там вы находите модуль "РОБОТ". Устанавливайте. Готово.

Подключение L298N, Arduino Nano, MR3020, Камера и другое

На картинке все наглядно показано, но на всякий случай напишу.



Вывод Arduino DIGITAL 4 - к IN1 пину модуля.
Вывод Arduino DIGITAL 5 - к IN2 пину модуля.
Вывод Arduino DIGITAL 6 - к IN3 пину модуля.
Вывод Arduino DIGITAL 7 - к IN4 пину модуля.
Вывод Arduino GND - к GND клеме модуля.
GND клема модуля - Минус аккумулятора.
7.2V клема модуля - Плюс аккумулятора.
RM клема модуля - Правый моторчик.
LM клема модуля - Левый моторчик.
USB порт Arduino - Подключаем к USB хаб
Web Камера - Подключаем к USB хаб
USB хаб - Подключаем к USB роутера

Питание так скажем логистики, осуществляется вторым аккумулятором. Емкость 2000 mA/h 5v, дабы не спалить роутер. Да и с двумя аккумуляторами робот стабильней работает. Так вот, его мы подключаем просто в разъем микро USB. Через USB хаб который подключен к роутету питанию уже получает и камера и наша ардуинка.



Скетч для Arduino Nano
Вам необходима скачать библиотеку CyberLib, она предназначена только для Atmega 328.


/* 
Версия 1.5 WIFI Tanka на DD1-1
Реализовано:
1) Движение камеры по X и Y
2) Гудок
3) Фары
4) Звук при включении
*/

#include <CyberLib.h>  // Подключаем библиотеку
#include <Servo.h> // Подключаем библиотеку сервоприводов

Servo myservo1;
Servo myservo2;

long previousMillis; // Нужно для таймера
int LedStep = 0; // Счетчик для LED
int i;

#define robot_go {D4_High; D5_Low; D6_Low; D7_High;} 
#define robot_back {D4_Low; D5_High; D6_High; D7_Low;} 
#define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} 
#define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;}
#define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;}
#define LED_ON {D13_High;} 
#define LED_OFF {D13_Low;} 
#define Headlamp_ON {D8_Low;} 
#define Headlamp_OFF {D8_High;}
#define Buzzer {tone(11, 494, 500);}
#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D13_Out;} 
uint8_t inByte;


void setup()  
{ 
  myservo1.attach(9); // Подключение сервоприводов к порту
  myservo2.attach(10); // Подключение сервоприводов к порту
  D11_Out;  D11_Low; // Динамик 
  Headlamp_OFF; // Фары выкл по умолчанию
  for(uint8_t i=0; i<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота 
  init;  // Инициализация портов
  //Buzzer; // Инициализация портов динамика
  UART_Init(57600);// Инициализация порта для связи с роутером  
  wdt_enable (WDTO_500MS); 
}  

void loop()  
{ 
    unsigned long currentMillis = millis(); // Обновление таймера
      if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. 
      previousMillis = currentMillis; // обновление таймер
      LED_ON;   // Включить
      LedStep = 1; // Счетчик шагов
    }

    if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.
      previousMillis = currentMillis; // обновление таймер
      LED_OFF;  // Выключить
      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': // Повопорт влево
          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 'Y': // Серво поворачивается 85
         myservo1.write(85);  
         myservo2.write(85);
        break; 
        
         case 'F': // Включить фары
         Headlamp_ON;
        break;
        
        case 'V': // Выключить фары
         Headlamp_OFF;
        break;
        
        case 'I': // Гудок
         Buzzer;
        break;
    }          
  } 
 wdt_reset();
}  


Внесение изменений в роутер
Для того что бы управлять камерами были внесены изменения в библиотеку роутера. Вам нужно будет скачать измененный код и заменить исходные файлы ним.



Закидываем с помощи модуля файловый менеджер.
carduino.spybot.js кидаем в www/modules/CyberBot/
index.cgi кидаем в www/cgi-bin/modules/CyberBot/

Фото:




Управление танком
Управление осуществляется помощи окна браузера, для этого подключаемся к нашему танку, набираем в адресной строке 192.168.0.1 и заходим в вкладку. Готово. Управлять можно практически с любого устройства у которого есть Wifi модуль.




Получился довольно небольшой и симпатичный РУ робот, в планах оснастить его фарами и добавить солнечную панель, для подзарядки аккумулятора логистики.
Видео:

Источник: gulinsky.blogspot.ru

2 комментария

Vitamine 20 ноября 2014 09:56
Всё Супер!!!
Как сделать управление камерой мышью, и как добавить вторую камеру?
Типа курсовая камера и поворотная камера. Поворотная камера управляется мышкой.

Всё Супер!!!
Вопрос знатокам!
Как сделать управление камеры мышью?
Как подключить вторую камеру? Типа, 1ая Камера - курсовая, не подвижная, 2ая Камера поворотная.
Юрий 5 июня 2015 16:41
Уважаемый автор, непонятно, как связан роутер с Arduino- я правильно понимаю, что он подключается на место 3G модема? В свободный(единственный) USB host?
Ваше имя: *
Ваш e-mail: *
Войти через
  • bowtie smile laughing blush smiley relaxed smirk
    heart_eyes kissing_heart kissing_closed_eyes flushed relieved satisfied grin
    wink stuck_out_tongue_winking_eye stuck_out_tongue_closed_eyes grinning kissing stuck_out_tongue sleeping
    worried frowning anguished open_mouth grimacing confused hushed
    expressionless unamused sweat_smile sweat disappointed_relieved weary pensive
    disappointed confounded fearful cold_sweat persevere cry sob
    joy astonished scream tired_face angry rage triumph
    sleepy yum mask sunglasses dizzy_face imp smiling_imp
    neutral_face no_mouth innocent
Введите два слова, показанных на изображении:
© 2010-2020 Все права соблюдены.