Сенсоры углекислого газа (CO₂)

 
+
-
edit
 

Balancer

администратор
★★★★★
Придавил, таки, жабу и вот, почта доставила сенсор CO₂:

1PCS module MH Z19 infrared co2 sensor for co2 monitor Free shipping new stock best quality-in Sensors from Electronic Components & Supplies on Aliexpress.com | Alibaba Group

Cheap sensor tap, Buy Quality sensor oximeter directly from China sensor monitor Suppliers:   ≡≡≡≡≡ Welcome to our Store & // www.aliexpress.com
 

Припаять ноги — 5 минут. Ещё 5 минут — воткнуть в Arduino через софтовый последовательный порт. Раза в три времени больше потратил, пока всё своё радиобарахло по углам нашёл, а то с осени, вроде, ничем таким не занимался :)

Скетч очень простой:
code cpp
  1. #include <SoftwareSerial.h>;
  2.  
  3. SoftwareSerial mySerial(8,9); // RX,TX
  4. byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
  5. unsigned char response[9];
  6.  
  7. void setup() {
  8.   Serial.begin(9600);
  9.   mySerial.begin(9600);
  10. }
  11.  
  12. void loop()
  13. {
  14.   mySerial.write(cmd, 9);
  15.   memset(response, 0, 9);
  16.   mySerial.readBytes(response, 9);
  17.   int i;
  18.   byte crc = 0;
  19.   for (i = 1; i < 8; i++) crc+=response[i];
  20.   crc = 255 - crc;
  21.   crc++;
  22.  
  23.   if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
  24.     Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
  25.   } else {
  26.     unsigned int responseHigh = (unsigned int) response[2];
  27.     unsigned int responseLow = (unsigned int) response[3];
  28.     unsigned int ppm = (256*responseHigh) + responseLow;
  29.     Serial.println(ppm);
  30.   }
  31.   delay(10000);
  32. }


Всё это дело слегка обдувается кулером (12В, работающий от 5В).



Первые цифры после прогрева пошли порядка 860..870 ppm! Немедленное проветривание! :D (при 600 начинаются первые проблемы с работоспособностью и усталостью, при 800 — уже совсем тяжёлая атмосфера). Открыл окно, пошёл в магазин. Вернулся — было 399/400 ppm. Это уровень чистого, даже не городского воздуха :) То ли за окном воздух, действительно, чист, то ли показания немного занижаются. Пока сидел, показания подросли где-то до 440..460 ppm. Надышал. Ветер захлопнул окно и началось: 500..560..590... Сейчас, правда, почему-то до 530-540 упало :)

В общем, надо цеплять это дело к нормальной ноде, собирать значения, сигнализировать о превышении. И надо купить второй датчик для второй комнаты :) Выберу другую модель, чтобы показания можно было сравнивать...
 44
+
-
edit
 

Balancer

администратор
★★★★★

Измеряем концентрацию CO2 в квартире с помощью MH-Z19

Практически любая метеостанция, включая дешевые китайские модели за несколько долларов, умеет измерять основные параметры воздуха — температуру и влажность. С... // geektimes.ru
 

Рассказ о том как маленький датчик углекислого газа(co2) MH-Z19, расширил мое понимание об окружающем мире

Все началось с того что я работаю в офисе, где как водится нет нормальной вентиляции, зато есть много народу половине которого все время жарко, а второй половине отчаянно дует. Понятно ... // mysku.ru
 



Блин, у него дурацкая схемотехника :) Питание от 3.6В до 5.5В, но при этом логические уровни — 3.3В. Я подключал по обезьяньи, последовательный порт на Ардуино — и оно работает. Но, по хорошему, надо ставить конвертер уровней при питании от 5В и работе с 5В схемами. А вот 3.3В от той же ESP8266 уже может не хватить. Хотя тоже кто-то подключает и оно работает...
 44
+
-
edit
 

Balancer

администратор
★★★★★
Balancer> В общем, надо цеплять это дело к нормальной ноде

Очень долго руки не доходили. ESP8266 имеет только один UART. И в NodeMCU управляется им. Т.е. MH-Z19 по последовательному порту одновременно с компом не подключишь. Долго эту проблему не брался решить, хотя даже макетку ещё в начале лета или конце весны спаял :)

А на днях попался тут «IDE в браузере» — по сути просто ide.lua, позволяющий редактировать файлы по воздуху через браузер. Ну и сегодня собрался, подключил, собрал, настроил...

Теперь сенсор гонит показания концентрации углекислоты в MQTT и его забирают все домашние желающие :)

Первый аттач — так оно выглядит сейчас в железе. С другой стороны ещё есть гребёнка под дисплейчик, но пока не подключал.

Второй — показания MQTT в Андроиде

Третий — график в Home Assistant. В 22:00 хорошо видно изменение концентрации, когда я окно открыл для проветривания :)

Надо ещё сглаживание добавить и можно попробовать настроить включение вентилятора по Sonoff :)
Прикреплённые файлы:
 
 44
+
-
edit
 

Balancer

администратор
★★★★★
На ночь, чтобы не жужжал, отключил кулер возле датчика. А то он крошечный и потому высокооборотный. Через некоторое время ночью показания твёрдо «залипли» на 398..399..400 ppm. Включил кулер — сразу скакнули до 560..570. В общем, циркуляцию воздуха сенсору надо организовывать. Или на сквозняк где-то, или кулером, вот. Надо будет кулер попробовать от 3.3В запитать. Если не заведётся (номинал — 5В) или всё равно шуметь будет, то поставлю большой и тихий :)
 44
+
-
edit
 

Balancer

администратор
★★★★★
Интересный глюк. Вчера отрубал питание ноды-измерителя CO2. Сегодня смотрю — а обновления данных нет. Ну, думаю, глюк, зависло... Перезагружаю, ресеты шлю — пофиг. Нода запускается, а данных по концентрации с неё нет. Остальное — OK, данные — NOK.

Полез дебажить. Благо, с ide.lua это относительно просто :D

Обнаружил, что вместо цепочки


0000: FF 86 cc cc xx xx xx xx
0008: ss


где cccc = концентрация, xxxxxxxx - какая-то фигня и ss = контрольная сумма, стало приходить:


0000: 86 cc cc xx xx xx xx ss
0008: FF



Т.е. старший байт приходит в конце. Так и не понял, почему так, просто поправил код, чтобы понимал оба варианта :-/
 44
+
-
edit
 

Sandro
AXT

инженер вольнодумец
★☆
Balancer> Т.е. старший байт приходит в конце. Так и не понял, почему так, просто поправил код, чтобы понимал оба варианта :-/

А с чего ты решил, что это старший байт? ;)

Тут один умелец замучил его до того, что он переключился на протокол MODBUS, наличие которого в китайской документации не отражено: Тёмная сторона MH-Z19 / Geektimes

Вполне возможно, что если его помучить ещё, то там и протокол SPI обнаружится, а у него 0xff как раз типовой байт-заглушка для случаев, когда передавать нечего. Если его просто читать, не подавая команды, он случаем не 0xff 0xff по кругу передаёт? Или молчит?
 43.043.0
+
-
edit
 

Balancer

администратор
★★★★★
Sandro> А с чего ты решил, что это старший байт? ;)

Ну, не старший, а первый :) Смысл-то в том, что должен приходить первым, а стал (внезапно) приходить последним. Последовательность остальных байт осталась прежней.

Sandro> Тут один умелец замучил его до того, что он переключился на протокол MODBUS

Он его замучил. А я использую штатно и не экспериментировал :)

Sandro> Вполне возможно, что если его помучить ещё, то там и протокол SPI обнаружится, а у него 0xff как раз типовой байт-заглушка для случаев, когда передавать нечего. Если его просто читать, не подавая команды, он случаем не 0xff 0xff по кругу передаёт? Или молчит?

Так в том-то и дело, что данные идут нормальные. Только первый байт переместился в конец :)
 44

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru