Приветствую Вас ГостьВторник, 26.09.2017, 10:32

Robostroi


ПРОСТОЙ РОБОТ НА МИКРОКОНТРОЛЛЕРЕ (Часть 2)

ПРОСТОЙ РОБОТ НА МИКРОКОНТРОЛЛЕРЕ (Часть 2)


Робот с фотодатчиком для следования по линии.


Робот с фотодатчиком Во второй части статьи "Простой робот на микроконтроллере" мы попробуем сделать робота с фотодатчиком, реагирующим на отраженный свет.

Наш робот сможет бегать по линии, нарисованной на поверхности, и даже принять участие в соревнованиях по отслеживанию линии.

Кроме того, для него можно написать программу, которая будет удерживать робота в пределах области, ограниченной линией, что позволит принять участие в соревнованиях "Кегельринг". Также стоит отметить, что датчик границы, описываемый в этой части статьи, является необходимой частью при создании сумо-роботов.

Конструкция ходовой части робота будет идентична роботу из первой части статьи. Поэтому мы подробно рассмотрим только устройства датчика и его подключение.

Принцип работы датчика границы основан на свойстве поверхностей по-разному отражать падающий на них свет. Черные или темные поверхности отражают свет намного хуже, чем белые или светлые. Улавливая отраженный свет, мы сможем определить тип поверхности, находящейся под датчиком.

Устройство фотодатчика, реагирующего на отраженный свет. Для изготовления датчика границы нам понадобятся фототранзистор и яркий светодиод. На приведенном рисунке изображена конструкция датчика. Светодиод и фототранзистор направлены в сторону исследуемой поверхности. Расстояние до поверхности зависит от силы свечения светодиода и чувствительности фототранзистора. Обычно оптимальное расстояние равно 1-1,5 см.

Расстояние между светодиодом и фототранзистором не следует делать слишком большим: хорошим выбором может стать зазор в 0,5-1 см. В некоторых случаях, чтобы предотвратить срабатывание фототранзистора от прямого света, излучаемого светодиодом, между ними располагают непрозрачную шторку.

Схема фотодатчика, реагирующего на отраженный свет. Свет от светодиода отражается от поверхности и улавливается фототранзистором. Если поверхность светлая, то отраженного света достаточно для открытия фототранзистора, в противном случае фототранзистор будет закрыт (не будет пропускать ток).

Использование фототранзистора обусловлено тем, что скорость его срабатывания высока и достаточна даже при очень быстром движении робота. Использование фотодиодов также допустимо. Фоторезисторы имеют невысокую скорость срабатывания, и ее может быть недостаточно при высокой скорости движения робота.

Схема датчика очень проста, состоит непосредственно из фототранзистора, светодиода и ограничивающих резисторов.

При срабатывании фототранзистора на выходе формируется сигнал низкого уровня, который и подается на один из свободных входов микроконтроллера.

Схема робота с фотодатчиком.
Схема робота с фотодатчиком.


Рассмотрим программу, которая будет включать моторы, если датчик находится над белой поверхностью, и выключать - если над черной.


/***********************************************************************
ПРИМЕР 3 :: ВРАЩЕНИЕ МОТОРАМИ С ИСПОЛЬЗОВАНИЕМ ФОТОДАТЧИКА :: MYROBOT.RU
************************************************************************/


#include <avr/io.h>
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; Первый проект на микроконтроллере AVR.) После чего проверим работу датчика, поставив робота на белый лист бумаги, на котором нарисуем широкую черную линию. Изменяя расстояние между датчиком и поверхностью, добьемся уверенного срабатывания фототранзистора. При необходимости следует защитить фототранзистор от прямых лучей светодиода, установив между ними шторку, как уже говорилось выше. Расположение фототранзистора и светодиода будет оптимальным в том случае, если линза фототранзистора будет смотреть точно в центр светового "зайчика", отбрасываемого светодиодом на листе.

Добившись уверенного срабатывания датчика, напишем программу для следования робота по линии. Алгоритм движения робота строится на следующем принципе. Когда датчик находится над белым полем, то робот поворачивается в правую сторону по направлению к черной линии. Когда датчик находится над черной линией, то робот поворачивается в левую сторону, съезжая с черной линии. Чередуя повороты по направлению к линии и от нее, робот движется вперед, следуя по границе белого и черного.


/****************************************************************
ПРИМЕР 4 :: ПРОСТЕЙШИЙ АЛГОРИТМ СЛЕДОВАНИЯ ПО ЛИНИИ :: MYROBOT.RU
*****************************************************************/


#include <avr/io.h>

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-х см. Черную линию можно нарисовать тушью, баночки которой продаются практически в любом магазине канцтоваров.

Поставим робота так, чтобы датчик находился над белым полем, а линия была справа от него. Включим питание. Робот должен начать двигаться, следуя всем изгибам трассы.

При конструировании робота, следующего по линии и использующего вышеприведенный алгоритм движения, следует учесть расстояние между ведущими колесами и расстояние между датчиком и осевой линией ведущих колес. Чем больше первое и меньше второе, тем более размашистые движения будет совершать робот и тем выше будет общая скорость его движения. При этом будет повышаться риск того, что робот может переехать датчиком линию и таким образом потерять ее. Следует найти баланс между скоростью робота и уверенным следованием по линии.

При использовании конструкции с небольшим расстоянием между ведущими колесами для повышения скорости движения робота может понадобиться введение в программу небольшой задержки, увеличивающей длительность поворотов, и тем самым оптимизирующей движение робота.

Если вы решите принять участие в соревнованиях по "Отслеживанию линии", то разрешите дать маленький совет: сделайте вокруг датчика небольшую светонепроницаемую бленду, чтобы исключить "засветку" датчика от бокового света. Ну и, конечно же, не пожалейте свежий комплект батарей для своего электронного спортсмена. Хорошее питание поможет ему быстрей прийти к финишу.

Желаем Вам успехов!



Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 180
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Календарь новостей
«  Сентябрь 2017  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Реклама
    WMmail.ru - сервис почтовых рассылок WMlink.ru - рекламный брокер SB-MONEY.RU - Электронная коммерция, Сервисы для вебмастеров, Раскрутка
    OZON.ru
    Обмен SMS
    ПОЛУЧИТЬ:  
    НА:
Мини-чат