Двухнаправленный счётчик посетителей на Arduino с IR-датчиками

В этом проекте мы соберём двухнаправленный счётчик посетителей на базе Arduino и двух инфракрасных датчиков. Система определяет направление движения — вход или выход — и показывает количество людей, которые вошли, вышли и находятся внутри, на LCD-дисплее. Это отличный проект для начинающих в области автоматизации, мониторинга и управления доступом.

Счётчик посетителей на IR-датчиках

Где и зачем используется

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

Что понадобится для проекта

  • Плата Arduino (Uno, Nano и аналоги)
  • 2 инфракрасных (IR) датчика
  • 16×2 LCD с интерфейсом I²C
  • Макетная плата и соединительные провода
  • Источник питания для Arduino
Счётчик посетителей на IR-датчиках

Назначение пинов

Компонент Пин Arduino Назначение
IR-датчик 1 (вход) D2 Детекция объекта при входе
IR-датчик 2 (выход) D3 Детекция объекта при выходе
LCD SDA A4 I²C SDA
LCD SCL A5 I²C SCL
Питание 5V Питание Arduino и LCD
Общий провод GND Общая земля

Принцип работы

  1. Arduino следит за сигналами двух IR-датчиков, установленных на входе и выходе.
  2. Если датчик входа детектирует объект первым, система считает, что кто-то вошёл.
  3. Если датчик выхода детектирует сначала, то считаем выходом.
  4. Текущий счёт, количество входов и выходов обновляются и выводятся на LCD.
  5. Антидребезг и небольшая задержка предотвращают ложные срабатывания.

Пример скетча Arduino

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const byte irPin1 = 2;
const byte irPin2 = 3;

int in_count = 0;
int out_count = 0;

const unsigned long timeout = 600; // мс

byte state = 0; 
unsigned long timer = 0;

void setup() {
  lcd.init();
  lcd.backlight();

  pinMode(irPin1, INPUT_PULLUP);
  pinMode(irPin2, INPUT_PULLUP);

  updateDisplay();
}

void loop() {
  switch (state) {

    case 0: // ожидание
      if (digitalRead(irPin1) == LOW) {
        state = 1;
        timer = millis();
      }
      else if (digitalRead(irPin2) == LOW) {
        state = 2;
        timer = millis();
      }
      break;

    case 1: // IR1 первый → вход
      if (digitalRead(irPin2) == LOW) {
        in_count++;
        updateDisplay();
        state = 3;
      }
      else if (millis() - timer > timeout) {
        state = 0;
      }
      break;

    case 2: // IR2 первый → выход
      if (digitalRead(irPin1) == LOW) {
        if (out_count < in_count) out_count++;
        updateDisplay();
        state = 3;
      }
      else if (millis() - timer > timeout) {
        state = 0;
      }
      break;

    case 3: // ожидание освобождения датчиков
      if (digitalRead(irPin1) == HIGH && digitalRead(irPin2) == HIGH) {
        state = 0;
      }
      break;
  }
}

void updateDisplay() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("IN: ");
  lcd.print(in_count);
  lcd.print(" OUT: ");
  lcd.print(out_count);

  lcd.setCursor(0, 1);
  lcd.print("Current: ");
  lcd.print(in_count - out_count);
}

Этот скетч отслеживает последовательность срабатываний IR-датчиков: сначала вход → увеличение счёта, сначала выход → уменьшение. Значения обновляются на LCD прямо в реальном времени.

FAQ — Двухнаправленный счётчик посетителей

Почему используются две IR-датчика?

Две точки обнаружения позволяют определить движение в одну или другую сторону.

Как защититься от ложных срабатываний?

Используй антидребезг (задержку после срабатывания) и убедись, что датчики расположены прямо и не пересекают внешние источники IR-света.

Можно ли использовать другие датчики?

Да. Любые цифровые датчики движения (PIR, лазерные фоторефлекторы) также подойдут при корректной логике.

Что означает timeout в коде?

Это максимальный интервал, в течение которого второй датчик должен сработать после первого, чтобы считать движение валидным.

LCD требуется I2C-адаптер?

Рекомендуется I2C дисплей, так как он упрощает подключение (SDA/SCL), но можно использовать и параллельный LCD с другими пинами.

Заключение

Двухнаправленный счётчик — простой и полезный проект, который учит основам работы с IR-датчиками, логике движения и отображению данных на LCD. Он может быть основой для систем контроля доступа и умного мониторинга потока людей.