Автор Тема: Робот с фотодатчик за следене на линия  (Прочетена 52206 пъти)

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
И така, време е да поусложним малко конструкцията на нашия робот, следващ линия! Нека да започваме!

Нашият робот ще може да следва линията доволно добре! :) Той дори може да участва в състезания за Line Tracer-и! След тази статия, ще си направим и робот за играта "Кегелринг", която също е в списъка на Световната лига по Роботика! :) Така че..очаква ни много работа!

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



Конструкцията на механиката на робота не се отличава много от предния ни робот, следящ линия. Така че няма да се спираме на механиката, а основната ни задача ще бъде запознаването с датчика за линия. Ще използваме 1 датчик, макар че най-добре е те да са минимум 6! Но...това е въпрос на модификация. :D
Простете, отплеснахме се... Та за датчика. Конструкцията му е следната:



За да изградим нашия датчик за линия, ще ни трябва фототранзистор и ярък светодиод. По този начин, прехващайки светлината, отразена от линията (в случая линията е бяла), можем да определим дори типът повърхност, намираща се под робота! :)
Разстоянието от датчика до линията е различно. Прието е то да е около 1-1,5 см, но то много зависи от яркостта на нашия светодиод. Забележете, че между фототранзистора и светодиода се поставя черно капаче, което да ги скрива един от друг и да не се получава разсейване!
За разстояние между светодиода и фототранзистора можем да кажем, че е около 0,5-1 см. Няма смисъл да ги поставяме по-далече, а и като са по-близко един до друг ще избегнем ненужни разсейвания на робота. :)

Схемата на нашия датчик се получи следната:



Използването на фототранзистор се обуславя в това, че той има висока скорост на предаване на данните, дори и при високи скорости на робота! Така че...това е идеалният избор за нашия Line Tracer! :)

Сега..да разгледаме микроконтролера на робота. Той отново е на базата на ATmega8 и L239D. Програмирането се осъществява чрез прост ISP-програматор тип "Пет проводника". Ето я и схемата на нашия робот:



Основното по механиката на робота е това. Друго..просто няма. :) Да започваме да програмираме!

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

/*********************************************************
ПРИМЕР 3 :: ВЪРТЕНЕ НА МОТОРИТЕ С ИЗПОЛЗВАНЕ НА ФОТОДАТЧИК
**********************************************************/



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
{
                        // ---------- въртим моторите назад ----------

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

                        // --------------------------------------------------
}


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

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


И така...качваме програмата на микроконтролера (как да стане това, вижте в графа "Алгоритми", като вижте статиите: Makefile, Прост програматор и Първия ни проект с микроконтролер на AVR). След това проверяваме работата на датчика, поставяйки робота върху бял лист хартия, на който е нарисувана широка черна линия. Изменяйки разстоянието между датчика и повърхостта, трябва да се получи надеждно сработване. Ако е необходимо, фототранзисторът трябва да се защити с поставянето на черното капаче, което го закрива. Най-добър ефект ще се получи, ако фототранзисторът "гледа" точно в центъра на "слънчевото зайче", което излъчва светодиода. :)

И така, след като сме настроили нашия датчик, можем да преминем към програмата за следене на линия! Няма да ни е необходимо нищо повече - само програмираме и пускаме робота на линията! :)

Програмата е следната:

/**************************************************
ПРИМЕР 4 :: ПРОСТ АЛГОРИТЪМ ЗА СЛЕДЕНЕ НА ЛИНИЯ
***************************************************/



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); // установи "1" на лини 4 на порта C

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

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

                        // -----------------------------------------------------
}


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

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


За проверка и донастройка ще нарисуваме на голям лист кадастрон черна затворена линия с ширина около 3 см.
Слагаме робота така, че датчикът да е на бялата страна, а линията да се намира отдясно. Включваме захранването на робота. Той трябва сам да тръгне да следва линията.

Малка полезна хитрост за победа.. :)
При конструирането на този робот, трябва да отчетете разстоянието между колелата и разстоянието между датчика и оста на колелата. Колкото по-голямо е първото, и по-малко второто, толкова по-плавни движения ще прави робота, а следователно ще е и по-пъргав! Трябва да се намери баланс между скоростта и увереното следване на линията!

Още един съвет за победа в състезания за следене на линия:
Направете малка светонепроницаема оградка на датчика, изключвайки попадането на светлина отстрани. Е, разбира се и не стискайте батериите - снабдете се с още един комплект, за Вашия електронен спортист! Хубавото захранване ще му помогне да дойде до финала пръв! :)

Искрено ви желая успех!

Борислав



Източник, като статията е с много изменения!
Роботиката не е хоби - тя е начин на живот!

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Робот с фотодатчик за следене на линия
« Отговор #1 -: Август 23, 2007, 06:45:54 pm »
И тъй като за да следим линията добре, ще ни трябват повечко сензори, може да се използва схемата, която съм предвидил за сумиста. Тя е тук, и представлява 4 оптрона, които са наредени така, че линията да се намира между средните два. По принцип, за по-добро следене ще са ни необходими от 4 до 6 датчика! С 4 ще се получат стабилни резултати!

Изводите на надписите Sensor 1,2,3,4 трябва да се свържат с кои да е от крачетата на изводите PD от микропроцесора ATmega8! Разбира се, ще се наложи да се внесе изменение в алгоритъма, но то е несъществено малко! :)
Поздрави!
Роботиката не е хоби - тя е начин на живот!

Methuselah

  • Вече знае какво е робот!
  • *****
  • Публикации: 67
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #2 -: Септември 03, 2007, 07:25:20 pm »
:sos:
Като цяло разбирам схемата и определено е полезна темата, но имам няколко въпроса:
1. Защо е необходимо да се сложи кварца Q1 и това специфично за този проект ли е или по принцип ATmega8 има нужда?
2. Защо точно на PB6 и PB7 (9 и 10 пинове)?
3. Каква роля играят C1 и C2?
4. Защо PC0 (пин 23) не се използва, а двигателчетата започват от PC1 (24)? (едит: сега забелязах че и PD0 не се използва и пак не разбирам защо)

Мерси предварително. Мисля, че след като разбера отговорите ще съм готов да се пробвам и на практика, но за това в друга тема.  :biri:

DataMatrix

  • Заклет Роботостроител
  • *****
  • Публикации: 308
    • Профил
    • http://datamatrix-bg.net/
Робот с фотодатчик за следене на линия
« Отговор #3 -: Септември 03, 2007, 08:58:06 pm »
1. По-голямата част от микроконтролерите имат нужда от външен тактов генератор, който да подава честотата на вътрешния процесор, в случая това е този кварц.
2. Мисля, че няма някаква определена причина да са тези пинове.
3. Двата кондензатора С1 и С2 стабилизират работата на кварца, споменат в 1ви въпрос.
4. Този въпрос не го разбрах. Не него ще трябва да ти отговори Борислав.
Димитър Бояджиев, гр. София

INF1n1t

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 139
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #4 -: Септември 03, 2007, 09:07:46 pm »
Ми аз мисля че има причина да са точно тези. То имената им говорят сами  за себе си. Макар че книгата е за друг вид микроконтролер, OSC1 е CLOCK IN (вход за кварцов генератор), а OSC2 е CLOCK OUT (Изход за кварцов генератор)....
 За другите въпроси - беше отговорено, а за последния, идеята ми е че може би хората така са си решили...но все пак оставям на по-компетентни...
Иван Занев - град София

DataMatrix

  • Заклет Роботостроител
  • *****
  • Публикации: 308
    • Профил
    • http://datamatrix-bg.net/
Робот с фотодатчик за следене на линия
« Отговор #5 -: Септември 03, 2007, 09:12:26 pm »
Оф, вярно бе! Просто не съм го забелязал това.
Димитър Бояджиев, гр. София

Methuselah

  • Вече знае какво е робот!
  • *****
  • Публикации: 67
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #6 -: Септември 03, 2007, 09:13:48 pm »
Мерси, отговорили сте докато съм пишел

Въпроса ми е могат ли да свържат така:
PC0 - Input 1
PC1 - Input 2

PC2 - Input 3
PC3 - Input 4

yasko

  • Administrator
  • *****
  • Публикации: 484
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #7 -: Септември 03, 2007, 10:19:42 pm »
Няма проблем да се свържат по този начин, разбира се после в програмата това  трябва да се има предвид.
Относно кварца, възможно е процесора да работи и без кварц, като ползва вградения в него RC генератор, недостатъка в този случай е по-ниската стабилност на опорната честота, но това не винаги е толкова важно.
Ясен Паунски,  гр.София, 39 г.

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Робот с фотодатчик за следене на линия
« Отговор #8 -: Септември 04, 2007, 12:07:29 pm »
Принципно, доколкото разбрах въпросите, Methuselah, не е разбрал защо се ползват портовете PC, PD и PB, така ли?
Като цяло, посочената схема е за АТмега8 на дискретен монтаж. Разликата и със SMD-аналога и е в това, че вторият има РА-изводи. Всичко е в зависимост от необходимата ни схема, но ще се опитам да опиша в повечето случаи кое за какво служи.

Най-често, РВ-изводите се използват за кварцовият генератор (контур), ISP-програматор и/или съединяване на двигатели. PD и РС изводите най-често са изводи за всякакви датчици. А що се касае РА изводите при SMD-еквивалента на микроконтролера, всъщност не съм се сблъсквал с това и не си спомням точно за какво се използваха. Като цяло, мисля че също бяха за датчици...

Ами засега е това, Ясен и Митко обясниха останалото. Надявам се да е станало ясно, и ако има въпроси, с радост ще помогнем! :)
Роботиката не е хоби - тя е начин на живот!

Methuselah

  • Вече знае какво е робот!
  • *****
  • Публикации: 67
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #9 -: Септември 04, 2007, 12:17:01 pm »
По принцип си бях разбрал защо се ползват портовете, но не знаех дали може да се ползват PC0 и PD0, защото към тях нямаше нищо свързано.
Но вече разбрах че е въпрос на личен избор и единствено малка разлика се явява в програмата.

Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват  :zubi:

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Робот с фотодатчик за следене на линия
« Отговор #10 -: Септември 04, 2007, 12:21:57 pm »
Цитат на: "Methuselah"
Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват  :zubi:


Много добре, че всичко се е изяснило! :) Мога да те посъветвам, да видиш схемата, която съм побликувал в темата за Line Tracer-a и Сумобота ми (датчиците за линии). Като начало, започни с един датчик, но като усвоиш програмата и кое за какво служи, премини на тази схема, която ти описах. Тя е за 5+ датчика, които ще осигурят на робота ти много по-плавно движение по линията! Можеш да видиш принципа на алгоритъма в този раздел от форума! Успех! :)
Роботиката не е хоби - тя е начин на живот!

ka4a4e

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 114
    • Профил
    • http://google.bg
Робот с фотодатчик за следене на линия
« Отговор #11 -: Септември 13, 2007, 11:58:36 am »

това каде трябва се слага ????
Деян Георгиев на 20г. от град Любимец област Хасковска студент в ТУ Габрово спец. Е курс ІI

ka4a4e

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 114
    • Профил
    • http://google.bg
Робот с фотодатчик за следене на линия
« Отговор #12 -: Септември 16, 2007, 12:57:56 am »
има ли значение да ли е ATmega8 или ATmega16 защото в магазина ми казват че ATmega16 и ATmega8 са на една цена и ATmega16 има поиче памет
Деян Георгиев на 20г. от град Любимец област Хасковска студент в ТУ Габрово спец. Е курс ІI

elektronchika

  • Робо-Новак
  • *****
  • Публикации: 28
    • Профил
Робот с фотодатчик за следене на линия
« Отговор #13 -: Септември 16, 2007, 01:38:40 pm »
Цитат на: "ka4a4e"

това каде трябва се слага ????


кондензатора се свързва между положителния и отрицатления полюс на захранването. Идеята е да компенсира спадовете на напрежение при голяма консумация на ток от захранващия източник (батерията)

За АТМЕгите не мога да ти помогна, защото аз се занимавам с други контролери и тези не са ми ясни
Лазар Червенков - град Варна

ka4a4e

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 114
    • Профил
    • http://google.bg
Робот с фотодатчик за следене на линия
« Отговор #14 -: Септември 16, 2007, 02:52:41 pm »
Цитат на: "elektronchika"
Цитат на: "ka4a4e"

това каде трябва се слага ????


кондензатора се свързва между положителния и отрицатления полюс на захранването. Идеята е да компенсира спадовете на напрежение при голяма консумация на ток от захранващия източник (батерията)

За АТМЕгите не мога да ти помогна, защото аз се занимавам с други контролери и тези не са ми ясни

Все пак благодаря
Деян Георгиев на 20г. от град Любимец област Хасковска студент в ТУ Габрово спец. Е курс ІI