MQ 시리즈 가스 센서는 가스 감지기에서 특정 유형의 가스를 감지하거나 측정하는 데 사용되는 매우 일반적인 유형의 센서입니다. 이 센서는 단순한 연기 감지기에서 산업용 공기질 모니터에 이르기까지 모든 가스 관련 장치에 널리 사용됩니다. 우리는 이미 이러한 MQ 가스 센서를 Arduino와 함께 사용하여 암모니아와 같은 일부 유해 가스를 측정했습니다. 이 기사에서는 이러한 가스 센서를 PIC 마이크로 컨트롤러와 함께 사용하여 가스 의 PPM 값을 측정하고 16x2 LCD에 표시 하는 방법을 알아 봅니다.
앞서 언급했듯이 시장에는 다양한 종류의 MQ 시리즈 센서가 있으며 각 센서는 아래 표와 같이 다양한 유형의 가스를 측정 할 수 있습니다. 이 기사에서는 LPG 가스 존재 및 농도를 감지하는 데 사용할 수있는 PIC와 함께 MQ6 가스 센서를 사용합니다. 그러나 동일한 하드웨어 및 펌웨어를 사용하면 코드 및 하드웨어 부분을 크게 수정하지 않고도 다른 MQ 시리즈 센서를 사용할 수 있습니다.
감지기 | 감지 |
MQ-2 | 메탄, 부탄, LPG, 연기 |
MQ-3 | 알코올, 에탄올, 연기 |
MQ-4 | 메탄, CNG 가스 |
MQ-5 | 천연 가스, LPG |
MQ-6 | LPG, 부탄 가스 |
MQ-7 | 일산화탄소 |
MQ-8 | 수소 가스 |
MQ-9 | 일산화탄소, 인화성 가스. |
MQ131 | 오존 |
MQ135 | 공기질 (벤젠, 알코올, 연기) |
MQ136 | 황화수소 가스 |
MQ137 | 암모니아 |
MQ138 | 벤젠, 톨루엔, 알코올, 아세톤, 프로판, 포름 알데히드 가스, 수소 |
MQ214 | 메탄, 천연 가스 |
MQ216 | 천연 가스, 석탄 가스 |
MQ303A | 알코올, 에탄올, 연기 |
MQ306A | LPG, 부탄 가스 |
MQ307A | 일산화탄소 |
MQ309A | 일산화탄소, 인화성 가스 |
MG811 | 이산화탄소 (CO2) |
AQ-104 | 공기질 |
MQ6 가스 센서
아래 이미지는 MQ6 센서 핀 다이어그램을 보여줍니다. 그러나 왼쪽 이미지는 마이크로 컨트롤러 장치와 인터페이스하기위한 모듈 기반 MQ6 센서이며, 모듈의 핀 다이어그램도 해당 이미지에 표시됩니다.
핀 1은 VCC, 핀 2는 GND, 핀 3은 디지털 출력 (가스가 감지되면 로직이 낮음)이고 핀 4는 아날로그 출력입니다. 냄비는 감도를 조정하는 데 사용됩니다. RL이 아닙니다. RL 저항은 DOUT LED의 오른쪽 저항입니다.
각 MQ 시리즈 센서에는 발열체 와 감지 저항이 있습니다. 가스의 농도에 따라 감지 저항이 변화하고 변화하는 저항을 감지하여 가스 농도를 측정 할 수 있습니다. PPM의 가스 농도 를 측정하기 위해 모든 MQ 센서는 매우 중요한 로그 그래프를 제공합니다. 그래프는 RS와 RO의 비율로 가스 농도에 대한 개요를 제공합니다.
MQ Gas 센서를 사용하여 PPM을 측정하는 방법은 무엇입니까?
RS는 특정 가스가있는 동안 감지 저항이고 RO는 특정 가스가없는 깨끗한 공기에서 감지 저항입니다. 데이터 시트에서 가져온 아래 로그 그래프는 MQ6 센서의 감지 저항과 함께 가스 농도에 대한 개요를 제공합니다. MQ6 센서는 LPG 가스 농도 를 감지하는 데 사용됩니다. 따라서 MQ6 센서는 LPG 가스를 사용할 수없는 깨끗한 공기 상태에서 특정 저항을 제공합니다. 또한 MQ6 센서가 LPG 가스를 감지 할 때마다 저항이 변경됩니다.
따라서 우리는 Arduino 가스 감지기 프로젝트에서했던 것과 유사한 펌웨어에이 그래프를 그려야합니다. 공식은 3 개의 서로 다른 데이터 포인트를 갖는 것입니다. 처음 두 데이터 포인트는 X 및 Y 좌표에서 LPG 곡선의 시작입니다. 세 번째 데이터는 기울기입니다.
따라서 LPG 곡선 인 짙은 파란색 곡선을 선택하면 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 마이크로 컨트롤러를 연결하는 데 필요한 구성 요소는 다음과 같습니다.
- 5V 전원
- 브레드 보드
- 4.7k 저항
- LCD 16x2
- 1k 저항
- 20Mhz 크리스탈
- 33pF 커패시터-2pcs
- PIC16F877A 마이크로 컨트롤러
- MQ 시리즈 센서
- Berg 및 기타 연결 전선.
개략도
PIC 프로젝트 가 있는 이 가스 센서 의 회로도 는 매우 간단합니다. 아날로그 핀은 RA0에 연결되고 디지털 핀은 RD5에 연결되어 가스 센서 모듈에서 제공하는 아날로그 전압을 측정합니다. PIC를 완전히 처음 접하는 경우이 프로젝트를 더 잘 이해하기 위해 PIC ADC 자습서와 PIC LCD 자습서를 살펴 보는 것이 좋습니다.
회로는 브레드 보드로 구성됩니다. 연결이 완료되면 설정이 아래와 같이 보입니다.
PIC 프로그래밍이있는 MQ 센서
이 코드의 주요 부분은 주요 기능 및 기타 관련 주변 기능입니다. Complete 프로그램은이 페이지 하단에서 찾을 수 있으며, 중요한 코드 스 니펫은 다음과 같이 설명됩니다.
아래 함수는 자유 공기에서 센서 저항 값을 얻기 위해 사용됩니다. 아날로그 채널 0이 사용됨에 따라 아날로그 채널 0에서 데이터를 가져옵니다. 이는 MQ Gas 센서 를 보정하기 위한 것 입니다.
float SensorCalibration () { int count; //이 기능은 프리 에어 플로트 에서 센서를 보정합니다 . 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 반환 값이됩니다. }
아래 함수는 MQ 센서 아날로그 값을 읽고 평균을내어 Rs 값을 계산하는 데 사용됩니다.
float read_MQ () { 정수 개수; float rs = 0; for (count = 0; count <5; count ++) {// 여러 판독 값을 가져와 평균을냅니다. rs + = 계산 _ 저항 (ADC_Read (0)); // rs는 가스 농도에 따라 달라집니다. __delay_ms (50); } rs = rs / 5; 반환 rs; }
아래 함수는 전압 분배기 저항과 부하 저항에서 저항을 계산하는 데 사용됩니다.
float compute_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)); }
곡선은 위의 기사에서 이전에 계산 된 코드 위에 정의 된 LPG 곡선입니다.
float MQ6_curve = {2.3,0.30, -0.41}; // 그래프 플롯, 특정 센서에 대해 변경
마지막으로 아날로그 값을 측정하고 PPM을 계산하여 LCD에 표시하는 주요 기능은 다음과 같습니다.
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("보정 중…."); Ro = SensorCalibration (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("완료!"); // 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 ("가스 있음"); lcd_com (SECOND_LINE); lcd_puts ("가스 ppm ="); float rs = read_MQ (); 부동 비율 = rs / Ro; lcd_print_number (gas_plot_log_scale (비율, MQ6_curve)); __delay_ms (1500); clear_screen (); } else { lcd_com (FIRST_LINE); lcd_puts ("가스 없음"); } } }
첫째, 센서의 RO는 깨끗한 공기에서 측정됩니다. 그런 다음 디지털 핀을 읽어 가스가 있는지 여부를 확인합니다. 가스가있는 경우 제공된 LPG 곡선으로 가스를 측정합니다.
가스가 감지되면 PPM 값 이 변하는 지 확인하기 위해 라이터를 사용했습니다. 이 시가 라이터에는 내부에 LPG 가스가 들어 있으며, 공기 중에 방출되면 센서가 판독하고 LCD의 PPM 값이 아래와 같이 변경됩니다.
전체 작업 은이 페이지 하단의 비디오 에서 찾을 수 있습니다. 질문이 있으시면 댓글 섹션에 남겨 주시거나 다른 기술적 질문에 대해서는 포럼을 사용하십시오.