아두이노 우노 Q 터치 센서

터치 센서는 디지털 버튼처럼 작동합니다 — 터치할 때 HIGH, 터치하지 않을 때 LOW를 출력합니다. Arduino UNO Q에서는 MCU에서 로컬로 터치를 모니터링하거나, Bridge를 사용하여 Linux 측에서 터치 이벤트를 감지하고 Telegram을 통해 작동할 수 있습니다.

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

Arduino UNO Q 터치 센서

필요한 하드웨어

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

터치 센서 정보

핀아웃

터치 센서에는 세 가지 핀이 있습니다:

  • GND: GND(0V)에 연결
  • VCC: 3.3V 또는 5V에 연결
  • SIGNAL: 디지털 출력 — 터치하지 않을 때 LOW, 터치할 때 HIGH를 출력합니다. Arduino UNO Q MCU의 디지털 핀에 연결하세요.
터치 센서 사용법 핀아웃

작동 원리

  • 센서가 터치되지 않으면 SIGNAL 핀은 LOW입니다
  • 센서가 터치되면 SIGNAL 핀은 HIGH입니다

터치 센서는 정확히 일시적 푸시 버튼처럼 작동합니다 — digitalRead()로 읽을 수 있으며 라이브러리가 필요하지 않습니다.

배선도

Arduino UNO Q 터치 센서 연결 배선도

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

터치 센서 핀 Arduino UNO Q MCU
GND GND
VCC 3.3V
SIGNAL D7

터치 센서 프로그래밍 방법

  • Arduino UNO Q MCU 핀을 디지털 입력으로 설정합니다:
pinMode(SENSOR_PIN, INPUT);
  • 센서 상태를 읽습니다:
int state = digitalRead(SENSOR_PIN);
  • 확인 및 응답:
if (state == HIGH) Serial.println("Touched"); else Serial.println("Not touched");

Arduino UNO Q 코드

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

  • STM32 MCU는 디지털 핀을 통해 터치 센서를 직접 읽습니다 — 모든 감지는 MCU에서 실행됩니다
  • Qualcomm MPU는 Debian Linux를 실행하고 Wi-Fi, Python 및 클라우드 연결을 처리합니다
  • 이 섹션에서는 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.

MCU는 500ms마다 터치 센서를 읽고 상태를 Serial Monitor에 출력합니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-touch-sensor */ #define SENSOR_PIN 7 void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); Serial.println("Arduino UNO Q Touch Sensor ready"); } void loop() { int state = digitalRead(SENSOR_PIN); if (state == HIGH) Serial.println("Touched"); else Serial.println("Not touched"); delay(500); }

빠른 단계

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

  • 연결: 배선도에 따라 터치 센서를 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
  • 앱에 이름을 지정합니다. 예: TouchSensor
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
  • 라이브러리 불필요 — 터치 센서는 digitalRead() 함수만 사용합니다.
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서에 손가락을 올려놓고 Serial Monitor를 지켜봅니다.

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] Arduino UNO Q Touch Sensor ready [2026-04-29 09:00:02] Not touched [2026-04-29 09:00:02] Not touched [2026-04-29 09:00:03] Touched [2026-04-29 09:00:03] Touched [2026-04-29 09:00:04] Not touched

Bridge: Linux + MCU

이 섹션에서는 Linux 측이 Bridge를 통해 터치 이벤트를 감지할 수 있도록 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다:

  • 터치 센서는 MCU 디지털 핀에 연결되어 있습니다 — MCU는 loop()에서 상태 변화를 모니터링하고 터치될 때 이벤트 플래그를 설정합니다
  • MPU는 디지털 핀을 직접 읽을 수 없습니다 — Bridge 함수를 호출하여 현재 상태를 쿼리하거나 터치 이벤트를 소비합니다
  • MPU는 Wi-Fi를 가지고 있습니다 — 전체 Debian Linux를 실행하면서, 터치 이벤트에 반응하고 Telegram 알림을 보낼 수 있습니다
  • Arduino_RouterBridgeRPC 통신을 두 프로세서 간에 활성화합니다
  • ⚠️ /dev/ttyHS1(Linux)과 Serial1(MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 절대 열지 마세요

요약하면: MCU는 loop()에서 터치 이벤트를 감지 → MPU는 Bridge를 통해 폴링 → MPU는 Wi-Fi를 통해 작업을 트리거합니다.

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-touch-sensor */ #include "Arduino_RouterBridge.h" #define SENSOR_PIN 7 int last_state = LOW; bool touch_event = false; String get_state(String arg) { return (last_state == HIGH) ? "touched" : "not_touched"; } String get_event(String arg) { if (touch_event) { touch_event = false; return "touched"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(SENSOR_PIN, INPUT); Bridge.provide("get_state", get_state); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Touch Sensor Bridge ready"); } void loop() { int state = digitalRead(SENSOR_PIN); if (state != last_state) { last_state = state; if (state == HIGH) { touch_event = true; Monitor.println("Touch detected!"); } else { Monitor.println("Touch released."); } } }

Python 코드 (Bridge)

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

빠른 단계

  • 연결: 배선도에 따라 터치 센서를 Arduino UNO Q에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 보드가 감지될 때까지 기다립니다.
  • 새 앱 만들기: Create New App을 클릭하고, 이름을 TouchSensorBridge로 지정한 후, Create를 클릭합니다.
  • MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 앱의 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
  • 업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서를 터치하고 Python 콘솔이 상태 변화를 보고하는 것을 지켜봅니다.

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] Arduino UNO Q Touch Sensor Bridge ready [2026-04-29 09:00:03] Touch detected! [2026-04-29 09:00:04] Touch released.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Touch state: not_touched [2026-04-29 09:00:02] Touch state: not_touched [2026-04-29 09:00:03] Touch state: touched [2026-04-29 09:00:04] Touch state: not_touched

Telegram

터치 센서가 활성화될 때 즉시 Telegram 알림을 받습니다.

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

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-touch-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 last_notified_state = "not_touched" 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(): global last_notified_state # Auto-notify on touch event event = Bridge.call("get_event") if event == "touched" and last_notified_state != "touched": last_notified_state = "touched" msg = "👆 Touch sensor touched!" print(msg) send_message(CHAT_ID, msg) elif event == "none": state = Bridge.call("get_state") if state == "not_touched": last_notified_state = "not_touched" # 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 Touch Sensor Bot\n" "/state - Read current touch sensor state\n" "/event - Check if a touch event occurred") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Touch state: {result}") elif text == "/event": result = Bridge.call("get_event") send_message(chat_id, f"Touch event: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.5) 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:00] Waiting for Telegram messages... [2026-04-29 09:10:05] 👆 Touch sensor touched! [2026-04-29 09:10:22] Received: /state
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
/state
10:15 AM ✓✓
Touch state: not_touched
10:16 AM
/event
10:17 AM ✓✓
Touch event: none
10:18 AM
👆 Touch sensor touched!
10:19 AM

OpenClaw

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

프로젝트 아이디어

Arduino UNO Q와 터치 센서로 많은 유용한 프로젝트를 구축할 수 있습니다:

  • 터치형 스마트 램프: 센서를 터치하여 Bridge를 통해 LED 또는 릴레이를 토글합니다 — MPU가 토글 로직을 처리하고 각 터치 이벤트를 타임스탬프와 함께 기록합니다
  • 도어 초인종: 문틀 근처에 터치 센서를 배치합니다 — 터치되면, MPU가 음성 파일을 재생하거나 Telegram 알림을 보내 방문자를 알립니다
  • 비밀 노크 카운터: 3초 내의 연속 터치를 Python 측 로직으로 카운트합니다 — 카운트가 사전 설정된 패턴과 일치하면, Bridge가 언락 릴레이를 트리거합니다
  • 현재 감지 디스플레이: 센서를 터치하여 OLED 디스플레이를 깨웁니다 — MCU는 첫 번째 터치 시 디스플레이를 켜고 10초 동안 비활성화 후 끕니다
  • 랩 안전 확인: Bridge 명령이 고전력 릴레이를 활성화하기 전에 터치 확인이 필요합니다 — Python 측이 제어 신호를 보내기 전에 get_event()를 확인합니다

도전해보세요

Arduino UNO Q의 터치 센서로 더 나아갈 준비가 되었나요? 이 도전들을 시도해보세요:

  • 쉬움: 시작 이후 터치 횟수를 카운트하고 get_count(String) Bridge 함수를 통해 노출합니다 — Python 측이 카운트가 증가할 때마다 카운트를 출력합니다.
  • 중간: 더블 탭 감지기를 구현합니다: MCU는 터치 타임스탬프를 기록하고 500ms 내에 두 터치가 발생하면 double_tap 플래그를 설정합니다 — Python 측이 get_event()를 통해 이를 검색하고 Telegram 알림을 보냅니다.
  • 어려움: 터치 기반 모스 부호 입력을 구축합니다: MCU는 짧은 터치(점)와 긴 터치(>500ms, 대시)를 구분합니다 — Python 측이 시퀀스를 디코딩하고 디코딩된 문자를 Telegram에 보냅니다.

관련 튜토리얼