roboforum.ru

Технический форум по робототехнике.

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 раз.

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

Master » 19 янв 2010, 16:06

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

Добавлено спустя 59 секунд:
Тем более ИК датчик построен на ТСОПе или тупо ИК фотодиод?
Если ТСОП, то он ловит сигнал от отражения по всей комнате, если ИК фотодоид, то он помехи ловит.

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

=DeaD= » 19 янв 2010, 16:14

Надо бы более плавный регулятор наверное, а не тупо IF ?

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

Yur0k » 19 янв 2010, 16:18

фото своего вечером сделаю,
робот построен на базе pop-bota
Изображение
в качестве датчика использовался шарповский дальномер(из набора)

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

SkyStorm » 19 янв 2010, 16:41

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

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

avr123.nm.ru » 19 янв 2010, 16:48

А в руководстве pop-bot и arduino студию http://popbot.narod.ru/ нету примеров нужных ?

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

SkyStorm » 19 янв 2010, 16:55

Подсказываю на 99 странице приведенного выше руководства ВСЯ нужная информация о Дальномере.

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

Yur0k » 19 янв 2010, 17:05

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

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

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

поэтому и спрашиваю здесь.. но думаю дело не в датчике.

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

SkyStorm » 19 янв 2010, 17:45

Правильно дело не в датчике(он рабочий просто немного не подходит) а в программе его читающей.
На 99 страничку заглянул???

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

Yur0k » 20 янв 2010, 11:34

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


да поглядел, у датчика изменяется напряжение в зависимости от расстояния. Следовательно нужно не тупо включать двигатели назад вперед, а добавлять убавлять мощность, в зависимости от измеренного расстояния. правильно?

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

=DeaD= » 20 янв 2010, 11:42

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

Это частный случай полного ПИД-регулятора: [[Перевод статьи "Просто о ПИД-алгоритмах"]]

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мс едеш на основании полученного измерения.

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

Newman » 21 апр 2010, 08:27

Добавь ПИД регулятор. :good:
Power = Ki*(integral)+Kd(derivative)+Kp*(error)


cron
Rambler\'s Top100 Mail.ru counter