Компонент · Датчик

Массив ИК-датчиков отражения (IR)

Массив ИК-датчиков отражения (IR) показывает роботу линию. Как устроено измерение, как откалибровать массив и где он отказывает.

Что это такое

Массив IR-датчиков отражения — полоска небольших инфракрасных датчиков, установленных в ряд и направленных на пол. Каждый датчик объединяет инфракрасный светодиод (LED), направляющий свет вниз, и фототранзистор, измеряющий, сколько света отражается обратно. Наведите его на тёмную линию на светлом полу, и линия отражает меньше света, поэтому датчик над ней считывает иное значение, чем датчики над полом. Считывание всего ряда сообщает не только находитесь ли вы на линии, но и где находится линия под роботом.

Это «глаз» почти каждого робота, следующего за линией, и причина, по которой робот, следующий за линией является таким хорошим первым проектом: измерение недорого, интуитивно понятно и сразу даёт наглядный результат.

Поперечное сечение массива IR-датчиков отражения над полом с чёрной линией. Каждый канал направляет инфракрасное излучение вниз; белый пол сильно отражает его, а чёрная линия поглощает, поэтому канал над линией считывает низкий уровень, а остальные — высокий.
Каждый канал излучает IR и измеряет то, что отражается обратно. Пол отражает, а линия поглощает — низкое показание отмечает положение линии под массивом. Скачать SVG

Как это работает

Каждый канал представляет собой пару излучатель—приёмник. ИК-светодиод (IR LED) излучает невидимый свет ~940 nm, а проводимость фототранзистора растёт по мере возвращения большего количества света. Белая или светлая поверхность сильно отражает его (большой возвращённый сигнал), а чёрная линия поглощает IR (малый возвращённый сигнал). Существуют два варианта выхода:

  • Аналоговый — каждый канал сообщает непрерывное значение, пропорциональное отражательной способности. Он информативнее: можно вычислить, между какими двумя датчиками находится линия, и получить плавный сигнал ошибки для ПИД-регулятора (PID).
  • Цифровой — встроенный компаратор сообщает для каждого канала простое состояние «линия/линии нет». Так читать проще, но информация грубее.

Чтобы преобразовать массив в сигнал руления, вычисляют взвешенное среднее положения датчиков, видящих линию. Если линия смещается под левыми датчиками, среднее смещается влево, и это отклонение становится ошибкой, которую устраняет контур управления.

Когда его следует использовать

Используйте массив датчиков отражения всякий раз, когда робот должен отслеживать высококонтрастный путь: чёрную линию на белом фоне или белую ленту на тёмном полу. Большее число каналов обеспечивает более точное разрешение положения и позволяет роботу увереннее проходить повороты и разрывы; пяти каналов достаточно для обучения, а восемь удобны для быстрых или более извилистых трасс.

Это неподходящий инструмент для обнаружения объектов, расстояния или чего-либо за пределами плоскости пола — для этого нужен ультразвуковой датчик или датчик времени полёта.

Калибровка и типичные ошибки

  • Всегда выполняйте калибровку. Внешний свет, поверхность и высота установки изменяют показания. Перед запуском проведите массивом над линией и полом, запишите минимум и максимум для каждого канала, затем масштабируйте показания между ними. Пропуск калибровки — главная причина того, что робот работает на одном столе, но не работает на другом.
  • Высота имеет значение. Датчики отражения имеют узкий оптимальный диапазон (несколько миллиметров). Если установить массив слишком высоко, контраст исчезает.
  • Внешнее IR-излучение — это шум. Солнечный свет и некоторые источники освещения заполняют приёмники инфракрасным излучением. Закройте датчики кожухом или работайте в помещении для стабильного поведения и фильтруйте сигнал — см. борьбу с шумом датчиков.
  • Отделка поверхности вводит в заблуждение. Глянцевый чёрный материал под неправильным углом может отражать как белый; надёжное сочетание — матовый скотч на матовом полу.

Подключение к Arduino

Аналоговому массиву нужен отдельный вывод ADC для каждого канала, поэтому сочетание 8-канального массива и Uno с шестью аналоговыми выводами неудобно — восемь выводов Nano (A0–A7) подходят точно.

Вывод массива Arduino Примечание
VCC 5 V Потребление создают излучатели, а не приёмники
GND GND
OUT1–OUT8 A0–A7 Аналоговые каналы, по одному на датчик
LEDON / CTRL Любой цифровой вывод Необязательно: включает и выключает излучатели

Вывод LEDON стоит подключить, хотя большинство проектов его игнорирует. Излучатели 8-канального массива вместе могут непрерывно потреблять 100–200 mA, что для небольшой батареи составляет существенную долю бюджета, и позволяет выполнять вычитание фонового освещения, описанное ниже.

Калибровка: код, который определяет работоспособность

Это не необязательная операция и не улучшение. Неоткалиброванный массив — самая частая причина того, что робот, следующий за линией, работает на кухонном столе, но не работает на соревнованиях.

const int N = 8;
const int PIN[N] = {A0, A1, A2, A3, A4, A5, A6, A7};
int lo[N], hi[N];

void calibrate() {
  for (int i = 0; i < N; i++) { lo[i] = 1023; hi[i] = 0; }

  // Sweep the array across the line and the floor for ~3 seconds.
  unsigned long start = millis();
  while (millis() - start < 3000) {
    for (int i = 0; i < N; i++) {
      int v = analogRead(PIN[i]);
      if (v < lo[i]) lo[i] = v;
      if (v > hi[i]) hi[i] = v;
    }
  }
}

// 0 = floor, 1000 = line, per channel, normalised against this run's own extremes.
int normalised(int i) {
  int span = hi[i] - lo[i];
  if (span < 50) return 0;                       // this channel never saw contrast
  return constrain(map(analogRead(PIN[i]), lo[i], hi[i], 0, 1000), 0, 1000);
}

Обратите внимание на проверку span < 50. Канал, который во время калибровки не увидел контраста — потому что при проведении над линией его пропустили либо его излучатель неисправен, — в противном случае образовал бы огромные нормированные значения из-за малейшего шума, и робот отклонялся бы в сторону датчика, который не сообщает ничего.

От восьми показаний к одному значению руления

Вся идея заключается во взвешенном среднем, и оно формирует непрерывное положение, а не дискретное сообщение «датчик 3 видит линию»:

// Returns position in the same units as the weights: 0..7000 for an 8-channel array,
// or -1 if the line is not visible at all.
long linePosition() {
  long weighted = 0, total = 0;
  for (int i = 0; i < N; i++) {
    int v = normalised(i);
    if (v > 100) {                    // ignore channels that are clearly on floor
      weighted += (long)v * i * 1000;
      total    += v;
    }
  }
  if (total == 0) return -1;          // line lost
  return weighted / total;
}

// Error for the control loop: 0 when centred.
long error() {
  long pos = linePosition();
  if (pos < 0) return LAST_ERROR;     // hold the last known direction, do not zero it
  return pos - 3500;                  // centre of an 8-channel array
}

Два проектных решения здесь важнее арифметики:

Игнорирование каналов ниже порога не позволяет шуму пола смещать среднее. Без этого восемь каналов, каждый из которых показывает небольшое ненулевое значение, тянули бы оценку к центру независимо от положения линии.

Возврат последней ошибки при потере линии, а не нуля, позволяет роботу восстановиться после резкого поворота. Ноль означает «идеальное центрирование», поэтому робот, обнуляющий ошибку при потере линии, поедет прямо на полной скорости прочь от только что потерянной линии. Сохранение последней ошибки заставляет робота продолжать поворачивать в ту же сторону, в которую он уже поворачивал, то есть туда, куда ушла линия.

Высота установки и её решающее значение

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

Высота над полом Типичное поведение
1–3 mm Лучший контраст, но любая неровность поверхности вызывает касание
3–8 mm Рабочий диапазон — большинство массивов рассчитано примерно на 3 mm
8–15 mm Контраст падает; диапазон калибровки уменьшается
> 15 mm На большинстве поверхностей массив фактически слеп

Есть два практических следствия. Устанавливайте массив жёстко — на гибком кронштейне высота изменяется при разгоне робота, что изменяет показания, которые контур управления воспринимает как перемещение линии. Кроме того, устанавливайте его горизонтально, поскольку наклонный массив создаёт для каждого канала свою эффективную высоту, а значит, и свою калибровку. Из-за этого робот может хорошо идти по линии в одном направлении и плохо — в противоположном.

Также важно установить массив перед колёсами: чем дальше вперёд, тем раньше робот увидит поворот и тем больше времени получит контур управления. При слишком большом выносе геометрия усиливает ошибку до колебаний.

Как победить внешнее освещение

Солнечный свет содержит значительную долю инфракрасного излучения 940 nm, и у приёмника оно выглядит ровно как отражение. Робот, который работает в помещении, но отказывает рядом с окном, почти всегда сталкивается именно с этим эффектом.

Если излучатели массива можно переключать, решение полностью устраняет помеху и требует всего двух измерений:

int ambientSubtracted(int i) {
  digitalWrite(LEDON, LOW);   delayMicroseconds(200);
  int dark = analogRead(PIN[i]);      // ambient only
  digitalWrite(LEDON, HIGH);  delayMicroseconds(200);
  int lit  = analogRead(PIN[i]);      // ambient + our own emitter
  return lit - dark;                  // just our emitter
}

Всё постоянное в окружении вычитается точно. Время опроса удваивается, что для быстрого робота, следующего за линией, является серьёзной платой, — но ненадёжный датчик становится надёжным. Именно эту технику применяют коммерческие массивы.

Если этого недостаточно, окружите массив кожухом, чтобы он видел только пол непосредственно под собой.

Диагностика

Симптом Вероятная причина Исправление
Работает на одной поверхности, но не на другой Нет калибровки или она устарела Повторно калибруйте в начале каждого запуска на фактической поверхности
Робот отклоняется в одну сторону Неверный диапазон калибровки одного канала Проверьте hi/lo каждого канала; неисправный излучатель даёт очень малый диапазон
Теряет линию на резких поворотах Массив слишком близко к колёсам или ошибка обнуляется при потере Переместите вперёд; сохраняйте последнюю ошибку вместо нуля
Колеблется на прямых Массив слишком сильно вынесен вперёд или усиление слишком велико Уменьшите вынос; заново настройте регулятор
Отказывает рядом с окном Внешнее инфракрасное излучение Вычитайте показание при выключенном излучателе или установите защитный кожух
Нестабильно работает над глянцевым чёрным скотчем Зеркальное отражение от скотча Надёжное сочетание — матовый скотч на матовом полу
Показания изменяются по мере работы Батарея разряжается, и излучатели тускнеют Излучатели потребляют большой ток; проверьте шину под нагрузкой
Все каналы показывают одинаковые значения Массив установлен слишком высоко Опустите до 3–8 mm и повторите калибровку

Выбор массива

Каналы Разрешение по положению Для чего подходит
3 Грубое — по сути только слева/в центре/справа Только изучение принципа
5 Достаточное Первый робот, следующий за линией, на пологой трассе
8 Удобное Быстрые трассы, резкие повороты, обнаружение разветвлений в лабиринте из линий
12–16 Высокое Соревновательные роботы на высокой скорости

Аналоговый вывод лучше цифрового для любой системы с контуром управления. Компаратор цифрового массива сообщает для каждого канала только наличие или отсутствие линии, квантуя положение до нескольких дискретных значений и делая плавное пропорциональное руление невозможным. Аналоговый вывод даёт непрерывный сигнал ошибки, который необходим ПИД-регулятору (PID).

Шаг между каналами так же важен, как их количество: массив должен быть шире линии достаточно, чтобы у каждого её края всегда находился датчик над полом, но не настолько широким, чтобы линия могла оказаться между двумя датчиками и остаться незамеченной. Для стандартной электроизоляционной ленты шириной 19 mm хорошо работает шаг 8 mm.

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

Исследуйте граф

Используется в этих сборках

Проекты, учебные пути и симуляторы, в которых используется Массив ИК-датчиков отражения (IR).

Вопросы

Массив ИК-датчиков отражения (IR): частые вопросы

Что такое датчик для робота, следующего за линией?

Датчик для робота, следующего за линией, — это инфракрасный датчик отражения, который робот направляет на пол для обнаружения отмеченной линии. Каждый канал направляет вниз ИК-свет (IR) и измеряет, сколько его отражается, поэтому тёмная линия, отражающая меньше света, считывается иначе, чем окружающий пол.

Как работает датчик для робота, следующего за линией?

В каждом канале ИК-светодиод (IR LED) объединён с фототранзистором. Светлые поверхности сильно отражают свет, а тёмные линии поглощают инфракрасное излучение, поэтому датчик над линией считывает низкий уровень, а остальные — высокий. Считывание всего ряда сообщает роботу, где под ним проходит линия.

Как откалибровать IR-датчик для робота, следующего за линией?

Перед запуском проведите массивом над линией и открытым полом, запишите минимальное и максимальное показание каждого канала, а затем масштабируйте текущие показания между этими пределами. Пропуск калибровки — главная причина того, что робот работает на одной поверхности, но не работает на другой.

Что такое ПИД-регулятор (PID) в роботе, следующем за линией?

ПИД-регулятор (PID) — метод управления, который превращает измеренную датчиками ошибку положения в плавное руление. Пропорциональная составляющая реагирует на то, насколько далеко робот находится от линии, дифференциальная гасит перерегулирование, а интегральная устраняет постоянное смещение — благодаря этому робот движется по линии без колебаний. Его можно настраивать в реальном времени в нашем симуляторе ПИД-регулятора (PID).

Из каких основных компонентов состоит робот, следующий за линией?

Базовому такому роботу нужны четыре элемента: массив IR-датчиков отражения для обнаружения линии, микроконтроллер, например Arduino Uno, для выполнения контура управления, драйвер двигателей вроде L298N и два двигателя постоянного тока (DC) с колёсами. Батарея и шасси дополняют конструкцию.

Для чего используется массив датчиков линии?

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

Дополнительные материалы

Источники