Двухлучевой инфракрасный счётчик предназначен для счёта входящих в помещение и выходящих из него людей. Вычтя вышедших из вошедших, он может определить, сколько человек находится в помещении в текущий момент. Мне было интересно самостоятельно создать такой электронный прибор, изначально зная об его устройстве лишь то, что у него два инфракрасных луча, которые идущий человек пересекает своим телом, Ну и, конечно, то, что тут не обойтись без микроконтроллера. Словом, 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 } — сквозной проход через оба канала справа налево.
Итак, можно резюмировать: для определения направления, в котором прошёл человек, счётчику достаточно определить, к какому из четырёх типов относится только что порождённый проходом человека сокращённый абстрактный образ.
