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