Алгоритмы работы
Как научить робота видеть линию и двигаться вдоль неё? Решений данной задачи может быть множество. В нашем случае мы отрабатываем езду на 1, 2 и 5 датчиках. Режимы работы этих датчиков тоже разные - аналоговый сигнал и цифровой.
Движение на 1 датчике с аналоговым сигналом.
Если вы хоть немного работали с Ардуино, вы знаете, что сигналы бывают аналоговыми и цифровыми. В аналоговым виде сигнал может принимать любые значения с течением времени, цифровые же могут принимать только два значения - 0 и 1. Понятия 0 и 1 означает, что напряжение либо есть, либо нет. Будем считать, что 1 - это 5 В, а 0 - соответственно 0 В (хотя это не совсем так).
Посмотрим на наши датчики. У них есть 4 контакта - это универсальный датчик. Он может выдавать как аналоговый, так и цифровой сигнал. На самом деле сделать аналоговый датчик можно своими руками. Нужны только ИК светодиод, ИК фототранзистор и пару резисторов.
Работа основана на интенсивности отражения ИК излучения от поверхности. На белом фоне оно одно, а на черном резко другое.
Почему лучше использовать аналоговый сигнал?
Потому что срабатывание на перемену цвета может зависеть от множества факторов. Крутилка на датчике - это как раз настройка чувствительности компаратора, построенного на операционном усилителе LM358. Выдается 1 когда видит черную линию и 0 на белом. Довольно трудно настроить порог чувствительности - то не срабатывает на черном, то все время горит на белом. Схема на этих платах повторяется и на звуковом датчике и на датчике освещенности и прочих других.
Как проехать по черной линии используя один датчик?
Существуют как минимум два метода.
Первый, самый простой, называется релейный. Значение с датчика принимается как истина или ложь, в зависимости от того над каким цветом он находится. Можно задать некий порог, выше/ ниже которого мы будем считать - цвет сменился. Ставим его в условный оператор if (). От этого условия будет зависеть какой мотор будет вращаться, а какой нет. Например, если на белом то крутить левый мотор вперед, правый мотор стоит. А если на черном, то все в точности наоборот. Таким образом робот будет двигаться довольно медленно, рывками.
Основные переменные необходимые для работы этого алгоритма:
int start_speed = 100; // базовая скорость машины
int light_intens =0; // переменная для хранения значений с датчика
int porog = 50; // значение на границе перехода цветов
Для лучшей работы можно взять два значения porog - одно для белого цвета, а второе для черного. А между ними оставить интервал, для уменьшения резкости качания. В этом интервале робот не реагирует на показания датчика и двигается по инерции.
Теперь давайте посмотрим на код программы, который я написал для своей модели. Яндекс Дзен, к сожалению, не может нормально переварить программный код, если его вставить напрямую в статью. Поэтому придется воспользоваться GitHub.
В продолжении посмотрим как реализовать движение на пропорциональном регуляторе с одним датчиком.