아두이노 우노 Q 가스 센서

MQ2 가스 센서는 LPG, 연기, 알코올, 프로판, 수소, 메탄 및 일산화탄소를 감지합니다. 디지털 신호(가스/무가스)와 아날로그 신호(가스 농도 수준)를 출력합니다. Bridge와 Telegram을 사용하면 Arduino UNO Q가 휴대폰에 즉시 가스 누출 알림을 보낼 수 있습니다.

이 튜토리얼에서 배울 내용:

Arduino UNO Q gas sensor

※ 주의:

조기 경고 목적으로만 가스 센서를 사용하십시오. 항상 적절한 가스 감지기, 환기 및 안전 장비와 함께 사용하십시오. 생명 안전 응용 프로그램을 위해 이 센서만 믿고 사용하지 마십시오.

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×MQ2 가스 센서 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

MQ2 가스 센서에 대해

MQ2는 다음을 감지할 수 있습니다: LPG, 연기, 알코올, 프로판, 수소, 메탄 및 일산화탄소. 개별 가스를 구별하지 않으며 전체 가연성/유해 가스 수준을 측정합니다.

mq2 gas sensor 사용법 핀아웃

핀배치

  • VCC 핀: 5V 전원(내부 히터에는 5V가 필요함)
  • GND 핀: 그라운드
  • DO 핀: 디지털 출력 — HIGH = 가스 없음, LOW = 가스 감지됨. 감도는 온보드 포텐셔미터로 조정됩니다.
  • AO 핀: 아날로그 출력 — 높은 값 = 더 많은 가스 농도

LED 표시기

  • PWR-LED: 전원 표시기
  • DO-LED: 가스가 감지되면 켜집니다(DO 핀 LOW)

워밍업 요구 사항

MQ2는 정확한 판독 전에 내부 히터가 작동 온도에 도달해야 합니다:

  • 오랜 시간 후 처음 사용(>1개월): 24-48시간 워밍업
  • 정상 사용: 5-10분 워밍업; 초기 판독값이 높을 수 있지만 안정화됩니다

코드에는 setup()에 최소 20초의 워밍업 지연이 포함되어 있습니다. 센서에 전원을 공급하고 판독값을 신뢰하기 전에 기다립니다.

※ 주의:

MQ2 AO 핀은 5V에서 전원을 공급할 때 ~5V까지 출력할 수 있습니다. Arduino UNO Q MCU의 ADC 참조는 3.3V입니다 — 3.3V 이상의 전압은 ADC를 4095에서 포화시킵니다. DO 핀을 주 가스 감지 방법으로 사용하고 AO는 상대 강도로만 사용하십시오.

배선 다이어그램

Arduino UNO Q mq2 gas sensor 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

MQ2 가스 센서 핀 Arduino UNO Q MCU
VCC 5V
GND GND
DO D2
AO A0

가스 센서 프로그래밍 방법

  • DO 핀을 디지털 입력으로 구성합니다:
pinMode(DO_PIN, INPUT);
  • 두 출력을 모두 읽습니다:
int do_state = digitalRead(DO_PIN); // HIGH = no gas, LOW = gas int ao_value = analogRead(AO_PIN); // 0-4095, higher = more gas
  • 디지털 출력에서 가스를 확인합니다:
if (do_state == LOW) { Serial.print("Gas DETECTED! Intensity (AO): "); Serial.println(ao_value); }

Arduino UNO Q 코드

Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:

  • STM32 MCU는 센서를 20초 동안 워밍업한 다음 500ms마다 DO와 AO를 모두 읽습니다.
  • Qualcomm MPU는 Wi-Fi가 있는 Debian Linux를 실행합니다 — 이 섹션에서는 MCU만 프로그래밍됩니다. 이후 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방식을 보여줍니다.
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-gas-sensor */ // MQ2 Gas Sensor: // DO pin: HIGH = no gas, LOW = gas detected // AO pin: analog — higher value = more gas (12-bit ADC: 0-4095) // VCC = 5V (heating element requires 5V) // The MCU ADC reference is 3.3V. AO readings above 3.3V will saturate at 4095. // Use DO pin as the primary detection method for reliable gas alerts. #define DO_PIN 2 // The Arduino UNO Q MCU pin connected to DO of the MQ2 sensor #define AO_PIN A0 // The Arduino UNO Q MCU pin connected to AO of the MQ2 sensor void setup() { Serial.begin(9600); pinMode(DO_PIN, INPUT); Serial.println("Warming up the MQ2 sensor..."); delay(20000); // allow sensor to warm up Serial.println("Arduino UNO Q MQ2 Gas Sensor ready"); } void loop() { int do_state = digitalRead(DO_PIN); // HIGH = no gas, LOW = gas int ao_value = analogRead(AO_PIN); // 0-4095, higher = more gas if (do_state == LOW) { Serial.print("Gas DETECTED! Intensity (AO): "); Serial.println(ao_value); } else { Serial.print("No gas. AO value: "); Serial.println(ao_value); } delay(500); }

빠른 단계

Arduino UNO Q를 처음 사용하시나요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따르세요.

  • 연결: 배선 다이어그램에 표시된 대로 MQ2 가스 센서를 Arduino UNO Q MCU에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다(예: GasSensor).
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • Serial Monitor에서 20초 워밍업 메시지가 완료될 때까지 기다립니다.
  • 센서를 소량의 가스에 노출합니다(예: 라이터를 불태우지 않고 센서 근처에 들고 있음) — Serial Monitor 출력을 관찰합니다.
  • DO LED가 반응하지 않으면 포텐셔미터를 조정합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Warming up the MQ2 sensor... [2026-04-29 09:00:21] Arduino UNO Q MQ2 Gas Sensor ready [2026-04-29 09:00:22] No gas. AO value: 312 [2026-04-29 09:00:23] No gas. AO value: 310 [2026-04-29 09:00:24] Gas DETECTED! Intensity (AO): 2187 [2026-04-29 09:00:25] Gas DETECTED! Intensity (AO): 3042 [2026-04-29 09:00:26] No gas. AO value: 315

Bridge: Linux + MCU

이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다. Linux 측에서는 Bridge를 통해 가스 상태 및 이벤트를 읽을 수 있습니다:

  • 가스 센서는 MCU에 연결되어 있습니다 — MCU는 20초 동안 워밍업한 다음 500ms마다 DO와 AO를 읽습니다.
  • MPU는 센서 핀을 직접 읽을 수 없습니다 — Bridge 함수를 호출하여 상태, 강도 값 또는 이벤트를 얻습니다.
  • MPU에는 Wi-Fi가 있습니다 — 완전한 Debian Linux를 실행하며, 가스가 감지되는 즉시 긴급 Telegram 가스 알림을 보낼 수 있습니다.
  • Arduino_RouterBridge는 두 프로세서 간에 RPC 통신을 활성화합니다.
  • ⚠️ /dev/ttyHS1(Linux) 및 Serial1(MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 절대 열지 마십시오.

MCU 코드(Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-gas-sensor */ #include "Arduino_RouterBridge.h" #define DO_PIN 2 // The Arduino UNO Q MCU pin connected to DO of the MQ2 sensor #define AO_PIN A0 // The Arduino UNO Q MCU pin connected to AO of the MQ2 sensor bool cached_gas = false; int cached_ao = 0; bool gas_event = false; bool prev_gas = false; unsigned long last_read_ms = 0; const unsigned long READ_INTERVAL = 500; String get_state(String arg) { return cached_gas ? "gas" : "no_gas"; } String get_value(String arg) { return String(cached_ao); } String get_event(String arg) { if (gas_event) { gas_event = false; return "gas_detected"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(DO_PIN, INPUT); Monitor.println("Warming up the MQ2 sensor..."); delay(20000); // warm-up before Bridge callbacks start serving data Bridge.provide("get_state", get_state); Bridge.provide("get_value", get_value); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q MQ2 Gas Sensor Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= READ_INTERVAL) { last_read_ms = now; int do_state = digitalRead(DO_PIN); // LOW = gas detected cached_ao = analogRead(AO_PIN); cached_gas = (do_state == LOW); if (cached_gas && !prev_gas) { gas_event = true; Monitor.print("GAS DETECTED! AO value: "); Monitor.println(cached_ao); } else if (!cached_gas && prev_gas) { Monitor.println("Gas cleared. Air quality normal."); } prev_gas = cached_gas; } }

Python 코드(Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-gas-sensor */ from arduino.app_utils import * import time def loop(): state = Bridge.call("get_state") value = Bridge.call("get_value") print(f"Gas state: {state} AO value: {value}") time.sleep(0.5) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 MQ2 가스 센서를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기하고 GasSensorBridge라는 새 앱을 만듭니다.
  • MCU 스케치를 붙여넣기합니다 sketch/sketch.ino에.
  • Python 코드를 붙여넣기합니다 Python 파일에.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
  • Search for Arduino_RouterBridge created by Arduino and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
Arduino_RouterBridge Arduino

This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

0.4.1
Install
More Info
  • 업로드: Run 버튼을 클릭합니다. 워밍업 기간이 끝날 때까지 기다립니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서를 가스에 노출합니다 — 두 콘솔에서 이벤트를 관찰합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Warming up the MQ2 sensor... [2026-04-29 09:00:21] Arduino UNO Q MQ2 Gas Sensor Bridge ready [2026-04-29 09:00:26] GAS DETECTED! AO value: 2187 [2026-04-29 09:00:30] Gas cleared. Air quality normal.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:22] Gas state: no_gas AO value: 310 [2026-04-29 09:00:24] Gas state: no_gas AO value: 312 [2026-04-29 09:00:26] Gas state: gas AO value: 2187 [2026-04-29 09:00:28] Gas state: gas AO value: 3042 [2026-04-29 09:00:30] Gas state: no_gas AO value: 315

Telegram

Arduino UNO Q 가스 센서에서 즉시 Telegram 가스 누출 알림을 받고 공기 품질을 원격으로 쿼리합니다.

MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지합니다.

Python 코드(Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-gas-sensor */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Auto-alert on gas detection event = Bridge.call("get_event") if event == "gas_detected": value = Bridge.call("get_value") print(f"GAS DETECTED! AO value: {value}") send_message(CHAT_ID, f"⚠️ GAS DETECTED! Intensity (AO): {value}. Ventilate immediately!") # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q Gas Sensor Bot\n" "/state - Current gas state (gas / no_gas)\n" "/value - Read analog intensity (0-4095)\n" "Automatic alert when gas is detected!") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Gas state: {result}") elif text == "/value": result = Bridge.call("get_value") send_message(chat_id, f"AO intensity value: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.3) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 받은 실제 봇 토큰으로 바꿉니다.
  • YOUR_CHAT_ID를 Telegram 채팅 ID로 바꿉니다.
  • 이 Python 코드를 앱의 Python 파일에 붙여넣기합니다(동일한 MCU 스케치 유지).
  • Run 버튼을 클릭합니다 — 워밍업 후 센서를 가스에 노출하여 Telegram 알림을 트리거합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:21] Waiting for Telegram messages... [2026-04-29 09:10:26] GAS DETECTED! AO value: 2187 [2026-04-29 09:10:32] Received: /state [2026-04-29 09:10:35] Received: /value
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
⚠️ GAS DETECTED! Intensity (AO): 2187. Ventilate immediately!
10:15 AM
/state
10:16 AM ✓✓
Gas state: no_gas
10:17 AM
/value
10:18 AM ✓✓
AO intensity value: 312
10:19 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

프로젝트 아이디어

MQ2 가스 센서와 Arduino UNO Q를 사용하여 많은 유용한 프로젝트를 만들 수 있습니다:

  • 가정용 가스 누출 알람: 스토브 근처의 주방에 설치합니다 — 가스가 감지되면 MPU가 긴급 Telegram 알림과 강도 값을 보내고 릴레이를 통해 음향 알람도 트리거합니다.
  • 환기 제어기: 가스 센서를 릴레이 제어 팬과 결합합니다 — 가스 AO가 임계값을 초과하면 MCU가 자동으로 팬을 켜고 Python에서 Telegram 알림을 보냅니다.
  • 공기 품질 로거: 매분 가스 상태 및 AO 값을 Linux의 CSV 파일에 로깅합니다 — 공기 품질 이벤트 및 최고 판독값의 일일 Telegram 요약을 보냅니다.
  • 차고 일산화탄소 모니터: 센서를 차고에 배치합니다 — 자동차 엔진이 공기에 CO를 남길 때 Telegram 알림을 받고 AO가 기준선으로 돌아갈 때 자동 알림 취소됩니다.
  • 다중 가스 안전 시스템: 가스 센서를 불꽃 센서 튜토리얼과 결합합니다 — 둘 다 동시에 위험을 감지하면 최대 긴급성을 위해 "GAS + FIRE" Telegram 알림을 보냅니다.

자신을 도전해 보세요

Arduino UNO Q의 MQ2 가스 센서로 더 나아갈 준비가 되셨나요? 다음 도전을 시도해 보세요:

  • 쉬움: 마지막 5개의 가스 감지 이벤트, 타임스탬프 및 Python 리스트에 저장된 AO 강도 값을 반환하는 /history Telegram 명령을 추가합니다.
  • 중간: 거짓 알람 필터 구현: 가스가 최소 3개의 연속 판독값(1.5초) 동안 감지되어야 MPU에서 Telegram 알림을 보냅니다 — 이는 단일 판독값 스파이크가 거짓 알람을 트리거하는 것을 방지합니다.
  • 고급: 가스 강도 추세 모니터 빌드: Python에서 마지막 20개의 AO 판독값을 추적합니다 — 가장 최근 10개 판독값의 평균이 이전 10개 판독값의 평균보다 50% 높으면 DO 핀이 트리거되기 전에도 "Gas concentration rising" Telegram 알림을 보냅니다.