Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第19篇:滾珠傾斜開關(Tilt Switch 原理、SW-520D 引腳接線圖與數位輸入程式範例)

Arduino 滾珠傾斜開關接線圖

前言:什麼是滾珠傾斜開關?

在 Arduino 入門感測器中,滾珠傾斜開關(Tilt Switch Sensor) 是最簡單且實用的「姿勢與角度感測元件」。

它常被應用於:

  • 倒地警報器(如老人跌倒防護、安全帽撞擊偵測)

  • 遊戲手把或玩具的傾斜觸發

  • 智慧防盜系統(物品被移位或傾斜時發出警報)

相比昂貴且複雜的三軸加速度計(如 MPU6050),滾珠開關成本極低、控制簡單,只需讀取 高電位(HIGH)低電位(LOW) 數位訊號即可完成觸發!

一、 滾珠傾斜開關(SW-520D)工作原理

常見的滾珠傾斜開關型號為 SW-520D,其外觀為一個小型金屬或塑膠圓柱管,內部包含:

  1. 兩根金屬電極(Pins):延伸至金屬管內部底部。

  2. 1~2 顆微型金屬滾珠:可以在金屬管內自由滾動。

觸發機制說明

  • 直立/立起時: 內部的金屬滾珠受重力落至底部,同時接觸兩根金屬電極,使電路導通(Closed/ON)

  • 傾斜/倒下時(角度通常 ): 滾珠滾離底部電極,導致兩腳位之間斷開(Open/OFF)

 

滾珠傾斜開關 SW-520D 運作原理

二、 實驗材料與電路接線圖

🛠️ 所需材料清單

  • Arduino Uno R3 開發板 × 1

  • 2 腳位滾珠傾斜開關(SW-520D 裸晶元件) × 1

  • 10kΩ 電阻 × 1(作為下拉電阻,防止腳位訊號懸空浮動)

  • 實驗麵包板 × 1

  • 杜邦線 × 3~4 根

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含滾珠開關、各式感測器與必備電子零件)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

🔌 電路接線圖與原理(下拉電阻配置)

當使用 2 腳位的裸晶滾珠開關時,因為只有兩根引腳,元件本身沒有分正負極。為了讓 Arduino 能夠穩定讀取高(HIGH)與低(LOW)電位,我們必須在電路中加入一顆 10kΩ 下拉電阻

Arduino 連接 SW-520D 2Pin 滾珠傾斜開關電路接線圖,包含 10kΩ 下拉電阻(Pull-down Resistor)與 Digital Pin 2 訊號讀取腳位配置

引腳連接步驟表

元件 / 腳位連接對象說明
滾珠開關 第 1 腳Arduino 5V提供高電位參考源
滾珠開關 第 2 腳Arduino Pin 2 & 10kΩ 電阻一端訊號輸出點(同時接到 Arduino 與電阻)
10kΩ 電阻另一端Arduino GND拉低電位至接地端,消除浮動雜訊

💡 運作原理說明:

  • 直立導通時: 5V 電壓通過滾珠開關直接到達 Pin 2,Pin 2 讀取到 HIGH (5V)

  • 傾斜斷開時: 滾珠滾離,電路斷開。Pin 2 透過 10kΩ 電阻連接至 GND,穩定讀取到 LOW (0V)

三、 Arduino 滾珠傾斜開關程式範例

由於沒有外接 LED 燈,本程式改為利用 Arduino 板載內建的 LED(Pin 13)序列埠監控視窗(Serial Monitor) 來輸出監控結果:

💻 完整程式碼

/*
 * 【Arduino入門教學】第19篇:2 Pin 滾珠傾斜開關實作
 * 發佈單位:米羅科技文創學院
 * 說明:讀取 2 Pin SW-520D 滾珠開關訊號,並透過 Serial Monitor 與板載 LED 顯示狀態
 */

const int TILT_PIN = 2;       // 滾珠開關連接至 Pin 2
const int BOARD_LED = 13;     // 使用 Arduino 開發板內建的 Pin 13 LED

int tiltState = 0;            // 儲存開關狀態的變數

void setup() {
  Serial.begin(9600);              // 初始化序列埠通訊,鮑率 9600
  pinMode(TILT_PIN, INPUT);        // 設定 Pin 2 為數位輸入
  pinMode(BOARD_LED, OUTPUT);      // 設定板載 LED 為輸出模式
  
  Serial.println("【Mirotek】滾珠傾斜開關測試開始...");
}

void loop() {
  // 讀取 Pin 2 數位電位 (HIGH 或 LOW)
  tiltState = digitalRead(TILT_PIN);

  // 判斷開關狀態
  if (tiltState == HIGH) {
    // 導通狀態(通常為直立時)
    digitalWrite(BOARD_LED, HIGH); // 點亮板載 L 燈
    Serial.println("狀態:直立 / 導通 (HIGH)");
  } else {
    // 斷開狀態(傾斜時)
    digitalWrite(BOARD_LED, LOW);  // 熄滅板載 L 燈
    Serial.println("⚠️ 警報:裝置已傾斜 / 斷開 (LOW)");
  }

  delay(200); // 簡短延遲 0.2 秒,避免序列埠刷頁過快並過濾機械彈跳
}

 

四、 常用語法與技術細節解析

語法指令功能說明
pinMode(pin, INPUT)將指定腳位設定為數位輸入模式,用來讀取開關訊號。
digitalRead(pin)讀取腳位的電位狀態,傳回 HIGH(高電位 5V)或 LOW(低電位 0V)。
pinMode(pin, INPUT_PULLUP)啟動 Arduino 內部上拉電阻(若是使用裸晶元件且沒接外接電阻時可用)。

⚡ 機械彈跳(Debounce)問題說明

由於滾珠開關內部是靠金屬珠碰撞電極導通,在晃動或臨界角度時,滾珠可能會有微小的震動彈跳,導致 Arduino 在短時間內讀到多次 HIGH/LOW 切換。在程式中加上小幅度的 delay(50~100) 或使用 防彈跳程式演算法(Debounce Delay) 能讓讀取更加穩定。

五、 常見問題與除錯 (FAQ)

Q1: 為什麼手沒動它,序列埠卻一直亂印「警報/沒警報」?

解答:

  1. 腳位懸空(Floating Pin): 如果使用的是 2Pin 獨立元件且沒有接 10kΩ 下拉電阻,數位腳位會接收到環境靜電干擾。請務必加上 下拉電阻 或改用 INPUT_PULLUP 模式。

  2. 放置角度處於臨界值: 請確認感測器安裝方向,確保平放時滾珠能完全接觸底部。

Q2: 滾珠傾斜開關與水銀開關(Mercury Switch)有什麼不同?

解答:

  • 滾珠開關(SW-520D): 使用金屬小珠,安全無毒、耐碰撞,是目前主流且符合環保規範(RoHS)的選擇。

  • 水銀開關: 利用液體水銀導通,精密度較高,但水銀含有劇毒且易碎,已被全面淘汰與禁售。

🔗 延伸閱讀與推薦課程

 

相關文章