Детектор загрязнения окружающего воздуха на Arduino

3Скетч Arduino для инфракрасного датчика препятствий

Скетч для работы с инфракрасным сенсором препятствий также предельно простой: мы будем читать показания с выхода модуля и выводить в монитор порта. А также, если ИК модуль обнаружил препятствие, будем сообщать об этом.

const int ir = A7;

void setup() {
  Serial.begin(115200);  
}

void loop() {
  int r = analogRead(ir); // r в диапазоне от 0 до 1023
  Serial.println(r);
  if (r < 100) { // т.к. используется аналоговый пин Arduino
    Serial.println("Detected!");
  }
  delay(100);
}

Напомню, в Arduino используется 10-разрядный АЦП, поэтому значение аналогового сигнала кодируется числом в диапазоне от 0 до 1023. При использовании аналогового входа Arduino предельные значения «0» или «1023» мы вряд ли получим с датчика, поэтому лучше использовать некоторый порог, например, равный 100 (поэтому в скетче r < 100). При использовании же цифрового вывода Arduino для чтения показаний инфракрасного датчика, можно можно написать (r == LOW) или (r == 0) или (r < 1).

Хорошая статья про аналоговые измерения на Arduino.

Думаю, довольно понятно, как найти применение такому модулю в ваших проектах. Необходимо периодически опрашивать состояние на выходе модуля, и как только напряжение меняется с HIGH на LOW, предпринимать необходимые действия: менять направление движения робота, включать свет в помещении и т.п.

KY-009, модуль RGB SMD светодиода

Детектор загрязнения окружающего воздуха на ArduinoМодуль RGB SMD светодиода

 Заменяется на модуль 2020 или 5050 RGB SMD. Стоимость начинается от 1 р за штуку, высылается правда большими партиями, но если поискать то можно найти и поштучно, сам же модуль от 50 р.
 Довольно привлекательный модуль для начинающих. Позволяет работать с RGB матрицей и получать буквально все цвета светового спектра используя ШИМ выходы контроллера. Поставляется БЕЗ токоограничивающих резисторов, поэтому при установке не забудьте их установить. Возможно заменить на обычный RGB светодиод, все зависит от предназначения и места установки. Недостаток- занимает сразу 3 ШИМ выхода микроконтроллера для полноценной работы. Достоинства- можно визуализировать процесс переключением цветов светодиода. Например: зеленый- работа, красный- остановка или аварийный стоп, синий- настройка и т.д. Кроме того в устройствах с температурными датчиками можно визуализировать степень нагрева термоэлемента. Т.е. чем большую температуру имеет датчик тем «краснее» светодиод и наоборот, чем холоднее- тем «синее».

Что такое датчик газа MQ-2?

MQ-2 является одним из наиболее часто используемых датчиков газа из серии датчиков MQ. Это датчик газа типа металл-оксид-полупроводник (МОП, MOS), также известный как химрезистор (химический резистор), поскольку обнаружение основано на изменении сопротивления чувствительного материала, когда газ вступает в контакт с этим материалом. Используя простую цепь делителя напряжения, можно измерить концентрацию газа.

Рисунок 2 – Датчик газа MQ-2

Датчик газа MQ-2 работает при постоянном напряжении 5 В и потребляет около 800 мВт. Он может обнаруживать концентрации LPG (сжиженного нефтяного газа), дыма, алкоголя, пропана, водорода, метана и угарного газа от 200 до 10000 ppm (миллионных долей).

Чему равен 1 ppm?

При измерении газов, таких как углекислый газ, кислород или метан, термин концентрация используется для описания количества газа по объему в воздухе. Двумя наиболее распространенными единицами измерения являются миллионная доля (ppm) и процентная концентрация.

Миллионная доля (сокращенно ppm) – это соотношение одного газа к другому. Например, 1000 ppm CO означает, что если бы вы могли сосчитать миллион молекул газа, 1000 из них были бы моноокисью углерода, а 999 000 молекул – какими-то другими газами.

Вот полный список технических характеристик:

Технические характеристика датчика газа MQ-2
Рабочее напряжение 5 В
Сопротивление нагрузки 20 кОм
Сопротивление нагревателя 33 Ом ± 5%
Потребляемая мощность <800 мВт
Сопротивление чувствительности 10 кОм — 60 кОм
Измерение концентрации 200 — 10000 ppm
Время разогрева более 24 часов

Для более подробной информации, пожалуйста, обратитесь техническому описанию.

Совет

Датчик чувствителен к нескольким газам – но не может сказать, какой из них он обнаружил! Это нормально; большинство датчиков газа такие. Таким образом, он лучше всего подходит для измерения изменений концентрации известного газа, а не для определения концентрация какого газа изменилась.

Код устройства

Код для Ардуино вы можете скачать или скопировать ниже.

// Air Quality monitoring 
#include 
#include 

// The Thinger.io cloud
#define USERNAME "YOUR_USER_NAME"
#define DEVICE_ID "YOUR_DEVICE_ID"
#define DEVICE_CREDENTIAL "YOUR_CREDENTIAL"

ThingerYun thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup() {
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);

  // initialize bridge
  Bridge.begin();


  // resource output example (i.e. reading a sensor value, a variable, etc)
  thing >> outputValue(analogRead(A0)); // optional 
  thing >> outputValue(analogRead(A1));
  thing >> outputValue(analogRead(A2));
  thing >> outputValue(analogRead(A3));

  // more details at http://docs.thinger.io/arduino/
}

void loop() {
  thing.handle();
}

Код Ардуино — чтение данных с датчика BME680

Чтобы прочитать значения с датчика мы воспользуемся примером скетча из библиотеки.

Для этого откройте IDE Ардуино и выберите Файл > Примеры > Библиотека Adafruit BME680 > bme680async.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(F("BME680 async test"));

if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
}

void loop() {
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);

Serial.println(F("You can do other work during BME680 measurement."));
delay(50); // This represents parallel work.
// There's no need to delay() until millis() >= endTime: bme.endReading()
// takes care of that. It's okay for parallel work to take longer than
// BME680's measurement time.

// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Serial.print(F("Reading completed at "));
Serial.println(millis());

Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));

Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));

Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));

Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));

Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));

Serial.println();
delay(2000);
}

Популярные статьи  Мягкая книжка

Коммуникационные интерфейсы MH-Z14A

Всего существует три варианта считывания значений датчика с MH-Z14A, которые подробно описаны в следующих разделах.

Аналоговый интерфейс MH-Z14A

Всего имеется два разных аналоговых выхода MH-Z14A, которые отличаются выходным напряжением аналогового выхода.

  • Vout1 имеет расширение. выходное напряжение от 0 В до 2,5 В для диапазона выходного сигнала от 0 до 5000 частей на миллион.
  • Vout2 имеет расширение. выходное напряжение от 0,4 В до 2 В для диапазона выходного сигнала от 0 до 5000 частей на миллион.

Поскольку диапазон напряжения Vout1 выше, мы можем получить более подробные измерения от Vout1, которые мы хотим использовать для нашей сигнализации CO2 в этой статье.

Чтобы рассчитать концентрацию CO2, мы должны сделать следующие шаги:

  1. Считайте аналоговое значение с помощью analogRead функции.
  2. Пересчитайте аналоговое напряжение на основе рабочего напряжения микроконтроллера и максимального значения аналого-цифрового преобразователя (АЦП) микроконтроллера.
  3. Рассчитайте концентрацию газа, используя следующий градиентный треугольник.

Детектор загрязнения окружающего воздуха на Arduino

Микроконтроллер Рабочее напряжение Диапазон значений АЦП
Ардуино 0… 1023
ESP8266 3,3 В 0… 1023
ESP32 3,3 В 0… 4095

Теперь мы можем погрузиться в уравнения для расчета концентрации CO2 от MH-Z14A, когда вы используете вывод Vout1 или Vout2 на MH-Z14A.

Формулы, когда Vout1 используется для расчета концентрации газа.

Микроконтроллер Analog Voltage Концентрация газа
Ардуино float v = analogRead (analogPin) * 5.0 / 1023; int gas_concentration = int ((v-0) * (5000/2));
ESP8266 float v = analogRead (analogPin) * 3,3 / 1023;
ESP32 float v = analogRead (analogPin) * 3,3 / 4095;

Формулы, когда Vout2 используется для расчета концентрации газа.

Микроконтроллер Analog Voltage Концентрация газа
Ардуино float v = analogRead (analogPin) * 5.0 / 1023; int gas_concentration = int ((v-0,4) * (5000 / (2-0,4));
ESP8266 float v = analogRead (analogPin) * 3,3 / 1023;
ESP32 float v = analogRead (analogPin) * 3,3 / 4095;

Интерфейс MH-Z14A UART

Если вы не хотите рассчитывать концентрацию CO2, вы можете получить значение концентрации CO2 непосредственно через интерфейс UART. Настройки для связи UART являются стандартными и перечислены в следующей таблице.

Скорость передачи 9600
Байт даты 8 байт
Остановить байт 1 байт
Байт калибровки none

Процесс связи по UART следующий:

  • Микроконтроллер отправляет заранее определенный 9-байтовый массив через UART на MH-Z14A.
  • MH-Z14A отвечает в зависимости от содержимого запроса ответов длинной 9-байт, который считывает микроконтроллер.
  • Массив ответов содержит концентрацию высокого уровня (байт 2), а также концентрацию низкого уровня (байт 3).
  • Концентрация газа: высокий уровень * 256 + низкий уровень

Вы также можете запустить калибровку нулевой точки и точки диапазона с помощью интерфейса связи UART. Вы найдете содержимое всех массивов в MH-Z14A datasheet или ниже, в нашем примере программирования.

ШИМ интерфейс MH-Z14A

Концентрация CO2 также может передаваться через сигнал ШИМ (Широтно-импульсная модуляция) от MH-Z14A на микроконтроллер. Вы можете использовать любой цифровой вывод микроконтроллера для чтения сигнала ШИМ.

Чтобы прочитать сигнал ШИМ, мы должны сделать два изменения, которые описаны в таблице данных и показаны на следующем рисунке.

Детектор загрязнения окружающего воздуха на Arduino

  1. tH: время высокого уровня ШИМ-сигнала в течение одного цикла.
  2. tL: время, когда сигнал ШИМ низкий в течение одного цикла.

Поскольку микроконтроллер Arduino, ESP8266 и ESP32 не может измерять временной диапазон, мы должны использовать millis() функцию, которая возвращает количество миллисекунд, прошедших с момента включения микроконтроллера. На основе этих временных меток, когда сигнал ШИМ показывает нарастающий или спадающий фронт, мы можем вычислить временные диапазоны следующим образом:

  • tH = t1-t0
  • tL = t2-t1

Теперь рассчитывается концентрация CO2 C = 5000 * (tH-2ms) / (tH + tL-4ms).

Очистители воздуха от пыльцы

Детектор загрязнения окружающего воздуха на Arduino

На определении степени загрязнения люди остановиться не могли и разработали устройства для очистки воздуха от примесей. Хорошим изобретениям по очистке воздуха необходимо выполнять минимум две задачи: поддерживать оптимальное состояние воздуха вентилированием, очищать его от взвешенных частиц, а также вредных газов. Эти приборы должны быть оснащены фильтрами, которые должны улавливать пыль, пыльцу и другие твердые загрязнители. Принцип очистки заключается в прогонке воздушной смеси вентилятором прибора через набор фильтров, что позволяет обеспечивать быструю очистку значительных по объемам помещений.

Многие модели оборудованы угольными фильтрами, которые улавливают большую часть канцерогенных веществ, газов, ликвидируют запахи, табачный дым, иногда модели дополнительно оснащены ионизаторами воздуха. Также существуют приборы для измерения качества воздуха с датчиками на пыльцу. По способам очистки можно выделить следующие виды очистителей:

  • Электростатический очиститель производит очистку ионизированным воздухом. Он эффективно улавливает пыль, копоть и табачный дым. Оснащение озонатором помогает регулировать количество микробов и бактерий. Прибор несложен в уходе, электроэнергии потребляет немного, недорог, не требует расходных материалов, нужно лишь периодически убирать накопившуюся пыль.
  • Очистители со сменными фильтрами очень эффективны против пыли. Они недорогие, но периодически требуется заменять фильтры.
  • Фотокаталитические очистители считаются самыми эффективными, очистка производится путем разложения твердого вещества воздуха под действием ультрафиолетовых лучей и катализатора. Эффективен также против запахов и дыма. Эти приборы не нуждаются в расходных материалах, но имеют довольно высокую стоимость.
  • Очистители, использующие для воду. Приборы такого типа обычно сочетают одновременно увлажнитель и очиститель воздуха.

Часто производителю в одном датчике качества воздуха приходится умещать целую комбинацию из разных способов очистки, что увеличивает эффективность прибора. Выбор такого аппарата стоит производить с учетом площади дома, количества пыли, наличия курильщиков, а также цены и производителя. Человеком придумано много способов для обнаружения загрязняющих веществ и контроля за состояния воздуха в помещениях, будет придумано еще больше. Однако, все-таки, не стоит забывать об элементарных, веками испытанных способах борьбы с пылью, грязью и запахами, это систематическая влажная уборка и очищение от пыли.

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

Популярные статьи  Уникальный нож из старого напильника простыми инструментами

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

Детектор загрязнения окружающего воздуха на Arduino

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

Подключение ЖКИ к 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 и в конце подключите эмиттер к земле.

BME680 — измерения

BME680 — это цифровой датчик 4 в 1, который измеряет:

  1. Температуру
  2. Влажность
  3. Барометрическое давление
  4. Газ: летучие органические соединения (VOC), такие как этанол и окись углерода.

Датчик газа

BME680 содержит датчик MOX (Metal-oxide), который обнаруживает VOC в воздухе. Этот датчик дает вам качественное представление о сумме загрязняющих веществ в окружающем воздухе. Но он не селективен к определенному газу.

Датчики MOX состоят из пленки оксида металла. Он обнаруживает VOC путем адсорбции молекул кислорода на его чувствительном слое. BME680 реагирует на большинство VOC, загрязняющих воздух в помещении (кроме СО2).

Когда датчик вступает в контакт с газами, молекулы кислорода вступают в реакцию и увеличивают проводимость по поверхности.

Необработанный сигнал датчика BME680 представляет собой изменение сопротивления. Сопротивление изменяется из-за колебаний концентраций VOC:

Детектор загрязнения окружающего воздуха на Arduino

На реакции (сопротивление), происходящие на поверхности датчика влияют помимо концентрации VOC и другие параметры, такие как температура и влажность.

Дополнительная информация о датчике газа

Лабораторный блок питания 30 В / 10 А

Подробнее

Датчик газа дает вам качественное представление о содержании VOC в окружающем воздухе. Таким образом, вы можете отслеживать тенденцию и определять — ухудшилось или улучшилось качество воздуха.

Чтобы получить точные данные, вам необходимо откалибровать датчик по известным источникам и построить калибровочную кривую.

Перед использованием нового датчика рекомендуется чтобы он проработал в течение 48 часов до начала сбора «реальных» данных. После этого также рекомендуется запустить датчик на 30 минут, прежде чем снимать показания.

CO2 — диоксид углерода тяжелее воздуха, поэтому он имеет способность скапливаться в нижних слоях атмосферы помещений и представляет угрозу для органов дыхания человека. Поэтому нужно вовремя определить опасный уровень загазованности в пространстве, где находятся люди. Самый распространённый вид детекторов СО2 — это датчик серии MQ.

Модель MQ-135 — электрохимический прибор. Он построен на принципе изменения сопротивления чувствительного химического элемента устройства при соприкосновении с углекислым газом. Элемент представляет собой керамическую трубку, на покрытие которой из оксида алюминия (Al2O3) нанесена тонкая плёнка диоксида олова (SnO2).

Модуль датчика газа:

Детектор загрязнения окружающего воздуха на Arduino

Для нормального функционирования датчик должен находиться постоянно в нагретом состоянии. Нагреватель внутри трубки доводит её поверхность до нужного уровня температуры, при которой чувствительный слой при соприкосновении с молекулами углекислого газа меняет своё сопротивление. Элемент закрыт металлической сеткой. Она предохраняет нагреватель от контакта с другими взрывоопасными газами, которые могут попасть в помещение совместно с СО2. Такой принцип защиты используется в горном деле.

Под сеткой кроме трубки находятся 6 контактных головок. Две из них питают нагревательную спиральку внутри трубки током. Остальные две пары соединены проволочками и служат для дополнительного анализа состояния сопротивления элемента.

Что находится под защитной сеткой MQ-135:

Детектор загрязнения окружающего воздуха на Arduino

Изменение характеристик тока, протекающего через устройство, фиксируются платой Ардуино. Процессор, обрабатывая информацию о превышении безопасного уровня СО2, отдаёт команды на включение звуковой сигнализации (зуммера), и на реле включения вытяжной вентиляции. Таким образом датчик выполняет функцию контроля за безопасным уровнем загазованности углекислым газом помещения.

Следует учитывать то, что датчик рассчитан на эксплуатацию при влажности 65% и температуре окружающего воздуха 20 °С. При влажности 95% прибор перестаёт адекватно реагировать на изменение содержания СО2. Кроме этого большую роль играет срок службы детектора. Со временем чувствительный слой трубки из SnO2 засоряется продуктами обгорания углекислого газа. В результате датчик теряет точность измерений. Производители приборов рекомендуют время от времени проводить перекалибровку датчика.

Внутренняя структура датчика газа MQ-2

Датчик фактически заключен в два слоя тонкой сетки из нержавеющей стали, которая называется «антивзрывной сеткой» (anti-explosion network). Она гарантирует, что нагревательный элемент внутри датчика не вызовет взрыва, когда мы ищем легковоспламеняющиеся газы.

Детектор загрязнения окружающего воздуха на ArduinoРисунок 3 – Внешние компоненты датчика газа MQ-2

Она также обеспечивает защиту датчика и отфильтровывает взвешенные частицы, поэтому внутрь камеры могут проходить только газообразные элементы. Сетка связана с остальной частью корпуса через медное зажимное кольцо.

Детектор загрязнения окружающего воздуха на ArduinoРисунок 4 – Внутренняя структура с чувствительным элементом и соединительными выводами

Так выглядит датчик при удалении внешней сетки. Звездообразная структура образована из чувствительного элемента и шести соединительных ножек, которые выходят за пределы бакелитового основания. Из шести два вывода (H) отвечают за нагрев чувствительного элемента и соединены через катушку из никель-хромовой проволоки, хорошо известного проводящего сплава.

Остальные четыре вывода (A и B), отвечающие за выходные сигналы, подключены с использованием платиновых проводов. Эти провода соединены с корпусом чувствительного элемента и передают небольшие изменения тока, который проходит через чувствительный элемент.

Популярные статьи  Складные противооткатные упоры

Детектор загрязнения окружающего воздуха на ArduinoРисунок 5 – Чувствительный элемент – керамика на основе оксида алюминия с покрытием из диоксида олова

Трубчатый чувствительный элемент изготовлен из керамики на основе оксида алюминия (Al2O3) и покрыт диоксидом олова (SnO2). Диоксид олова здесь является наиболее важным материалом, будучи чувствительным к горючим газам. Керамическая подложка просто увеличивает эффективность нагрева и обеспечивает постоянное нагревание площади датчика до рабочей температуры.

Детектор загрязнения окружающего воздуха на ArduinoРисунок 6 – Внутренняя структура чувствительного элемента датчика газа MQ-2

Итак, никель-хромовая катушка и керамика на основе оксида алюминия образуют систему подогрева; в то время как платиновые проволоки и покрытие из диоксида олова образуют сенсорную систему.

Скетч для проекта с сигнализацией

Ниже представлен тестовый код, который активирует звуковой сигнал на уже упомянутом выше цифровом выходе 6, с задержкой времени, для того, чтобы исключить ложные срабатывания при случайном попадании воды на сенсор. Работа реализована через переменную, которая обновляется каждую секунду и выступает порогом – curCounter. Сигнализация приводится в действие тогда, когда значение, передаваемое с сенсора, станет меньше 300. Задержка между обнаружением влаги и срабатыванием звукового сигнала составляет чуть больше 30 секунд.

#define PIN_RAIN_SENSOR A1  // Аналоговый вход для сигнала датчика протечки и дождя
#define PIN_ALERT 6         // Цифровой выход для сигнализации
#define MAX_COUNTER 30      // Пороговое значение для счетчика
#define ALERT_LEVEL 300     // Пороговое значение для счетчика

int curCounter= 0; // Счётчик для сбора "статистики", который увеличивается на 1 каждую секунду после срабатывания датчика
 
void setup(){
   Serial.begin(9600);
   pinMode(PIN_ALERT, OUTPUT);
   pinMode(PIN_RAIN_SENSOR, INPUT); // Можно не указывать, т.к. это значение по умолчанию
}
void loop(){
   int sensorValue = analogRead(PIN_RAIN_SENSOR);
   Serial.println(sensorValue); // Выводим значение в монитр порта
   delay(300); // короткая задержка

   // Если накопили достаточно оснований для включения сигнализации
   if (curCounter >= MAX_COUNTER){
      digitalWrite(PIN_ALERT, HIGH);  // Срабатывание сигнализации
      curCounter = MAX_COUNTER;       // Защита от переполнения переменной
   }
 
   // Определяем уровень влажности
   if (sensorValue < ALERT_LEVEL){
      // В очередной раз убедились, что все влажно, увеличиваем счетчик
      curCounter++;                 
   }else { 
      // Интенсивность дождя не превышает порога
      digitalWrite(PIN_ALERT, LOW); // Выключаем сигнализацию
      curCounter = 0; // Обнуляем счетчик
   }
   
   delay(1000); // Задержка между измерениями
}

KY-032, модуль инфракрасного датчика

Детектор загрязнения окружающего воздуха на ArduinoМодуль инфракрасного датчика

Модуль от 60 р в небольших партиях
Снова датчик 2 в 1. Данное устройство гибрид двух датчиков KY-005 (модуль инфракрасного светодиода) и KY-022 (датчик ИК приемника) в качестве датчика + плата управления на операционном усилителе.  Девайс имеет несколько настроек. 1. На яркость светодиода. 2. На порог срабатывания фотодиода. Чувствительность регулируется от 2 до 40 см. Следует учесть что срабатывание на темных поверхностях несколько хуже чем на светлых вследствие плохого отражения. Принцип работы: светодиод испускает инфракрасный свет и он, если на пути излучения находится препятствие, отражается в фотодиод.

Основные выводы при создании сигнализации CO2 с помощью MH-Z14A

В последней главе этой статьи я хочу обсудить свои основные выводы, полученные при использовании разных микроконтроллеров и CO2 датчика MH-Z14A.

Основные результаты использования Arduino с MH-Z14A

На следующем рисунке показаны мои измерения с Arduino Uno, визуализированные с помощью последовательного плоттера Arduino IDE. Калибровка MH-Z14A во время этого измерения не производилась. Разница после повторной калибровки показана в следующем подразделе.

Детектор загрязнения окружающего воздуха на Arduino

Использование аналогового интерфейса MH-Z14A с микроконтроллером Arduino (синяя линия)

Если вы видите аналоговые значения на последовательном плоттере, вы сразу замечаете более высокие выбросы, которые, кажется, возникают на регулярной основе. Для стабильного и достоверного измерения выбросы представляют собой большую проблему, потому что наша сигнализация сработает, когда выброс превысит предварительно определенное значение сигнализации.

Использование интерфейса UART MH-Z14A с микроконтроллером Arduino (красная линия)

Использование связи UART для получения значений CO2 от MH-Z14A вызывает те же проблемы, что и аналоговый интерфейс. Мы можем видеть, что значения датчика UART частично совпадают с ШИМ интерфейсом, но часто падают. Такое поведение кажется необычным и не позволяет использовать интерфейс UART для сигнализации CO2.

Использование интерфейса ШИМ MH-Z14A с микроконтроллером Arduino (зеленая линия)

Интерфейс ШИМ — единственный интерфейс, который не имеет выбросов и поэтому может использоваться для нашей сигнализации CO2. В большинстве случаев значения ШИМ также подтверждаются концентрацией CO2 из интерфейса UART.

Результаты использования Arduino с MH-Z14A после повторной калибровки

Возможно, вы видели, что значения датчиков в предыдущей главе были слишком высокими (между 1700 и 3200 частей на миллион), чтобы быть реальной концентрацией CO2 в моем офисе.

Мы определили, что в хорошо вентилируемом помещении концентрация CO2 ниже 800 ppm (наш предупреждающий сигнал) и должна быть ниже 1000 ppm (наш сигнал тревоги).

Поэтому нам необходимо откалибровать MH-Z14A, соединив контакт 8 (HD) MH-Z14A с землей вашего микроконтроллера на 7-10 секунд. На следующем рисунке показано измерение CO2 с моей Arduino Uno после повторной калибровки.

Детектор загрязнения окружающего воздуха на Arduino

Теперь моя концентрация CO2 составляет около 600 частей на миллион, когда дверь моего офиса открыта, а окно закрыто. Когда я закрываю дверь (у меня небольшой офис), концентрация CO2 повышается и превышает пороговые значения 800–1000 частей на миллион. В конце я открыл окно, и вы видите, что концентрация СО2 снижается за счет свежего воздуха.

Повторная калибровка не устраняет ошибочное поведение аналогового интерфейса и интерфейса UART.

Основные результаты использования ESP8266 с MH-Z14A

Ключевой вывод при использовании ESP8266 с MH-Z14A заключается в том, что эта комбинация у меня не заработала. Я попробовал взять другой микроконтроллер ESP8266 и пробовал каждый интерфейс измерения отдельно. Но у меня всегда был один и тот же код ошибки, который вы видите на следующем рисунке.

Детектор загрязнения окружающего воздуха на Arduino

Оцените статью
( Пока оценок нет )
Добавить комментарий