глаза1

Урок 5. «Зрение» робота. Сенсоры черного и белого цвета ринга для боев сумороботов.

Мы с Вами разобрались, как суморобот сможет найти соперника в бою. Но это только часть «зрения», необходимая для победы. Вторая часть «зрения» должна быть направлена «под ноги» суморобота – по правилам поединка робот, выехавший или вытолкнутый за пределы ринга – проиграл. Как вы заметили ранее – в материалах урока №4, ринг черный, а по краю ринга проходит белая полоса. Таким ринг сделан именно для того, чтобы суморобот смог различить край (границу между черным рингом и белой полосой по краю) боевого поля и совершить действия, препятствующие выходу за эту границу.

Для различения такой границы нам необходим специализированный датчик. Существует достаточно большое количество производителей таких датчиков -  для поиска их в интернете надо ввести «датчик линии», «датчик уровня серого», «датчик цвета». Мы остановимся на наиболее распространенных, компактных и недорогих, представленных на сайте www.pololu.com (или на сайтах www.amperka.ru, www.electronshik.ru)

Как видите, датчики представлены в различных исполнениях – по 8, 3 и по 1 сенсору. 8 и 3 сенсора на одной плате обычно исппользуются для проектов роботов, следующих по линии. Для проектов сумороботов наиболее удобны датчики QTR-1A и QTR-1RC

QTR-1A возвращает аналоговый сигнал, QTR-1RC – цифровой.

Сколько таких датчиков нам необходимо для суморобота и как их располагать? Оптимально расположить датчики макимально близко к краю по углам робота ПЕРЕД колесами для того, чтобы он мог распознать край и вовремя отъехать от него и колесо не висело в воздухе, за границей ринга – это снижает устойчивость робота и повышает шансы проигрыша.

Сколько таких датчиков? Минимально один спереди по центру. В этом случае движение робота по рингу должно происходить только передним ходом – чтобы различить границу и не вылететь с ринга. Оптимально – 4 сенсора по краям робота или 3 (два сенсора спереди по краям и один сзади по центру) – такой робот будет иметь больше возможностей в тактическом превосходстве – сможет перемещаться в любые стороны.

В нашем роботе с двумя колесами мы будем использовать два датчика QTR-1A черного/белого, раположенные спереди.

Для примера приведены примеры компоновки датчиков — изображения снизу реальных роботов:

Робот с четырьмя датчиками QTR-1A

по углам робота.

Робот с двумя датчиками QTR-1A спереди (робот гусеничный и имеет хорошую центровку массы, тактика движения по рингу только вперед).

Как прочитать данные с датчиков линии?

Как всегда обратимся к документации по ввыбранным датчикам QTR-1A:

Итак, отметим, что датчик питается от напряжения 5V и потребляет примерно 17mA и возвращает аналоговое значение напряжения в зависимости от цвета поверхности. Его надо располагать оптимально на расстоянии 3мм от поверхности и не более 6мм от ринга.

Для этого датчика также написана специальная библиотека, которую можно использовать в Arduino проектах.

Подключим контакты OUT наших датчиков QTR-1A с аналоговыми контактами A6 и A11 (контакты 4 и 12 микропроцессорной платы A-Star 32U4), контакты VIN к напряжению питания 5V, контакты GND к общей шине (земле).

Для чтения данных с датчиков будем использовать обычную функцию чтения аналогового сигнала analogRead(pin) как в предыдущем уроке. Помним, что эта функция возвращает значения от 0 до 1023.

Скетч будет максимально похож на программу предыдущего урока – ведь это практически такое-же «зрение» — просто направленное вниз. J

Итак:

//объявляем переменные, содержащие значения //аналоговых портов, подключенных к датчикам //QTR-1A

int left_bw = A6;

int right_bw = A11;

void setup(){

//инициализируем терминальный вывод

Serial.begin(9600);

}

void loop(){

//выводим данные о значениях датчиков в окно //терминала в одну строку

Serial.print(“left side color = ”);

Serial.print(analogRead(left_bw));

Serial.print(“         right side color = ”);

Serial.println(analogRead(right_bw));

//немного задерживаем вывод данных, чтобы было //удобнее смотреть

delay(500);

}

Предполагаю, что в данном скетче Вам уже все понятно и объяснения будут лишними.

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

Экран терминала:

На экране терминала мы видим, что когда датчики попадают на белую поверхность листа значения становятся ближе к нулю и наоборот – при попадании датчиков на черную поверхность листа значения ближе к 1024.

Видео с примером работы скетча

Предлагаю воспользоваться этим свойством датчика QTR-1A и для различения  границы ринга свормулировать следующее условие с известным допущением:

«Если возвращаемое значение функции analogRead(pin) меньше значения 400 считаем поле под датчиком QTR-1A условно белым (светлая поверхность), если больше 400, то условно черным (темная поверхность)».

Модернизируем скетч:

//объявляем переменные, содержащие значения //аналоговых портов, подключенных к датчикам //QTR-1A

int left_bw = A6;

int right_bw = A11;

 

void setup(){

//инициализируем терминальный вывод

Serial.begin(9600);

}

 

void loop(){

if(analogRead(left_bw) < 400) {

Serial.print(“under left sensor – light surface”);

}

else {

Serial.print(“under left sensor – dark surface ”);

}

if(analogRead(right_bw) < 400) {

Serial.print(“ under right sensor – light surface”);

}

else {

Serial.print(“ under right sensor – dark surface”);

}

Serial.println(“ “);

delay(500);

}

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

Обратим внимание на новую управляющую конструкцию условия if(условие верно){действия если условие верно}else{действия если условие неверно}.

 

Вопросы для самопроверки:

  1. В чем основное отличие ИК – датчиков дистанции от ИК – датчиков линии?
  2. Подумайте, какое количество датчиков линии оптимально для круглого суморобота (такие также бывают)?*

Aboutadmin