基于 Seeed XIAO SAMD21 與 OLED 擴展板的智能手電筒設計
摘要
本文介紹了一款基于 Seeed Studio XIAO SAMD21(XIAO M0) 微控制器及其 XIAO 擴展板 實現的智能手電筒。系統以 3.7V 鋰離子電池供電,使用擴展板集成的充電管理與電源系統,并通過 AO3400 N 溝道 MOSFET 驅動高功率 LED 陣列。借助 XIAO 擴展板上的 SSD1306 OLED 顯示屏,手電筒可實時顯示亮度百分比,并通過搖桿式按鍵實現四檔光照模式(20%、40%、100%、關閉)的循環切換。本文從設計動機、硬件架構、電路設計、軟件控制策略、機械結構和裝配流程等方面,對該“過度工程”的智能手電進行系統性闡述。

1 引言
在野外露營、戶外探險和應急照明等場景中,便攜式手電筒是必備工具。市售手電雖然種類豐富,但在以下方面仍存在局限:
亮度檔位可定制性差;
不具備狀態反饋(如電量或亮度信息);
擴展性與可編程能力有限。
為滿足個人露營需求,作者設計了這款 智能手電筒,目標包括:
具備多檔亮度控制:支持不同環境下的照明需求;
可視化亮度信息:通過 OLED 顯示亮度百分比與當前模式;
基于 XIAO 的可編程平臺:便于日后擴展功能;
結構一體化:通過 3D 打印實現定制外殼。
項目使用了 XIAO SAMD21 開發板 + XIAO 擴展板 作為控制與電源核心,通過 MOSFET 驅動自制 2835 LED 陣列,實現高電流、大面積泛光的照明效果。
2 系統構成與總體架構
系統可分為以下幾個部分:
控制與電源模塊
XIAO SAMD21 M0 微控制器
XIAO 擴展板(含鋰電充電電路、電源管理及 SSD1306 OLED)
3.7V、2000 mAh 鋰離子電池
功率驅動模塊
AO3400 N 溝道 MOSFET(SOT-23 封裝)
MOSFET 柵極電阻:10 kΩ(0603 封裝)
LED 陣列負載(8 顆 2835 白光 LED)
LED 光源模塊
自制銅包板(LED Board)
8 顆 2835 封裝白光 LED 并聯
每對 LED 串聯 5.6 Ω 電阻(2512 封裝),用于限流
人機交互與結構件
XIAO 擴展板上的 SSD1306 OLED 顯示屏
觸發按鍵 – 搖桿式開關
3D 打印外殼(主殼體 + PCB 支架)
3 硬件設計與關鍵器件

3.1 主要器件清單
XIAO SAMD21 M0 開發板
XIAO Expansion Board(帶 OLED 與充電電路)
3.7V 鋰電池,容量約 2000 mAh
LED 白光 2835 封裝 × 若干
5.6 Ω 電阻(2512)
AO3400 N 溝道 MOSFET(SOT-23)
10 kΩ 電阻(0603)
搖桿式按鍵(Push Button – Rocker Switch 風格)
若干導線、M2 螺絲
3D 打印外殼與 LED PCB 支架
3.2 控制與供電電路
本設計中,XIAO 擴展板同時承擔:
鋰電池充電與保護;
為 XIAO 與 OLED 提供穩定電源(約 3V/3.3V);
對外提供 3V 電源端口,用于驅動 LED 負載(通過 MOSFET 控制)。
MOSFET 驅動配置
MOSFET 型號:AO3400 N 溝道 MOSFET
接線關系:
柵極(G):通過 10 kΩ 電阻連接至 XIAO 的 D2 引腳;
漏極(D):連接至 LED 負載的負極;
源極(S):連接至擴展板 GND;
LED 負載正極:接 XIAO 擴展板的 3V 輸出端。
這種典型的**低端開關(Low-side Switch)**結構,使得高電流從電源 → LED → MOSFET → 地構成閉合回路,微控制器僅通過控制柵極電壓來開關或調制電流。
為什么必須使用 MOSFET?
普通 MCU I/O 引腳典型輸出能力約為 20–30 mA,只適合驅動單顆小功率 LED。而本項目中的 LED:
采用 2835 封裝白光 LED,高亮度,單顆電流可達 200–500 mA;
多顆并聯后,整體電流可能達到 2 A 量級。
若直接用 XIAO 的 I/O 引腳驅動:
將遠超引腳電流能力;
可能燒毀芯片或造成不穩定工作。
采用 MOSFET 作為開關器件,可以:
通過 I/O 提供極小的柵極驅動電流;
讓 MOSFET 承擔大電流的開關任務;
通過 PWM 信號控制柵極,實現亮度調節。
4 機械結構與 3D 建模
4.1 結構劃分
手電主體采用兩部分結構:
主機身(Main Body)
內部放置 XIAO 擴展板與鋰電池;
右側區域安裝擴展板,使 OLED 可側向可視;
上表面為搖桿開關安裝位置,便于單手握持與拇指操作。
PCB 支架與燈頭
前部為 PCB Holder,用于固定自制 LED 板;
整體與主機身螺絲連接,便于拆裝維護。
建模使用 Autodesk Fusion 360 完成。
4.2 3D 打印參數
主體材料:紫色 PLA(主殼體),透明 PLA(LED Holder),以兼顧強度與透光效果;
打印參數參考:
噴嘴:0.4 mm
層高:0.2 mm
5 軟件設計與控制邏輯
系統軟件采用 Arduino 框架開發,主要包括兩階段:
1)簡單開關測試; 2)最終多檔亮度與 OLED 顯示控制。
5.1 測試程序 1:單純 MOSFET 開關驗證
用于驗證 MOSFET 驅動路徑是否正常:
void setup() { // 使用 D2 控制 MOSFET
pinMode(2, OUTPUT);
}void loop() { digitalWrite(2, HIGH); // 打開 LED 負載
delay(1000); digitalWrite(2, LOW); // 關閉 LED 負載
delay(1000);
}若 LED 能以 1 秒周期閃爍,則說明:
MOSFET 接線正確;
電源與 LED 負載路徑正常;
MCU 控制輸出無誤。
5.2 主程序:多檔亮度 + OLED 顯示
主控邏輯:
使用一個按鍵(搖桿開關)切換模式;
模式按順序循環:
模式 1:關閉(OFF)
模式 2:20% 亮度
模式 3:40% 亮度
模式 4:100% 亮度
模式 5:再次關閉(OFF)
OLED 以豎屏方式顯示當前亮度百分比或“OFF”。
完整示例代碼如下:
#include <Wire.h>#include <Adafruit_SSD1306.h>#include <Adafruit_GFX.h>#define OLED_WIDTH 128#define OLED_HEIGHT 64#define OLED_ADDR 0x3Cconst int switchPin = 1; // 按鍵輸入const int lightPin = 2; // MOSFET 柵極(PWM 輸出)int lightMode = 1; // 當前模式Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);void setup() { pinMode(lightPin, OUTPUT); pinMode(switchPin, INPUT_PULLUP); // 按鍵上拉輸入
digitalWrite(lightPin, LOW);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
}void loop() { // 按鍵檢測(簡單版,未加去抖)
if (digitalRead(switchPin) == LOW) {
lightMode = lightMode + 1; if (lightMode == 6) {
lightMode = 1;
}
} if (lightMode == 1) { digitalWrite(lightPin, LOW);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("OFF");
display.display(); delay(500);
} else if (lightMode == 2) { analogWrite(lightPin, 50); // 約 20% 占空比
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("20%");
display.display(); delay(500);
} else if (lightMode == 3) { analogWrite(lightPin, 100); // 約 40% 占空比
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("40%");
display.display(); delay(500);
} else if (lightMode == 4) { analogWrite(lightPin, 255); // 全亮
display.clearDisplay();
display.setRotation(3);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("100%");
display.display(); delay(500);
} else if (lightMode == 5) { analogWrite(lightPin, LOW);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("OFF");
display.display(); delay(500);
} // 可視需要添加短暫延時,避免多次觸發
// delay(200);}工程上可進一步加入按鍵去抖(硬件 RC / 軟件定時)、長按/短按區分等,豐富交互方式。
6 裝配工藝
6.1 電子部分預處理
使用電烙鐵從 XIAO 擴展板上拆除原有 LED、按鍵、電池等器件;
將擴展板固定在 3D 打印主機身內預留位置,通過底部開窗方便走線;
使用 4 顆 M2 螺絲將擴展板牢固固定;
將 3.7V 鋰電池放入機身內部電池倉,并連接至擴展板電池接口;
打開擴展板上的電源開關,若 XIAO 狀態 LED 點亮,說明供電正常。
6.2 最終裝配
將 LED 負載焊接并固定在 PCB Holder 上,使用 2 顆 M2 螺絲鎖緊;
連接:
LED 負極 → MOSFET 漏極;
LED 正極 → XIAO 擴展板 3V 端子;
將 LED PCB 支架組件推入主機身前端,并用 2 顆 M2 螺絲固定;
使用電烙鐵將搖桿開關引腳接至 D1 和 GND(作為模式切換輸入);
將搖桿開關壓入預留開孔中,完成結構閉合。
至此,智能手電筒的硬件與結構裝配全部完成。
7 測試與使用體驗
將系統帶到野外環境進行實測:
光束為泛光型(Flood Light),照射范圍寬廣,適合照明營地或近距離活動區域;
相比傳統聚光手電,本設計更強調面積覆蓋而非遠距離照射;
不同亮度檔位可在省電與亮度之間靈活切換:
20%:適合近距離看地圖、找物品;
40%:適合普通夜間行走;
100%:適合大范圍照明或復雜地形檢查。
OLED 屏以百分比形式直觀顯示當前亮度,有利于快速確認工作模式。
8 改進方向與版本規劃
作者計劃在后續的 V2 版本 中進行以下優化:
減少線材與飛線:
將 MOSFET 開關電路與 LED 陣列集成到同一塊 PCB 上;
縮短信號與電源路徑,增強可靠性。
結構一體化:
針對手持手感進一步優化外形;
提高防塵、防濺水能力。
功能擴展:
增加電池電量指示;
增加閃爍模式 / SOS 模式;
優化按鍵邏輯,支持長按關燈、雙擊爆閃等高級控制方式。
9 結論
本文展示了一款基于 XIAO SAMD21 + XIAO 擴展板 + AO3400 MOSFET + 自制 LED 陣列 的智能手電筒,從設計動機到實現細節完整覆蓋了:
高功率 LED 負載的 MOSFET 開關驅動方法;
利用現成擴展板實現鋰電充電與系統供電;
使用 OLED 屏實現亮度信息可視化;
通過 3D 打印實現定制結構與人機工程設計。
從工程實現角度看,該項目雖被作者稱為“過度工程”,但正是這種“過度”,讓一個日常工具兼具了可玩性、可擴展性與技術深度,非常適合作為 電源管理 + 大電流驅動 + 嵌入式 UI + 3D 結構設計 的綜合實踐案例。











評論