Автор Тема: Робот за състезания по Кегелринг  (Прочетена 14503 пъти)

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Робот за състезания по Кегелринг
« -: Юли 06, 2007, 10:51:01 pm »
Следващият ни експеримент с датчик, реагиращ на отразена светлина, ще бъде робот, който се движи в пределите на област, оградена с черна линия.

3D моделът на робота е следният:



Схемата на робота ще е същата, като при нашия първи Line Tracer.

Използвания алгоритъм ще съдържа следната последователност от действия. Намирайки се на бяло поле, роботът ще се движи напред до тогава, докогато не види черна линия пред себе си. След като види линията, роботът се дърпа малко назад и завива не неголям ъгъл. След това всичко се повтаря.

Ето я и нашата програма:

/********************************************
ПРИМЕР 5 :: РОБОТ ЗА СЪСТЕЗАНИЯ ПО КЕГЕЛРИНГ
*********************************************/




/***************** Функция на задържане ****************/
void delay(unsigned short ms) // Минимално задържане с кварц 8 МХц - 1 мс
{
   unsigned short i, j, k; // обявяваме променливите

              for (i=0; i<ms; i++) // главен цикъл за формиране на задържането
                     for (j=0; j<185; j++) // поставен цикъл за формиране на задържането
                              k++; // произволни действия
}
/****************************************************/


int main(void) // начало на основната програма
{
   
   DDRC = 0xff; // всички изводи на порт C да се конфигурират като изходи
   DDRD = 0x00; // всички изводи на порт D да се конфигурират като входове


   PORTD = 0xff; // установи "1" на всички изводи на порт D,
// включваме резисторите

        while (1) {  // Безкраен цикъл

// ПРОВЕРЯВАМЕ СИГНАЛА НА НИСКО НИВО ОТ ФОТОДАТЧИКА

if (!(PIND & (1<<PIND1))) // провери "0" на линия 1 на порт D
{
            // -------------- включваме моторите напред ---------------

            PORTC |= _BV(PC1); // установи "1" на линия 1 на порт C
            PORTC &= ~_BV(PC2); // установи "0" на линия 2 на порт C
            PORTC |= _BV(PC3); // установи "1" на линия 3 на порт C
            PORTC &= ~_BV(PC4); // установи "0" на линия 4 на порт C

            // -----------------------------------------------------
}
else
{
                        // ------------------ отдръпване назад ------------------
                        // -------- включваме моторите назад за 1,8 сек --------

                        PORTC &= ~_BV(PC1); // установи "0" на линия 1 на порт C
                        PORTC |= _BV(PC2); // установи "1" на линия 2 на порт C
                        PORTC &= ~_BV(PC3); // установи "0" на линия 3 на порт C
                        PORTC |= _BV(PC4); // установи "1" на линия 4 на порт C

                        delay(1800); // чакаме 1,8 сек.
                        // --------------------------------------------------

                        // --------------------- завой --------------------
                        //  десен мотор напред, ляв мотор стоп за 0,6 сек

            PORTC |= _BV(PC1); // установи "1" на линия 1 на порт C
            PORTC &= ~_BV(PC2); // установи "0" на линия 2 на порт C
            PORTC |= _BV(PC3); // установи "1" на линия 3 на порт C

                        delay(600); // чакаме 0,6 сек.
                        // --------------------------------------------------
}


        } // затваряща скоба на безкрайния цикъл

} // затваряща скоба на основната програма



Обяснение за състезанието:
Направете бял кръгъл ринг, ограничен с черна линия около 50 мм широка (именно такава е ширината на ограничителната линия в състезанията по Кегелринг). Вътрешен диаметър на кръга - 1 метър. Рингът може да се направи от листи бял кадастрон, или велпапе.
Сложете в кръга 8 кегли (за кегли използвайте празни кутийки от безалкохолни напитки с обем 0,33 л.)



Поставете робота в центъра на ринга и го включете. След като изучи ринга, роботът ще започне да изтиква кеглите една след друга. Като настройка ви съветвам да постигнете такъв ъгъл на завиване и отдъпване назад, че роботът да не пропуска кеглите.

Най-изгодната конструкция на робот, която ще ви донесе победа, е тази, на която отпред е установено рало. Необходимо е поради причината, че роботът ще улавя кеглите с негова помощ. Ралото трябва да е изнесено малко напред, за да може роботът, намиращ се върху линията напълно да е изтикал кеглата.

Настройката на робот за състезания по Кегелринг представлява едно от най-увлекателните занимания, а самите състезания - едни от най-хазартните и зрелищни!



Моля, прочетете Правилата за състезания по Кегелринг.

Желая ви успех!
Роботиката не е хоби - тя е начин на живот!

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Робот за състезания по Кегелринг
« Отговор #1 -: Юли 04, 2008, 09:30:16 pm »
Питане само.пробвал ли си горното или само си го преписал от братушките?


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Робот за състезания по Кегелринг
« Отговор #2 -: Юли 04, 2008, 09:36:37 pm »
Цитат на: "zoro1"
Питане само.пробвал ли си горното или само си го преписал от братушките?


Изпробвал съм други техни схеми и програми, специално тази - не. С малки корекции са годни за употреба (и в този вид, разбира се). Статията е дусловен превод. Ако всичко е изпълнено като хората, трябва да работи.
Роботиката не е хоби - тя е начин на живот!