Спойлер: дешевый pir датчик работает в узком диапазоне температур и влажности. Это надо учитывать, к примеру использовать данные iot метеостанции. Если меньше 5 градусов то игнорировать. Представим участок — лес, дача, периметр базы. Вокруг него расставлены PIR-датчики движения: на деревьях, в кустах, на столбах. Всего около 100 штук. Каждый датчик автономный: питание от батареи, корпус влагозащищённый (IP65+), работает от года и дольше.
Все датчики объединены в сеть по Zigbee. При срабатывании — отправляют сигнал на центральный шлюз (например, Raspberry Pi с Zigbee-координатором). Шлюз публикует событие в MQTT-брокер, а PHP-скрипт записывает это в базу данных.
На веб-странице отображается сетка из 100 точек — по одной на каждый датчик. По умолчанию все точки зелёные (ожидание). Как только датчик сработал — его точка становится красной. Если датчик срабатывает часто или держит сигнал долго (например, человек стоит рядом), точка превращается в полупрозрачный большой круг — это визуальный индикатор «зоны интереса».
Главная фишка — анализ последовательности срабатываний. Если сначала сработал датчик №23, потом №24, потом №34 — система может предположить, что объект движется по определённой траектории. Это уже не просто «кто-то есть», а «кто-то идёт с юга на север и остановился у ворот».
zigbee/perimeter/sensor_042/motion → ON
Таблица в 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 );
Пример: вывод 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>
PHP-скрипт может:
Пример псевдокода:
$events = SELECT id, x, y, last_trigger FROM sensors WHERE last_trigger > NOW() - INTERVAL 30 SECOND ORDER BY last_trigger; if (count($events) >= 3) { // Проверить, образуют ли точки линию // Отправить уведомление: "Объект движется от юго-запада к северо-востоку" }
Из дешевых комплектующих это не только круто, но еще и тупо ))) можно заглушить обычной глушилкой за сто баксов.
Если вы хотите охватить не просто дачный участок, а целую территорию — лесную опушку, поле, берег реки или периметр в радиусе 500 м – 1 км, — стандартные технологии вроде Wi-Fi или Zigbee быстро исчерпывают себя. Wi-Fi не дотягивается, а Zigbee требует плотной сетки ретрансляторов с питанием от сети, что нереально в дикой природе.
Здесь на помощь приходит LoRa в приватной сети на частоте 433 МГц. Почему именно она?
Важно: речь идёт именно о приватной LoRa-сети, а не о LoRaWAN. LoRaWAN вводит задержки, ограничения на частоту передачи и не подходит для анализа последовательности событий. А вот «голый» LoRa (через библиотеки вроде LoRa.h
для ESP32 или Arduino) позволяет отправлять пакеты мгновенно и без посредников.
Для покрытия сложного рельефа (например, холмистой местности или густого леса с «мёртвыми зонами») можно установить два шлюза — с разных сторон участка. Оба будут писать данные в одну базу, а веб-интерфейс объединит их в единую карту событий.
Таким образом, LoRa — не просто «можно использовать», а наиболее практичное и масштабируемое решение для распределённой системы наблюдения за протяжёнными территориями на базе пассивных инфракрасных датчиков.
Записано для памяти. Возможно, когда-нибудь займусь.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!