隨著科技的進步,嵌入式系統不再只是單純的電子元件,而是與人們生活息息相關的互動裝置。從智慧手錶到健康監測器,這些裝置的設計理念已從單純的功能性轉向以人為本,滿足人們在不同層面的需求。本文探討如何結合人類驅動力與技術創新,開發更具人性化和情感連結的嵌入式裝置,並以 MicroPython 控制 LED 和 PWM 技術為例,闡述如何將這些技術應用於實際場景。文章也探討瞭如何透過「魔法階梯」的五個步驟:連線、個人化、社會化、遊戲化和故事化,賦予嵌入式裝置更深層的意義和價值,使其不僅僅是工具,更能成為人們生活故事的一部分。
人們渴望與他人分享生活點滴、追求安全感、維持健康、享受便捷的移動體驗,以及表達自我,這些深層需求驅動著技術的發展。嵌入式系統的設計必須以此為出發點,才能真正滿足人們的需求。
人類驅動力:技術如何滿足我們的深層需求
在過去的十年中,社群媒體的爆炸性成長顯示,人們喜歡與他人分享他們正在做的事情、他們的感受、經驗和意見。有些人只是渴望關注。這種互動有可能擴大或加強我們的社交生活,並促進社群意識。它讓我們能夠與盟友合作或遇到持有不同意見的人,從而拓寬我們對世界的看法。
使這成為可能的一些物件包括連線到 Twitter 的智慧手錶、透過手機存取社群媒體和語音通訊,以及內建在會議室中的電話會議裝置。一個虛構的例子是哈利波特書中的衛斯理鐘,它追蹤衛斯理家族成員的狀態(每個家庭成員都由一根指標表示,指向特定的狀態,例如睡覺、上班或迷路)。這種想法真的那麼遙不可及嗎?想想許多根據存在感的應用程式,它們利用手機的 GPS 功能來宣告你的位置和正在做的事情。
社交聯絡的延伸
你是否認識某人雖然不在身邊,但你卻渴望他們的存在?某個物件如何將你們聯絡起來?你們在什麼意義上是相連的(例如,你們是否分享心情、位置或活動)?這些問題引導我們思考技術如何滿足我們對社交聯絡的基本需求。
安全保障
安全保障是指對免受傷害的保護的渴望。人們在感到安全和舒適時才會茁壯成長。如果你是父母或負責照顧他人的人,你可能會希望確保他們具備這種屬性。在數位層面,我們同樣期望這種安全感。
技術如何提供安全保障
我們使用裝置來保護自己免受身體上的傷害。例如,停車感測器警告我們即將與另一輛車接觸。為了集體安全,智慧高速公路測量交通流量並更改速度限制,以確保安全和快速的行程。在文學作品中,一個確保安全的物件例子是J.R.R. 託爾金《魔戒》中的佛羅多的劍“刺針”。當附近有半獸人時,它會發光。
此圖示展示了安全裝置如何透過收集資料來提供安全保障,並強調了保持資料安全的重要性。
內容解密:
- 安全裝置(如停車感測器和智慧高速公路系統)透過收集周圍環境的資料來運作。
- 這些資料用於提供即時反饋或調整,以確保使用者的安全。
- 保持這些資料的安全對於防止濫用和維持使用者信任至關重要。
長壽與健康
長壽與健康涉及到希望過長久而健康的生活,在這種生活中,我們可以自主、積極,並且直到最後都保持關注。這或許是嵌入式裝置已經透過用於促進和維持健康的技術而得到充分發展的領域。
健康管理的技術創新
例如,你是否使用 Fitbit 來追蹤你的日常活動,從而獲得一個“量化自我”?或者你認識某個裝有起搏器的人。有一個有趣的例子是“發光瓶蓋”,一種安裝在藥物容器上的裝置。根據醫生的指示,它會在應該服用藥物時發光;並且,由於它連線到網際網路,當藥物供應不足時,它會重新訂購處方。
你希望增強或減少生活中的哪些方面,以過上更美好的生活?你能想象一個物件用來提示、追蹤或阻止某些行為嗎?是否有已經與你的健康相關(或者可能導致健康問題)的物件,可以透過嵌入式裝置的行為得到增強?
無拘無束的移動
無拘無束的移動涉及到我們對不受限制的移動的渴望。我們不再生活在一個我們的世界觀僅限於我們直接地理位置的社會中。交通運輸通常涉及複雜的機器和程式,如駕駛汽車或搭乘航班。那麼,有沒有可能使旅行變得更容易,也許不那麼令人沮喪?
技術如何簡化旅行
現實世界中的一個創新是為騎行者設計的導航把手,它們會在左邊或右邊發光,以指示轉彎的方向。當然,在接下來的10年裡,我們很可能會看到自動駕駛汽車的出現,這些汽車是具有智慧的物件,知道你需要去哪裡。
此圖示闡述了交通運輸技術如何簡化旅行,並提高整體旅行體驗,從而使旅行變得更加愉快。
內容解密:
- 交通運輸技術(如導航把手和自動駕駛汽車)旨在簡化旅行的過程。
- 這些技術透過提供實時指導和自動控制來提高旅行體驗。
- 未來的發展方向是使旅行不僅更有效率,也更令人愉快。
嵌入式物件的魅力:探索技術與藝術的融合
在現代社會中,人們對於自我表達的需求促使了各種藝術形式和媒介的發展。物件一直是創作驅動的一部分,無論是用於建造事物的工具、演奏音樂的樂器,還是歷史上著名的革命性物件——印刷機。如今,我們擁有如3D印表機這樣的迷人物件,能夠製造從微小的引擎零件到整棟房屋的任何東西。像Guitar Hero控制器這樣的裝置,讓人們能夠參與音樂活動,而無需多年的訓練。Lego Mindstorms、Raspberry Pi、Arduino等由創客運動喜愛的平台,讓人們能夠創造電子和可程式設計的專案,這些在不久前還是無法想像的。它們是作為一種新的可程式設計藝術媒介的裝置的例子。
技術如何增強創作工具
如果你參與藝術創作,你的工具或裝置如何能夠被增強?你能否想像一個可程式設計的物件本身就是一件藝術品?許多與人類驅動相關的例子可能已經被智慧手機上的應用程式所滿足。然而,這些應用程式往往缺乏真實世界物件所帶來的樂趣、興奮和易用性。挑戰在於如何將這些功能從手機遷移到一個引人入勝、有用且有價值的迷人物件上。這樣做,我們的世界變得更加有趣、耐人尋味和生動,而不是被簡化成一個放在口袋裡的裝置。
迷人物件的能力
本章列出的七種能力共同區分了迷人的嵌入式物件和其他型別的計算裝置(智慧手機、平板電腦電腦和PC):一目瞭然性、手勢控制性、可負擔性、可穿戴性、可指導性、可用性和可愛性。這些屬性影響了我們如何學習使用物件、它們如何與我們互動以及它們如何在更廣泛的世界中存在。
一目瞭然性
一目瞭然性幫助我們讀取足夠的資訊以做出決定。這不是透過彈出視窗、警示或其他數位幹擾來實作的。相反,它是在最合適的時間和地點將資訊聚焦。一目瞭然性意味著更少的認知負擔、更少的幹擾,以及更快的資訊收集和決策。這些一瞥源於我們的主動選擇:我們選擇檢視裝置,而不是讓它透過蜂鳴聲、振動和視覺幹擾來吸引我們的注意力。例如,交通燈和鐘面上的指標就是一目瞭然性的例子。人們在需要資訊時檢視這些裝置,這些資訊透過慣例立即傳達出來。
import microbit
# 示例:一目瞭然性的簡單實作
while True:
if microbit.button_a.is_pressed():
microbit.display.show("A")
elif microbit.button_b.is_pressed():
microbit.display.show("B")
else:
microbit.display.clear()
內容解密:
這段程式碼展示瞭如何在micro:bit上實作一目瞭然性。當按下按鈕A或B時,顯示對應的字母,否則螢幕保持清空。這種簡單的互動讓使用者能夠快速取得資訊,而不需要複雜的操作。
手勢控制性
手勢控制性意味著物件能夠感知並回應我們的動作。這可能包括物件感知我們的接近度以啟動某些環境功能,如照明或供暖。物件也可能透過空間中的移動來控制其他物件,或對特定的手勢做出反應,如搖晃代表負面反應。也許物件會對我們動作中的節奏做出反應,或者簡單地因為面朝下而進入靜音模式。所有這些都與在鍵盤上打字、在觸控敏感螢幕上戳戳點點或拖動滑鼠來指向視覺隱喻(如“按鈕”、“視窗”或“垃圾桶”)形成對比。
import microbit
import random
# 示例:手勢控制性的實作
while True:
acceleration = microbit.accelerometer.get_x()
if acceleration > 100:
microbit.display.show("R")
elif acceleration < -100:
microbit.display.show("L")
else:
microbit.display.clear()
內容解密:
這段程式碼展示瞭如何利用micro:bit的加速度計來實作手勢控制性。當裝置向右傾斜時,顯示“R”,向左傾斜時顯示“L”,否則螢幕保持清空。這種互動方式讓使用者能夠透過動作來控制裝置。
嵌入式物件的迷人特質與魔法階梯
嵌入式系統的發展已經不再只是單純的技術實作,更是如何讓這些裝置變得更有人性、更容易被接受、甚至讓人產生情感上的連結。就像古希臘神話中,Parnassus山峰是藝術與科學的象徵,「4 Gradus ad Parnassum」代表著一步步邁向精通的過程。
日常物件的魔法化
許多博物館使用廉價的嵌入式裝置來執行按鈕式展示櫃,這些裝置經過十多年的持續使用仍然運作正常。這證明瞭將嵌入式裝置附加在更堅固的日常物件上,可以延長其使用壽命。這種做法不僅提升了裝置的耐用性,也為日常物件注入了新的生命力。
可用性(Usability)
可用性是指裝置的外觀、觸感和上下文環境使其使用方法不言自明。例如,一把椅子本來只是用來坐的,但如果在椅子上嵌入一個裝置,用於記錄坐著的時間,並在適當的時候提示站起來伸展,這就把椅子變成了一個互動介面。這種做法利用了人們對日常物件的熟悉感,使技術更加自然地融入生活。
可愛性(Loveability)
可愛性體現在人們對一個物件的情感依戀。例如,一把經過改裝的椅子,原本屬於祖母,這樣的改裝可能會讓後代更加珍惜它,把它當作家族歷史的一部分。此外,設計上的人性化或優雅也可以增加物件的可愛性。相反,像是毫無特色的智慧手機,很難讓人產生情感上的依戀,因為人們知道升級後的功能差別不大。
魔法階梯的步驟
要讓嵌入式物件顯得更有魅力,Tom Rose提出了「魔法階梯」的五個步驟:連線(Connection)、個人化(Personalization)、社會化(Socialization)、遊戲化(Gamification)和故事化(Story-ification)。
連線(Connection)
連線意味著為物件新增感知能力,利用這些感知資料來觸發某些功能或儲存資料以供後續分析。同時,這些物件也可以透過網際網路與雲端電腦連線,增強其處理和儲存能力。關鍵問題包括:如何利用感知、處理和連線能力來增強日常工具或裝置?需要收集什麼重要資訊?如何收集和處理這些資料?
個人化(Personalization)
個人化意味著根據上下文環境做出反應。根據收集到的資料,如何使裝置更好地運作?裝置能否從其上下文或環境中學習並改進其行為?需要測量什麼?裝置的哪些方面應該改變?如何根據檢測到的上下文進行調整?
社會化(Socialization)
社會化意味著將物件與更廣泛的社會環境連線起來,包括朋友、家人和同事。這也可能意味著將多個物件連線起來,形成一個協同工作的系統。例如,一個具有魔力的晚餐鑼聲可能涉及到與家人及其周圍裝置的連線。關鍵問題包括:希望傳送什麼訊號給誰?如何使用物件來觸發這些訊號?如何指定接收者?如何確保通訊的隱私?
遊戲化(Gamification)
遊戲化意味著為裝置新增樂趣、動機和適時的推動,幫助人們成為物件功能的積極使用者和參與者。這可以透過影片遊戲中的元素(如評分系統、成就等)來實作,但需要避免不當行為,就像Clippy所經歷的那樣。關鍵問題包括:物件是否應該有趣?如果是,如何實作?哪些方面需要使用者的努力?如何推動使用者啟用和學習這些功能?
故事化(Story-ification)
故事化意味著為物件新增一個有意義的敘事背景,使其成為使用者生活故事中的一部分。物件本身也可以帶有一個背景故事,使其變得有趣和獨特。兒童能夠將普通物件編織進他們的遊戲中,同樣,物件也可以與現實世界中的重要敘事相關聯,例如身份識別、承諾或地位的象徵。
嵌入式裝置中的視覺回饋:以 MicroPython 實作 LED 控制
在程式設計的世界中,使電腦呈現出某些視覺效果是一種極具成就感的體驗,無論是讓 LED 閃爍、列印出「Hello, World!」、顯示圖片還是建立動畫,都能讓人感受到其中的樂趣。在嵌入式系統中,Blinkenlights(閃爍燈)就像是「Hello, World!」的存在,代表著開發環境的初步設定已經正確完成。
Blinkenlights:嵌入式系統的「Hello, World!」
讓 LED 閃爍看似簡單,但它卻是理解 MicroPython 工作原理的重要切入點。MicroPython 與傳統 Python 在某些方面相似,但也有許多不同之處。首先,我們需要了解 LED 的基本工作原理。
發光二極體(LED)的工作原理
發光二極體(LED)透過施加適當電壓產生電流,從而發出光。LED 的顏色取決於所使用的半導體材料的特性,不同材料的 LED 發出不同顏色的光。透過控制電流的大小,可以調整 LED 的亮度。
MicroPython 如何控制 LED
MicroPython 直接執行在微控制器的硬體上,扮演著 Python 程式碼與硬體之間的橋樑。微控制器透過 GPIO 腳控制外部元件,MicroPython 透過控制這些腳的電壓來管理 LED 的狀態。
由於微控制器相對簡單,不需要像 Linux 那樣複雜的作業系統核心,MicroPython 本身就充當了作業系統的角色。相關的硬體協定和 API(如 pyb、microbit、digitalio 和 machine 模組)讓開發者能夠輕鬆地控制 LED 等周邊裝置。
脈寬調變(PWM):模擬亮度控制
要在數位系統中實作亮度的連續變化,需要使用脈寬調變(PWM)技術。PWM 透過快速切換電壓的開關狀態,並控制其開啟和關閉的時間比例,來模擬出不同的亮度等級。
圖示說明:PWM 工作原理
此圖示展示了 PWM 如何透過改變電壓開啟和關閉的時間比例來控制 LED 亮度。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 嵌入式系統設計與互動裝置開發
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml在圖中,我們可以看到 PWM 是如何透過調節電壓開啟的時間比例來實作 LED 亮度的變化,從而在數位系統中模擬出類別比的效果。
程式碼範例:使用 MicroPython 控制 LED 亮度
import machine
import time
# 設定 LED 連線的 GPIO 腳
led = machine.PWM(machine.Pin(2))
# 設定 PWM 的頻率
led.freq(1000)
# 逐漸增加亮度
for duty in range(0, 1024):
led.duty(duty)
time.sleep_ms(1)
# 逐漸減少亮度
for duty in range(1023, -1, -1):
led.duty(duty)
time.sleep_ms(1)
內容解密:
- 匯入必要的模組:程式首先匯入了
machine和time模組,分別用於控制硬體和進行時間控制。 - 設定 LED 的 GPIO 腳:使用
machine.Pin設定 LED 連線的 GPIO 腳,並透過machine.PWM初始化 PWM 功能。 - 設定 PWM 頻率:PWM 的頻率被設為 1000 Hz,這是一個常見的設定,能夠讓人眼無法察覺閃爍。
- 控制亮度變化:透過兩個迴圈,分別增加和減少 PWM 的佔空比(duty cycle),從而實作 LED 亮度的漸變效果。
- 時間控制:使用
time.sleep_ms控制每次變更之間的延遲,以調整亮度變化的速度。
脈寬調變(PWM)技術詳解與應使用案例項
脈寬調變(Pulse Width Modulation, PWM)是一種透過調整訊號的脈衝寬度來控制功率輸出的技術。PWM 訊號具有相同的週期(頻率),但具有不同的工作週期(duty cycle),即訊號在一個週期內開啟的時間比例。由於功率僅在工作週期開啟時施加,因此傳遞給裝置的平均功率是工作週期比率乘以「開啟」功率。
PWM 原理與應用
例如,假設訊號在 3.3 伏特時「開啟」,在零伏特時「關閉」。第一個訊號僅在 50% 的時間內開啟,因此訊號的總能量是完全「開啟」訊號的一半。這相當於輸出平均 1.65 伏特而不是 3.3 伏特。第二個訊號具有 25% 的工作週期,相當於輸出平均 0.825 伏特。第三個訊號具有 75% 的工作週期,其能量是第二個訊號的三倍,因此相當於平均輸出 2.475 伏特。
程式碼範例:使用 PyBoard 控制 LED 亮度
blue = pyb.LED(4)
i = 0
while True:
pyb.delay(5)
i += 1
if i > 255:
i = 0
blue.intensity(i)
內容解密:
- 初始化 LED 物件:
blue = pyb.LED(4)將 PyBoard 上的藍色 LED 初始化為物件blue,對應編號 4。 - 無限迴圈控制亮度變化:
while True迴圈使得程式不斷執行,直到手動停止。 - 延遲函式:
pyb.delay(5)使程式暫停 5 毫秒,控制亮度變化的速度,避免變化過快而無法被察覺。 - 亮度調整:
i += 1使亮度值遞增,當i > 255時重置為 0,以迴圈方式改變亮度。 - 設定 LED 亮度:
blue.intensity(i)將 LED 的亮度設定為i,其值範圍在 0(完全關閉)至 255(完全開啟)之間。
受益於 PWM 的周邊裝置通常對輸入訊號的反應時間較慢。由於反應時間較慢,即使功率以脈衝形式施加,它們仍能平滑運作。LED 對 PWM 訊號的反應很快,會隨著 PWM 訊號的工作週期閃爍,但由於人眼的反應速度較慢,無法察覺 LED 的閃爍,因此看起來像是持續發光。
不同開發板的 PWM 控制差異
並非所有裝置或 LED 都支援 PWM。例如,PyBoard上的紅色和綠色 LED 只能開啟或關閉,而橙色和藍色 LED 可以使用 PWM 控制亮度。在 micro:bit 上,顯示矩陣中的每個 LED 可以設定為 0(關閉)到 9(最亮)之間的亮度值。在 Circuit Playground Express 上,可以使用 PWM 控制紅色 LED 的亮度,其 API 明確使用了 PWM 的相關術語。
程式碼範例:使用 CircuitPython 控制 LED 亮度
from board import D13
import time
import pulseio
pin = pulseio.PWMOut(D13)
while True:
for i in range(16):
pin.duty_cycle = 2 ** i
time.sleep(0.1)
內容解密:
- 初始化 PWM 輸出:
pin = pulseio.PWMOut(D13)在 D13 引腳上建立 PWM 輸出物件。 - 迴圈調整工作週期:
for i in range(16)使工作週期從最小值變化到最大值(2^16 - 1)。 - 設定工作週期:
pin.duty_cycle = 2 ** i設定當前的工作週期,範圍在 0 至 65535 之間。 - 延遲控制變化速度:
time.sleep(0.1)使每次變化間隔 0.1 秒,便於觀察亮度變化。
NeoPixels:高階多彩 LED 控制
NeoPixels 是多色 LED,可以發出超過 1600 萬種不同的顏色。與只能顯示固定顏色的普通 LED 不同,NeoPixels 可以透過控制紅、綠、藍三種顏色的強度來混合出各種顏色。本文討論的所有開發板都可以與 NeoPixels 一起使用,但只有 Adafruit 的 Circuit Playground Express 將 NeoPixels 建置於板上。