2.4. Датчик линии.md


Датчик линии

Одной из самых классических и увлекательных задач в робототехнике является создание робота, который может самостоятельно следовать по нарисованной на полу линии. Такие роботы, называемые Line Follower, используются на складах, в больницах для доставки медикаментов и, конечно, на множестве соревнований. Чтобы научить нашего робота «видеть» линию, мы будем использовать специальный датчик линии.

Как датчик «видит» чёрное и белое?

В основе датчика линии лежит простой физический принцип:

  • Белая поверхность хорошо отражает свет.
  • Чёрная поверхность хорошо поглощает свет.

Датчик состоит из нескольких пар «излучатель-приёмник». В нашем случае это инфракрасный (ИК) светодиод и фототранзистор. 1. ИК-светодиод постоянно излучает невидимый для нас свет вниз, на поверхность.
2. Фототранзистор «смотрит» в ту же точку и измеряет, сколько света отразилось обратно.

  • Если под датчиком белая поверхность, много света отражается, фототранзистор улавливает его и генерирует на выходе один цифровой сигнал (например, HIGH).
  • Если под датчиком чёрная линия, почти весь свет поглощается, на фототранзистор почти ничего не попадает, и он генерирует другой цифровой сигнал (например, LOW).

Таким образом, с помощью простого digitalRead() мы можем точно определить, находится ли датчик над белым полем или над чёрной линией.

Зачем нужно пять датчиков?

В нашем наборе используется 5-канальный датчик линии. Зачем так много? Представьте, что у вас всего один датчик. Он может сказать только «вижу линию» или «не вижу линию». Если робот съехал с линии, он не знает, в какую сторону ему нужно поворачивать, чтобы вернуться.

Массив из пяти датчиков даёт гораздо больше информации:

  • Если центральный датчик видит линию ([HIGH, HIGH, LOW, HIGH, HIGH]), значит, робот едет ровно по центру.
  • Если линию видят датчики справа от центра ([HIGH, HIGH, HIGH, LOW, HIGH]), значит, робот сместился влево, и нужно повернуть вправо.
  • Если линию видят датчики слева от центра ([HIGH, LOW, HIGH, HIGH, HIGH]), значит, робот сместился вправо, и нужно повернуть влево.

Пять датчиков не просто видят линию, они сообщают положение робота относительно линии. Это позволяет создавать плавные и точные алгоритмы следования, а не просто рывки из стороны в сторону.

Подключение датчика

У нашего 5-канального модуля есть 7 выводов:

  • VCC - Питание (подключается к 5V).
  • GND - Земля.
  • D1, D2, D3, D4, D5 - Пять цифровых выходов от каждого из сенсоров.

Схема подключения:

  • Подключите VCC и GND датчика к шинам +5V и GND на макетной плате или напрямую к Рудирону.
  • Соедините пять сигнальных выходов датчика с любыми пятью цифровыми пинами Рудирона. Для примера возьмём пины со 2 по 6.
    • D1пин 2
    • D2пин 3
    • D3пин 4
    • D4пин 5
    • D5пин 6

Программа для чтения данных

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

// Определяем пины, к которым подключены датчики
const int sensorPins[] = {2, 3, 4, 5, 6};
const int numSensors = 5;

void setup() {
  Serial.begin(9600);
  
  // Настраиваем все пины датчиков на вход
  for (int i = 0; i < numSensors; i++) {
    pinMode(sensorPins[i], INPUT);
  }
  
  Serial.println("Тестер датчика линии готов. Поместите датчик над линией.");
}

void loop() {
  // Считываем и выводим состояние каждого датчика
  for (int i = 0; i < numSensors; i++) {
    int state = digitalRead(sensorPins[i]);
    Serial.print(state);
    Serial.print("\t"); // \t - это символ табуляции для красивого вывода
  }
  Serial.println(); // Переход на новую строку после вывода всех 5 значений
  
  delay(250); // Обновляем показания 4 раза в секунду
}

Проверка работы:

  • Загрузите код и откройте монитор порта.
  • Поместите датчик над белой поверхностью. Вы должны увидеть строку из одних и тех же цифр (например, 1 1 1 1 1).
  • Теперь поместите его так, чтобы чёрная линия оказалась под центральным датчиком. Вы увидите что-то вроде 1 1 0 1 1.
  • Двигайте датчик влево и вправо относительно линии и наблюдайте, как меняется комбинация нулей и единиц.