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→ пин 2D2→ пин 3D3→ пин 4D4→ пин 5D5→ пин 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. - Двигайте датчик влево и вправо относительно линии и наблюдайте, как меняется комбинация нулей и единиц.