Меню Рубрики

Mh z19 arduino подключение

Содержание

Кто пробовал пользоваться бюджетным датчиком вредных газов MQ-135 для анализа концентрации углекислого газа CO2 в воздухе, то сталкивались с неточностями в показаниях, с зависимостью от температуры окружающей среды, с трудностями калибровки и перевод в стандартные единицы PPM. Рассмотрим датчик уровня углекислого газа MH-Z19, который и точнее и эргономичнее и удобнее.

Сперва просто подключим датчик к Arduino Nano, а ниже соберем прибор с дисплеем и датчиком температуры.

Необходимые материалы

Подключения к ШИМ выходу

Скетч

Чтение показаний датчика с выхода PWM и вывод значений в монитор порта. Формулу для перевода синала ШИМ в PPM единицы можно найти в тех.описании датчика.

Теперь соберем мобильный прибор для измерения уровня CO 2 , температуры и влажности. Так можно будем измерить показания как в помещении так и на улице.

Схема подключения

Скетч

Для переносного датчика MH-Z19 с дисплеем Nokia 5110. Потребуются библиотеки Adafruit_GFX_5110 и DHT11.

Видео

// для тех кто любит цифру, как и я.

SoftwareSerial mySerial(A0, A1); // RX, TX сенсора

byte cmd[9] = <0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79>;
// волшебная комманда – смотри мануал
char response[9]; // здесь будет ответ

void setup() <
Serial.begin(9600); //это наш монитор
mySerial.begin(9600); //а это датчик MH-Z19(14)
>

void loop()
<
mySerial.write(cmd,9);//запрос PPM CO2
mySerial.readBytes(response, 9);
int responseHigh = (int) response[2];
int responseLow = (int) response[3];
int ppm = (256*responseHigh)+responseLow;
// ну и по мануалу из ответа считаем PPM

400 ppm
MH-Z14 – pwm:

1330 ppm
commercial CO2 detector

MH-Z19 I have on my desk seems to be defective upon this.

Думаю, что проблема в соединении – где-то плохой контакт. Для того контрольная сумма и придумана, собственно.

А вот у меня другая проблема – датчик очень странно себя порой ведет, то выдавая 5000 несколько минут, то снижая значения до 100-200. Контрольная сумма совпадает. Все выглядит так, словно он иногда рекалибруется сам по себе. Может быть пятый пин нужно подтянуть к HIGH? Или датчик плохо реагирует на ардуиновский пятивольтовый TX и нужно добавить резисторный делитель? Кто сталкивался с чем-то подобным?

400 ppm ?
Рядом стоящий прибор показывает 1200 ppm
Подключал и напрямую и через делитель напряжения.

550 ppm (хотя рядом стоящий датчик показывал значение 1200 ppm).
Если сильно подышать на него, то значение резко увеличивается (600, 900, 1000. ), а потом быстро спадает.
Т.е. все симптомы, которые были в переписке выше с "ice".
Есть ли нарисованная схема подключения, при котором обеспечивается условие "Interface level – 3.3 V"? Может, все-таки дело в этом и я просто неправильно подключаю.

8)
зачем столько кода, когда его можно заменить одной строкой "man pulseIn";

tH = pulseIn(pwmPin,HIGH,2000000);
PPM = 5000 * (((tH)/1000.0)-2)/1000;

:-*
Но ещё лучше это сделать на прерываниях.

attachInterrupt(digitalPinToInterrupt(pwmPin), get_z19, CHANGE);

volatile unsigned long tC_last2=0,tC_last=0,tC=0;
volatile float z19_ppm;
void get_z19() <
cli();
tC_last2 = tC_last;
tC_last = tC;
tC = micros();
volatile int a = digitalRead(pwmPin);
sei();
if((tC-tC_last)>990000 && tC_last>0) return;
if(a == HIGH) <
tH = tC_last – tC_last2;
tL = tC – tC_last;
> else <
tH = tC – tC_last;
tL = tC_last – tC_last2;
>
z19_ppm = 5000 * (tH/1000.0-2)/1000.0;
>

Приветствую автора статьи CO2 датчиком MH-Z19. А именно: "Для переносного датчика MH-Z19 с дисплеем Nokia 5110"
Экстра под этот скечь купил все необходимые компоненты датчик MH-Z19, DHT11, Nokia 5110 диспей. Но у меня прблемка, подсоединил всё как на картинки, но к сожалению скопированный текст(Скечь) с вашей статьи, когда я вношу и начинаю проверять на ошибки, выдаёт на странице:
case DHTLIB_OK: ошибку

Читайте также:  Декоративный облицовочный камень для внутренней отделки

Nokia5110_MH-Z19_DHT11.ino: In function ‘void loop()’:
Nokia5110_MH-Z19_DHT11:57: error: ‘DHTLIB_OK’ was not declared in this scope
Nokia5110_MH-Z19_DHT11:59: error: ‘DHTLIB_ERROR_CHECKSUM’ was not declared in this scope
Nokia5110_MH-Z19_DHT11:62: error: ‘DHTLIB_ERROR_TIMEOUT’ was not declared in this scope

Хотел спросить, что делаю не так, может библиотеки како-то не хватает. Для Nokia 5110 вроде всё поставил. Скечь с подключениеи только датчика MH-Z19, работает. Что нетак.

Решил таки сделать свою версию метеостанции-часов-календаря на Arduino с кучей датчиков и различными крутыми штуками! Проект уместился в корпусе G909G из магазина Чип и Дип, питается от micro-USB и выглядит весьма неколхозно! =)

  • Большой дешёвый LCD дисплей
  • Вывод на дисплей:
  • Большие часы
  • Дата
  • Температура воздуха
  • Влажность воздуха
  • Атмосферное давление (в мм.рт.ст.)
  • Углекислый газ (в ppm)
  • Прогноз осадков на основе изменения давления
  • Построение графиков показаний с датчиков за час и сутки
  • Индикация уровня CO2 трёхцветным светодиодом (общий анод/общий катод, настраивается в прошивке)
  • Переключение режимов сенсорной кнопкой
  • Версия 1.5
    – Добавлено управление яркостью
    – Яркость дисплея и светодиода СО2 меняется на максимальную и минимальную в зависимости от сигнала с фоторезистора
    Подключите датчик (фоторезистор) по схеме. Теперь на экране отладки справа на второй строчке появится величина сигнала
    с фоторезистора. Пределы яркости устанавливаются в настройках прошивки.

    ПОДРОБНОЕ ВИДЕО ПО ПРОЕКТУ

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

    Понятные схемы, OpenSource прошивки с комментариями и подробные инструкции это очень большая работа. Буду рад, если вы поддержите такой подход к созданию Ардуино проектов! Основная страница пожертвовать – здесь.

    СХЕМЫ, ПЕЧАТНЫЕ ПЛАТЫ

    КОРПУСА ПОД 3D ПЕЧАТЬ

    Несколько вариантов 3D-печатных корпусов для этого проекта с инструкциями по сборке есть в ветке обсуждения часов-метеостанции на форуме сообщества

    МАТЕРИАЛЫ И КОМПОНЕНТЫ

    Ссылки на магазины, с которых я закупаюсь уже не один год

    Вам скорее всего пригодится:

    Первые ссылки – в основном магазин Great Wall, вторые – WAVGAT. Покупая в одном магазине, вы экономите на доставке!

    ПРОШИВКА И НАСТРОЙКА

    Загружать прошивку желательно до подключения компонентов, чтобы убедиться в том, что плата рабочая. После сборки можно прошить ещё раз, плата должна спокойно прошиться. В проектах с мощными потребителями в цепи питания платы 5V (адресная светодиодная лента, сервоприводы, моторы и проч.) необходимо подать на схему внешнее питание 5V перед подключением Arduino к компьютеру, потому что USB не обеспечит нужный ток, если например лента его потребует. Это может привести к выгоранию защитного диода на плате Arduino. Гайд по скачиванию и загрузке прошивки можно найти под спойлером на следующей строчке.

    ИНСТРУКЦИЯ ПО ЗАГРУЗКЕ ПРОШИВКИ

    1. Если это ваше первое знакомство с Arduino, внимательно изучите гайд для новичков и установите необходимые для загрузки прошивки программы.

    2. Скачайте архив со страницы проекта. Если вы зашли с GitHub – кликните справа вверху Clone or download, затем Download ZIP. Это тот же самый архив!

    3. Извлеките архив. Содержимое папки libraries перетащите в пустое место папки с библиотеками Arduino C:/Program Files (x86)/Arduino/libraries/

    4. Папку с прошивкой из firmware положите по пути без русских букв . Если в папке с прошивкой несколько файлов – это вкладки, они откроются автоматически.

    5. Настройте прошивку (если нужно), выберите свою плату, процессор. Подключите Arduino к компьютеру, выберите её COM порт и нажмите загрузить.

    Читайте также:  Дурная трава быстро растет

    6. При возникновении ошибок или красного текста в логе обратитесь к 5-ому пункту гайда для новичков – “Разбор ошибок загрузки и компиляции“.

    Содержимое папок в архиве

    • libraries – библиотеки проекта. Заменить имеющиеся версии
    • firmware – прошивки для Arduino
    • schemes – схемы подключения компонентов

    Как показал эксперимент, снаружи корпуса датчик температуры показывает на 0.5 градуса меньше, чем внутри! Нужно более удачно компоновать электронику, отводить и экранировать тепло от греющихся элементов…

    Если дисплей показывает слишком тускло/на белом фоне
    На плате драйвера дисплея (к которой подключаются провода) есть крутилка контрастности, с её помощью можно подстроить контраст на нужный. Также контрастность зависит от угла взгляда на дисплей (это же LCD) и можно настроить дисплей на чёткое отображение даже под углом “дисплей на уровне пупка, смотрим сверху”. А ещё контрастность сильно зависит от питания: от 5V дисплей показывает максимально чётко и ярко, тогда как при питании от USB через Arduino напряжение будет около 4.5V (часть падает на защитном диоде по линии USB), и дисплей показывает уже не так ярко. Вывод настраивайте крутилкой при внешнем питании от 5V!

    Если датчик CO2 работает некорректно (инфа от Евгения Иванова)
    Ну там в папке библиотеки сенсора в examples есть скетчи для калибровки. также ее можно запустить втупую замкнув на землю разъем “HD” на 7+ секунд.
    Само собой вот прямо на улице на морозе этим заниматься не обязательно… можно просто в бутылку набрать свежего воздуха с датчиком внутри и запечатать. калибровка проводится минимум 20 минут..
    По-умолчанию датчик поставляется с включенной автокалибровкой, которая происходит каждый день, и если датчик используется в невентелируемом помещении, то эта калибровка быстро уводит значения от нормы за горизонт, потому ее нужно обязательно отключать.
    Документация.

    Автокалибровка датчика CO2 отключена в скетче!

    Если у вас не работает датчик BME280, скорее всего у него отличается адрес. В проекте используется библиотека Adafruit_BME280, у которой нет отдельной функции смены адреса, поэтому адрес задаётся вручную в файле библиотеки Adafruit_BME280.h почти в самом начале файла (лежит в папке Adafruit_BME280 в вашей папке библиотек, вы должны были её туда установить), у моего модуля был адрес 0x76. Как узнать адрес своего модуля BME280? Есть специальный скетч, называется i2c scanner. Его можно нагуглить, можно скачать с моего FTP. Прошиваете данный скетч, открываете порт и получаете список адресов подключенных к шине i2c устройств. Чтобы остальные модули вам не мешали – можно их отключить и оставить только BME280. Полученный адрес указываем в библиотеке, сохраняем файл и загружаем прошивку метео-часов. Всё!

    Если отстают часы, проблема скорее всего в питании схемы. Если при смене блока питания на более качественный проблема не уходит, повесьте конденсатор по питанию RTC модуля (прям на плату на VCC и GND паять): обязательно керамический, 0.1-1 мкФ (маркировка 103 или 104, смотрите таблицу маркировок). Также можно поставить электролит (6.3V, 47-100 мкФ)

    Возможен безналичный расчёт для юридических лиц при оформлении заказа

    С этим товаром берут

    Общие сведения

    Датчик углекислого газа MH-Z19B — датчик, который детектирует уровень СО2 по принципу недисперсионного инфракрасного излучения (NDIR). Данный датчик имеет внутреннюю температурную компенсацию, может подключаться по 3-м интерфейсам (аналоговый, ШИМ, UART), имеет малые размеры и большой срок службы.

    Читайте также:  Lgen официальный сайт бытовая техника

    Приблизительные нормы содержания уровня CO2 в помещениях:

    Уровень CO2, ppm
    Качество воздуха
    300-400 Эталонное качество воздуха
    400-600 Нормальное качество воздуха
    600-800 Среднее качество воздуха
    800-1000 Предельно допустимое качество воздуха
    Свыше 1000 Низкое качество воздуха
    Свыше 2000 Критически низкое качество воздуха

    Характеристики

    • Рабочее напряжение: от 4.5В до 5В
    • Потребление тока:

    На плате Arduino UNO напряжение на выходах TX и RX равно 5В. Напряжение на входах TX и RX датчика не должно превышать 3,3В. В связи с этим подключение необходимо производить через делитель напряжения.

    Для делителя напряжения Вам понадобятся резисторы номиналом 470 Ом и 1 кОм. Соберите Вашу схему так, как показано на схеме:

    Питание

    Входное напряжение питания от 4.5В до 5В постоянного тока, подаётся на выводы VCC и GND модуля.

    Подробнее о датчике

    Управляющие команды

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

    • 0х86 — Прочитать данные с датчика — считывает значения с датчика, где в HIGH (3) и LOW (4) байтах указаны значения CO2;

    Пример:

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x86 0x00 0x00 0x00 0x00 0x00 0x79

    Приём

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x86 HIGH LOW 0х79
    • 0х87 — Калибровка нуля — используйте этот режим для калибровки в бытовых условиях (400ppm)

    Пример:

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x87 0x00 0x00 0x00 0x00 0x00 CRC
    • 0х88 — Калибровка в заданном диапазоне измерений — используйте этот режим для калибровки диапазона, указав значение диапазона в HIGH (3) и LOW (4) байтах;

    Пример:

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x88 HIGH LOW 0x00 0x00 0x00 CRC
      где HIGH и LOW для 5000ppm считаются по формуле: HIGH = 5000 / 256; LOW = 5000 % 256;
    • 0х79 — Вкл/Выкл Автоматическую калибровку датчика — при отсутствии необходимости, режим автокалибровки можно отключить, указав в (3) байте 0хА0/0х00 (Вкл/Выкл);

    Пример:

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x88 HIGH LOW 0x00 0x00 0x00 CRC
    • 0x99 — Установить диапазон измерений (2000ppm; 5000ppm) — выбор диапазона измерений. Указывается в (6) и (7) байтах в 16-ной кодировке. (2000 = 07D0; 5000 = 1388)

    Пример:

    Диапазон задаётся в (6) и (7) байтах.

    Для диапазона 2000ppm (2000 в 10-ной кодировке = 07D0 в 16-ной кодировке):

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x99 0х00 0х00 0х00 0х07 0хD0 CRC

    Для диапазона 5000ppm (5000 в 10-ной кодировке = 1388 в 16-ной кодировке):

    Байт 0 Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6 Байт 7 Байт 8
    0xFF 0x01 0x99 0х00 0x00 0x00 0x13 0x88 CRC

    CRC

    Во всех командах в последнем (8) байте указана контрольная сумма – CRC. Для её подсчёта используется указанная производителем функция:

    Более подробную информацию вы найдёте в DataSheet’ах (на английском v1.0 от 21/01/16 и на китайском v1.3 от 08/12/2017).

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *