Форум по Роботика
Проекти за роботи => Line Tracer => Темата е започната от: 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), като статията е с много изменения!
-
И тъй като за да следим линията добре, ще ни трябват повечко сензори, може да се използва схемата, която съм предвидил за сумиста. Тя е тук (http://www.robotics-bg.com/a/sumobot/datchik-liniq.gif), и представлява 4 оптрона, които са наредени така, че линията да се намира между средните два. По принцип, за по-добро следене ще са ни необходими от 4 до 6 датчика! С 4 ще се получат стабилни резултати!
Изводите на надписите Sensor 1,2,3,4 трябва да се свържат с кои да е от крачетата на изводите PD от микропроцесора ATmega8! Разбира се, ще се наложи да се внесе изменение в алгоритъма, но то е несъществено малко! :)
Поздрави!
-
:sos:
Като цяло разбирам схемата и определено е полезна темата, но имам няколко въпроса:
1. Защо е необходимо да се сложи кварца Q1 и това специфично за този проект ли е или по принцип ATmega8 има нужда?
2. Защо точно на PB6 и PB7 (9 и 10 пинове)?
3. Каква роля играят C1 и C2?
4. Защо PC0 (пин 23) не се използва, а двигателчетата започват от PC1 (24)? (едит: сега забелязах че и PD0 не се използва и пак не разбирам защо)
Мерси предварително. Мисля, че след като разбера отговорите ще съм готов да се пробвам и на практика, но за това в друга тема. :biri:
-
1. По-голямата част от микроконтролерите имат нужда от външен тактов генератор, който да подава честотата на вътрешния процесор, в случая това е този кварц.
2. Мисля, че няма някаква определена причина да са тези пинове.
3. Двата кондензатора С1 и С2 стабилизират работата на кварца, споменат в 1ви въпрос.
4. Този въпрос не го разбрах. Не него ще трябва да ти отговори Борислав.
-
Ми аз мисля че има причина да са точно тези. То имената им говорят сами за себе си. Макар че книгата е за друг вид микроконтролер, OSC1 е CLOCK IN (вход за кварцов генератор), а OSC2 е CLOCK OUT (Изход за кварцов генератор)....
За другите въпроси - беше отговорено, а за последния, идеята ми е че може би хората така са си решили...но все пак оставям на по-компетентни...
-
Оф, вярно бе! Просто не съм го забелязал това.
-
Мерси, отговорили сте докато съм пишел
Въпроса ми е могат ли да свържат така:
PC0 - Input 1
PC1 - Input 2
PC2 - Input 3
PC3 - Input 4
-
Няма проблем да се свържат по този начин, разбира се после в програмата това трябва да се има предвид.
Относно кварца, възможно е процесора да работи и без кварц, като ползва вградения в него RC генератор, недостатъка в този случай е по-ниската стабилност на опорната честота, но това не винаги е толкова важно.
-
Принципно, доколкото разбрах въпросите, Methuselah, не е разбрал защо се ползват портовете PC, PD и PB, така ли?
Като цяло, посочената схема е за АТмега8 на дискретен монтаж. Разликата и със SMD-аналога и е в това, че вторият има РА-изводи. Всичко е в зависимост от необходимата ни схема, но ще се опитам да опиша в повечето случаи кое за какво служи.
Най-често, РВ-изводите се използват за кварцовият генератор (контур), ISP-програматор и/или съединяване на двигатели. PD и РС изводите най-често са изводи за всякакви датчици. А що се касае РА изводите при SMD-еквивалента на микроконтролера, всъщност не съм се сблъсквал с това и не си спомням точно за какво се използваха. Като цяло, мисля че също бяха за датчици...
Ами засега е това, Ясен и Митко обясниха останалото. Надявам се да е станало ясно, и ако има въпроси, с радост ще помогнем! :)
-
По принцип си бях разбрал защо се ползват портовете, но не знаех дали може да се ползват PC0 и PD0, защото към тях нямаше нищо свързано.
Но вече разбрах че е въпрос на личен избор и единствено малка разлика се явява в програмата.
Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват :zubi:
-
Отново мерси за отговорите.
В близките дни ще ходя до пасат електроникс, за да си взема нужните части и експериментите започват :zubi:
Много добре, че всичко се е изяснило! :) Мога да те посъветвам, да видиш схемата, която съм побликувал в темата за Line Tracer-a и Сумобота ми (датчиците за линии). Като начало, започни с един датчик, но като усвоиш програмата и кое за какво служи, премини на тази схема, която ти описах. Тя е за 5+ датчика, които ще осигурят на робота ти много по-плавно движение по линията! Можеш да видиш принципа на алгоритъма в този раздел от форума! Успех! :)
-
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????
-
има ли значение да ли е ATmega8 или ATmega16 защото в магазина ми казват че ATmega16 и ATmega8 са на една цена и ATmega16 има поиче памет
-
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????
кондензатора се свързва между положителния и отрицатления полюс на захранването. Идеята е да компенсира спадовете на напрежение при голяма консумация на ток от захранващия източник (батерията)
За АТМЕгите не мога да ти помогна, защото аз се занимавам с други контролери и тези не са ми ясни
-
(http://www.robotics-bg.com/upload/files/kakvo%20e%20tova.JPG)
това каде трябва се слага ????
кондензатора се свързва между положителния и отрицатления полюс на захранването. Идеята е да компенсира спадовете на напрежение при голяма консумация на ток от захранващия източник (батерията)
За АТМЕгите не мога да ти помогна, защото аз се занимавам с други контролери и тези не са ми ясни
Все пак благодаря
-
има ли значение да ли е ATmega8 или ATmega16 защото в магазина ми казват че ATmega16 и ATmega8 са на една цена и ATmega16 има поиче памет
Разликата е тънка. Но като цяло, крачетата са с еднакви имена! Търси даташитове за моделите, и виж кое краче, какво е. После е модификация на схемата! Иначе да, АТmega16 има повече памет! Мисля че там изводите РВ и PD са повече! Но все пак прецени! :)
-
аз съм пуснал поръчката вече дали ще има някакви промени в програмирането на ATmega16
-
Няма да имаш проблеми с програмирането. ATMEGA16 наистина разполога с повече FLASH (16KB), но е и в по-голям корпус DIP-40, и има повече входно изходни лиинии. Няма проблем да се реализира въпросната схема просто, трябва да се запази логиката на връзките, за да няма промени в софтуера. Ако ми остане време тия дни, ще я преначертая с ATMEGA16.
-
Няма да имаш проблеми с програмирането. ATMEGA16 наистина разполога с повече FLASH (16KB), но е и в по-голям корпус DIP-40, и има повече входно изходни лиинии. Няма проблем да се реализира въпросната схема просто, трябва да се запази логиката на връзките, за да няма промени в софтуера. Ако ми остане време тия дни, ще я преначертая с ATMEGA16.
ще съм ти много благодарен :)
-
http://upload.robotics-bg.com/files/atmega.zip (http://upload.robotics-bg.com/files/atmega.zip)
платката във формат за спринт.
дип корпус на А8
-
ЕТО http://www.snimka.bg/photo.php?photo_id=11899791
това е изработено по тази схема ,само сето за сензор се използва ЛМ311,
с две модифицирани сервота от по 9 грама ,и 4 свински /миши/ опашки!Колелата са от някаква играчка...На снимката не е сложен драйвера ,защото е в момент на програмиране- на заден план се вижда програматора 910