- Датчик газа MQ6
- Как измерить PPM с помощью газовых датчиков MQ?
- Необходимые компоненты
- Схема
- Датчик MQ с программированием PIC
Датчики газа серии MQ - это очень распространенные типы датчиков, используемых в детекторах газа для обнаружения или измерения определенных типов газов. Эти датчики широко используются во всех устройствах, связанных с газом, от простых детекторов дыма до промышленных мониторов качества воздуха. Мы уже использовали эти газовые датчики MQ с Arduino для измерения некоторых вредных газов, таких как аммиак. В этой статье мы узнаем, как использовать эти газовые датчики с микроконтроллерами PIC, чтобы измерить значение PPM газа и отобразить его на ЖК-дисплее 16x2.
Как упоминалось ранее, на рынке доступны различные типы датчиков серии MQ, и каждый датчик может измерять различные типы газов, как показано в таблице ниже. В этой статье мы будем использовать датчик газа MQ6 с PIC, который можно использовать для обнаружения присутствия и концентрации сжиженного нефтяного газа. Однако при использовании того же оборудования и прошивки можно использовать другие датчики серии MQ без значительных изменений в коде и аппаратной части.
Датчик | Обнаруживает |
MQ-2 | Метан, бутан, СУГ, дым |
MQ-3 | Спирт, этанол, дым |
MQ-4 | Метан, газ КПГ |
MQ-5 | Природный газ, СУГ |
MQ-6 | СУГ, бутан |
MQ-7 | Монооксид углерода |
MQ-8 | Водородный газ |
MQ-9 | Окись углерода, легковоспламеняющиеся газы. |
MQ131 | Озон |
MQ135 | Качество воздуха (бензол, алкоголь, дым) |
MQ136 | Газ сероводород |
MQ137 | Аммиак |
MQ138 | Бензол, толуол, спирт, ацетон, пропан, газообразный формальдегид, водород |
MQ214 | Метан, природный газ |
MQ216 | Природный газ, Угольный газ |
MQ303A | Спирт, этанол, дым |
MQ306A | СУГ, бутан |
MQ307A | Монооксид углерода |
MQ309A | Окись углерода, легковоспламеняющиеся газы |
MG811 | Углекислый газ (CO2) |
AQ-104 | Качество воздуха |
Датчик газа MQ6
На изображении ниже показана схема контактов датчика MQ6. Однако левое изображение представляет собой датчик MQ6 на основе модуля для взаимодействия с блоком микроконтроллера, на этом изображении также показана схема контактов модуля.
Контакт 1 - VCC, контакт 2 - GND, контакт 3 - цифровой выход (низкий логический уровень при обнаружении газа), а контакт 4 - аналоговый выход. Горшок используется для регулировки чувствительности. Это не RL. Резистор RL является правым резистором светодиода DOUT.
Каждый датчик серии MQ имеет нагревательный элемент и чувствительное сопротивление. В зависимости от концентрации газа чувствительное сопротивление изменяется, и, обнаруживая изменение сопротивления, можно измерить концентрацию газа. Для измерения концентрации газа в PPM все датчики MQ предоставляют логарифмический график, который очень важен. На графике представлен обзор концентрации газа с соотношением RS и RO.
Как измерить PPM с помощью газовых датчиков MQ?
RS - это чувствительное сопротивление в присутствии определенного газа, тогда как RO - это чувствительное сопротивление в чистом воздухе без какого-либо конкретного газа. Приведенный ниже логарифмический график, взятый из таблицы данных, дает обзор концентрации газа с измеренным сопротивлением датчика MQ6. Датчик MQ6 используется для определения концентрации сжиженного нефтяного газа. Таким образом, датчик MQ6 будет оказывать особое сопротивление в условиях чистого воздуха, когда газ LPG недоступен. Кроме того, сопротивление будет изменяться всякий раз, когда датчик MQ6 обнаруживает сжиженный нефтяной газ.
Итак, нам нужно построить этот график в нашей прошивке, аналогично тому, что мы сделали в нашем проекте детектора газа Arduino. Формула должна иметь 3 разных точки данных. Первые две точки данных являются началом кривой сжиженного нефтяного газа в координатах X и Y. Третьи данные - это наклон.
Итак, если мы выберем темно-синюю кривую, которая является кривой сжиженного нефтяного газа, начало кривой в координатах X и Y будет равно 200 и 2. Итак, первая точка данных на логарифмической шкале будет (log200, log2), которая равна (2.3, 0.30).
Сделаем это как, X1 и Y1 = (2.3, 0.30). Конец кривой - это вторая точка данных. Таким же способом, описанным выше, X2 и Y2 равны (log 10000, log0.4). Таким образом, X2 и Y2 = (4, -0,40). Чтобы получить наклон кривой, формула:
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Нужный нам график можно представить в виде
LPG_Curve = {начало X и начало Y, наклон} LPG_Curve = {2.3, 0.30, -0.41}
Для других датчиков MQ получите указанные выше данные из таблицы и логарифмического графика. Значение будет отличаться в зависимости от датчика и измеряемого газа. Для этого конкретного модуля у него есть цифровой вывод, который предоставляет информацию только о наличии газа или его отсутствии. Для этого проекта он тоже используется.
Необходимые компоненты
Необходимые компоненты для сопряжения датчика MQ с микроконтроллером PIC приведены ниже:
- Источник питания 5В
- Макетная плата
- Резистор 4,7 кОм
- ЖК-дисплей 16x2
- Резистор 1к
- Кристалл 20 МГц
- Конденсатор 33пФ - 2шт
- Микроконтроллер PIC16F877A
- Датчик серии MQ
- Berg и другие соединительные провода.
Схема
Схема этого газового датчика с проектом PIC довольно проста. Аналоговый вывод соединен с RA0, а цифровой - с RD5 для измерения аналогового напряжения, обеспечиваемого модулем газового датчика. Если вы совершенно не знакомы с PIC, возможно, вы захотите изучить учебник PIC ADC и PIC LCD, чтобы лучше понять этот проект.
Схема построена на макете. После того, как соединения были завершены, моя установка выглядит так, как показано ниже.
Датчик MQ с программированием PIC
Основная часть этого кода - это основная функция и другие связанные с ней периферийные функции. Полную программу можно найти внизу этой страницы, важные фрагменты кода поясняются следующим образом.
Следующая функция используется для получения значения сопротивления датчика на открытом воздухе. Поскольку используется аналоговый канал 0, он получает данные из аналогового канала 0. Он предназначен для калибровки газового датчика MQ.
float SensorCalibration () { int count; // Эта функция откалибрует датчик на открытом воздухе float val = 0; for (count = 0; count <50; count ++) {// взять несколько выборок и вычислить среднее значение val + = calculate_resistance (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // деление на RO_CLEAN_AIR_FACTOR дает Ro return val; }
Функция ниже используется для считывания аналоговых значений датчика MQ и их усреднения для расчета значения Rs.
float read_MQ () {число int; float rs = 0; for (count = 0; count <5; count ++) {// взять несколько показаний и усреднить их. rs + = вычислить_сопротивление (ADC_Read (0)); // rs изменяется в зависимости от концентрации газа. __delay_ms (50); } RS = RS / 5; return rs; }
Приведенная ниже функция используется для расчета сопротивления резистора делителя напряжения и сопротивления нагрузки.
float calculate_resistance (int adc_channel) {// датчик и нагрузочный резистор образуют делитель напряжения. поэтому с использованием аналогового значения и значения загрузки return (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // найдем резистор датчика. }
RL_VALUE определяется в начале кода, как показано ниже.
#define RL_VALUE (10) // определяем сопротивление нагрузки на плате в килоомах
Измените это значение после проверки сопротивления нагрузки на плате. На других платах датчиков MQ он может быть другим. Чтобы отобразить доступные данные в шкале журнала, используется следующая функция.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -curve) / curve) + curve)); }
Кривая представляет собой кривую для сжиженного нефтяного газа, определенную выше в коде, который ранее был рассчитан в нашей статье выше.
float MQ6_curve = {2.3,0.30, -0.41}; // График, измените это для конкретного датчика
Наконец, основная функция, внутри которой мы измеряем аналоговое значение, вычисляем PPM и отображаем его на ЖК-дисплее, приведена ниже.
недействительным main () { system_init (); чистый экран(); lcd_com (FIRST_LINE); lcd_puts ("Калибровка…."); Ro = SensorCalibration (); //чистый экран(); lcd_com (FIRST_LINE); lcd_puts («Готово!»); //чистый экран(); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts («кОм»); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts («Газ есть»); lcd_com (SECOND_LINE); lcd_puts ("Газ ppm ="); поплавок rs = read_MQ (); коэффициент плавучести = RS / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __delay_ms (1500); чистый экран(); } еще { lcd_com (FIRST_LINE); lcd_puts («Газ отсутствует»); } } }
Во-первых, RO датчика измеряется в чистом воздухе. Затем считывается цифровой вывод, чтобы проверить, присутствует ли газ или нет. Если газ присутствует, газ измеряется по предоставленной кривой для сжиженного нефтяного газа.
Я использовал зажигалку, чтобы проверить, меняется ли значение PPM при обнаружении газа. Внутри этих зажигалок находится сжиженный нефтяной газ, который при выпуске в воздух будет считываться нашим датчиком, а значение PPM на ЖК-дисплее изменяется, как показано ниже.
Полную работу можно найти в видео внизу этой страницы. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев или воспользуйтесь нашим форумом, чтобы задать другие технические вопросы.