Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

Компоненты и материалы

Itead Gboard Pro 800 SIM800 GSM/GPRS (ATmega2560)×1
Arduino UNO×1
DHT11 (температура и влажность, 3 пина)×2
Перемычки×1

Приложения и сервисы

Arduino IDE

О проекте

Процесс обнаружения лесного пожара начинается на любом из узлов, установленных на деревьях. Лес покрыт сетью узлов на подходящих расстояниях, они общаются через RF-модули и Arduino. Если любой атмосферный параметр (повышение температуры, задымление и т.д.) превышает порог у узла-источника, информация передается к ближайшему промежуточному узлу, пока не достигнет главной терминальной станции. Главная станция использует GSM-модем для отправки SMS в центр мониторинга.

Передающая часть физической модели

Модуль обнаружения работает в трех стадиях:

  1. Сбор данных: считывание внешних параметров — температура, дым. Датчики преобразуют аналоговые данные в цифровые: температура, влажность, качество воздуха. Информация передается к следующему узлу.
  2. Ретрансляция: процесс продолжается до достижения финального узла/главной терминальной станции.
  3. Уведомление: передача информации в центр мониторинга лесных пожаров.

Каждый узел имеет: датчик температуры/влажности, датчик дыма, микроконтроллер (Arduino). Датчики взаимодействуют с Arduino, сохраняют данные для сравнения. Есть заданные пороговые значения. Микропроцессор периодически сравнивает показания с порогами. Если значения превышают порог — узел передает информацию следующему ближайшему узлу, тот — следующему и так далее. Таким образом регулируется поток сообщений.

Физическая модель аппарата

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

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

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

Чтение в Serial Monitor

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

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

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

Код

Код для приемной и передающей сторон (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();
}

Схемы

Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями

Производственный процесс

  1. Точный мониторинг температуры в серверной на Raspberry Pi
  2. Создание быстрой надежной системы обнаружения пожара с Samsung SAMI, Arduino UNO и Raspberry Pi
  3. Умная система мониторинга отеля и дома с облачными автоматизированными управлениями
  4. Надежная система учета рабочего времени на Arduino с RFID и Python
  5. Робот для поиска людей на базе Arduino Uno: пошаговая интеграция датчиков
  6. Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
  7. Умная копилка: управление монетоприёмником на Arduino Nano
  8. SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
  9. Автоматическая система полива растений на Arduino — уходи в отпуск спокойно
  10. Передовая IoT-система с ИИ для ультра-раннего обнаружения лесных пожаров и мониторинга здоровья деревьев