roboforum.ru

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

Небольшой робот 8-298

Re: Пока ищю колеса

CiSi » 16 янв 2010, 01:37

контактный датчик уже установлен, хочу еще сделать несколько ик бамперов (счас как раз осваиваю), дальномер ставить не хочу, дороговато.

Re: Пока ищю колеса

CiSi » 25 янв 2010, 13:49

Придумал все же нехитрый алгоритм поведения робота, он конечно еще незакончен, но уже ездит :) еще планирую дописать процедуры случайного выбора скорости (шим) и времени, а так же процедуру обработки сигналов от датчиков если конечно руки дайдут. Только вот единственное разочерование, я в ходе испытаний вроде спалил половину одного из каналов ДД, теперь ездит только в перед и проворачивает (в обе стороны). Потом может поменяю каналы местами.
Вот код прошивы:
Код: Выделить всёРазвернуть
#include<mega8.h>
#include <delay.h>
#include <stdlib.h>


int direction;  //направление

void GO(int b){            //процедура движения в случайно выбранном направлении
  if(b == 1){
  direction = 0;
  direction = (rand())%140;
  if ((direction > 0) && (direction < 20)){                     //вперёд
     PORTB.5=1;
     PORTB.4=0;
   } else                                                       
       if ((direction > 21) && (direction < 40)){                //назад
         PORTB.5=0;
         PORTB.4=1;
   }       else
            if ((direction > 41) && (direction < 60)){               //вперед и влево
              PORTB.5=1;
              PORTB.4=0;
             
              PORTB.0=1;
              PORTB.3=0;
   }           else
                if ((direction > 61) && (direction < 80)){            //вперед и вправо
                   PORTB.5=1;
                   PORTB.4=0;
                   
                    PORTB.0=0;
                    PORTB.3=1;
   }                 else
                        if ((direction > 81) && (direction < 100)){            //назад и влево
                          PORTB.5=0;
                          PORTB.4=1;
                         
                          PORTB.0=1;
                          PORTB.3=0;
   }                         else   
                               if ((direction > 101) && (direction < 120)){         // назад и вправо
                                 PORTB.5=1;
                                 PORTB.4=0;
                                 
                                 PORTB.0=0;
                                 PORTB.3=1;
   }                               else
                                     if ((direction > 121) && (direction < 140)){     //стоп
                                       PORTB.5=0;
                                       PORTB.4=0; 
   }
 

} else                               PORTB.5=0;
                                     PORTB.4=0;
    } 
   
   
void PWM(int a){
if (a==1) {
OCR1AH = 0x03; // PWM(PD5) = OCR1A / 10.24
OCR1AL = 0x20; // 0x03FF это число 1023

TCCR1A = 0x83; // 10100011 
TCCR1B = 0x09; // 00001001 - start Timer*/
}
else { if (a==0) {
TCCR1A = 0x00; 
TCCR1B = 0x00;
}}
}   

void main(void)
{

DDRB=0xff;
PORTB=0x00;

DDRC=0xff;
PORTC=0x00;

while(1){

PWM(1);

GO(1);
PORTC.5=1;
delay_ms(500);
direction = 200;
GO(0);
PORTC.5=0;
delay_ms(500);

} }

Re: Пока ищю колеса

=DeaD= » 25 янв 2010, 13:51

Может как-то уже отделить или переименовать тему и поправить первый пост? Я вот чисто случайно в неё зашел, и очень удивился найти в теме "пока ищу колёса" программный код и обсуждение алгоритмов поведения робота :pardon:

Re: Небольшой робот 8-298

CiSi » 25 янв 2010, 19:01

Зацените видео:
http://www.youtube.com/watch?v=NcKmbaAqu08
Последний раз редактировалось CiSi 25 янв 2010, 19:07, всего редактировалось 2 раз(а).

Re: Небольшой робот 8-298

sneg » 25 янв 2010, 19:05

Отлично!!! :good: :Bravo:

Re: Небольшой робот 8-298

CiSi » 25 янв 2010, 19:06

Спасибо!
А как мне сразу сюда ролик вставить?

>MegaBIZON
Ага все понятно! :beer:
Последний раз редактировалось CiSi 25 янв 2010, 19:29, всего редактировалось 1 раз.

Re: Небольшой робот 8-298

MegaBIZON » 25 янв 2010, 19:26

Я вставил - погляди как сделано:

Код: Выделить всёРазвернуть
Зацените видео: [youtube]NcKmbaAqu08[/youtube]
[url]http://www.youtube.com/watch?v=NcKmbaAqu08[/url]

Re: Небольшой робот 8-298

CiSi » 14 фев 2010, 15:55

Недавно приделал бампер, а руки дошли до написания обработки события после его срабатывания только сейчас. И тут возник вопрос: после срабатывания бампера процедура основного движения должна сразу же прерываться, но у меня это неполучается.
сделал пока так:
while(PINC.4 ==1){ //работать пока не сработал бампер
GO(); //процедура основного движения
}
если сработал бампер, то сначало завершится процедура основного движения, а только потом будет отъезд от препятствия.

Re: Небольшой робот 8-298

Vovan » 14 фев 2010, 18:14

а что мешает внешние прерывания использовать?

Re: Небольшой робот 8-298

CiSi » 14 фев 2010, 18:54

Точно! спасибо!

Re: Небольшой робот 8-298

CiSi » 14 фев 2010, 23:59

Отлично, с прерываниями вроде разобрался! Бампер работает! :)

Re: Небольшой робот 8-298

Vovan » 15 фев 2010, 01:34

Вот и ладушки :)

Re: Небольшой робот 8-298

CiSi » 15 фев 2010, 01:42

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

Re: Небольшой робот 8-298

Vovan » 15 фев 2010, 11:13

"Пrавильным путем идёте, товаrищ!"(с) :wink:
Резистивный делитель параллельно батарее питания, а среднюю точку на вход АЦП :)
Если есть свободные ноги, можно прицепить простейшую индикацию из светодиодов: нижний предел (требуется зарядка), нормальный заряд, зарядка окончена (верхний предел), или вариации на эту тему :)

Re: Небольшой робот 8-298

CiSi » 15 фев 2010, 11:32

Если я правельно понял то надо так подключать, только вот куда подключить свободный вывод резистора. и какие должны быть их наминалы?
Вложения
1.jpg


cron
Rambler\'s Top100 Mail.ru counter