Форум по Роботика

Проекти за роботи => Line Tracer => Темата е започната от: Borislav в Юли 05, 2007, 09:40:50 am

Титла: Робот с фотодатчик за следене на линия
Публикувано от: Borislav в Юли 05, 2007, 09:40:50 am
И така, време е да поусложним малко конструкцията на нашия робот, следващ линия! Нека да започваме!

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

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

(http://robotics-bg.com/a/BEAMrobots/mobbot/mob1.JPG)

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

(http://robotics-bg.com/a/BEAMrobots/mobbot/mob2.JPG)

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

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

(http://robotics-bg.com/a/BEAMrobots/mobbot/mob3.JPG)

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

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

(http://robotics-bg.com/a/BEAMrobots/mobbot/mob4.JPG)

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

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

/*********************************************************
ПРИМЕР 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 см.
Слагаме робота така, че датчикът да е на бялата страна, а линията да се намира отдясно. Включваме захранването на робота. Той трябва сам да тръгне да следва линията.

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

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

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

Борислав



Източник (http://myrobot.ru), като статията е с много изменения!
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Borislav в Август 23, 2007, 06:45:54 pm
И тъй като за да следим линията добре, ще ни трябват повечко сензори, може да се използва схемата, която съм предвидил за сумиста. Тя е тук (http://www.robotics-bg.com/a/sumobot/datchik-liniq.gif), и представлява 4 оптрона, които са наредени така, че линията да се намира между средните два. По принцип, за по-добро следене ще са ни необходими от 4 до 6 датчика! С 4 ще се получат стабилни резултати!

Изводите на надписите Sensor 1,2,3,4 трябва да се свържат с кои да е от крачетата на изводите PD от микропроцесора ATmega8! Разбира се, ще се наложи да се внесе изменение в алгоритъма, но то е несъществено малко! :)
Поздрави!
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Methuselah в Септември 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 в Септември 03, 2007, 08:58:06 pm
1. По-голямата част от микроконтролерите имат нужда от външен тактов генератор, който да подава честотата на вътрешния процесор, в случая това е този кварц.
2. Мисля, че няма някаква определена причина да са тези пинове.
3. Двата кондензатора С1 и С2 стабилизират работата на кварца, споменат в 1ви въпрос.
4. Този въпрос не го разбрах. Не него ще трябва да ти отговори Борислав.
Титла: Робот с фотодатчик за следене на линия
Публикувано от: INF1n1t в Септември 03, 2007, 09:07:46 pm
Ми аз мисля че има причина да са точно тези. То имената им говорят сами  за себе си. Макар че книгата е за друг вид микроконтролер, OSC1 е CLOCK IN (вход за кварцов генератор), а OSC2 е CLOCK OUT (Изход за кварцов генератор)....
 За другите въпроси - беше отговорено, а за последния, идеята ми е че може би хората така са си решили...но все пак оставям на по-компетентни...
Титла: Робот с фотодатчик за следене на линия
Публикувано от: DataMatrix в Септември 03, 2007, 09:12:26 pm
Оф, вярно бе! Просто не съм го забелязал това.
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Methuselah в Септември 03, 2007, 09:13:48 pm
Мерси, отговорили сте докато съм пишел

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

PC2 - Input 3
PC3 - Input 4
Титла: Робот с фотодатчик за следене на линия
Публикувано от: yasko в Септември 03, 2007, 10:19:42 pm
Няма проблем да се свържат по този начин, разбира се после в програмата това  трябва да се има предвид.
Относно кварца, възможно е процесора да работи и без кварц, като ползва вградения в него RC генератор, недостатъка в този случай е по-ниската стабилност на опорната честота, но това не винаги е толкова важно.
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Borislav в Септември 04, 2007, 12:07:29 pm
Принципно, доколкото разбрах въпросите, Methuselah, не е разбрал защо се ползват портовете PC, PD и PB, така ли?
Като цяло, посочената схема е за АТмега8 на дискретен монтаж. Разликата и със SMD-аналога и е в това, че вторият има РА-изводи. Всичко е в зависимост от необходимата ни схема, но ще се опитам да опиша в повечето случаи кое за какво служи.

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

Ами засега е това, Ясен и Митко обясниха останалото. Надявам се да е станало ясно, и ако има въпроси, с радост ще помогнем! :)
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Methuselah в Септември 04, 2007, 12:17:01 pm
По принцип си бях разбрал защо се ползват портовете, но не знаех дали може да се ползват PC0 и PD0, защото към тях нямаше нищо свързано.
Но вече разбрах че е въпрос на личен избор и единствено малка разлика се явява в програмата.

Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват  :zubi:
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Borislav в Септември 04, 2007, 12:21:57 pm
Цитат на: "Methuselah"
Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват  :zubi:


Много добре, че всичко се е изяснило! :) Мога да те посъветвам, да видиш схемата, която съм побликувал в темата за Line Tracer-a и Сумобота ми (датчиците за линии). Като начало, започни с един датчик, но като усвоиш програмата и кое за какво служи, премини на тази схема, която ти описах. Тя е за 5+ датчика, които ще осигурят на робота ти много по-плавно движение по линията! Можеш да видиш принципа на алгоритъма в този раздел от форума! Успех! :)
Титла: Робот с фотодатчик за следене на линия
Публикувано от: ka4a4e в Септември 13, 2007, 11:58:36 am
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????
Титла: Робот с фотодатчик за следене на линия
Публикувано от: ka4a4e в Септември 16, 2007, 12:57:56 am
има ли значение да ли е ATmega8 или ATmega16 защото в магазина ми казват че ATmega16 и ATmega8 са на една цена и ATmega16 има поиче памет
Титла: Робот с фотодатчик за следене на линия
Публикувано от: elektronchika в Септември 16, 2007, 01:38:40 pm
Цитат на: "ka4a4e"
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????


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

За АТМЕгите не мога да ти помогна, защото аз се занимавам с други контролери и тези не са ми ясни
Титла: Робот с фотодатчик за следене на линия
Публикувано от: ka4a4e в Септември 16, 2007, 02:52:41 pm
Цитат на: "elektronchika"
Цитат на: "ka4a4e"
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????


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

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

Все пак благодаря
Титла: Робот с фотодатчик за следене на линия
Публикувано от: Borislav в Септември 16, 2007, 07:39:15 pm
Цитат на: "ka4a4e"
има ли значение да ли е ATmega8 или ATmega16 защото в магазина ми казват че ATmega16 и ATmega8 са на една цена и ATmega16 има поиче памет


Разликата е тънка. Но като цяло, крачетата са с еднакви имена! Търси даташитове за моделите, и виж кое краче, какво е. После е модификация на схемата! Иначе да, АТmega16 има повече памет! Мисля че там изводите РВ и PD са повече! Но все пак прецени! :)
Титла: Робот с фотодатчик за следене на линия
Публикувано от: ka4a4e в Септември 16, 2007, 10:02:23 pm
аз съм пуснал поръчката вече дали ще има някакви промени в програмирането на ATmega16
Титла: Робот с фотодатчик за следене на линия
Публикувано от: yasko в Септември 16, 2007, 11:37:21 pm
Няма да имаш проблеми с програмирането. ATMEGA16 наистина разполога с повече FLASH (16KB), но е и в по-голям корпус DIP-40, и има повече входно изходни лиинии. Няма проблем да се реализира въпросната схема просто, трябва да се запази логиката на връзките, за да няма промени в софтуера. Ако ми остане време тия дни, ще я преначертая с ATMEGA16.
Титла: Робот с фотодатчик за следене на линия
Публикувано от: ka4a4e в Септември 16, 2007, 11:48:54 pm
Цитат на: "yasko"
Няма да имаш проблеми с програмирането. ATMEGA16 наистина разполога с повече FLASH (16KB), но е и в по-голям корпус DIP-40, и има повече входно изходни лиинии. Няма проблем да се реализира въпросната схема просто, трябва да се запази логиката на връзките, за да няма промени в софтуера. Ако ми остане време тия дни, ще я преначертая с ATMEGA16.

ще съм ти много благодарен :)
Титла: Робот с фотодатчик за следене на линия
Публикувано от: zoro1 в Септември 21, 2008, 12:54:50 pm
http://upload.robotics-bg.com/files/atmega.zip (http://upload.robotics-bg.com/files/atmega.zip)

платката във формат за спринт.
дип корпус на А8
Титла: Робот с фотодатчик за следене на линия
Публикувано от: zoro1 в Май 10, 2009, 10:14:53 am
ЕТО  http://www.snimka.bg/photo.php?photo_id=11899791
това е изработено по тази схема ,само сето за сензор се използва ЛМ311,
с две модифицирани сервота от по 9 грама ,и 4 свински /миши/ опашки!Колелата са  от някаква играчка...На снимката не е сложен драйвера ,защото е в момент на програмиране- на заден план се вижда програматора 910