цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Автор: Mike(admin) от 23-01-2020, 23:55

Датчики газа серии MQ являются очень распространенными типами датчиков, используемых в детекторах газа для обнаружения или измерения определенных типов газов. Эти датчики широко используются во всех газовых устройствах, от простых детекторов дыма до промышленных мониторов качества воздуха. В этой статье мы узнаем, как использовать эти газовые датчики с микроконтроллерами PIC, чтобы измерить значение PPM газа и отобразить его на ЖК-дисплее 16x2.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

На рынке доступны различные типы датчиков серии MQ, и каждый датчик может измерять различные типы газов. В этой статье мы будем использовать датчик газа MQ6 с PIC, который можно использовать для обнаружения присутствия и концентрации газов вроде сжиженных углеводородных газов (СУГ). Тем не менее, с использованием того же аппаратного и микропрограммного обеспечения можно использовать и другие датчики серии MQ без значительных изменений в коде и аппаратной части.


На следующем рисунке показана схема контактов датчика MQ-6. Тем не менее, левое изображение представляет собой основанный на модуле датчик MQ6 для взаимодействия с микроконтроллерным блоком, на этом изображении также показана схема контактов модуля.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Контакт 1 – это питание VCC, контакт 2 – это заземление, контакт 3 – это цифровой выход (низкий уровень логики при обнаружении газа), а контакт 4 – аналоговый выход. Потенциометр используется для регулировки чувствительности. Резистор RL является резистором для светодиода DOUT.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Каждый датчик серии MQ имеет нагревательный элемент и чувствительное сопротивление. В зависимости от концентрации газа, чувствительное сопротивление изменяется, и, обнаруживая изменяющееся сопротивление, можно измерять концентрацию газа. Для измерения концентрации газа в PPM все датчики MQ предоставляют логарифмический график, который очень важен. График дает обзор концентрации газа с соотношением RS и RO.


RS – это чувствительное сопротивление в присутствии определенного газа, тогда как RO – это чувствительное сопротивление в чистом воздухе без какого-либо конкретного газа. Приведенный ниже логарифмический график, взятый из документации, дает обзор концентрации газа с измерением сопротивления датчика MQ6. Датчик MQ6 используется для определения концентрации газа СУГ. Следовательно, датчик MQ6 будет оказывать особое сопротивление в условиях чистого воздуха, когда газ СУГ недоступен. Кроме того, сопротивление будет изменяться всякий раз, когда датчик MQ-6 обнаруживает СУГ.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Итак, нам нужно «построить» этот график в нашей прошивке. Формула должна иметь 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.


График, который нам нужен, может быть задан как: Кривая СУГ = (начало X и начало Y, наклон). В нашем случае: Кривая СУГ = (2.3, 0.30, -0.41).


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


Принципиальная схема подключения детектора газа на основе микроконтроллера PIC и датчика MQ-6 приведена далее.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Схема довольно проста. Аналоговый вывод соединен с RA0, а цифровой – с RD5 для измерения аналогового напряжения, обеспечиваемого модулем датчика газа. Схема была собрана на макетной плате. После того, как подключения были выполнены, установка может выглядеть следующим образом.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6

Программирование также не вызывает больших сложностей. Основная часть этого кода является основной функцией main и другими связанными периферийными функциями. Во-первых, RO датчика измеряется в чистом воздухе. Затем считывается цифровой вывод, чтобы проверить, присутствует газ в атмосфере или нет. Если газ присутствует, то измеряется он по предоставленной кривой.



#include <xc.h>
#include <stdint.h>
#include <math.h>
#include "supporing_cfile/lcd.h"
#include "supporing_cfile/adc.h"
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

#define gas_detect   PORTDbits.RD5
#define gas_Detect_Pin_Direction  TRISDbits.TRISD5
#define FIRST_LINE 0x80
#define SECOND_LINE 0xC0
#define RL_VALUE (10)
#define RO_VALUE_CLEAN_AIR (9.83)

float MQ6_curve[3]  = {2.3,0.30,-0.41};

#define _XTAL_FREQ 20000000

void system_init(void);
void introduction_screen(void);
void clear_screen(void);
//int   GetPercentage(float rs_ro_ratio, float *pcurve);
int   gas_plot_log_scale(float rs_ro_ratio, float *curve);
float read_mq();
float calculate_resistance(int raw_adc);
float SensorCalibration();
void main() {  
     system_init();
     clear_screen();
     lcd_com(FIRST_LINE);
     lcd_puts("Calibrating....");
     Ro = SensorCalibration();
     //clear_screen();
     lcd_com(FIRST_LINE);     
     lcd_puts("Done!          ");
     //clear_screen();
     lcd_com(FIRST_LINE);
     lcd_print_number(Ro);
     lcd_puts(" K Ohms");
     __delay_ms(1500);
     gas_detect = 0;
 while(1){
     if(gas_detect == 0){         
         lcd_com(FIRST_LINE);
         lcd_puts("Gas is present  ");
         lcd_com(SECOND_LINE);
         lcd_puts ("Gas ppm = ");
         float rs = read_mq();
         float ratio = rs/Ro;
        lcd_print_number(gas_plot_log_scale(ratio, MQ6_curve));
         __delay_ms(1500);
        clear_screen();
     }
     else{
         lcd_com(FIRST_LINE);
         lcd_puts("Gas not present  ");
         //lcd_com(SECOND_LINE);
        // lcd_print_number(gas_plot_log_scale(read_mq()/Ro, MQ6_curve));
     }
    }
}
 void system_init(){
     TRISB = 0;
     gas_Detect_Pin_Direction = 1;
     lcd_init();
     ADC_Init();
     introduction_screen();
     //dht11_init();
 } 

void clear_screen(void){
    lcd_com(FIRST_LINE);
    lcd_puts("                ");
    lcd_com(SECOND_LINE);
    lcd_puts("                "); 
}

void introduction_screen(void){
    lcd_com(FIRST_LINE);
    lcd_puts("Welcome to");
    lcd_com(SECOND_LINE);
    lcd_puts("circuit Digest");
    __delay_ms(1000);
    __delay_ms(1000);
    clear_screen();
    lcd_com(FIRST_LINE);
    lcd_puts("MQ6 Sensor");
    lcd_com(SECOND_LINE);
    lcd_puts("with PIC16F877A");
    __delay_ms(1000);
    __delay_ms(1000);
}
/*
 * Sensor Related Functions
 */
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;

  return val; 
}
float read_mq()
{
  int count;
  float rs=0;
  for (count=0;count<5;count++) {
    rs += calculate_resistance(ADC_Read(0));
    __delay_ms(50);
  } 
  rs = rs/5;
  return rs;  
}
float calculate_resistance(int adc_channel)
{
  return ( ((float)RL_VALUE*(1023-adc_channel)/adc_channel));
}
int gas_plot_log_scale(float rs_ro_ratio, float *curve)
{
    return pow(10,(((log(rs_ro_ratio)-curve[1])/curve[2]) + curve[0]));  
}

Можно использовать зажигалку, чтобы проверить, изменяется ли значение PPM при обнаружении газа. Эти зажигалки имеют внутри себя сжиженный газ, который при выбросе в воздух будет считываться датчиком, а значение PPM на ЖК-дисплее изменяется, как показано на следующем изображении.


Обнаружение газа и измерение концентрации в PPM с использованием микроконтроллера PIC и датчика газа MQ-6



© digitrode.ru


Теги: PIC16, датчик газа





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

Комментарии:

Оставить комментарий