И така, време е да поусложним малко конструкцията на нашия робот, следващ линия! Нека да започваме!
Нашият робот ще може да следва линията доволно добре!
Той дори може да участва в състезания за Line Tracer-и! След тази статия, ще си направим и робот за играта "Кегелринг", която също е в списъка на Световната лига по Роботика!
Така че..очаква ни много работа!
3D моделът на робота е този:
Конструкцията на механиката на робота не се отличава много от предния ни робот, следящ линия. Така че няма да се спираме на механиката, а основната ни задача ще бъде запознаването с датчика за линия. Ще използваме 1 датчик, макар че най-добре е те да са минимум 6! Но...това е въпрос на модификация.
Простете, отплеснахме се... Та за датчика. Конструкцията му е следната:
За да изградим нашия датчик за линия, ще ни трябва фототранзистор и ярък светодиод. По този начин, прехващайки светлината, отразена от линията (в случая линията е бяла), можем да определим дори типът повърхност, намираща се под робота!
Разстоянието от датчика до линията е различно. Прието е то да е около 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 см.
Слагаме робота така, че датчикът да е на бялата страна, а линията да се намира отдясно. Включваме захранването на робота. Той трябва сам да тръгне да следва линията.
Малка полезна хитрост за победа..
При конструирането на този робот, трябва да отчетете разстоянието между колелата и разстоянието между датчика и оста на колелата. Колкото по-голямо е първото, и по-малко второто, толкова по-плавни движения ще прави робота, а следователно ще е и по-пъргав! Трябва да се намери баланс между скоростта и увереното следване на линията!
Още един съвет за победа в състезания за следене на линия:
Направете малка светонепроницаема оградка на датчика, изключвайки попадането на светлина отстрани. Е, разбира се и не стискайте батериите - снабдете се с още един комплект, за Вашия електронен спортист! Хубавото захранване ще му помогне да дойде до финала пръв!
Искрено ви желая успех!
Борислав
Източник, като статията е с много изменения!