Анализатор co2 ардуино

Как сделать своими руками устройство, поддерживающее свежесть воздуха в квартире

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

Но какие параметры воздуха нужно отслеживать, чтобы держать атмосферу в вашей квартире пригодной для проживания? Как оказалось, главным индикатором свежести воздуха является концентрация углекислого газа СО2, которая измеряется в ppm (1ppm = 0,0001 %)

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

Если на улице города концентрация СО2 обычно находится в пределах 400 – 500 ppm, то в закрытом помещении в присутствии людей она может подниматься до нескольких тысяч ppm.

При этом в ГОСТе 30494-2011 под названием «Здания жилые и общественные. Параметры микроклимата в помещениях» приемлемым для человека считается концентрация 800 – 1000 ppm. А максимально допустимой — 1400 ppm.

Однако во многих исследованиях отмечается, что уже при концентрации углекислого газа 1000 ppm более половины испытуемых жалуются на головную боль, вялость и снижение работоспособности.

Стало быть, наш прибор должен следить за тем, чтобы количество СО2 в комнате ни в коем случае не превышало 1000 ppm. А в идеале – находилось в пределах 600 – 700 ppm.

Датчик для измерения концентрации СО2

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

Я задался целью найти голый работоспособный датчик СО2 за минимальную цену, способный передавать показание на плату Ардуино и работать с ней в паре. После изучения множества отзывов, мой выбор пал на китайский датчик MH-Z19B стоимостью порядка 20 долларов, основанный на принципе недисперсионной инфракрасной спектрометрии.

Датчик углекислого газа MH-Z19B

Другими словами, этот датчик измеряет поглощение света длинной волны 4 мкм, которое будет зависеть от концентрации в воздухе измеряемого газа. Запитывается он напряжением от 3,6 до 5,5 Вольта и может передавать показание на Ардуино по протоколу UART или посредством сигнала PWM.

Неприятным для меня моментом оказалось то, что логические уровни датчика MH-Z19B рассчитаны под напряжение 3,3 V, поэтому пришлось его связывать с платой Ардуино через конвертер логических уровней по цене 0,95 доллара за 5 штук. Затраты не велики, но количество припаиваемых проводов увеличивается.

Система контроля СО2

Принцип работы конструируемой системы контроля содержания углекислого газа такой.

Первый блок располагается в том месте, где вы планируете контролировать качество воздуха (в моем случае в спальне возле кровати).
Он определяет концентрацию СО2 и по радиоканалу на частоте 2,4 гГц передает это значение второму блоку.

В состав первого блока входят:

Датчик углекислого газа MH-Z19B
20$
Ардуино про мини 168
1,45$
Радиомодуль nRF24L01
0,75$
Адаптер радиомодуля nRF24L01
0,36$
Преобразователь питания HLK-PM01 AC 220 – DC 5v
2,2$
Конвертер логических уровней
0,21$

Задача Второго блока – получить числовое значения концентрации СО2 по радиоканалу и в зависимости от этого значения либо включить, либо выключить вентилятор.

В состав второго блока входят:

Ардуино нано
1,99$
Радиомодуль nRF24L01
0,75$
Адаптер радиомодуля nRF24L01
0,36$
Преобразователь питания AC 220 – DC 5v
0,77$
Реле SRD-05VDC-SL-C
1,87$ за 5 штук

Тут же имело смысл продумать способы индикации результатов измерения.
Идеальным вариантом была бы, конечно, установка небольшого экранчика, на который выводились бы цифровые значения концентрации СО2. Но я остановился на более простом способе. Поставил три светодиода — зеленый, желтый и красный. Первый горит при концентрации СО2 в воздухе не превышающей 600 ppm, второй — 800 ppm. А красный загорается тогда, когда концентрация углекислого газа переваливает за 1000 ppm.

Такая индикация вполне меня устраивает.

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

Электрическая схема первого блока с датчиком СО2(кликабельна)

Электрическая схема второго блока такая:

Электрическая схема второго блока(кликабельна)

Здесь я предусмотрел кнопку, при нажатии которой вентилятор принудительно включается на заданное время. У меня на 400 секунд. А также переменный резистор, которым можно изменять пределы срабатывания вентилятора без изменения программного кода.

Скетч для первого блока:

#include
SoftwareSerial swSerial(A0, A1); // RX, TX
#include
#include
#include
#include
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t writingPipe = 0xE8E8F0F0AALL;
int out = 1;
#define green 6 // Зеленый светодиод на 6 пине
#define yellow 7// Желтый светодиод на 7 пине
#define red 8 // Красный светодиод на 8 пине
RF24 radio(CE_PIN, CSN_PIN);
void setup() <
Serial.begin(9600);
swSerial.begin(9600);
pinMode(green, INPUT);
pinMode(yellow, INPUT);
pinMode(red, INPUT);
delay(2000);
radio.begin();
delay(2000);
radio.setChannel(5);
radio.setRetries(15,15);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setAutoAck(1);
radio.openWritingPipe(writingPipe);
>
void loop() <
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
byte measure_cmd[9] = <0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79>;
unsigned char measure_response[9];
int ppm = 0;
// ***** узнаём концентрацию CO2 через UART: *****
swSerial.write(measure_cmd,9);
swSerial.readBytes(measure_response, 9);
int i;
byte crc = 0;
for (i = 1; i = 600&&ppm 1000) < // Если ppm больше 1000ppm - зажигаем красный светодиод
digitalWrite(red, HIGH);
>
delay(10000);
>

Скетч для второго блока:

#include
#include
#include
#include
#include
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t readingPipe = 0xE8E8F0F0AALL;
int in =1;
RF24 radio(CE_PIN, CSN_PIN);
#define rel 5 //Реле на 5 пине
#define knopka 3 //Кнопка на 3 пине
#define pot A4 //Потенциометр на пине А4
void setup()
<
Serial.begin(9600);
radio.begin();
delay(2000);
radio.setChannel(5);
radio.setRetries(15,15);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setAutoAck(1);
radio.openReadingPipe(1,readingPipe);
radio.startListening();
MsTimer2::set(10000, chekRF); // Таймер на 10 сек
MsTimer2::start();
pinMode(rel, OUTPUT);
pinMode(pot, INPUT);// пин с потенциометром — вход
pinMode(knopka, INPUT);
Serial.println(«Redy»);
digitalWrite(rel, LOW);
>
void loop()
<
int buttonState = digitalRead(knopka);
if (buttonState == HIGH) < // если нажата кнопка
MsTimer2::stop();
digitalWrite(rel, HIGH); // включаем вентилятор
delay(400000);
digitalWrite(rel, LOW); // выключаем вентилятор
MsTimer2::start();
>
>
int Sredn() <
int y=0;
for (int i=0; i 500+x) <
digitalWrite(rel, HIGH);
>
if (in

Реализация в «металле»

Поскольку датчик MH-Z19B сам по себе достаточно инерционен, я не стал засовывать его в корпус первого блока, а оставил снаружи. Так он лучше омывается воздухом.

Первый блок с датчиком СО2
Второй блок
Вентилятор в проеме форточки

Испытания показали, что первый блок вполне адекватно измеряет концентрацию СО2 и один раз в 10 секунд отправляет ее значение по радиоканалу. Сигнал принимается по всей квартире.
Замечаний по работе первого блока нет.

Единственное дополнение, которое я бы сделал – добавил бы кнопку для принудительной вентиляции. Такую, какая есть на втором блоке. Иногда хочется, лежа в постели, добавить в спальню дополнительную порцию свежего воздуха, несмотря на то, что концентрация СО2 находится в пределах нормы.

По второму блоку тоже все хорошо, за исключением одной возникшей проблемы. Ардуино и радиомодуль достаточно сильно нагревались. Сначала я грешил на дешевый преобразователь AC220 — DC5.

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

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

Пришлось переписать скетчи так, чтобы Ардуино и радиомодуль в течение 7 секунд погружались в сон, потом просыпались на 3 секунды, обменивались данными и снова засыпали.

Позднее я также добавил на этот блок маленький OLED экранчик , на котором постоянно высвечивается значение концентрации СО2. Для управления им я использовал библиотеку OLED_I2C.h

Если говорить в целом, работа данной системы мне очень понравилась. Просыпаться утром с больной головой стал на порядок реже.
Планирую только купить какой-нибудь более тихий вентилятор, поскольку мой – старый и раздолбанный – иногда создает неудобства в плане засыпания.
Хотя, наверное, привыкнуть можно и к этому.

Источник

Датчик качества воздуха 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 .

Источник

Adblock
detector