MQ시리즈 가스 센서는 종류마다 다른 가스를 감지한다. 시험에서는 MQ135를 사용하여 LPG 가스나 부탄가스 등을 검출하였는데 정상적으로 작동하였다 스펙에 적힌 용도의 센서를 쓰면 가장 좋지만 만약 없다면 다른 종류의 가스를 써서 시험을 진행한다.
주의:
라이터, 부탄가스, 가스레인지 등으로 시험 시 화재나 신체상의 위험을 주의해야 합니다.
MQ2 : Combustible Gas, Smoke MQ5 : LPG, Natural Gas, Town Gas MQ9 : Carbon Monoxide, Coal Gas, Liguefied Gas MQ135 : Ammonia, Aromatics, Sulfer, Benzene vapor, other harmful MQ135는 내부에 포함된 히터와 센서로 맘모니아, 생활가스, 오염가스등을 검출해낼 수 있는 모듈이다. 내부에 포함된 히터가 적정온도로 올라가서 안정적인 결과를 얻기 위해서는 대기시간(burn-in time)이 필요하다. 때문에 MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7 모듈 종류별로 사용법이 약간씩 틀립니다.
라즈베리파이 스마트 홈 실습 과정 전체 포스팅 리스트
라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8
센서가 보드에 결합되어 있는 모듈인 경우 potentiometer를 이용해서 히터에 걸리는 전압을 조절해서 센서의 감도를 조절한다.(센서만 있는 경우는 저항이나 PWM 핀으로 조절) 특정 가스에 대한 감도를 높이기 위해서는 다양하게 테스트 해 볼 필요가 있다. MQ135 의 경우에는 빠른 response time을 갖고 있어서 거의 즉시 값을 추출할 수 있다. 아날로그 출력신호는 0~1023 사이의 값을 출력하므로 0~100%로 적절히 변환해서 사용할 수 있다.
반도체식 가스센서는 세라믹 반도체 표면에 가스가 접촉했을 때 일어나는 전기전도도의 변화를 이용하는 것이 많으며 대부분 대기 중에서 가열하여 사용되는 일이 많아 고온에서 안정한 금속산화물(세라믹스)이 주로 사용된다 금속 산화물은 반도체의 성질을 나타내는 것이 많고 이중 금속원자가 과잉(산소결핍)인 경우에는 n형 반도체, 금속원자가 결핍인 경우에는 p형 반도체가 사용된다.
이러한 세라믹반도체 중 전기전도도가 크고 융점이 높아서 사용온도 영역에서 열적으로 안정한 성질을 가진 반도체가 센서에 이용되고 있다 반도체 가스센서는 1)대부분 유독가스 가연성가스에 어떤 응답을 나타내어 감지할 수 있는 가스의 종류가 많고, 2)센서제작이 용이하고 검출회로의 구성이 간단하다는 특징이 있다 그러나 감지하려는 가스만을 감지할 수 있는 선택성이 우수한 가스센서는 적고 아직도 연구개발 중에 있다. 반도체 가스센서의 모재료와 촉매를 여러 가지로 바꾸거나 조합하고 센서 동작온도를 변경함으로써 선택성을 부여 하기도 한다 많은 금속산화물 세라믹스 이 가스센서의 연구 대상이 되고 있는데 가장 많이 연구되어 사용중인 것으로는SnO2 , ZnO, Fe2O3등이 있다.
아래의 테이블은 MQ 시리즈 센서의 여러 감지 기능을 요약한 것이다.
Semiconductor sensor for Flammable gas, Plastic or Metal cover | ||
Mode | Target Gas | Datasheet |
MQ-2 | General combustible gas | |
MQ-3 | Alcohol | |
MQ-4 | Natural gas, Methane | |
MQ-5 | LPG, Natural gas, Coal gas | |
MQ-6 | LPG, Propane | |
MQ-7 | Carbon Monoxide | |
MQ-8 | Hydrogen | |
MQ-9 | CO and Combustible gas | |
MQ306 | LPG, Propane | |
MQ307 | Carbon Monoxide | |
MQ303 | Alcohol | |
MQ131 | Ozone | |
MQ135 | Air Quality Control | |
Semiconductor sensor for Toxic gas | ||
MQ136 | Sulfureted Hydrogen (H2S) | |
MQ137 | Ammonia (NH3) | |
MQ138 | VOC (Mellow, Benzene, Aldehyde, Ketone, Ester ) |
가스센서를 사용한 경보기 제작과 사용상의 주의점
가스는 공기보다 가벼운 가스의 그룹과 무거운 가스의 그룹으로 대별된다 따라서 공기보다 가벼운 가스를 감지할 때는 천장면 이내에 공기보다 무거운 가스의 경우는 바닥 면에서 이내 30cm에 설치한다. 또 도시가스가 실내에서 누설된 경우 폭발 농도까지 될 때까지는 상당한 시간을 요하며 가스가 상승 또는 강하하면서 수평방향으로 확산하는 성질이 있으므로 실내에서 가스의 흐름을 차단 하는 것이 없으면 가스경보기는 가스기구나 가스설비까지의 수평거리가 4m이내인 곳에 설치한다. 가스센서의 특성은 다른 잡가스 수증기 온도 및 습도에 영향을 받기 때문에 경보기 설치 시에는 피해야 할 장소들이 있다.
가스센서 핀 연결 맵과 테스트 소스코드를 아래에 나타내었다. 가스가 감지 되지 않은 경우 디지털 출력은HIGH 에 있다가 가스가 감지되면 LOW 로 하강하는 순간에 센싱을 한다. 가스에 주의하여 시험을 진행하도록 한다. 아래에 가스센서의 모양과 PinMap을 나타내었다
가스센서 연결 이미지
가스센서 컬리브레이션 방법 : +자 드라이버를 사용하여 오른쪽 왼쪽으로 돌려 신호감지 LED 가 밝아지고, 흐려지는 지점에서 약간 흐려지는 방향으로 회전하여 희미한 상태에 있도록 보정한다. 이 상태에서 가스 라이터를 사용하여 가스를 공급하면 ‘가스 감지 LED’ 가 환하게 밝아진다.
가스센서 테스크 코드 home-gas.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>
#define HOMEGAS 24 //gpio19
volatile unsigned char homegasdetect = 0;
// myInterrupt: called every time an event occurs
void homegasInterrupt(void) {
homegasdetect = 0x01;
}
int main(void) {
// sets up the wiringPi library
if (wiringPiSetup () < 0) {
fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
return 1;
}
// set Pin 17/0 generate an interrupt on high-to-low transitions
// and attach myInterrupt() to the interrupt
if ( wiringPiISR (HOMEGAS, INT_EDGE_FALLING, &homegasInterrupt) < 0 ) {
fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
return 1;
}
while ( 1 ) {
delay( 500 ); // wait 1 second
if(homegasdetect == 0x01)
{
printf("gas detected...\n");
homegasdetect = 0;
}
else
printf("not gas \n");
}
return 0;
}
컴파일 명령
$gcc –o home-gas home-gas.c –lwiringPi
실행하여 결과를 확인한다.
$sudo ./gasdetect
not gas
not gas
not gas
gas detected...
gas detected...
gas detected...
가스를 흡착하여 출력을 발생시키므로 일단 가스 감지가 되면 가스가 공기 중으로 날라가 안정회 될 때까지 출력신호의 안정화가 지연된다. 불꽃센서와 가스 센서를 시험할 때는 화재, 가스에 주의해야 한다. 이해를 돕기 위해 아래 소스코드는 불꽃센서와 가스센서를 위와 같은 방법으로 테스트하여 결과를 볼 수 있게 만들었다. 각 센서에서 결과를 얻는 방법은 동일하게 구성되어 있다. 인터럽트 처리를 받는 함수가 2개 구현되었고 선언도 2개의 GPIO 핀에 대해 설정하였다.
불꽃과 가스를 인터럽트 방식으로 감지하는 소스코드 home-flamegas.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>
// Use GPIO Pin 7, which is Pin 11 for wiringPi library
#define HOMEFLAME 23 //gpio13
#define HOMEGAS 24 //gpio19
// the event counter
volatile int eventCounter = 0;
volatile unsigned char homeflamedetect = 0;
volatile unsigned char homegasdetect = 0;
// -------------------------------------------------------------------------
// myInterrupt: called every time an event occurs
void homeflameInterrupt(void) {
eventCounter++;
homeflamedetect = 0x01;
}
void homegasInterrupt(void) {
eventCounter++;
homegasdetect = 0x01;
}
// -------------------------------------------------------------------------
// main
int main(void) {
// sets up the wiringPi library
if (wiringPiSetup () < 0) {
fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
return 1;
}
// set Pin 17/0 generate an interrupt on high-to-low transitions
// and attach myInterrupt() to the interrupt
if ( wiringPiISR (HOMEFLAME, INT_EDGE_FALLING, &homeflameInterrupt) < 0 ) {
fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
return 1;
}
if ( wiringPiISR (HOMEGAS, INT_EDGE_FALLING, &homegasInterrupt) < 0 ) {
fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
return 1;
}
// display counter value every second.
while ( 1 ) {
//printf( "%d\n", eventCounter );
//eventCounter = 0;
//delay( 1000 ); // wait 1 second
if(homeflamedetect == 0x01)
{
printf("home flame detected...\n");
homeflamedetect = 0;
}
if(homegasdetect == 0x01)
{
printf("gas detected...\n");
homegasdetect = 0;
}
}
return 0;
}
컴파일 명령
$gcc –o home-flamegas home-flamegas.c –lwiringPi
실행 명령
$sudo ./home-flamegas
혹은
$./home-flamegas
테스트 결과
pi@raspberrypi ~/smarthome $ sudo ./home-flamegas
home flame detected…
home flame detected…
home flame detected…
home flame detected…
gas detected…
gas detected…
home flame detected…
여기까지 고생하셨습니다. 다음엔 어떤 센서가 기다리고 있을까요?
'개발자 > 라즈베리파이4' 카테고리의 다른 글
라즈베리파이4 스마트홈 온도 습도센서 코드 6 (0) | 2023.05.15 |
---|---|
스마트홈 서버 프로그램 데이터 베이스 에러 해결 (1) | 2023.05.12 |
라즈베리파이4 스마트홈 조도센서 코드 5 (0) | 2023.05.12 |
라즈베리파이4 스마트홈 소리센서 코드 4 (0) | 2023.05.11 |
라즈베리파이4 스마트홈 불꽃 센서 코드 2 (1) | 2023.05.09 |
라즈베리파이4 스마트홈 제품 특징 1 (1) | 2023.05.09 |
Raspberry Pi 4 기구 도면 (0) | 2023.04.07 |
RTOS 소개 1 - 실시간 운영 체제(RTOS)란? (1) | 2023.03.30 |
더욱 좋은 정보를 제공하겠습니다.~ ^^