Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями
Компоненты и материалы
| Itead Gboard Pro 800 SIM800 GSM/GPRS (ATmega2560) | × | 1 |
| Arduino UNO | × | 1 |
| DHT11 (температура и влажность, 3 пина) | × | 2 |
| Перемычки | × | 1 |
Приложения и сервисы
| Arduino IDE |
О проекте
Процесс обнаружения лесного пожара начинается на любом из узлов, установленных на деревьях. Лес покрыт сетью узлов на подходящих расстояниях, они общаются через RF-модули и Arduino. Если любой атмосферный параметр (повышение температуры, задымление и т.д.) превышает порог у узла-источника, информация передается к ближайшему промежуточному узлу, пока не достигнет главной терминальной станции. Главная станция использует GSM-модем для отправки SMS в центр мониторинга.
Передающая часть физической модели
Модуль обнаружения работает в трех стадиях:
- Сбор данных: считывание внешних параметров — температура, дым. Датчики преобразуют аналоговые данные в цифровые: температура, влажность, качество воздуха. Информация передается к следующему узлу.
- Ретрансляция: процесс продолжается до достижения финального узла/главной терминальной станции.
- Уведомление: передача информации в центр мониторинга лесных пожаров.
Каждый узел имеет: датчик температуры/влажности, датчик дыма, микроконтроллер (Arduino). Датчики взаимодействуют с Arduino, сохраняют данные для сравнения. Есть заданные пороговые значения. Микропроцессор периодически сравнивает показания с порогами. Если значения превышают порог — узел передает информацию следующему ближайшему узлу, тот — следующему и так далее. Таким образом регулируется поток сообщений.
Физическая модель аппарата

Передающая часть (схема)

Чтение в Serial Monitor

Сообщения, полученные GSM-модулем

Код
Код для приемной и передающей сторон (Python-стиль для Arduino)
Код настраивает приемную сторону Arduino для мониторинга температуры и влажности. При превышении порога отправляется SMS на базовую станцию. При повышении значений на передающей стороне — передача через RF-передатчик на передающем Arduino Uno к RF-приемнику на приемном Arduino Uno.
ВНИМАНИЕ: код ниже состоит из двух частей — для «Receiver side arduino» и «Transmitter side arduino».
########( PART-1 )###### Receiver Side Arduino CODE ##########################
// Include RadioHead Amplitude Shift Keying Library
#include <SoftwareSerial.h>
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
#include <DHT.h>
SoftwareSerial mySerial(4, 3); // RX, TX для GSM
// Константы
#define DHTPIN 2
#define DHTTYPE DHT11
int smokeA0 = A5;
int sensorThres = 400;
// Переменные
DHT dht(DHTPIN, DHTTYPE);
float hum, temp;
String str_humid, str_temp, str_smk, str_out;
RH_ASK rf_driver;
void setup() {
pinMode(smokeA0, INPUT);
dht.begin();
rf_driver.init();
Serial.begin(9600);
mySerial.begin(115200);
}
void loop() {
delay(2000);
hum = dht.readHumidity();
temp = dht.readTemperature();
Serial.print("Reciever Humidity = "); Serial.println(hum);
Serial.print("Reciever Temperature = "); Serial.println(temp);
int analogSensor = analogRead(smokeA0);
String smk;
if (analogSensor > sensorThres) {
Serial.println("Smoke at Reciever");
smk = "Smoke";
} else {
Serial.println("Clean at Reciever");
smk = "Clean";
}
// Прием RF-пакета
uint8_t buf[20];
uint8_t buflen = sizeof(buf);
if (rf_driver.recv(buf, &buflen)) {
str_out = String((char*)buf);
for (int i = 0; i < str_out.length(); i++) {
if (str_out.substring(i, i+1) == ",") {
str_humid = str_out.substring(0, i);
str_temp = str_out.substring(i+1, i+6);
str_smk = str_out.substring(i+7, i+12);
break;
}
}
}
Serial.print("Humidity: "); Serial.print(str_humid);
Serial.print(" - Temperature: "); Serial.println(str_temp);
Serial.print(" - Air Quality: "); Serial.println(str_smk);
// Проверка пожара на приемнике
if (hum >= 60 && temp >= 25) {
Serial.println("Fire Detected at Reciever");
sendSMS("FIRE ALERT !!\nFire at Reciever Node\nTemperature: " + String(temp) +
"\nHumidity: " + String(hum) + "\nAir Quality: " + smk);
}
// Проверка пожара на передатчике
if (str_humid.toInt() >= 60 && str_temp.toInt() >= 25) {
Serial.println("Fire Detected at Transmitter");
sendSMS("FIRE ALERT !!\nFire at Transmitter Node\nTemperature: " + str_temp +
"\nHumidity: " + str_humid + "\nAir Quality: " + String(str_smk));
}
}
void sendSMS(String message) {
mySerial.println("AT+CMGF=1"); delay(1000);
mySerial.println("AT+CMGS=\"+918744984131\"\r"); delay(1000); // Замените номер
mySerial.println(message); delay(100);
mySerial.println((char)26); // CTRL+Z
delay(1000);
}
#######( PART-2 )############ Transmitter Side Arduino Code ############
#include <RH_ASK.h>
#include <SPI.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int smokeA0 = A5;
int sensorThres = 400;
float hum, temp, smk;
String str_humid, str_temp, str_smk, str_out;
RH_ASK rf_driver;
void setup() {
dht.begin();
pinMode(smokeA0, INPUT);
rf_driver.init();
}
void loop() {
delay(2000);
hum = dht.readHumidity();
temp = dht.readTemperature();
str_humid = String(hum);
str_temp = String(temp);
Serial.print(hum); Serial.print(temp);
int analogSensor = analogRead(smokeA0);
if (analogSensor > sensorThres) str_smk = "1";
else str_smk = "0";
if (str_smk == "1") str_out = str_humid + "," + str_temp + "," + "Smoke";
if (str_smk == "0") str_out = str_humid + "," + str_temp + "," + "Clean";
const char *msg = str_out.c_str();
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
}
Схемы
Производственный процесс
- Точный мониторинг температуры в серверной на Raspberry Pi
- Создание быстрой надежной системы обнаружения пожара с Samsung SAMI, Arduino UNO и Raspberry Pi
- Умная система мониторинга отеля и дома с облачными автоматизированными управлениями
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Умная копилка: управление монетоприёмником на Arduino Nano
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Автоматическая система полива растений на Arduino — уходи в отпуск спокойно
- Передовая IoT-система с ИИ для ультра-раннего обнаружения лесных пожаров и мониторинга здоровья деревьев