Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Алгоритмы для лайнтейсера
Алгоритмы для лайнтейсера
Отправлено 07.06.2010 - 21:511
Начальная группа
1798 сообщений
Мужчина
Давайте здесь обсуждать разные алгоритмы для лайнтрейсеров. Предлагайте свои идеи!
Вот моя идея:
Code

while(1)
{       
if(SENSOR1 && SENSOR2)
{
        forward();       
        LEFT_SPEED=MAX;
        RIGHT_SPEED=MAX;
}

if(!SENSOR1)
{             
while(!SENSOR1)
       {        
         if(SPEED_RIGHT!=0)
       {
       SPEED_RIGHT--;
       }         
delay_us(X);
         }
}        

if(!SENSOR2)
{             
while(!SENSOR2)
       {        
       if(SPEED_LEFT!=0)
       {
        SPEED_LEFT-- ;
        }
       delay_us(X);
        }           
}       

Датчики расположены по разные стороны линии, т.е. линии между ними.
Первый - правый.
Второй - левый.
Если первый и второй датчики засвечены (свет отразился), то скорость на максимум и едем вперед.
Если первый датчик не засвечен, (попал на линию) то убавляем скорость правого двигателя пока этот датчик на линии.
С левым аналогично.
Как такой вариант?
Только что проверил на практике, как-то не очень, хочется чтобы робот ровнее по линии ехал, а он с нее сворачивает частенько, но обратно возвращается.
ЗЫ. если приводите код, то желательно на Си или просто словами, или на языке алгоритмизации.


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 08.06.2010 - 11:522
Начальная группа
1798 сообщений
Мужчина
Только что опробовал немного другой алгоритм:

Code

-------------------------------------------
расположение датчиков:
             8 7 6 5 4 3 2 1
!SENSORX - датчик НЕ освещен.
PWML - скорость левого двигателя
PWMR - скорость правого двигателя
MAX - максимальная скорость
-------------------------------------------
#define N 100

if(!SENSOR4 && !SENSOR5)
{
     forward();    
     PWML=MAX;
     PWMR=MAX;
}         

if(SENSOR4)
{          
while(SENSOR4)  {     
      if(PWML!=0) {
    PWML--;
    }      
    delay_us(N);
    }
}     

if(SENSOR5)
{          
while(SENSOR5) {     
    if(PWML!=0) {
     PWMR--;
     }
    delay_us(N);
     }        
}    



Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 08.06.2010 - 13:403
БЛОГГЕР
310 сообщений
Мужчина


Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 08.06.2010 - 18:074
Администраторы
3417 сообщений
Мужчина
tiMer,
-ерунда. Такая скорость достигается путем уменьшения расстояния между обоими траками, и, собственно, площадью их соприкосновения с полом. Чем меньше, тем маневренный wink

Добавлено (08.06.2010, 18:07)
---------------------------------------------
nightmare,
Неплохо. wink Только на будущее, .hex файты тоже желательно прикреплять.
Зы Наконец-то увидел твоего робота surprised



Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 08.06.2010 - 20:235
Начальная группа
1798 сообщений
Мужчина
Хекс пока что нафиг не нужен, зачем кому-то прошивка моего робота, в которой дофига всего, что очень мало вероятно будут повторять, получается лишний код.
А здесь наглядно виден алгоритм по которому робот бегает.
Тема то для этого и создана, чтобы алгоритмами делиться smile
В ближайшем будущем выложу исходники, при помощи которых будет довольно просто программировать робота, т.е. без заморочек с настройкой всяких таймеров, портов и пр.. Достаточно сделать так:
Code

#include<mega16.h>
#include<delay.h>

#include<robot.c>

void main (void)
{
config();
//код программы
while(1)
{
LEFT(255);
SLEEP(10);
RIGHT(155);
SLEEP(10);

if(SENSOR1)
{
STOP
LED_ON
}
else
{
LED_OFF
}

if(DISTANCE>50)
{
LED_PULSE
}

}
}

В таком духе, все интуитивно понятно smile
Я вот думаю, может вот такие двигатели заказать
http://robotshop.su/e-store/catalog/198/696/
И бегать со скоростью 53 м/мин crazy


Профиль Личное сообщение Дом. страница icq Skype
38
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Алгоритмы для лайнтейсера
  • Страница 1 из 1
  • 1
Поиск: