DEV Community

張旭豐
張旭豐

Posted on

磁力怎麼做成互動裝置?從感測到致動的完整實作

磁力怎麼做成互動裝置?從感測到致動的完整實作


感性開場:磁鐵的神秘感

當磁鐵自動把門關上的那一刻

你有沒有注意過——

家裡的防盜門,關上時總是「喀」的一聲,精準而乾脆。

但門框上明明沒有按鈕。門是怎麼知道「自己被關上了」的?

答案就藏在門框與門扇之間,那顆小小的磁性感測器

磁鐵吸附的瞬間,磁場消失,感測器立刻知道:「門被打開了。」

這個「看不見的力量」,不只可以感知——還可以驅動。

當磁場可以被控制,磁力就可以被設計成一種互動語言。

這篇文章,要帶你從零開始,做一個真正的磁力互動系統——上半場用磁性感測,下半場用磁力驅動,兩者結合,就能做出一個完整的磁力互動裝置。


你可能會想要磁力的場景

在開始之前,先問自己一個問題:

磁力,對你來說可以是什麼?

想像幾個畫面——

  • 無接觸開關:衛浴燈具不需要按鈕,磁鐵靠近就亮、離開就滅——手濕的時候特別好用
  • 門窗防盜警示:門被打開的瞬間,警報器響起,不需要任何按鍵
  • 轉速偵測:單車輪胎轉一圈,磁鐵經過感測器一次,Arduino 就能算出時速——DIY 碼表就這樣誕生
  • 磁懸浮展示:一個NdFeB磁鐵,在底座線圈的排斥力下緩緩懸浮——就像《回到未來》的懸浮滑板
  • 自動吸合機構:盒子蓋子靠近時,磁力自動把它吸上——就像MacBook的MagSafe那樣優雅
  • 舵機磁力控制:用磁力替代物理連桿,讓機構傳動無聲、更耐久

這些應用聽起來像是工廠才會用到的技術,但你完全可以自己動手做出來。底層原理,都是同一件事:磁場可以被感測、可以被操控。

接下來,分成兩個部分來實作:

  • 上半場:磁性感測——讓Arduino「感覺到」磁場的存在
  • 下半場:磁力致動——讓Arduino「命令」磁鐵移動

上半場:磁性感測——讓系統知道磁場的變化

Hall Sensor:看不見的磁場,翻譯成數位訊號

最主流的磁性感測方案,是 Hall Sensor(霍爾感測器)

它的原理很物理:當導體通過磁場時,會在垂直方向產生電壓差。這個現象叫做霍爾效應

Hall Sensor 把這個微弱的電壓變化,放大成乾淨的數位訊號輸出。常見的型號有:

  • A3144:數位輸出,有磁場時輸出 LOW,無磁場時輸出 HIGH
  • 49E:類比輸出,可以偵測磁場強弱
  • ACS712:電流感測專用,也能順便測磁場

對於 DIY 互動專案,A3144 是最親民的選擇——只需要一顆IC,加上幾條線,Arduino 就能讀到磁場的變化。

Hall Sensor 霍爾感測器

圖1:Hall Sensor 可以感測磁場的變化,輸出數位或類比訊號(Source: Wikimedia Commons)

Reed Switch:最簡單的磁性感測

如果想要零電子電路的方案,Reed Switch(磁簧開關) 是另一個選項。

它的構造非常簡單——兩片鐵片封在玻璃管內,外部磁場靠近時,兩片鐵片會因為磁力而接觸,導通電路。

也就是說:磁鐵靠近 = 開關 ON;磁鐵離開 = 開關 OFF。

沒有 IC、沒有供電、沒有複雜程式——純機械開關,適用於低頻率應用(如門磁、防盜器)。

Reed Switch 磁簧開關

圖2:Reed Switch 是最簡單的磁性感測方案,純機械結構,無需供電(Source: Wikimedia Commons)

感測端的技術關鍵

磁場強度衰減:
磁場的強度與距離平方成反比(F ∝ 1/r²)。Hall Sensor 的實用偵測範圍通常在 0.5~5cm,超出這個範圍感測就不穩定了。選用時要注意磁鐵的強度與感測器距離的搭配。

干擾問題:
地球本身就有磁場(約 0.5 Gauss),在精密應用中可能造成誤差。如果需要高精度,建議在系統啟動時做一次磁場校正,或使用差分測量(有磁鐵狀態 vs 無磁鐵狀態的相對變化)。


下半場:磁力致動——讓系統命令磁鐵移動

電磁鐵:電流可以讓鐵芯變成磁鐵

磁性感測是被動的——系統只是「感覺到」磁場。

電磁鐵可以讓系統「主動產生」磁力。

當電流通過線圈時,線圈會產生磁場。如果線圈繞在鐵芯上,磁力會更強。

這就是電磁鐵(Electromagnet)——通電有磁、斷電消失,磁力變成可被軟體控制的輸出

Arduino 的腳位輸出只有 5V、40mA,無法直接驅動電磁鐵。但只要加上一個 N 通道 MOSFET(如 IRFZ44N),就能用 Arduino 控制大功率電磁鐵的通斷。

Solenoid:把磁力變成直線運動

如果想要「磁鐵往前推出」的直線運動,Solenoid(線性致動器) 是專門為此設計的元件。

Solenoid 的結構就是一個電磁鐵加上一根鐵棒。通電時,鐵棒被磁力拉入線圈內;斷電時,彈簧把鐵棒推回。

這個一推一拉的動作,可以拿來做:

  • 磁吸鎖:通電解鎖、斷電上鎖——IoT 門禁系統的核心
  • 磁推機構:自動販賣機的退幣機構
  • 氣閥控制:醫療設備的無菌流體控制

Solenoid 線性致動器

圖3:Solenoid 通電時將鐵棒吸入,斷電時靠彈簧復位,可做為直線致動器(Source: Wikimedia Commons)

致動端的技術關鍵

電流是最大風險:
電磁鐵和 Solenoid 的線圈電流可以從 200mA 到好幾安培。千萬不要直接接 Arduino 腳位,否則一定燒板子。

必須使用:

  • MOSFET 驅動板(如 IRFZ44N + 散熱片)
  • 外部電源供電(5V/12V 依元件規格)
  • 續流二極體(Flyback Diode):當線圈斷電的瞬間,會產生反向電動勢,沒有二極體保護可能損壞 MOSFET 或 Arduino

續流二極體電路:

線圈正極 ──┬── 外部電源 5V/12V
           │
           ├── [二極體 1N4007 正極] ──┐
           │                           │
           │                      [MOSFET D]
           │                           │
Arduino D9 ── [10kΩ] ── MOSFET G ─────┤
           │                           │
           ├── [二極體 1N4007 負極] ──┘
           │
線圈負極 ──┴── 外部電源 GND
Enter fullscreen mode Exit fullscreen mode

實作上,建議直接購買 Solenoid 驅動模組(淘寶關鍵字:5V Solenoid 驅動板模組),這些模組已經內建 MOSFET + 二極體 + 供電端子,Arduino 只需要給一個訊號腳位就能控制。


實作一:門磁防盜警報器(感測應用)

需要的材料

材料 規格建議 用途
Arduino Uno 或 Nano 含 USB 供電 控制核心
A3144 Hall Sensor 數位輸出型 偵測門框磁場
NdFeB 強力磁鐵 10x3mm 規格 吸附在門扇上
蜂鳴器模組 5V 有源蜂鳴器 發出警報聲
LED(紅色) 5mm 警報視覺提示
10kΩ 電阻 1/4W 上拉電阻
杜邦線、麵包板 電路搭建

電路接線

元件 Arduino
A3144 OUT Pin 2
A3144 VCC 5V
A3144 GND GND
蜂鳴器 + Pin 3
蜂鳴器 - GND
LED 正極 Pin 4( через 220Ω 電阻)
LED 負極 GND

程式碼

// 門磁防盜警報器
// 磁鐵靠近時安靜,磁鐵離開(門打開)時發出警報

const int hallPin = 2;    // Hall Sensor 輸出腳
const int buzzerPin = 3;  // 蜂鳴器
const int ledPin = 4;      // LED 警示燈

bool doorClosed = true;    // 記錄門的狀態

void setup() {
  Serial.begin(9600);
  pinMode(hallPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(buzzerPin, LOW);  // 安靜狀態
  digitalWrite(ledPin, HIGH);    // 綠燈:門正常關閉
  Serial.println("門磁警報系統已啟動");
}

void loop() {
  int magnetDetected = digitalRead(hallPin);
  // A3144:磁鐵靠近 → LOW;磁鐵離開 → HIGH

  if (magnetDetected == LOW) {
    // 磁鐵在,門關閉
    if (!doorClosed) {
      Serial.println("門已關閉,警報解除");
      doorClosed = true;
    }
    digitalWrite(buzzerPin, LOW);
    digitalWrite(ledPin, HIGH);   // 綠燈亮
    Serial.println("門:關閉 ✓");
  } else {
    // 磁鐵不在,門被打開
    if (doorClosed) {
      Serial.println("⚠️ 警告:門被打開了!");
      doorClosed = false;
    }
    digitalWrite(buzzerPin, HIGH);  // 警報聲
    digitalWrite(ledPin, LOW);      // 紅燈亮(綠燈滅)
  }

  delay(100);
}
Enter fullscreen mode Exit fullscreen mode

測試方式

  1. 將磁鐵吸附在門扇上,Hall Sensor 對應放在門框邊緣(距離 < 5mm)
  2. 開門:蜂鳴器應該立即響起,LED 由綠轉紅
  3. 關門:蜂鳴器停止,LED 恢復綠燈
  4. 若訊號不穩定,檢查 Hall Sensor 與磁鐵的距離是否在 5cm 以內

實作二:磁吸式電磁鎖(致動應用)

需要的材料

材料 規格建議 用途
Arduino Uno 或 Nano 控制核心
5V Solenoid 驅動模組 內建 MOSFET + 二極體 驅動電磁鐵
5V 小型電磁鐵 吸力 1kg 以上 實際鎖門
外部 5V 電源 2A 以上 供電給電磁鐵
按鍵開關 1 個 解除鎖定
LED(綠+紅) 各 1 狀態顯示

電路接線

[外部 5V 2A] ── [Solenoid 驅動板 V+]
[外部 GND] ─── [Solenoid 驅動板 GND]
[Solenoid 線圈] ── [驅動板 LOAD]
[Arduino D7] ── [驅動板 IN](訊號腳)
[Arduino GND] ── [驅動板 GND]
[按鍵] ── [Arduino D2](接地觸發)
Enter fullscreen mode Exit fullscreen mode

程式碼

// 磁吸式電磁鎖
// 按一下按鍵 → 開鎖(電磁鐵通電,吸合)
// 再按一下 → 上鎖(斷電,彈簧復位)

const int solenoidPin = 7;   // Solenoid 驅動訊號
const int btnPin = 2;         // 按鍵開關
const int greenLED = 4;       // 綠燈:已開鎖
const int redLED = 5;        // 紅燈:已上鎖

bool lockState = true;        // true = 上鎖狀態
bool lastBtnState = HIGH;

void setup() {
  Serial.begin(9600);
  pinMode(solenoidPin, OUTPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(btnPin, INPUT_PULLUP);  // 內建上拉

  digitalWrite(solenoidPin, LOW); // 預設:不上電
  updateLED();
  Serial.println("磁吸鎖系統啟動");
}

void loop() {
  int btn = digitalRead(btnPin);

  // 按鍵按下時(接地)觸發
  if (btn == LOW && lastBtnState == HIGH) {
    delay(50);  // 軟體去抖動
    if (digitalRead(btnPin) == LOW) {
      lockState = !lockState;
      if (lockState) {
        // 上鎖:斷電
        digitalWrite(solenoidPin, LOW);
        Serial.println("已上鎖");
      } else {
        // 開鎖:供電
        digitalWrite(solenoidPin, HIGH);
        Serial.println("已開鎖");
      }
      updateLED();
      delay(300);  // 按鍵防抖動
    }
  }

  lastBtnState = btn;
}

void updateLED() {
  if (lockState) {
    digitalWrite(greenLED, LOW);
    digitalWrite(redLED, HIGH);   // 紅燈:已上鎖
  } else {
    digitalWrite(greenLED, HIGH); // 綠燈:已開鎖
    digitalWrite(redLED, LOW);
  }
}
Enter fullscreen mode Exit fullscreen mode

⚠️ 安全性提醒

  • 千萬不要用 Arduino 直接供電給電磁鐵——Arduino 的 5V 腳位最大只能負載 500mA,電磁鐵啟動電流可以輕易超過這個數字
  • 一定要用外部電源,並確保 GND 共地
  • 續流二極體已在驅動模組上,不需要另外加

從感測到致動:中間的那條橋

上半場的門磁警報,是被動感測——系統只是安靜地等待磁場變化。

下半場的磁吸鎖,是主動致動——系統命令磁力工作。

但兩者之間,其實可以做更多:

  • 門打開(感測)→ 30秒後自動上鎖(致動)
  • 磁鐵靠近(感測)→ Arduino 讀取磁場強度,決定要給電磁鐵多少電力(漸進式吸附力控制)
  • 遙控訊號(感測)→ 控制多組磁吸機構(多門禁系統)

這就是「感測 → 判斷 → 致動」的完整迴路——讓系統不只能感覺,還能回應。


🚀 結語

磁力是自然界最優雅的力量之一。

它不需要接觸,不需要聲音,不需要任何物理接點——穿過空氣,穿過塑膠,穿過你的掌心,悄悄地完成任務。

當你學會了用 Arduino 讀取這股力量,你打開了一扇新的大門。

當你開始用程式命令磁鐵,那扇門,就真正屬於你了。


如果你做出來了,歡迎分享你的作品!

也期待 Part 2——我們會把這兩個系統結合,做成一個「門被打開時自動拍攝畫面、並遠端通知你」的智慧門禁系統。

那一鎖,是你自己設計的。


📁 本文電路圖、程式碼均為原創內容,如需轉載請標註出處。


📦 想快速完成?這裡有最省時的方案:

直接買套件:

  • 磁吸鎖 5V 門禁 套件(蝦皮搜尋)— 含電磁鎖本體 + 驅動板,省去自己焊接
  • A3144 霍爾感測器 + 磁鐵 套件(淘寶搜尋)— 門磁DIY一站購足
  • Arduino 入門套件 電子零件(蝦皮搜尋)— 基本備料,一次備齊

省時推薦順序:

  1. 先買套件組裝,體驗成功 → 建立動機
  2. 再買散件學習原理 → 深化理解

那一鎖,是你自己設計的。

Top comments (0)