Меню

Arduino датчики качества воздуха

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

Arduino Arduino Uno

Что такое загрязнение воздуха?

Загрязнение воздуха – это наличие в нем чрезмерного количества нежелательных и вредных твердых и газообразных веществ.

Причины и последствия загрязнения воздуха

В последнее время быстрая урбанизация многих городов мира привела к увеличению уровня загрязнения воздуха. Загрязнение воздуха признано одним из основных факторов, вредных для здоровья человека. Изменение климата является одной из наиболее серьезных проблем, вызванных загрязнением воздуха.

Как контролировать загрязнение воздуха?

Загрязнение воздуха обычно измеряется как индекс качества воздуха (Air Quality Index, AQI) в ppm, который в основном является показателем для оценки содержания таких загрязнителей, как PM 2.5, NO2, O3, CO и т. д. В настоящее время в связи с расширением номенклатуры электронных компонентов и появлением различных новых датчиков разрабатываются многочисленные системы для контроля количества загрязняющих веществ в воздухе. В этой статье я подробно расскажу о системе мониторинга и измерения загрязнения воздуха с помощью Arduino.

Необходимые компоненты:

  • Arduino Uno
  • MQ-135
  • Потенциометр 1 кОм
  • ЖК индикатор 16 × 2
  • Светодиод
  • Излучатель звука
  • Резистор 220 Ом
  • Резистор 1 кОм
  • Беспаечная макетная плата
  • Транзистор BC547 / BC337
  • Соединительные провода

Купить эти компоненты вы можете здесь: https://utsource.net.

Подключение компонентов

Сначала установите ЖКИ на макетную плату, как показано на рисунке.

Подключение ЖКИ к Arduino:

  • D4 – Цифровой вывод 3
  • D5 – Цифровой вывод 4
  • D6 – Цифровой вывод 5
  • D7 – Цифровой вывод 6
  • E – Цифровой вывод 8
  • RS – Цифровой вывод 9

Теперь подключите контакт ЖКИ A к +5V через резистор 220 Ом, а контакт K – к земле. Наконец, подключите VO к средней точке потенциометра, VDD – к +5V, а VSS и RW – к земле. Кроме того, соедините +5V (коричневый провод) и Ground (черный провод) с потенциометром, как показано на рисунке.

Теперь очень просто подключить остальные компоненты. Вывод A0 датчика MQ-135 соедините с входом A3 платы Arduino, VCC подключите к +5V, а GND подключите к земле. Анод светодиода (+) подключите к цифровому выводу 5 Arduino, а катод (-) – к земле через резистор 220 Ом. Затем подключите положительный вывод звукового излучателя к +5V, а отрицательный вывод – к коллектору транзистора. Базу транзистора через резистор 1 кОм соедините c контактом 2 Arduino и в конце подключите эмиттер к земле.

Работа схемы

Arduino Uno – это главное ядро проекта, а для измерения AQI в ppm я использовал датчик качества воздуха MQ-135. Сначала датчик MQ-135 будет измерять количество загрязнителя в воздухе и выводить аналоговый сигнал на вход A3 Arduino. Затем Arduino отправит инструкции на ЖКИ для отображения значения качества воздуха, измеренного MQ-135. Кроме того, пороговое значение, при котором надо предупредить пользователя, я установил в коде равным 250 ppm. Таким образом, если измеренное значение AQI превышает 250 ppm, светодиод будет мигать, а излучатель звука будет издавать сигнал, чтобы предупредить пользователя о плохом качестве воздуха.

Программа

Для программирования платы Arduino Uno от https://utsource.net я использовал Arduino IDE. Сначала надо вставить в код заголовочный файл LiquidCrystal.h:

#include LiquidCrystal.h // Заголовочный файл для ЖКИ

Определение переменных для различных контактов платы Arduino для ЖКИ, излучателя звука и MQ-135. Кроме того, установка порога 250 ppm:

const int rs = 9, en = 8, d4 = 3, d5 = 4, d6 = 5, d7 = 6; // Выводы ЖКИ, подключенные к Arduino.
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Функция управления ЖКИ
int buz = 2; // Излучатель звука подключается к выводу 2
int led = 5; // Светодиод подключается к выводу 5
const int aqsensor = A3; // Выход mq-135 подключается к выводу A3 Arduino
int threshold = 250; // Пороговый уровень качества воздуха

Это процедура будет выполняться один раз. Здесь нам нужно установить излучатель звука, светодиод в качестве устройства вывода и MQ-135 в качестве устройства ввода для Arduino Uno. Также инициализируются последовательный UART и ЖКИ.

<
pinMode(buz, OUTPUT); // Излучатель звука подключен к Arduino как выходное устройство
pinMode(led, OUTPUT); // ЖКИ подключен к Arduino как выходное устройство
pinMode(aqsensor, INPUT); // MQ135 подключен к Arduino как входное устройство
Serial.begin(9600); // Начало последовательного обмена со скоростью 9600 бод
lcd.clear(); // Очистка ЖКИ
lcd.begin(16, 2); // ЖКИ 16,2
>

Это бесконечный цикл, в котором выполняется чтение данных из датчика MQ-135 и отображение их на экране ЖКИ, а также проверяются условия для включения и выключения светодиода и звукового излучателя.

<
int ppm = analogRead(aqsensor); // Считать аналоговые данные с выхода A0MQ135 и сохранить значение в ppm
Serial.print(«Air Quality: «); // Вывод сообщения на последовательный монитор
Serial.println(ppm); // Вывод на последовательный монитор значения ppm
lcd.setCursor(0, 0); // Установить курсор ЖКИ в позицию 1 строки 1
lcd.print(«Air Qualit: «); // Вывод сообщения на ЖКИ
lcd.print(ppm); // Вывод показаний MQ135
if (ppm > threshold) // ppm выше порогового значения, или нет?

<
lcd.setCursor(1, 1); // Переход сюда, если ppm превышает порог
lcd.print(«AQ Level HIGH»);
Serial.println(«AQ Level HIGH»);
tone(led, 1000, 200); // Мигание светодиода: включение на 1000 мс, выключение на 200 мс
digitalWrite(buz, HIGH); // Выключить излучатель звука
>

else
<
digitalWrite(led, LOW); // Переход сюда, если ppm не превышает порога, и выключить светодиод
digitalWrite(buz, LOW); // Выключить излучатель звука
lcd.setCursor(1, 1);
lcd.print(«AQ Level Good»);
Serial.println(«AQ Level Good»);
>

Читайте также:  Замена датчика абс опель астра н 2008

delay(500);
>

Материал предоставлен компанией Utsource

Перевод: AlexAAN по заказу РадиоЛоцман

Источник

Датчик качества воздуха CCS811: инструкция по использованию и примеры

Используйте сенсор CO2 CCS811 для проверки качества воздуха в вашей квартире или офисе.

Подробности про датчики качества воздуха

Окружающий нас воздух в атмосфере состоит из:

Несмотря на то, что в процентном соотношении количества примесей мало, изменение их концентрации может оказаться очень неприятным и даже опасным для человека.

Ранее для оценки качества воздуха TOVC применяли датчики CO2: сначала вычисляли концентрацию углекислого газа CO2, а далее высчитывали TVOC. Но традиционные датчики CO2 нечувствительны на курение, бытовую химию, чистящие средства, лакокрасочные материалы и другую парфюмерию.

Датчик качества воздуха CCS811 высчитывает концентрацию летучих органических веществ (TVOC), а затем только вычисляет эквивалентное значения углекислого газа (eCO2): эквивалентное, т.к. количество углекислого газа (CO2) считается расчётным путём из концентрации летучих органических веществ (TVOC).

Пример работы для Arduino и XOD

В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например Uno.

Схема устройства

Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Arduino Uno. Для коммуникации используйте выходной провод от сенсора совместно с соединительными проводами «папа-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте выходной провод от сенсора.

Код для Arduino IDE

Для упрощения работы с датчиком скачайте и установите библиотеку Adafruit_CCS811, а затем прошейте платформу Arduino скетчем, приведённым ниже.

После загрузки скетча, в Serial-порт будет выводиться количество углекислого газа в ppm и летучих органических веществ в ppb .

Патч для XOD

Пример для Espruino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например Iskra JS.

Схема устройства

Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Iskra JS. Для коммуникации используйте выходной провод от сенсора совместно с соединительными проводами «папа-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте выходной провод от сенсора.

Исходный код

Прошейте платформу Iskra JS скриптом, приведённым ниже. Для считывания данных используется библиотека для Espruino CCS811.

После загрузки скрипта, в консоль будет выводиться количество углекислого газа в ppm и летучих органических веществ в ppb .

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры Raspberry Pi, например Raspberry Pi 4.

Схема устройства

Подключите датчик CO2 к пинам SDA и SCL шины I²C компьютера Raspberry Pi.

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Cap, которая надевается сверху на малину методом бутерброда.

Программная настройка

Исходный код

Запустите на малине скрипт, приведённый ниже.

После загрузки скрипта, в консоль малины будет выводиться количество углекислого газа в ppm и летучих органических веществ в ppb .

Элементы платы

Приоткроем занавес и заглянем на внутренности датчика, а точнее, извлечем плату с элетронными компонентами из корпуса.

Датчик качества воздуха CCS811

Датчик качества воздуха выполнен на чувствительном элементе CCS811. Структурно чип CCS811 состоит из двух основных блоков: датчика MOX (Metal Oxide Semiconductor) и встроенного микроконтроллера с АЦП, который считывает показания внутреннего MOX-сенсора и выдаёт готовые внешнему миру по шине I²C.

Выходные контакты

Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками:

Регулятор напряжения 3V3

Линейный понижающий регулятор напряжения NCP582LSQ33 обеспечивает питание чипа CCS811 и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.

Преобразователь логических уровней

Преобразователь логических уровней PCA9306 необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.

Смена адреса модуля

Иногда в проекте необходимо использовать несколько сенсоров. Для смена адреса капните каплей припоя на отведённую контактную площадку на обратной стороне модуля. После чего адрес датчика сменится с 0x5A на 0x5B .

Источник

Система мониторинга загрязнения воздуха на основе Arduino

В этом проекте мы рассмотрим создание системы мониторинга загрязнения воздуха на основе Arduino, с помощью которой можно будет удаленно (через веб-сервер по интернету) осуществлять контроль состояния воздуха и включать сигнализацию когда качество воздуха падает ниже определенного уровня. Качество воздуха будет оцениваться по наличию в нем CO2, дыма, алкоголя, бензола и NH3. Качество воздуха в нашем проекте будет показываться на ЖК дисплее и передаваться на веб-сервер, что позволит получать информацию о состоянии воздуха в интересующем нас месте из любой точки мира где есть интернет. Данный проект относится к так называемой категории интернета вещей (IoT – Internet of Things).

Ранее на нашем сайте мы уже рассматривали детектор утечки природного газа на основе Arduino на датчике MQ3. Но в этом проекте мы будем использовать датчик MQ135, который является наилучшим выбором для мониторинга качества воздуха поскольку позволяет обнаруживать большинство вредных газов и измерять их количество. Вы можете установить это устройство в любом нужном месте, а сами сможете контролировать измеряемое им качество воздуха из любой точки с помощью компьютера или смартфона. Также можно реализовать информирование о состоянии воздуха с помощью отправки SMS и передачи Email.

Читайте также:  Датчик 205 пассат б6

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Датчик газа MQ135 (купить на AliExpress).
  3. Wi-Fi модуль ESP8266 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Потенциометр 10 кОм (купить на AliExpress).
  6. Резистор 1 кОм (купить на AliExpress).
  7. Резистор 220 Ом (купить на AliExpress).
  8. Зуммер (Buzzer) (купить на AliExpress).
  9. Макетная плата.

Работа схемы

Схема устройства представлена на следующем рисунке.

Сначала необходимо соединить модуль ESP8266 с платой Arduino. Модуль ESP8266 работает от напряжения 3.3V, поэтому если мы подадим на него 5V с платы Arduino, то мы можем повредить его. Поэтому соедините контакты VCC CH_PD модуля ESP8266 с контактом 3.3V платы Arduino. Контакт RX модуля ESP8266 также работает с напряжением 3.3V, поэтому его также нельзя напрямую подключать к плате Arduino. Поэтому мы будем использовать делитель напряжения чтобы преобразовать 5V в 3.3V. На нашей схеме это реализовано при помощи последовательного соединения 3-х резисторов. Соедините контакт TX модуля ESP8266 к контакту 10 платы Arduino, а его контакт RX – к контакту 9 платы Arduino при помощи резисторов.

Wi-Fi модуль ESP8266 обеспечивает вашему проекту доступ к Wi-Fi или интернету. Его можно подключить практически к любому микроконтроллеру. Более подробно о взаимодействии с ним можно прочитать в статье про передачу данных на веб-страницу с помощью Arduino.

Затем подсоедините контакты VCC и землю датчика MQ135 к контактам 5V и земле платы Arduino, а аналоговый контакт датчика – к контакту A0 платы Arduino.

Подсоедините зуммер (buzzer) к контакту 8 платы Arduino – он будет выдавать звуковой сигнал когда загрязнение воздуха превысит определенную норму.

Затем необходимо сделать следующие соединения платы Arduino с ЖК дисплеем:
— pin 1 (VEE) – на землю.
— pin 2 (VDD или VCC) — к 5V.
— pin 3 (V0) – на средний контакт потенциометра 10 кОм, остальные 2 контакта потенциометра – на VCC и землю (GND). Потенциометр используется для управления контрастностью ЖК дисплея. Можно также использовать потенциометр с сопротивлением 10 кОм.
— pin 4 (RS) – к контакту 12 платы Arduino.
— pin 5 (Read/Write) – на землю платы Arduino. Этот контакт ЖК дисплея используется редко, поэтому мы соединим его на землю.
— pin 6 (E) – к контакту 11 платы Arduino. Контакты RS и E – это контакты управления ЖК дисплеем.
— остальные 4 контакта данных используется для передачи данных от платы Arduino. pin 11 (D4) – к контакту 5 Arduino. pin 12 (D5) – к контакту 4 Arduino. pin 13 (D6) – контакту 3 Arduino. pin 14 (D7) – к контакту 2 Arduino.
— pin 15 — к VCC через резистор 220 Ом. Резистор используется для установки яркости черного цвета ЖК дисплея. Большее значение сопротивления сделает черный цвет более темным.
— pin 16 – на землю.

Принцип работы проекта

Датчик MQ135 может обнаруживать газы NH3, NOx, CO2, алкоголь, бензол, дым и некоторые другие. Измеряет он их в PPM (parts per million — частиц на миллион). Поэтому, можно сказать, этот датчик является идеальным решением для нашего проекта контроля загрязнения воздуха. При подсоединении к плате Arduino он будет подавать на вход Arduino напряжение определенного уровня, соответствующее количеству измеренного PPM, а в Arduino это значение напряжения нужно будет конвертировать в PPM. Для работы с датчиком MQ135 мы использовали специальную библиотеку – она будет описана далее в статье.

Датчик будет выдавать значение 90 когда рядом нет никакого газа, безопасный уровень качества воздуха находится на отметке 350 PPM и не должен превышать 1000 PPM. Когда он будет превышать 1000 PPM это может привести к появлению у человека головных болей, сонливости, вялости, чрезмерному утомлению, а если он будет превышать 2000 PPM, то он может вызвать увеличение частоты пульса и множество других заболеваний.

В нашем проекте когда качество воздуха будет меньше 1000 PPM, то на ЖК дисплее будет показываться сообщение “Fresh Air” (чистый воздух). Когда измеренное значение качества воздуха будет превышать 1000, то зуммер начнет издавать звуковой сигнал и на ЖК дисплее и на веб-странице высветится сообщение “Poor Air, Open Windows” (загрязнение воздуха, откройте окна). А если значение будет превышать 2000 PPM, то зуммер продолжит издавать звуковой сигнал и на ЖК дисплее и на веб-странице появится сообщение “Danger! Move to fresh Air” (опасность, выйдите на свежий воздух).

Объяснение работы программы

Перед началом работы необходимо откалибровать датчик газа MQ135. Если идти обычным путем, то сначала нужно сделать ряд вычислений, направленных на получение требуемого значения PPM. Эти вычисления мы рассмотрели в статье про детектор дыма на Arduino. Но в данном проекте для упрощения работы мы будем использовать специальную библиотеку для датчика MQ135, вы можете скачать ее по следующей ссылке — https://github.com/GeorgK/MQ135.

С помощью данной библиотеки вы напрямую (без всяких вычислений) можете получить значение PPM с выхода датчика, используя следующие две строки:

Читайте также:  Индуктивный датчик lx1 rotkee

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

Но перед этим нужно откалибровать датчик, для этого скачайте приведенный после этого абзаца код программы, запустите его на выполнение на промежуток от 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»: #define RZERO 494.63. (здесь нужно будет подставить свое значение RZERO).

После этого можно приступать к написанию кода для основной программы нашего проекта. Сначала необходимо подключить все библиотеки, которые мы будем использовать, и инициализировать необходимые переменные. При помощи использования библиотеки Software Serial Library (библиотеки для последовательной связи) мы можем задействовать последовательный порт на любых цифровых контактах Arduino, в данном случае у нас это будут контакты 9 (RX) и 10 (TX) – к ним мы подключили модуль ESP8266. Также необходимо подключить библиотеку для работы с ЖК дисплеем и сообщить плате Arduino, к каким ее контактам мы подключили ЖК дисплей. Также мы инициализировали две дополнительные переменные: одну для аналогового контакта датчика и вторую для хранения значения качества воздуха.

#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’. После этого мы переведем курсор на 2-ю строку и выведем сообщение: ‘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 и покажем IP в окне монитора последовательной связи (serial monitor).

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 программирование. Для этого мы создадим переменную с именем webpage и сохраним в ней строку, которую нам нужно будет выводить на веб-страницу. Необходимо будет вычесть 48 из выходного значения поскольку функция read() возвращает десятичное значение ASCII, а первая десятичная цифра (в нем) 0 начинается с позиции 48.

if(esp8266.available())
<
if(esp8266.find(«+IPD,»))
<
delay(1000);
int connectionId = esp8266.read()-48;
String webpage = «

IOT Air Pollution Monitoring System

«;
webpage+= » Air Quality is «;
webpage+= air_quality;
webpage+=» PPM»;
webpage += «

Далее в функции 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
<
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;
>

Тестирование нашего проекта

Перед тем как загружать код в Arduino, что ваш модуль ESP8266 подключен к Wi-Fi. После загрузки кода откройте окно монитора последовательной связи (serial monitor) и в нем вы должны увидеть IP адрес, к примеру, как показано на следующем рисунке.

Напечатайте этот IP адрес в строке вашего браузера и вы увидите сообщения, которые выводятся нашим устройством на эту веб-страницу. Чтобы увидеть свежие значения качества воздуха необходимо будет обновить страницу.

Исходный код программы

Для демонстрации работы проекта мы использовали локальный веб-сервер – подробно все эти процессы вы можете посмотреть в видео в конце статьи. Но чтобы мониторить качество воздуха из любой точки земного шара вы должны переадресовать порт 80 (используемый для HTTP или интернета) на локальный или частный IP адрес (192.168*) вашего устройства. После переадресации порта все входящие соединения будут переадресованы на этот локальный адрес и вы сможете открывать необходимую веб-страницу из любой точки мира просто вводя публичный IP адрес вашего интернета. Вы можете настроить переадресацию зайдя в настройки своего роутера (по адресу 192.168.1.1) и найти там опцию переадресации порта.

Источник

Adblock
detector