Практическое занятие 3. Простое движение по линии на одном датчике
Курс «Основы робототехники. Продвинутый уровень» Занятие 6. Робот, следующий по линии
Практическое занятие 1. Установка датчиков линии на робота
Установите датчики линии на робота. Держатель датчиков линии собирается из двух коротких палки и одной длинной (см. набор чертежей к конструктору Роботехник). Датчик линии крепится к держателю на длинном винте. При этом необходимо следить, чтобы расстояние от датчика до поверхности было не больше 10 мм
Практическое занятие 2. Проверка и настройка датчиков
1. Подключите датчик линии к контроллеру. Контакт V+ к 5V, Gnd к Gnd, S к одному из цифровых
2. Откройте пример Digital / Button. Замените пин, к которому подключена кнопка (int buttonPin = 2;) в примере на тот, к которому подключен датчик линии. Загрузите программу в контроллер
3. Попробуйте датчик над темной и светлой поверхностью. Датчик должен быть слегка поднят над поверхностью, но расстояние от ИК светодиода и приемника (голубой и черный маленькие стеклянные полусферы на датчике) до поверхности – не более 10 мм
4. Если датчик и на светлой, и на темной поверхности реагирует одинаково (состояния светодиодов на датчике и контроллере не меняются), настройте датчик, поворачивая отверткой подстроечные резистор на нем до тех пор, пока состояния светодиодов над темной и светлой поверхностью не будут меняться
5. По результатам испытаний видим, что когда датчик над светлой поверхностью и светодиод на нем горит, светодиод на контроллере наоборот, погасает. И наоборот, над темной поверхностью светодиод на контроллере загорается. Исходя из загруженной в контроллер программы видно, что над светлой поверхностью датчик посылает сигнал LOW, а над темной – HIGH
Практическое занятие 3. Простое движение по линии на одном датчике
1. Напишем программу для движения робота по черной линии на белом фоне. Написана на основе примера Digital / Button. Загрузите в контроллер данную программу, проведите испытания. При необходимости еще раз настройте датчик линии. При необходимости измените направления движения
int In1 = 3; // когда на контакт подано HIGH, левое колесо крутится вперед int In3 = 6; // когда на контакт подана HIGH, правое колесо крутится вперед // при необходимости исправить номера пинов int line_pin = 10; // пин, к которому подключен датчик линии (при необходимости исправить) int line_state = 0; // переменная для хранения состояния датчика линии void setup() { pinMode(In1, OUTPUT); // подключаем пины драйвера как выходы pinMode(In3, OUTPUT); pinMode(line_pin, INPUT); // подключаем пин датчика линии как вход } void loop() { line_state = digitalRead(line_pin); // читаем значение с датчика if (line_state == LOW) {// проверка написана на основе примера Button digitalWrite(In1, HIGH); // если светло - едем вправо digitalWrite(In3, LOW); } else { // иначе - едем влево digitalWrite(In3, HIGH); digitalWrite(In1, LOW); } } |
2. Возможно, скорость робота получилась слишком большой и с линии он съезжает. Для снижения скорости нужно провести следующую замену:
digitalWrite(In1, HIGH); → analogWrite(In1, 150); digitalWrite(In3, HIGH); → analogWrite(In3, 150); digitalWrite(In1, LOW); → analogWrite(In1, 0); digitalWrite(In3, LOW); → analogWrite(In3, 0); |
В данному случае число в analogWrite – скорость вращения мотора робота, от 0 (мотор стоит) до 255 (максимальная скорость, такая же выдается при команде digitalWrite HIGH). Скорость 150 дана для примера, подбирается оптимум между скоростью и точностью, чтобы с одной стороны, робот не съезжал с линии, с другой стороны, проходил ее как можно быстрее
3. Доработайте программу, постаравшись найти оптимум и замерьте время проезда робота от старта до финиша на поле для соревнований по траектории секундомером
Примечание: для повышения скорости и точности используют различные программные приемы (например, включение двух моторов с разной скоростью, торможение на поворотах) и увеличение количества датчиков для более точного слежения за линией (2-4 датчика)