Двухлучевой инфракрасный счётчик предназначен для счёта входящих в помещение и выходящих из него людей. Вычтя вышедших из вошедших, он может определить, сколько человек находится в помещении в текущий момент. Мне было интересно самостоятельно создать такой электронный прибор, изначально зная об его устройстве лишь то, что у него два инфракрасных луча, которые идущий человек пересекает своим телом, Ну и, конечно, то, что тут не обойтись без микроконтроллера. Словом, DIY (сделай сам), в чистом виде. Какие только причуды не приходят в голову человеку. И да, я сделал его. В процессе доведения счётчика "до ума" было изготовлено и испытано несколько разных его вариантов, пока не получился удачный (на мой взгляд). Сейчас полтора десятка таких счётчиков, образующих сеть, проходят "обкатку" в составе действующего прототипа системы управления эвакуацией. Работу сети счётчиков в реальном времени можно посмотреть по ссылке

Когда я рассказываю об инфракрасном счётчике студентам и своим коллегам по работе, некоторые спрашивают меня, какой алгоритм определения направления движения человека заложен в "мозги" счётчика. Если бы у меня был покупной счётчик, я бы отвечал: "Откуда мне знать?" Но я рассказываю о счётчике, полностью сделанном мною, включая и написание программы для микроконтроллера, и значит, я знаю о нём всё.

Итак, каким образом микроконтроллер (моего) счётчика отличает входящих от выходящих, чтобы считать их раздельно?

Для начала — краткий ответ.

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

Вначале надо побольше сказать об устройс��ве счётчика. Сенсорная система счётчика состоит из двух излучателей, создающих два параллельных друг другу инфракрасных луча, и двух приёмников, на выходе которых сигнал либо есть, либо его нет, в зависимости от того, падает луч на соответствующий приёмник, или луч чем‑то прерван. (Расстояние между параллельными лучами — несколько сантиметров.)

Сигналы сенсорной системы поступают на вход микроконтроллера счётчика.

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

Чтобы прояснить это, буду использовать следующие термины:

Сенсорный канал — совокупность инфракрасного излучателя, луча и инфракрасного приёмника. Счётчик имеет два сенсорных канала, которым приписаны номера: 1 и 2. Каналы пронумерованы слева направо, если смотреть по ходу инфракрасных лучей. (Соответственно, человек может идти мимо счётчика слева направо или справа налево.)

Состояние сенсорного канала (двоичное): 1 или 0.
1 — канал открыт (луч свободно проходит)
0 — канал закрыт (препятствие на пути луча).

Событие — внезапная перемена состояния одного из сенсорных каналов, связанная с его открытием или закрытием (по сути, с появлением или исчезновением сигнала на выходе соответствующего приёмника).

Код события — число из приведённой ниже таблицы, которое временно запоминает микроконтроллер при появлении события.

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

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

Ага! — восклицают после этого проницательные читатели. — Ты нас обманул! Мы подумали, что эта статья — о распознавании сложных образов искусственной нейронной сетью. А ты обозвал образами чёрт‑те что.

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

Таблица 1. Коды событий, используемые в абстрактных образах.

событие

код события

закрылся канал 1

1

закрылся канал 2

2

открылся канал 1

3

открылся канал 2

4

Ниже перечисляются основные типы абстрактных образов (для наглядности они заключены в фигурные скобки).

Образы, содержащие два события:

{ 1 3 } - человек вторгся в канал 1 и вышел из него обратно: туда, откуда вошёл;
{ 2 4 } - человек вторгся в канал 2 и тоже с возвратом.

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

Образы, содержащие четыре события:

{ 1 2 4 3 } - вторжение в оба канала слева и возврат;
{ 2 1 3 4 } - вторжение в оба канала справа и возврат;

{ 1 2 3 4 } - проход через оба канала слева направо;
{ 2 1 4 3 } - проход через оба канала справа налево.

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

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

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

Сокращённый абстрактный образ прохождения — результат редукции полного абстрактного образа до всего двух его событий: первого события и последнего.

Ниже приведён перечень всех возможных вариантов сокращённого абстрактного образа.

{ 1 3 } — вторжение слева и возврат (сквозной проход не состоялся);
{ 2 4 } — вторжение справа и возврат (сквозной проход не состоялся);
{ 1 4 } — сквозной проход через оба канала слева направо;
{ 2 3 } — сквозной проход через оба канала справа налево.

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