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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2014, 14:46   #1
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
Unhappy Wi-fi боевой робот

Всем привет. Вот начал сборку робота.
Нажмите на изображение для увеличения
Название: NsRlUS1a0Gw.jpg
Просмотров: 245
Размер:	123.1 Кб
ID:	1605
Было куплено шасси и ардуино с моторшилдом 2 версии.
На шасси установлен LiPo аккумулятор 7.4v, dc-dc преобразователь с 7.4 до 5 вольт, с целью подключения роутера по uart. Ардуино питается от 7.4в. Потом для удобства зарядки аккумулятора я распаял разъем rs232 под зарядник. Все работает, батарейка заряжается.
Нажмите на изображение для увеличения
Название: X0qURR3-Ok0.jpg
Просмотров: 275
Размер:	176.6 Кб
ID:	1606 Нажмите на изображение для увеличения
Название: upfozbWqsf8.jpg
Просмотров: 317
Размер:	155.4 Кб
ID:	1608
Собрана голова робота со светодиодными индикаторами (игрушка короче). Подключал к ардуине и мигал глазами.
Сейчас контроллер прошит вот этим кодом. Все ездит.

PHP код:
/*******************************************************************************
* ROBOT
* Filename : MyRobot01.pde
********************************************************************************/
#include <AFMotor.h> // подключили библиотеку для работы с ДПТ и ШД
AF_DCMotor Motor3(3MOTOR12_1KHZ); // используем 1-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
AF_DCMotor Motor4(4MOTOR12_1KHZ); // используем 2-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
int dalnomer 4// дальномер
int gp2;
float distance;

// -----------------------------------------------------------------
void setup(){
Motor3.setSpeed(200); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(200); // устанавливаем скорость вращения двигателя на 2-м порту
// end setup
// -----------------------------------------------------------------
// О С Н О В Н О Й Ц И К Л П Р О Г Р А М М Ы
void loop(){

  
Go();
}
// -----------------------------------------------------------------

// -----------------------------------------------------------------
void Go() { // БЛУЖДАЮЩИЙ ЦИКЛ  // зациклить с условием while 

gp2=analogRead(dalnomer);
distance=(2914/(gp2+5))-1// Перевод в сантиметры  

do
{
Forward (250); delay(2000);
Spin_Left(); delay(2000);
Forward(200); delay(2000);
Spin_Right(); delay(2000);
Backward (150); delay(2000);
} while (
distance 6);
 
Stop (); delay (1000);
 
Backward (250); delay (2000);
   
Spin_Right(); delay(2000);
// end loop

// ПОДПРОГРАММЫ ДВИЖЕНИЙ
// -----------------------------------------------------------------
void Forward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
// end Forward

void Backward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(BACKWARD); // 1-й моторчик назад крутится
Motor4.run(BACKWARD); // 2-й моторчик назад крутится
// end Forward

void Release (){ // выбег с остановом
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Release

void Stop (){ // останов
Motor3.run(BRAKE);
Motor4.run(BRAKE);
// end Stop

void Spin_Right (){ // поворот влево
Motor3.setSpeed(500); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Spin_Right

void Spin_Left (){ // поворот влево
Motor3.setSpeed(500);// устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
Motor3.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Spin_Left

// ----------------------------------------------------------------- 
Нажмите на изображение для увеличения
Название: jUib7LU5R8w.jpg
Просмотров: 210
Размер:	153.8 Кб
ID:	1611

Сейчас подключил роутер. Связь есть, порт ардуины видно ttyUSB, светодиоды rx-tx при нажатии клавиш на компе моргают. Но оно не едет!
Программа выглядит так

PHP код:
#include <CyberLib.h>
#include <AFMotor.h>

//#define motors_init {D8_Out; D9_Out; D10_Out; D11_Out;} 
//#define robot_go {D8_Low; D9_High; D10_High; D11_Low;} 
//#define robot_back {D8_High; D9_Low; D10_Low; D11_High;}
//#define robot_stop {D8_Low; D9_Low; D10_Low; D11_Low;} 
//#define robot_rotation_left {D8_Low; D9_High; D10_Low; D11_High;} 
//#define robot_rotation_right {D8_High; D9_Low; D10_High; D11_Low;}
AF_DCMotor Motor3(3MOTOR12_1KHZ); // используем 1-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
AF_DCMotor Motor4(4MOTOR12_1KHZ); // используем 2-й порт на частоте ШИМ 1 кГц (можно 1,2,8,64)
uint8_t inByte;

void setup()  

Motor3.setSpeed(200); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(200); // устанавливаем скорость вращения двигателя на 2-м порту
  //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':  //стор
          
Stop;
        break; 
        
        case 
'W':  //вперед
          
Forward;  
        break;  
        
        case 
'D':  //лево
          
Spin_Right
        break;

        case 
'A'//право
          
Spin_Left
        break; 
        
        case 
'S':  //назад
          
Backward
        break;      
    }          
  } 
 
wdt_reset(); //покормить собаку 


// ПОДПРОГРАММЫ ДВИЖЕНИЙ
// -----------------------------------------------------------------
void Forward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
// end Forward

void Backward (int speed){ // движение вперед
Motor3.setSpeed(speed); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(speed); // устанавливаем скорость вращения двигателя на 2-м порту
Motor3.run(BACKWARD); // 1-й моторчик назад крутится
Motor4.run(BACKWARD); // 2-й моторчик назад крутится
// end Forward

void Release (){ // выбег с остановом
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Release

void Stop (){ // останов
Motor3.run(BRAKE);
Motor4.run(BRAKE);
// end Stop

void Spin_Right (){ // поворот влево
Motor3.setSpeed(500); // устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor3.run(FORWARD); // 1-й моторчик вперед крутится
Motor4.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Spin_Right

void Spin_Left (){ // поворот влево
Motor3.setSpeed(500);// устанавливаем скорость вращения двигателя на 1-м порту
Motor4.setSpeed(500);
Motor4.run(FORWARD); // 2-й моторчик вперед крутится
Motor3.run(BACKWARD);
delay (2000);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
// end Spin_Left

// ----------------------------------------------------------------- 
Помогите, пожалуйста. Что не так? Очень хочу закончить проект.
Миниатюры
Нажмите на изображение для увеличения
Название: mMEMmf4W_Os.jpg
Просмотров: 355
Размер:	155.1 Кб
ID:	1607   Нажмите на изображение для увеличения
Название: D-JxEZaPj44.jpg
Просмотров: 351
Размер:	251.9 Кб
ID:	1609   Нажмите на изображение для увеличения
Название: -4jiECjC-V0.jpg
Просмотров: 321
Размер:	253.8 Кб
ID:	1610  
aleksanmoro вне форума   Ответить с цитированием
Старый 12.03.2014, 14:56   #2
cyberlab
Senior Member
 
Регистрация: 25.11.2013
Сообщений: 116
Вес репутации: 0
cyberlab is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

Ардуина какая?
cyberlab вне форума   Ответить с цитированием
Старый 12.03.2014, 15:38   #3
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

Uno на 328 меге
aleksanmoro вне форума   Ответить с цитированием
Старый 12.03.2014, 15:41   #4
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
По умолчанию Re: Wi-fi боевой робот

А на Уно WDT корректно работает?
Admin вне форума   Ответить с цитированием
Старый 12.03.2014, 15:47   #5
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

Дело в том что я переставил мегу с уны на плату freeduino diecimilla. На чистой уне wrt не видел ttyUSB. После перестановки увидел. Подозреваю что дело в ft232 на фридуине и меге, контролирующей uart на плате уны... diecimilia у меня теперь как уно распознается.
aleksanmoro вне форума   Ответить с цитированием
Старый 12.03.2014, 15:49   #6
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

С прогой для моторшилда с библиотекой AFMotor помогите, пожалуйста... не могу найти ошибку ((( Хочу чтоб ардуина через шилд с движками общалась.
aleksanmoro вне форума   Ответить с цитированием
Старый 12.03.2014, 16:11   #7
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
По умолчанию Re: Wi-fi боевой робот

Я спрашивал про WDT(сторожевая собака). Проблема в том что WDT на многих Ардуинах не корректно работает

Так же Вы вызываете функции без параметров
Forward; Backward;
Нужно указывать скорость вращения
Forward(250); Backward(200);

Так же не нужно при вызове функций без параметров, скобки исключать

Spin_Left();
Spin_Right();
Stop ();
Admin вне форума   Ответить с цитированием
Старый 12.03.2014, 17:05   #8
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

Вот переписал всю програмку.
PHP код:
#include <CyberLib.h>
#include <AFMotor.h>
AF_DCMotor motor4(4);
AF_DCMotor motor3(3);
uint8_t inByte;

void setup() 
{
    
motor3.setSpeed(200);
    
motor4.setSpeed(200);
  
// Open serial communications and wait for port to open:
  
Serial.begin(57600);
  while (!
Serial) {
   ; 
// wait for serial port to connect. Needed for Leonardo only
  
}
  
wdt_enable (WDTO_500MS);    //Сторожевая собака 0,5сек. 
}

void loop() // run over and over
{
  if (
Serial.available())
  
inByte Serial.read();
 
// Serial.ReadByte(Serial.read());
  
switch (inByte)
  {
    case 
'w'//вперед
    
motor3.run(FORWARD);
    
motor4.run(FORWARD);
    
delay(1000);
    break;
    
    case 
's'//назад
    
motor3.run(BACKWARD);
    
motor4.run(BACKWARD);
    
delay(1000);
    break;
      
    case 
'a'// вращаемся влево
    
motor3.run(FORWARD);
    
motor4.run(BACKWARD);
    
delay(1000);
    break;
    
    case 
'd'// вращаемся вправо
    
motor3.run(BACKWARD);
    
motor4.run(FORWARD);
    
delay(1000);
    break;
  }
  
wdt_reset(); //покормить собаку 

Значит так. 1) wdt РАБОТАЕТ! после задержек движения в 1 секунду робот останавливается и ждет новую команду.
2) При подключении к роутеру ttyUSB виден, при нажатии клавишь из веб-интерфейса "робота-шпиона" на роутере ноль эмоций... (( ПРИЧИНА ПОКА НЕ ЯСНА (

Последний раз редактировалось aleksanmoro; 12.03.2014 в 17:42.
aleksanmoro вне форума   Ответить с цитированием
Старый 12.03.2014, 18:04   #9
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
По умолчанию Re: Wi-fi боевой робот

Какой у Вас драйвер установлен?
Для остановки нужно "x" отправить
Admin вне форума   Ответить с цитированием
Старый 12.03.2014, 18:16   #10
aleksanmoro
Junior Member
 
Регистрация: 12.03.2014
Сообщений: 17
Вес репутации: 0
aleksanmoro is an unknown quantity at this point
По умолчанию Re: Wi-fi боевой робот

драйвер установлен motorshield v 2
вот такой: Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 291
Размер:	292.1 Кб
ID:	1612 или вы про драйвер FTDI который на роутере устанавливается?
С остановкой все ясно. Главная проблема в том что когда подключаюсь через роутер и пытаюсь рулить платформой, светодиоды rx-tx на ардуине мигают, а реакции никакой нет. в то же время если подключить проводом ардуину к компьютеру через usb и отправить какой-либо символ, все работает очень круто. Подскажите в чем причина?

Последний раз редактировалось aleksanmoro; 12.03.2014 в 18:29.
aleksanmoro вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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