Проблема с MH-Z19
- Войдите на сайт для отправки комментариев
Добрый день! Ситуация такая. Есть датчик CO2 MH-Z19 подключенный через аппаратный последовательный порт к Arduino Leonardo. И есть у этой схемы какая-то проблема с инициализацией. Скетч (он ниже) уже залит. Я подключаю плату к USB компа и вижу в мониторе порта бесконечную ошибку CRC. Ждать можно долго - ошибка не пропадает. Нажимаю кнопку Reset - плата перезагружается и датчик начинает прекрасно работать! В мониторе я вижу вполне себе красивые данные. Дальше может работать сколь угодно долго без сбоев. И так каждый раз после включения питания требуется ещё и ресет. В чём может быть проблема? Есть какие идеи?
Пример работы с датчиком взят кажется с Гиктаймса. Там использовался программный сериал, я заменил на аппаратный. Вот тестовый скетч, на котором воспроизводится проблема:
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9]; void setup() { Serial1.begin(9600); } void loop() { Serial1.write(cmd, 9); memset(response, 0, 9); Serial1.readBytes(response, 9); int i; byte crc = 0; for (i = 1; i < 8; i++) crc+=response[i]; crc = 255 - crc; crc++; if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) { Serial.println("CRC error: " + String(crc) + " / "+ String(response[8])); } else { unsigned int responseHigh = (unsigned int) response[2]; unsigned int responseLow = (unsigned int) response[3]; unsigned int ppm = (256*responseHigh) + responseLow; Serial.println(ppm); } delay(10000); }
Вы пытаетесь его запускать ДО того, как он полность инициализировался. Нужно подать на него питание и выждать какое-то время, чтобы он раскочегарился, а потом уже насиловать. Сколько выжидать? По даташиту - 3 минуты, но это для точности показаний. А так, работать он и раньше нанёт. Поставьте задрежку в начале setup и поэкспериментируйте с нею.
Кстати, Вы в курсе, что
1. он возвращает ещё и температуру, а также очень важный параметр собственной "стабильности" по которому можно понять, что он выдал нормальный релультат или его в данный момент колбасит?
2. он умеет работать по MODBUS если нужно?
Спасибо, помогло! Про то что показания корректные только через минуту-другую будут это я помнил, а вот что ему "завестись" ещё нужно хоть какое-то время дать - как-то упустил, ну или ожидал, что через некоторое время связь между устройствами должна сама "устаканиться".
А так, 10 секунд задержки оказалось достаточно.
del
vital_asm. как связан ваш код с обсуждаемым в этой ветке?
у меня аналогичная, что и у топикстартера, проблема, которую он решил delay ями, и которая у меня так не решилась, а код - для иллюстрации того, что воткнул delay через каждую строчку. может вы и правы - не особо информативен этот код
К сожалению, добавить нечего не могу. Мне для решения проблемы хватило 10-секундной задержки в самом начале Setup (типа Вашей 8-й строки).
Датчик чуствителен к питанию, у меня при напряжении около 4.7В полную чушь выдавал. При 5 всё нормально заработало, но при этом заменил SoftwareSerial на AltSoftSerial. Задержки 15 сек. при включении и опрос каждые 10 сек., по таймеру.
Такая проблема возникает, потому что не всегда чтение девяти байт попадает на начало ответа датчика. Байты из предыдущего ответа попадают в начало нового запроса. То есть строка сдвинута, и контрольная сумма не сходится. Решением является дочитать все байты, которые остались в буфере.
Здравствуйте! Я тоже столкнулся с проблемой с датчиком MH-Z19. Датчик долгое время нормально работал в домашней метеостанции, при этом не был запаян а просто воткнут в отверстия на плате. При последней модификации метеостанции, не касающейся самого датчика, решил его запаять. Теперь после подачи питания он некоторое врямя работает, но при этом довольно часто ответ от датчика не прходит и показания его на графике выглядят более изрезанными чем раньше, а через несколько часов работы ответы вообще перестают приходить. При этом ШИМ выход работает. Подскажите, пожалуйста, как побороть данную проблему!
Такая проблема возникает, потому что не всегда чтение девяти байт попадает на начало ответа датчика. Байты из предыдущего ответа попадают в начало нового запроса. То есть строка сдвинута, и контрольная сумма не сходится. Решением является дочитать все байты, которые остались в буфере.
Вы лучший. Мучался с этой фигней день, ваш совет помог. спс огромное
Плюс добавил делай:
Здравствуйте, Евгений.
Можно поподробней про MH Z-19 B1
возвращает ещё и температуру, а также очень важный параметр собственной "стабильности" по которому можно понять, что он выдал нормальный релультат или его в данный момент колбасит.
Очень интересен этот момент
Можно поподробней про MH Z-19 B1
возвращает ещё и температуру, а также очень важный параметр собственной "стабильности" по которому можно понять, что он выдал нормальный релультат или его в данный момент колбасит.
Очень интересен этот момент
Вот здесь подробно.
Кстати, есть и даташит, но там такого не документировано.
Приветствую всех!
купил недавно esp8266 (хочу перейти на него с ардуино нано) и ни как не могу законектить к нему свой mh-z19b...
не выводит показания с датчика..
на Нана работала без проблем. в чем может быть проблема? как правильно подключить?
питание 5в.
среда разработки ардуино есть костыль во все дырки. и взять этот костыль настроенный с библиотеками под ардуино, и забить в другую платформу, без бубна не получиться.