Датчик линии KY-033: принцип работы и подключение к Arduino

Как работает оптический датчик линии на TCRT5000, как подключить его к Arduino и собрать счётчик витков для намоточного станка.
Устройство модуля
KY-033 является оптическим модулем для обнаружения белых и чёрных линий и препятствий. Его основа: оптопара TCRT5000 из инфракрасного светодиода и фототранзистора. Светодиод излучает на длине волны 950 нм, уверенное определение возможно на расстоянии от 1 до 25 мм. На плате также находятся компаратор LM393, подстроечный резистор и контрольный светодиод. По обе стороны от оптического элемента сделаны два крепёжных отверстия, а излучатель и приёмник разделены перегородкой, чтобы не влиять друг на друга.

Логика срабатывания
Инфракрасный свет отражается от светлой поверхности и попадает на фототранзистор. В этом состоянии на выводе OUT держится логическая единица. Чёрный объект свет поглощает, поток до фототранзистора не доходит, и компаратор переводит выход в логический ноль. Одновременно загорается контрольный светодиод.

Подстроечным резистором задаётся порог: при максимальном сопротивлении датчик реагирует уже на серый оттенок, при минимальном срабатывает только на чёрный. Важно выдерживать расстояние до поверхности. Если датчик придвинуть слишком близко, перегородка перекроет путь отражённому свету даже над белым фоном. Если отодвинуть слишком далеко, свет рассеется и не вернётся.
Технические характеристики
| Расстояние определения | 1–25 мм |
| Напряжение питания | 3,3–5 В |
| ИК-датчик | TCRT5000 |
| Длина волны излучения | 950 нм |
| Компаратор | LM393 |
| Максимальная нагрузка на выход | 15 мА |
| Размеры модуля | 40×11×11 мм |
Подключение и простой скетч
У модуля три вывода: VCC и GND для питания и сигнальный S (OUT). Выход цифровой, поэтому его можно подать на любой цифровой пин Arduino. В примере с Arduino UNO это D2.

Пин настраивается как обычный вход, pinMode(2, INPUT). Внутренняя подтяжка не нужна, так как модуль сам формирует логическую единицу. Скетч каждые 200 мс читает вход функцией digitalRead и выводит в терминал на скорости 9600 слово LIGHT, пока линии нет, или BLACK, когда датчик сработал.
Помимо цифровых существуют аналоговые датчики линии. Они различают оттенки серого, подключаются к аналоговому входу и опрашиваются функцией analogRead(). Цифровой датчик выдаёт только два состояния, граница между которыми задана подстроечным резистором.
Где применяется
Главная область применения относится к робототехнике: роботы, следующие по линии, обычно несут группу датчиков, например восемь. Для простейшего робота достаточно двух, расставленных на ширину полосы маршрута. По их показаниям программа подаёт питание на двигатель правого или левого колеса. Такие же датчики есть в роботах-пылесосах.

В станках с ЧПУ модули работают как оптические концевики, детекторы препятствий и энкодеры. В последнем случае на вращающуюся деталь наносят чередующиеся чёрные и белые полосы, и по смене сигнала вычисляют угловую скорость и число оборотов.
Проект: счётчик витков намоточного станка
Идея проекта такова: в терминал вводится число витков катушки, Arduino Uno включает двигатель и считает обороты вала по чёрной метке, нанесённой на белую вращающуюся часть привода. Привод вращает 12-вольтовый двигатель постоянного тока с редуктором. Питать его от платы нельзя, поэтому он управляется через N-канальный полевой транзистор IRL540N с логическим уровнем управления.
- диод 1N4007 защищает транзистор от напряжения самоиндукции при отключении двигателя;
- резистор 220 Ом ограничивает ток выхода микроконтроллера;
- резистор 100 кОм разряжает затвор и гарантирует отключение двигателя при логическом нуле;
- минус внешнего источника 12 В обязательно соединяется с минусом Arduino.
Датчик подключён к пину 2, схема управления мотором к пину 7. Программа построена как конечный автомат. Сначала двигатель вращается, пока метка не окажется над датчиком. Это начальное положение, в котором на сердечнике закрепляют конец провода. Затем программа ждёт ввода числа витков и нажатия Enter. Если введено число больше нуля, мотор запускается. Далее отслеживается каждый оборот: уход метки из поля зрения означает начало оборота, её возвращение означает конец. Номер витка выводится в терминал. Когда счётчик достигает заданного значения, двигатель останавливается, выводится сообщение Completed и цикл повторяется.
Во время намотки провод придерживают рукой. Проект можно развить: добавить дисплей, кнопки и второй двигатель для раскладки провода по сердечнику.