↩️ На главную

Распределённая охранная сеть из 100 PIR-датчиков по Zigbee

21.10.2025 | Статья из категории: Безопасность

Интеллектуальная система безопасности периметра на основе pir датчиков с аналитикой

Спойлер: дешевый pir датчик работает в узком диапазоне температур и влажности. Это надо учитывать, к примеру использовать данные iot метеостанции. Если меньше 5 градусов то игнорировать. Представим участок — лес, дача, периметр базы. Вокруг него расставлены PIR-датчики движения: на деревьях, в кустах, на столбах. Всего около 100 штук. Каждый датчик автономный: питание от батареи, корпус влагозащищённый (IP65+), работает от года и дольше.

Все датчики объединены в сеть по Zigbee. При срабатывании — отправляют сигнал на центральный шлюз (например, Raspberry Pi с Zigbee-координатором). Шлюз публикует событие в MQTT-брокер, а PHP-скрипт записывает это в базу данных.

На веб-странице отображается сетка из 100 точек — по одной на каждый датчик. По умолчанию все точки зелёные (ожидание). Как только датчик сработал — его точка становится красной. Если датчик срабатывает часто или держит сигнал долго (например, человек стоит рядом), точка превращается в полупрозрачный большой круг — это визуальный индикатор «зоны интереса».

Главная фишка — анализ последовательности срабатываний. Если сначала сработал датчик №23, потом №24, потом №34 — система может предположить, что объект движется по определённой траектории. Это уже не просто «кто-то есть», а «кто-то идёт с юга на север и остановился у ворот».

Как это реализовать

1. Аппаратная часть

  • PIR-датчик (например, HC-SR501 или более надёжный AM312)
  • Zigbee-модуль (CC2530, E18-MS1PA1-PCB, или готовый Sonoff Zigbee PIR)
  • Батарейный блок (2xAA или Li-SOCl₂ для долгой работы)
  • Влагозащитный корпус

2. Сеть и шлюз

  • Zigbee-координатор на Raspberry Pi (через USB-ключ с CC2652)
  • Mosquitto MQTT-брокер
  • Zigbee2MQTT — для перевода событий в MQTT-топики вида:
    zigbee/perimeter/sensor_042/motion → ON

3. База данных

Таблица в MySQL:

CREATE TABLE sensors (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  x INT,  -- координата для отображения
  y INT,
  last_trigger DATETIME,
  trigger_count INT DEFAULT 0,
  active_duration_sec INT DEFAULT 0
);

4. PHP-скрипт для визуализации

Пример: вывод 100 точек в виде сетки 10×10.

<?php
$pdo = new PDO("mysql:host=localhost;dbname=perimeter", $user, $pass);
$stmt = $pdo->  query("SELECT id, last_trigger, trigger_count FROM sensors ORDER BY id");
$sensors = $stmt->  fetchAll(PDO::FETCH_ASSOC);

// Определяем, активен ли датчик
function isActive($last, $count) {
  if (!$last) return ['active' =>   false, 'long' =>   false];
  $age = (time() - strtotime($last));
  $active = $age < 10; // активен, если сработал менее 10 сек назад
  $long = $count >   3;  // "долгий" сигнал — если сработал больше 3 раз за период
  return ['active' =>   $active, 'long' =>   $long];
}
?>  

<div style="display: grid; grid-template-columns: repeat(10, 20px); gap: 4px; width: 240px;">  
<?php foreach ($sensors as $s): 
  $state = isActive($s['last_trigger'], $s['trigger_count']);
  $style = "width:20px; height:20px; border-radius:50%; ";
  if ($state['long']) {
    $style .= "background: rgba(255,0,0,0.4); box-shadow: 0 0 10px red;";
  } elseif ($state['active']) {
    $style .= "background: red;";
  } else {
    $style .= "background: green;";
  }
?>  
  <div title="Sensor <?= $s['id'] ?>  " style="<?= $style ?>  ">  </div>  
<?php endforeach; ?>  
</div>  

5. Анализ траектории (идея для будущего)

PHP-скрипт может:

  • Выбирать все срабатывания за последние 30 секунд
  • Сортировать по времени
  • Строить вектор движения
  • Определять: «вторжение», «обход по периметру», «остановка»

Пример псевдокода:

$events = SELECT id, x, y, last_trigger FROM sensors 
          WHERE last_trigger > NOW() - INTERVAL 30 SECOND 
          ORDER BY last_trigger;

if (count($events) >= 3) {
  // Проверить, образуют ли точки линию
  // Отправить уведомление: "Объект движется от юго-запада к северо-востоку"
}

Почему это круто

  • Полная автономность датчиков
  • Нет зависимости от Wi-Fi на периметре
  • Масштабируемо: 10, 100 или 500 датчиков
  • Все данные — у вас, на вашем сервере
  • Можно добавить камеру: при движении в зоне Х — включать PTZ-камеру

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

Что можно улучшить позже

  • Добавить GPS-координаты для каждого датчика (если участок большой и нерегулярный)
  • Использовать E-Ink дисплей на шлюзе для отображения статуса без монитора
  • Сделать мобильное уведомление через Telegram-бота
  • Добавить «режим тревоги»: если сработало >5 датчиков за 10 сек — полная тревога

Как масштабировать систему на 1 км и более?

Если вы хотите охватить не просто дачный участок, а целую территорию — лесную опушку, поле, берег реки или периметр в радиусе 500 м – 1 км, — стандартные технологии вроде Wi-Fi или Zigbee быстро исчерпывают себя. Wi-Fi не дотягивается, а Zigbee требует плотной сетки ретрансляторов с питанием от сети, что нереально в дикой природе.

Здесь на помощь приходит LoRa в приватной сети на частоте 433 МГц. Почему именно она?

  • Дальность: при использовании простой четвертьволновой антенны (17 см провода) и размещении шлюза на высоте (крыша, мачта) вы получаете уверенный приём на 300–800 м даже в лесу, а на открытой местности — до 2–3 км.
  • Простота топологии: все датчики работают по схеме «звезда» — каждый напрямую отправляет данные на один шлюз. Нет сложных маршрутов, сбоев mesh-сети или «потерянных» узлов.
  • Энергоэффективность: PIR-датчик почти не потребляет ток в ожидании, а LoRa-модуль включается на доли секунды при срабатывании. Это даёт срок работы от 6 месяцев до нескольких лет на двух батарейках АА.
  • Надёжность в условиях природы: 433 МГц лучше проникает через листву, кусты и дождь, чем 868 МГц или 2.4 ГГц (Wi-Fi/Zigbee).

Важно: речь идёт именно о приватной LoRa-сети, а не о LoRaWAN. LoRaWAN вводит задержки, ограничения на частоту передачи и не подходит для анализа последовательности событий. А вот «голый» LoRa (через библиотеки вроде LoRa.h для ESP32 или Arduino) позволяет отправлять пакеты мгновенно и без посредников.

Для покрытия сложного рельефа (например, холмистой местности или густого леса с «мёртвыми зонами») можно установить два шлюза — с разных сторон участка. Оба будут писать данные в одну базу, а веб-интерфейс объединит их в единую карту событий.

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

Записано для памяти. Возможно, когда-нибудь займусь.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA