Arduino балансирование

Автомат, адаптивный автомат ... разум

Arduino балансирование

Сообщение Yur0k » 19 янв 2010, 15:42

Всем здоровеньки булы...
я новичок в роботостроении.. начал изучать с ардуины. видел гдето в инете робота балансирующего на двух колесах, без использования датчика ускорения. с применением ir датчика расстояния. решил попробовать построить.
Изображение
столкнулся с проблемкой. мой pop-bot не хочет балансировать на двух колесах, делает 2-3 попытки устоять - затем падает.
Может кто поможет с кодом? знаю, что в нем гдето косяк...

Код: Выделить всё
/********************************************************************************/
int gp2;
void setup(){
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(9,OUTPUT);
}
void Forward(int speed){
  analogWrite(3,speed);
  digitalWrite(5,LOW);
  analogWrite(6,speed);
  digitalWrite(9,LOW);
}
void Backward(int speed){
  analogWrite(5,speed);
  digitalWrite(3,LOW);
  analogWrite(9,speed);
  digitalWrite(6,LOW);
}
void loop(){
  int i;
  for (i=0;i<5;i++){                         
    gp2=(gp2+analogRead(5));
  }                                       
  gp2=gp2/5;                                     
  if (gp2>290){                                     
    Backward(200);                           
  }
  else{
    Forward(200);
  }
}
/*******************************************************************************/
Последний раз редактировалось Yur0k 20 янв 2010, 11:28, всего редактировалось 1 раз.
Аватара пользователя
Yur0k
 
Сообщения: 4
Зарегистрирован: 19 янв 2010, 15:16
Откуда: Уфа

Re: Arduino балансирование

Сообщение Master » 19 янв 2010, 16:06

Добавьте фото робота и схему что ли. А то ХЗ че там у вас наподключено.

Добавлено спустя 59 секунд:
Тем более ИК датчик построен на ТСОПе или тупо ИК фотодиод?
Если ТСОП, то он ловит сигнал от отражения по всей комнате, если ИК фотодоид, то он помехи ловит.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Arduino балансирование

Сообщение =DeaD= » 19 янв 2010, 16:14

Надо бы более плавный регулятор наверное, а не тупо IF ?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino балансирование

Сообщение Yur0k » 19 янв 2010, 16:18

фото своего вечером сделаю,
робот построен на базе pop-bota
Изображение
в качестве датчика использовался шарповский дальномер(из набора)
Аватара пользователя
Yur0k
 
Сообщения: 4
Зарегистрирован: 19 янв 2010, 15:16
Откуда: Уфа

Re: Arduino балансирование

Сообщение SkyStorm » 19 янв 2010, 16:41

Если у вас Аналоговый Шарп GP2D120 то не плохо было бы заглянуть в datasheet на него.
С этим датчиком этот код никогда стабильно работать не будет.
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Arduino балансирование

Сообщение avr123.nm.ru » 19 янв 2010, 16:48

А в руководстве pop-bot и arduino студию http://popbot.narod.ru/ нету примеров нужных ?
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Arduino балансирование

Сообщение SkyStorm » 19 янв 2010, 16:55

Подсказываю на 99 странице приведенного выше руководства ВСЯ нужная информация о Дальномере.
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Arduino балансирование

Сообщение Yur0k » 19 янв 2010, 17:05

=DeaD= писал(а):Надо бы более плавный регулятор наверное, а не тупо IF ?

спасибо, согласен, буду подумать как сделать

SkyStorm писал(а):Если у вас Аналоговый Шарп GP2D120 то не плохо было бы заглянуть в datasheet на него.
С этим датчиком этот код никогда стабильно работать не будет.

поэтому и спрашиваю здесь.. но думаю дело не в датчике.
Аватара пользователя
Yur0k
 
Сообщения: 4
Зарегистрирован: 19 янв 2010, 15:16
Откуда: Уфа

Re: Arduino балансирование

Сообщение SkyStorm » 19 янв 2010, 17:45

Правильно дело не в датчике(он рабочий просто немного не подходит) а в программе его читающей.
На 99 страничку заглянул???
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Arduino балансирование

Сообщение Yur0k » 20 янв 2010, 11:34

На 99 страничку заглянул???


да поглядел, у датчика изменяется напряжение в зависимости от расстояния. Следовательно нужно не тупо включать двигатели назад вперед, а добавлять убавлять мощность, в зависимости от измеренного расстояния. правильно?
Аватара пользователя
Yur0k
 
Сообщения: 4
Зарегистрирован: 19 янв 2010, 15:16
Откуда: Уфа

Re: Arduino балансирование

Сообщение =DeaD= » 20 янв 2010, 11:42

конечно, это будет простейшее П-регулирование :)

Это частный случай полного ПИД-регулятора: [[Перевод статьи "Просто о ПИД-алгоритмах"]]
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Arduino балансирование

Сообщение SkyStorm » 20 янв 2010, 12:56

То что посмотрел молодец. Выводы тоже хорошие сделал.
Обрати внимание еще на временную диаграмму.
Датчик отдает данные в течении 38.3±9.6 ms, а ты читаешь их без задержки
Код: Выделить всё
for (i=0;i<5;i++){                         
    gp2=(gp2+analogRead(5));
  }

1. ты считываешь практически одно измерение а не несколько.
2. после этого 200мс едеш на основании полученного измерения.
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Arduino балансирование

Сообщение Newman » 21 апр 2010, 08:27

Добавь ПИД регулятор. :good:
Power = Ki*(integral)+Kd(derivative)+Kp*(error)
Аватара пользователя
Newman
 
Сообщения: 6
Зарегистрирован: 11 ноя 2009, 10:18


Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron