Простейший инфракрасный счётчик на Arduino. С мелкими гадостями
Здесь описывается очень простой (возможно, самый простой в мире) самодельный однолучевой горизонтальный инфракрасный счётчик (людей) на Arduino. Его сенсорная система содержит лишь инфракрасный светодиод, фотодиод, биполярный транзистор и три резистора. Руководствуясь описанием, счётчик сделать совсем легко.
Но будьте бдительны: в описание я заложил мелкие гадости. А куда и какие — не хочу заранее сообщать. Долой скуку! Да здравствуют приключения!
Как и в обычном квесте, реальной опасности здесь никакой нет. Даже если вы не заметите заложенные «мины», и всё сделаете в точности так, как тут коварно предложено, струйка дыма из самоделки не пойдёт. Ни один её элемент вообще никак не пострадает. Обещаю. При любом раскладе в итоге удастся без потерь наставить это изделие на путь истинный. (На пути истинном оно прекрасно работает. Проверено.)
От всего этого вы получите большое удовольствие и нужные на практике навыки.
Итак, начинаем!
Далее здесь:
Принцип действия
Чем занять микроконтроллер
Простейшая инфракрасная сенсорная система
Подключение сенсорной системы к Arduino
Индикация
Скетч
Методика поиска неисправностей (мелких гадостей)
Что дальше?
Принцип действия
Сенсорная система типичного счётчика состоит из излучателя, создающего инфракрасный луч, и приёмника, чувствительного к этому лучу. При этом излучатель и приёмник располагают друг напротив друга так, что луч, «протянутый» между ними, образует что-то вроде барьера на пути идущего человека. Проходя через него, человек прерывает луч. В результате логическая единица (высокое напряжение) на выходе приёмника сменяется логическим нулём (низкое напряжение). Микроконтроллер, подключенный к выходу приёмника, обнаруживает это событие и подсчитывает его.
Чем занять микроконтроллер
Сейчас нужно принципиально решить, чем же будет занят микроконтроллер (Arduino) именно в нашем самодельном счётчике.
Я говорю вот о чём. Вообще говоря, обнаружить смену единицы на ноль (и обратно) на своём входе микроконтроллер может разными способами. Какой же способ выбрать?
Для начала (и лишь для начала), я предлагаю выбрать тот, который почему-то первым приходит в голову матёрым программистам. Обосновывается он следующим образом. В тот непредсказуемый момент, когда человек вторгается в инфракрасный луч, микроконтроллер, возможно, занят совсем другими делами. Значит, нужно временно их прервать, и быстренько на человека отреагировать. Ну что же, с точки зрения очень занятых джентльменов — весьма логично.
Итак, будем обнаруживать и подсчитывать прерывания инфракрасного луча с помощью прерываний работы процессора микроконтроллера.
Какая завораживающая, волшебная игра слов!
(Не смущайтесь, если вы не знакомы близко с прерываниями работы процессора. Чтобы смастерить счётчик по готовому описанию, такое знакомство особо и не требуется.)
Простейшая инфракрасная сенсорная система
Инфракрасный излучатель и инфракрасный приёмник, образующие сенсорную систему — это два отдельных модуля. Но в нашем случае они так просты, что я решил поместить принципиальную электрическую схему и того и другого на один рисунок.

Рассмотрим схему излучателя.
Главное в ней — инфракрасный светодиод D1 (TSAL6100). По принципу своего действия он разительно отличается от старомодной лампочки накаливания. Но, как и лампа накаливания, излучает он только тогда, когда через него протекает электрический ток. Здесь он работает на постоянном токе, то есть по правилу: «всегда включен».
Сила тока через светодиод зависит от резистора R1, и при указанном на схеме сопротивлении (27 Ом) она составляет 100–120 мА. Это довольно большая сила тока, поэтому годится не любой резистор, а лишь резистор, способный выдержать рассеиваемую мощность до 2 Вт.

Теперь обратимся к схеме приёмника.
В приёмнике элементом, чувствительным к инфракрасному излучению, является фотодиод D2 (BVP10NF).
Ток через него, порождаемый инфракрасным излучением (фототок), протекает в цепи базы транзистора T1. При этом транзистор T1 (BC557) играет роль усилителя слабого сигнала с коэффициентом усиления порядка нескольких сотен.
В свою очередь, ток коллектора транзистора T1 создаёт падение напряжения на резисторе R3. Оно и является выходным сигналом приёмника.

Подключение сенсорной системы к Arduino
Подключение сенсорной системы к Arduino
Излучатель и приёмник берут от Arduino электропитание (5V). (Для питания излучателя можно использовать и независимый отдельный источник постоянного тока. Для приёмника этого лучше не делать.)
Приёмник, кроме того, посылает в Arduino свой выходной сигнал (на цифровой вход D2). При этом Arduino не обязан быть расположен близко. Я использовал для подключения к Arduino провода длиной 5 метров, и какие-либо проблемы, связанные с их большой длиной, замечены не были.
Индикация
Собственный индикатор для отображения результатов счёта людей в этой простейшей самоделке не предусмотрен. Чем меньше у вас трудностей, тем лучше, для начала. При прохождении человека Arduino просто посылает данные в свой последовательный порт, подключенный к usb-порту персонального компьютера. Результат счёта людей можно увидеть на экране компьютера, в мониторе порта, встроенном в среду Arduino.
Скетч
Святая-святых счётчика — скетч (управляющая программа) для Arduino. Он написан на языке C++. Среда программирования Arduino автоматически переводит скетч на машинный язык (компилирует скетч) и в таком виде загружает его в микроконтроллер.
Слово «скетч» переводится на русский язык как «небольшая зарисовка». Имеется в виду небольшой размер программы и её простота. Хотя, в некоторых проектах я видел скетчи настолько большие и сложные, что назвать их «небольшой зарисовкой» — язык не поворачивается.
Однако, для простейшего в мире счётчика скетч и вправду невелик.

Вы можете считать меня негодяем, но я умышленно не привёл текст скетча в удобном виде для волшебства «скопируй-вставь». Он — лишь на картинке. Наберите скетч с картинки, буква за буквой. Ещё и наделайте при этом ошибок. Потом найдите свои ошибки и исправьте. Это будет отличной тренировкой.
Методика поиска неисправностей
Если самоделка не работает (вот они и всплыли, мелкие гадости! может мои, а может и ваши собственные), ваше первое побуждение: «растоптать её, и больше никогда за такое не браться».
Ну что вы, дружище! Остыньте. Давайте искать неисправность, из-за которой «девайс» устроил забастовку.
С чего начать поиск? С начала. С начала тракта, по которому «движется» инфракрасный сигнал. Рождается он в излучателе. Далее — поступает на приёмник. С выхода приёмника — на счётчик импульсов (то есть, на Arduino). Неисправность может обнаружиться в любом из перечисленных модулей. (Бывает, что и в нескольких.) Прежде всего, надо по-крупному определить, какой модуль исправен, а какой — нет. И затем уже выискивать гадкого «жучка» внутри проблемного модуля.
Проверка исправности излучателя
Проверить, работает ли собранный вами излучатель, несложно. У большинства смартфонов (айфон к ним, увы, не относится) фотокамера чувствительна не только к видимому свету, но и к инфракрасному излучению (в ближнем диапазоне). Наведите камеру на инфракрасный светодиод и начните включать и выключать питание излучателя. На экране смартфона вы должны увидеть, как светодиод при этом вспыхивает и гаснет.

Проверка исправности приёмника
Исправность инфракрасного приёмника можно проверить только с помощью заведомо исправного излучателя.
Кроме того, вам понадобится ещё и мультиметр (для измерения выходного напряжения приёмника). Если на исправный приёмник падает инфракрасный луч, выходное напряжение приёмника, измеренное мультиметром, имеет величину приблизительно 5 Вольт. Если луч прерван, выходное напряжение приёмника опускается практически до нулевой величины.
Если мультиметра под рукой у вас нет (какой ужас!), и взять его негде, вместо него вы можете подключить к выходу приёмника заведомо исправный счётчик импульсов (тот, в который вы превратили Arduino). При исправном приёмнике исправный счётчик импульсов послушно считает пробные прерывания луча вашей рукой и выводит результаты счёта на экран персонального компьютера.
Проверка исправности счётчика импульсов (на Arduino)
Счетчик импульсов на Arduino можно проверить независимо от того, исправен приёмник или нет. Подключать приёмник для этой проверки вообще не обязательно.
В отсутствие приёмника импульсы можно генерировать с помощью модуля-заглушки. Модуль состоит из резистора и кнопки. Если кнопка не нажата, на входе D2 Arduino — логический ноль. Нажимаете кнопку — ноль меняется на логическую единицу. Отпускаете кнопку — снова появляется ноль. И так далее.

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

Что дальше?
Это зависти от того, к чему вы пришли.
Если вы самостоятельно нашли в описании самоделки все мелкие гадости и исправили их, самоделка у вас нормально работает. Поздравляю!
Если это пока не удалось, возможны два пути решения проблемы.
Дождаться выхода следующей статьи на эту тему, в которой будет предпринят подробный «разбор полётов».
Сравнить свою самоделку с эталонным образцом (без «гадостей»), описанным мной в книге «Простейший инфракрасный счётчик на Arduino».
Ссылка на книгу:
https://www.litres.ru/book/anatoliy-sivkov/prosteyshiy-infrakrasnyy-schetchik-na-arduino-71948347/