Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 6 Робот, следующий по линии.doc
Скачиваний:
143
Добавлен:
10.03.2016
Размер:
431.1 Кб
Скачать

Курс «Основы робототехники. Продвинутый уровень» Занятие 6. Робот, следующий по линии Практическое занятие 1. Установка датчиков линии на робота

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

  1. аналоговый на модуле

  2. цифровой на модуле (для него потребуется изменить коды программ в занятии в области опроса)

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

Схема для третьего варианта (с двумя датчиками):

Схема собирается не на стенде, а на отдельной макетной плате. Два отверстия в краях макетной платы используйте для крепления ее на корпус робота датчиками вниз

Примечание: для обеспечения наилучшего результата можно попробовать иначе расположить элементы на макетной плате или попробовать использовать светодиоды другого цвета (на схеме белые)

Практическое занятие 2. Простое движение по линии на одном фоторезисторе

  1. Напишем программу для движения робота по черной линии на белом фоне. Программа использует код из примера AnalogInOutSerial для опроса аналогового датчика линии и вывода результата в Монитор порта и код из примера Button для управления моторами

int In1 = 6; // когда на контакт подано HIGH, левое колесо крутится вперед

int In3 = 10; // когда на контакт подана HIGH, правое колесо крутится вперед

// при необходимости исправить номера пинов

// нужно снять показания датчика на темном и светлом и найти среднее, пример:

// снятые показания датчика линии над темной полосой = 400

// снятые показания датчика линии над светлым местом = 800, среднее между ними равно (400+800) / 2 = 600

int porog = 600; // найденный порог, выше которого - под датчиком светло, ниже - под датчиком темно

int analogInPin = A3; // пин, к которому подключен датчик линии (при необходимости исправить)

int sensorValue = 0; // значение, считанное с аналогового датчика

void setup() {

pinMode(In1, OUTPUT); // подключаем пины моторов

pinMode(In3, OUTPUT);

Serial.begin(9600); // подключаем Монитор порта для вывода значений с датчика

}

void loop() {

sensorValue = analogRead(analogInPin); // читаем значение с датчика

Serial.print("sensor = " ); // выводим значение с датчика в Монитор порта

Serial.println(sensorValue);

if (sensorValue > porog) { // проверка написана на основе примера Button

digitalWrite(In1, HIGH); // если светло - едем вправо

digitalWrite(In3, LOW);

}

else { // иначе - едем влево

digitalWrite(In3, HIGH);

digitalWrite(In1, LOW);

}

}

  1. Возможно, скорость робота получилась слишком большой и с линии он съезжает. Для снижения скорости нужно провести следующую замену:

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

  1. Доработайте программу, постаравшись найти оптимум и замерьте время проезда робота от старта до финиша на поле для соревнований по траектории секундомером

Примечание: для повышения скорости и точности используют различные программные приемы (например, включение двух моторов с разной скоростью, торможение на поворотах) и увеличение количества датчиков для более точного слежения за линией (2-4 датчика)