Система контроля качества воздуха на базе Arduino, ESP8266 и датчика MQ135

Модуль на чипсете ESP8266 (рис. 1) – это простой и недорогой способ добавить в разрабатываемое устройство функцию беспроводной связи через Wi-Fi.
Использование ESP8266 позволяет управлять устройством дистанционно или снимать показания с датчиков через интернет. Возможно подключение гаджета к социальным сетям или реагирования на данные, получаемые через API от веб-сервисов.

esp8266
Рисунок 1 – Внешний вид микроконтроллера ESP8266

Управляющее устройство общается с ESP8266 через UART (Serial-порт) с помощью набора AT-команд. Поэтому работа с модулем тривиальная для любой платы с UART-интерфейсом: возможно использование Arduino, Raspberry Pi, и т.д.

Подробные характеристики микроконтроллера ESP8266 приведены ЗДЕСЬ.
Модуль датчика качества воздуха MQ135 предназначен для определения содержания и количества вредных и опасных газов в воздухе таких как: NH3, NOx, пары алкоголя, бензина, дыма, CO2 и т.д. Модуль построен на основе датчика MQ135. На плате модуля предусмотрен компаратор для определения порогового значения концентрации вредных веществ. Порог срабатывания задается потенциометром. Внешний вид MQ135 представлен на рисунке 2, схема подключения датчика к платформе Arduino Uno приведена на рисунке 3.

Внешний вид MQ135
Рисунок 2 – Внешний вид MQ135

mq135_arduino
Рисунок 3 – Схема подключения датчика MQ135 к платформе Arduino Uno

Характеристики:
– Выходной сигнал TTL уровня;
– Аналоговый выход датчика 0 – 5В. Чем выше концентрация газов, тем выше напряжение на выходе;
– Напряжение питания модуля: 5В постоянного тока;
– Размеры: 32мм X 22мм X 27мм;
– Тип датчика: MQ-135.

Сначала необходимо откалибровать датчик газа MQ135. Существует множество расчетов, участвующих в преобразовании исходного сигнала датчика в значение PPM (parts per million), но в данном случае можно использовать библиотеку для MQ135. С помощью этой библиотеки можно непосредственно получить значение PPM, просто используя две строчки кода:

MQ135 gasSensor = MQ135(A0);
float air_quality = gasSensor.getPPM();

Но перед этим нужно провести калибровку датчика MQ135, для калибровки датчика необходимо загрузить указанный ниже код и дать ему поработать в течение 12-24 часов, а затем получить значение RZERO.


#include "MQ135.h"
void setup (){
Serial.begin (9600);
}
void loop() {
MQ135 gasSensor = MQ135(A0); // Attach sensor to pin A0
float rzero = gasSensor.getRZero();
Serial.println (rzero);
delay(1000);
}

После получения значения RZERO его необходимо внести в библиотеку “MQ135.h” для завершения калибровки датчика.
Теперь можно начать фактическое программирования проекта контроля качества воздуха. В коде, прежде всего, определены библиотеки и переменные датчика газа и ЖК-дисплея. Используя библиотеку Software Serial Library, можно сделать любой цифровой контакт контактами TX и RX. В данном случае контакт 9 Arduino Uno использован как RX-контакт и контакт 10 как TX-контакт для ESP8266. Затем нужно включить библиотеку для ЖК-дисплея и определить контакты для него. Также объявлено две переменных: одна для аналогового контакта датчика и для хранения значения air_quality. Код приведен ниже:


#include
#define DEBUG true
SoftwareSerial esp8266(9,10);
#include LiquidCrystal lcd(12,11, 5, 4, 3, 2);
const int sensorPin= 0;
int air_quality;

Контакт 8 объявлено как выходной, к нему подсоединяется зуммер. Команда lcd.begin (16,2) запускает ЖК-дисплей для получения данных, а затем курсор устанавливается на первую строчку и выводится надпись “circuitdigest”. После чего курсор переходит на вторую строчку и выводится сообщение «Sensor Warming».


pinMode(8, OUTPUT);
lcd.begin(16,2);
lcd.setCursor (0,0);
lcd.print ("circuitdigest ");
lcd.setCursor (0,1);
lcd.print ("Sensor Warming ");
delay(1000);

Следующим шагом является установление скорости передачи данных для последовательной связи. Различные ESP имеют разные скорости передачи, поэтому настройка осуществляется в соответствии со скоростью передачи конкретного микроконтроллера ESP. Далее необходимо послать команды для установки ESP связи с Arduino и отображение IP-адреса на последовательном мониторе:


Serial.begin(115200);
esp8266.begin(115200);
sendData("AT+RST\r\n",2000,DEBUG);
sendData("AT+CWMODE=2\r\n",1000,DEBUG);
sendData("AT+CIFSR\r\n",1000,DEBUG);
sendData("AT+CIPMUair_quality=1\r\n",1000,DEBUG);
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG);
pinMode(sensorPin, INPUT);
lcd.clear();

Для отображения результатов на странице в браузере нужно использовать язык разметки HTML. Следовательно, необходимо создать строку с названием веб-страницы и сохранить в ней результат. Необходимо отнимать от исходного результата число 48, так как функция read () возвращает десятичное значение ASCII, поэтому первая десятичная цифра, то есть 0, начинается с 48:


if(esp8266.available())
{
if(esp8266.find("+IPD,"))
{
delay(1000);
int connectionId = esp8266.read()-48;
String webpage = "< h1>Air Pollution Control System";
webpage += "< p>< h2>";
webpage+= " Air Quality is ";
webpage+= air_quality;
webpage+=" PPM";
webpage += "< p>";

Следующий код вызывает функцию sendData, и отправляет данные и строки сообщений на веб-страницу для отображения:


sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);

cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

Приведенный ниже код выводит данные на ЖК-дисплей. Использованы различные условия для проверки качества воздуха, ЖК-дисплей выводит сообщение в соответствии с условиями, а зуммер срабатывает, если загрязнение превысит 1000 PPM:


lcd.setCursor (0, 0);
lcd.print ("Air Quality is ");
lcd.print (air_quality);
lcd.print (" PPM ");
lcd.setCursor (0,1);
if (air_quality< =1000) { lcd.print("Fresh Air"); digitalWrite(8, LOW);

Наконец, функция представлена ниже направит и покажет данные на веб-странице. Данные, которые хранятся в строке с названием "webpage", будут сохранены в строке под названием "command". После этого ESP будет читать символы один за другим с "command" и отображать их на веб-странице:


String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.print(response);
}
return response;
}

ПОЛНЫЙ КОД ПРОГРАММЫ ЗДЕСЬ!!!

Датчик MQ135 может выявлять NH3, NOx, алкоголь, бензин, дым, CO2 и некоторые другие газы, поэтому он удовлетворяет требования к системе контроля качества воздуха. После подключения его к Arduino получим уровень загрязнения в PPM. Датчик газа MQ135 дает выход посредством уровней напряжения, которые превращаются в PPM. После калибровки датчик давал значение 90, когда поблизости не было газа. Безопасный уровень качества воздуха составил 350 PPM, он не должен превышать 1000 PPM. Когда значение превышает предел в 1000 PPM, такая концентрация начинает вызывать головные боли, сонливость и чувство застоявшегося, «старого», душного воздуха, а если она превышает 2000 PPM, это может привести к усилению пульса и многих других недугов.
Когда значение будет меньше 1000 PPM, на ЖК-дисплее и веб-странице появится сообщение “Fresh Air” (“Свежий Воздух”). Каждый раз, когда значение превысит 1000 PPM, будет активирован звуковой сигнал, а на ЖК-дисплее и веб-странице появится сообщение “Poor Air, Open Windows” (“Низкое качество воздуха, Откройте окно”). Если уровень превысит 2000, то зуммер будет продолжать сигнализировать, а ЖК-дисплей и веб-страница отобразят “Danger! Move to fresh Air» (“Опасность! Перейдите на свежий воздух”) (таблица 1).

air_control_meaning_table

Полная схема подключения аппаратного обеспечения программно-аппаратной системы контроля качества воздуха, включая платформу Arduino Uno, микроконтроллер ESP8266, зуммер, жидкокристаллический дисплей и электронные компоненты приведена на рисунке 4.

Iot-air-quality-monitoring-system-using-arduino-circuit
Рисунок 4 – Полная схема подключения аппаратного обеспечения для системы контроля качества воздуха

Прежде чем загружать код, необходимо убедиться, что доступное подключение устройства ESP8266 к Wi-Fi сети. После загрузки нужно открыть последовательный монитор, проверить IP-адрес:

После введения данного IP-адреса в браузере, появится веб-страница с показаниями датчика-газоанализатора. Для получения текущего значения концентрации углекислого газа в воздухе (PPM), необходимо просто обновить страницу:

Реализованная программно-аппаратная система контроля качества воздуха:

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.