아두이노 우노 Q SW520D 틸트 센서

SW520D 틸트 센서는 방향 변화를 감지하고 디지털 신호를 출력합니다. 단순한 볼 스위치 메커니즘을 사용합니다 — 포텐셜미터나 아날로그 출력이 없습니다. 객체가 기울어지거나, 넘어지거나, 움직일 때 동작을 트리거하는 데 사용합니다. 브릿지와 텔레그램을 사용하면 Arduino UNO Q는 틸트가 감지되는 순간 즉시 알림을 보낼 수 있습니다.

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

Arduino UNO Q SW520D 기울기 센서

필요한 하드웨어

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

SW520D 틸트 센서 정보

SW520D 틸트 센서 모듈은 원통형 하우징 내부의 작은 금속 볼을 사용하여 방향 변화를 감지합니다. 센서가 직립 상태일 때 볼이 전기적 접점을 닫습니다. 센서가 기울어질 때 볼이 굴러가며 접점을 엽니다. 모듈은 간단한 디지털 신호를 출력합니다:

  • HIGH: 센서가 직립 상태입니다 — 틸트가 감지되지 않습니다
  • LOW: 센서가 기울어져 있습니다 — 틸트가 감지됩니다

모듈에는 다음이 포함됩니다:

  • VCC pin: 3.3V ~ 5V 전원 공급
  • GND pin: 접지
  • DO pin: 디지털 출력 — HIGH = 직립, LOW = 틸트 감지됨
  • PWR LED: 전원 표시기
  • Status LED: 틸트 상태를 반영합니다 — 직립 시 켜짐, 기울어질 시 꺼짐
SW520D 기울기 센서 사용법 핀아웃
image source: diyables.io

배선 다이어그램

Arduino UNO Q SW520D 기울기 센서 연결 배선도

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

SW520D Tilt Sensor Pin Arduino UNO Q MCU
GND GND
VCC 5V
DO D8

SW520D 틸트 센서 프로그래밍 방법

  • 센서 핀을 디지털 입력으로 구성합니다:
pinMode(SENSOR_PIN, INPUT);
  • 디지털 출력을 읽습니다:
int tilt_state = digitalRead(SENSOR_PIN);
  • 이전 상태와 비교하여 틸트 이벤트를 감지합니다:
if (prev_state == HIGH && tilt_state == LOW) Serial.println("Tilt DETECTED"); else if (prev_state == LOW && tilt_state == HIGH) Serial.println("Tilt gone — upright again"); prev_state = tilt_state;

Arduino UNO Q 코드

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

  • STM32 MCU는 SW520D 틸트 센서의 디지털 출력을 읽고 틸트 이벤트를 감지합니다
  • Qualcomm MPU는 Wi-Fi가 있는 Debian Linux를 실행합니다 — 이 섹션에서는 MCU만 프로그래밍됩니다. 나중 섹션에서 두 프로세서가 브릿지를 통해 함께 작동하는 방법을 보여줍니다.
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-sw520d-tilt-sensor */ // SW520D tilt sensor DO pin: HIGH = upright, LOW = tilt detected #define SENSOR_PIN 8 // The Arduino UNO Q MCU pin connected to DO of the SW520D tilt sensor int prev_tilt_state = HIGH; int tilt_state; void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); Serial.println("Arduino UNO Q SW520D Tilt Sensor ready"); } void loop() { tilt_state = digitalRead(SENSOR_PIN); if (prev_tilt_state == HIGH && tilt_state == LOW) Serial.println("Tilt DETECTED"); else if (prev_tilt_state == LOW && tilt_state == HIGH) Serial.println("Tilt gone — upright again"); prev_tilt_state = tilt_state; }

빠른 단계

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

  • 연결: 배선 다이어그램에 표시된 대로 SW520D 틸트 센서를 Arduino UNO Q MCU에 배선합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 App 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • App에 이름을 지정합니다. 예: SW520DTiltSensor
  • 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 출력을 관찰합니다.
  • 신뢰할 수 있는 감지를 위해 센서가 올바른 직립 위치에 장착되어 있는지 확인합니다.

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 SW520D Tilt Sensor ready [2026-04-29 09:00:05] Tilt DETECTED [2026-04-29 09:00:05] Tilt gone — upright again [2026-04-29 09:00:08] Tilt DETECTED [2026-04-29 09:00:08] Tilt gone — upright again

브릿지: Linux + MCU

이 섹션에서는 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하여 Linux 측이 브릿지를 통해 틸트 상태를 읽고 틸트 이벤트를 받을 수 있도록 합니다:

  • SW520D 틸트 센서는 MCU에 연결됩니다 — MCU는 디지털 출력을 지속적으로 모니터링하고 현재 상태를 캐시합니다
  • MPU는 센서 핀을 직접 읽을 수 없습니다 — 현재 상태를 가져오거나 새로운 틸트 이벤트를 확인하기 위해 브릿지 함수를 호출합니다
  • MPU는 Wi-Fi를 가지고 있습니다 — 전체 Debian Linux를 실행하여 틸트가 감지되는 순간 텔레그램 알림을 보낼 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간의 RPC 통신을 활성화합니다
  • ⚠️ /dev/ttyHS1 (Linux) 및 Serial1 (MCU)은 라우터에 의해 예약됨 — 사용자 코드에서 이들을 열지 마세요

요약: MCU가 DO 핀을 통해 틸트를 감지 → 이벤트 플래그 설정 → MPU가 브릿지를 폴링 → MPU가 텔레그램 알림을 보냅니다.

MCU 코드 (브릿지)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-sw520d-tilt-sensor */ #include "Arduino_RouterBridge.h" #define SENSOR_PIN 8 // The Arduino UNO Q MCU pin connected to DO of the SW520D tilt sensor bool cached_tilt = false; // true = tilt present bool tilt_event = false; // true = new tilt detected (falling edge) int prev_state = HIGH; String get_state(String arg) { return cached_tilt ? "tilt" : "upright"; } String get_event(String arg) { if (tilt_event) { tilt_event = false; return "tilt_detected"; } 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 SW520D Tilt Sensor Bridge ready"); } void loop() { int current = digitalRead(SENSOR_PIN); if (prev_state == HIGH && current == LOW) { // Upright → Tilt cached_tilt = true; tilt_event = true; Monitor.println("Tilt detected!"); } else if (prev_state == LOW && current == HIGH) { // Tilt → Upright cached_tilt = false; Monitor.println("Upright again."); } prev_state = current; }

Python 코드 (브릿지)

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

빠른 단계

  • 연결: 배선 다이어그램에 표시된 대로 SW520D 틸트 센서를 Arduino UNO Q에 배선합니다.
  • Arduino App Lab 열기TiltSensorBridge라는 이름으로 새 App을 만듭니다.
  • 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] Arduino UNO Q SW520D Tilt Sensor Bridge ready [2026-04-29 09:00:05] Tilt detected! [2026-04-29 09:00:05] Upright again.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Tilt state: upright [2026-04-29 09:00:03] Tilt state: upright [2026-04-29 09:00:05] Tilt state: tilt [2026-04-29 09:00:06] Tilt state: upright

텔레그램

Arduino UNO Q SW520D 틸트 센서에서 틸트가 감지될 때 즉시 텔레그램 알림을 받으세요.

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

Python 코드 (텔레그램)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-sw520d-tilt-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 new tilt detection event = Bridge.call("get_event") if event == "tilt_detected": print("Tilt detected! Sending Telegram alert.") send_message(CHAT_ID, "📐 Tilt detected by Arduino UNO Q!") # 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 SW520D Tilt Sensor Bot\n" "/state - Current tilt state (tilt / upright)\n" "Automatic alert when tilt is detected") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Tilt state: {result}") App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 받은 실제 봇 토큰으로 바꿉니다.
  • YOUR_CHAT_ID를 텔레그램 chat ID로 바꿉니다.
  • 이 Python 코드를 App의 Python 파일에 붙여넣습니다 (MCU 스케치는 같게 유지합니다).
  • Run 버튼을 클릭합니다 — 센서를 기울여 텔레그램 알림을 트리거합니다.

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] Tilt detected! Sending Telegram alert. [2026-04-29 09:10:10] 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
📐 Tilt detected by Arduino UNO Q!
10:15 AM
/state
10:16 AM ✓✓
Tilt state: upright
10:17 AM
/state
10:18 AM ✓✓
Tilt state: tilt
10:19 AM

OpenClaw

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

프로젝트 아이디어

Arduino UNO Q와 SW520D 틸트 센서로 많은 유용한 프로젝트를 만들 수 있습니다:

  • 반 타동 탐지: 센서를 인클로저에 부착합니다 — 기울어지거나 움직이면 MPU가 언제 방해가 발생했는지 알 수 있도록 타임스탬프가 있는 즉시 텔레그램 알림을 보냅니다
  • 틸트 활성화 스위치: 브릿지를 통해 틸트 센서를 릴레이와 함께 사용합니다 — Python이 틸트 이벤트를 감지하고 방향에 따라 조명 또는 선풍기를 켜거나 끕니다
  • 장비 모니터: 센서를 기계나 가구에 장착합니다 — MPU가 각 틸트 이벤트를 Linux의 CSV 파일에 기록하고 하루 끝에 텔레그램 보고서를 보냅니다
  • 스마트 금고 알림: 틸트 센서를 도어 센서와 결합합니다 — 금고 문이 열리거나 금고 자체가 움직일 때 텔레그램 알림을 보냅니다
  • RC 틸트 컨트롤러: 두 개의 SW520D 센서를 다른 축에 장착합니다 — MPU가 브릿지를 통해 두 상태를 읽고 방향 명령을 Wi-Fi를 통해 원격 장치에 보냅니다

관련 튜토리얼