Умная система мониторинга качества воздуха и заполненности мусорных баков
Компоненты и материалы
| Raspberry Pi 3 Model B | 1 |
| Arduino UNO | 1 |
| NodeMCU ESP8266 Breakout Board | 1 |
| Датчик температуры и влажности DHT11 (4 пина) | 1 |
| Газовый датчик Seeed Grove MQ2 | 1 |
| Датчик CO MQ-7 | 1 |
| Ультразвуковой датчик HC-SR04 | 1 |
| Блок питания Raspberry Pi | 1 |
| HDMI-кабель | 1 |
| USB-A to B кабель | 1 |
| Перемычки | 1 |
| Батарея 5V | 1 |
Приложения и онлайн-сервисы
- IOTA Tangle
- Node.js
- Raspberry Pi Raspbian
- Arduino IDE
- MQTT
О проекте
1. Введение
Автоматизация зданий — это централизованное управление отоплением, вентиляцией, кондиционированием, освещением и другими системами через систему управления зданием (BAS). Цели: комфорт жильцов, энергоэффективность, снижение затрат, продление срока службы систем.

IOTA — технология распределённого реестра с открытым исходным кодом для безопасного обмена данными и ценностями в IoT. Вместо блокчейна используется архитектура Tangle на основе направленного ациклического графа (DAG). Преимущества: отсутствие комиссий, низкая задержка, масштабируемость. В 2019 году ожидалось массовое внедрение.

Характеристики Raspberry Pi 3 B:
- CPU: 4-ядерный 64-битный ARM Cortex A53 @ 1.2 ГГц
- GPU: VideoCore IV @ 400 МГц
- RAM: 1 ГБ LPDDR2-900 SDRAM
- USB: 4 порта
- Видео: HDMI, композитный (3.5 мм)
- Сеть: Ethernet 10/100, WiFi 802.11n
Особенности Arduino UNO:
- MCU: ATmega328
- Напряжение: 5В (вход 7-12В рекомендуемое)
- Цифровые I/O: 14 (6 PWM)
- Аналоговые входы: 6
- Ток на пин: 40 мА
NodeMCU ESP8266:
- Программируемый WiFi-модуль
- Arduino-подобный аппаратный I/O
- Программируется в Arduino IDE
- USB-TTL встроен
- 10 GPIO, PWM, I2C, SPI, 1-Wire, ADC
Проект разбит на главы:
- Введение
- Установка ПО
- Мониторинг качества воздуха v1
- Мониторинг качества воздуха v2
- Мониторинг мусорных баков
- Заключение
2. Установка программного обеспечения
a) Установка Raspbian на Raspberry Pi 3 B через NOOBS: raspberrypi.org
b) Установка Node.js:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
c) Библиотека BCM2835 для работы с DHT11:
wget https://www.airspayce.com/mikem/bcm2835/bcm2835-1.56.tar.gz
tar zxvf bcm2835-1.56.tar.gz
cd bcm2835-1.56
./configure && make && sudo make check && sudo make install
d) Проект indoor-air-quality-iota:
cd ~
git clone https://github.com/guillengap/indoor-air-quality-and-garbage-monitoring-system.git
cd indoor-air-quality-and-garbage-monitoring-system
npm install
e) Установка serialport: npm install serialport
f) Arduino IDE: arduino.cc
3. Мониторинг качества воздуха v1
Данные DHT11 публикуются в Tangle через MAM (Masked Authenticated Messaging).
Файлы проекта:
- sensor.js — чтение и вывод температуры/влажности.
- mam_sensor.js — публикация данных в IOTA Tangle через MAM.
- mam_receive.js — извлечение и отображение данных из Tangle.
Полный узел и ключ заданы в коде. Остановка скрипта: CTRL+Z.
Подключение:

Запуск:
node sensor.js # проверка датчика
node mam_sensor.js # отправка в Tangle
Используемый узел: https://potato.iotasalad.org:14265. Список узлов: iotasalad.org/nodes.
Отправляемые данные: Город: MEXICO, Здание: 65, Время (UTC), Температура (°C/°F), Влажность (%).
Получение данных: node mam_receive.js <your_root>
4. Мониторинг качества воздуха v2
Данные DHT11, MQ-2 (LPG), MQ-7 (CO) публикуются в Tangle через MAM.
Файлы:
- sensorArduino.ino — опрос трёх датчиков.
- listportsArduino.ino — определение порта Arduino.
- sensorArduino.js — чтение и вывод данных.
- mam_sensorArduino.js — публикация в Tangle.
- mam_receiveArduino.js — чтение из Tangle.
Библиотеки датчиков (DHT11, MQ-2, MQ-7) устанавливаются в Arduino IDE. Скетч загружается в Arduino, порт выбирается (например, /dev/ttyACM0).
node listportsArduino.js # проверка порта
node mam_sensorArduino.js # отправка в Tangle
Данные: Город: NY, Здание: 13, Время (UTC), LPG (ppm), CO (ppm), Температура (°C), Влажность (%).
Чтение: node mam_receiveArduino.js <your_root>
5. Система мониторинга мусорных баков
Данные ультразвукового датчика SRF05 (HC-SR04) с NodeMCU отправляются через MQTT на Raspberry Pi, затем в IOTA Tangle via MAM.
Файлы:
- trashcan.ino — расчёт заполненности бака (%), отправка по MQTT.
- nodemcu_mqtt_mam.js — публикация в Tangle.
- nodemcu_mam_receive.js — чтение из Tangle.
Настройка NodeMCU:
- Добавить URL менеджера плат:
https://arduino.esp8266.com/stable/package_esp8266com_index.json - Установить пакет esp8266 через Boards Manager.
- Библиотека PubSubClient для MQTT (Nick O'Leary).
Установка Mosquitto (MQTT брокер) на Raspberry Pi:
cd ~
wget https://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
wget https://repo.mosquitto.org/debian/mosquitto-stretch.list
# Зависимости
wget https://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u11_armhf.deb
sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u11_armhf.deb
wget https://ftp.nz.debian.org/debian/pool/main/libw/libwebsockets/libwebsockets3_1.2.2-1_armhf.deb
sudo dpkg -i libwebsockets3_1.2.2-1_armhf.deb
sudo apt-get install mosquitto mosquitto-clients
# При проблемах: npm install mqtt --save
sudo reboot
mosquitto -v
# Управление: sudo /etc/init.d/mosquitto start/stop
ifconfig # узнать IP Raspberry Pi
Настройка trashcan.ino:
- Плата: NodeMCU 1.0
- Serial.begin(115200)
- WiFi SSID/пароль
- MQTT сервер = IP Raspberry Pi
- Длина бака (см), например 25
node nodemcu_mqtt_mam.js # отправка в Tangle
Данные: Город: BERLIN, Здание: 7, Время (UTC), Заполненность (%). Узел: https://durian.iotasalad.org:14265.
Чтение: node mam_receiveArduino.js <your_root>
6. Заключение
v1: Успешный мониторинг температуры/влажности в здании (Мехико). Базовый тест с DHT11, Raspberry Pi 3B, JS, IOTA.
v2: Добавлены датчики MQ-2 (пропан) и MQ-7 (CO). Симуляция в Нью-Йорке. Arduino UNO + Raspberry Pi, передача через MAM. Подходит для умных зданий и промышленности с углеводородными газами.
Мусорные баки: Контроль заполненности в Берлине. Ультразвуковой датчик на NodeMCU, MQTT, IOTA. Позволяет знать процент заполнения и время последней очистки, предотвращая запахи разложения.
Код
Основные файлы: sensor.js, mam_sensor.js, mam_receive.js, mam_sensorArduino.js, mam_receiveArduino.js (приведены в исходнике).
Схемы
Схемы подключения для всех трёх версий проекта.
Производственный процесс
- Сборка станции качества воздуха и погоды на Raspberry Pi с InfluxDB и Grafana
- Эффективный мониторинг температуры серверных с Raspberry Pi и Nagios
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Домашний энергетический центр: мониторинг солнечных панелей, тепловых коллекторов и температуры комнат на Ra…
- Построение DIY инфракрасного датчика движения для Raspberry Pi — пошаговое руководство
- Raspberry Pi: логирование фоторезистора и система оповещений — низкопотребительный световой датчик на Python
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Датчик занятости ванной комнаты на Raspberry Pi с голосовыми и SMS-уведомлениями через Twilio
- Мастерство управления датчиками и исполнительными механизмами на Raspberry Pi: акселерометр, сервопривод и потоко…
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности