"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

понедельник, 29 января 2018 г.

Зона Ардуино: Движение по линии

На прошлом уроке, мы отработали создание и отладку скетча движения робота по квадрату и прямоугольнику, теперь рассмотрим движение по линии. В нашем роботе установлены три датчика линии, два электро-мотора, сервомотор, ультразвуковой дальномер. Для решения данной задачи нам потребуются кроме контроллера три датчика линии

и два электромотора. В общем алгоритм движения заключается в следующем: 
  • Если центральный датчик находится на линии, а боковые вне линии, то машинка едет прямо.
  • Если левый датчик находится на линии, а правый вне линии, то машинка поворачивает налево (независимо от показаний центрального датчика)
  • Если правый датчик находится на линии, а левый вне линии, то машинка поворачивает направо (независимо от показаний центрального датчика)
  • Если правый и левый датчики находятся на линии (вне зависимости от показаний центрального датчика), то такое состояние является неопределённым, машинка начинает движение назад.
  • Если все три датчика находятся вне линии, то такое состояние является неопределённым (потеря линии).  то машинка сразу остановится.
Можно рассмотреть алгоритм управления с использованием "черного ящика" и таблицы состояний управляющих сигналов, где А,В,С  сигналы аналоговых  датчиков линий переведенные в дискретную форму 1 - есть линия, а 0 нет линии. М1, М2 электромоторы с фиксированной заданной частотой вращения, но 1 движение мотора вперед, а 0 соответственно назад.






Тогда логическая формула управления мотором примет вид:
M1 = noA&B&C or noA&B&noC or noA&noB&C, упростив получим - M1 = noA&C 
M2 = A&B&noC or A&noB&noC or noA&B&noC, упростив получим - M2 = A&noC 
Для перевода аналогового сигнала  в дискретный, необходимо получить пороговые значения по достижению которого сигнал будет 1 или 0.  Такое преобразование выполняется при сравнении полученного сигнала с пороговым после чего ему нужно присвоить значение 1 или 0.
Пороговые значения получаются калибровкой датчика - сравнением двух контрастных условий срабатывания. Такая операция может проводиться вручную, при отладки программы или автоматически если будет написан соответствующий алгоритм.