Sense HAT 是一款功能豐富的 Raspberry Pi 擴充板,整合了多種感測器,方便開發者進行各種應用。本文將著重介紹如何使用 Python 程式控制 Sense HAT 的 IMU、磁力計和超音波測距感測器。IMU 可以取得裝置的姿態資訊,包含俯仰、橫滾和偏航角。磁力計可用於偵測周圍磁場變化,例如判斷磁鐵的存在與否。而超音波測距感測器則能測量與物體之間的距離,應用於距離感測相關的場景。透過 Python 程式函式庫,可以輕鬆讀取這些感測器的資料,並根據需求進行後續處理與應用。
使用 Sense HAT 的慣性管理單元
Sense HAT 的慣性管理單元(Inertial Management Unit, IMU)是一個強大的工具,可以提供更準確的方向資訊。它包含一個三軸加速度計、一個三軸陀螺儀和一個磁力計。這些感測器的資料結合起來,可以讓你獲得更準確的 Sense HAT 方向資訊,包括俯仰(pitch)、橫滾(roll)和偏航(yaw)。
什麼是俯仰、橫滾和偏航?
俯仰、橫滾和偏航是三個來自航空的術語。它們與飛機的飛行軸相關。俯仰是指飛機與水平面的夾角。橫滾是指飛機在其飛行軸上的旋轉程度(想象一下,一個翼tip向上,另一個翼tip向下)。偏航是指飛機在水平軸上的旋轉(想象一下,改變方向)。
使用 Sense HAT 的 IMU
要使用 Sense HAT 的 IMU,你需要安裝適當的函式庫和模組。然後,你可以使用以下程式碼來讀取 IMU 的資料:
import time
from sense_hat import SenseHat
sense = SenseHat()
while True:
orientation = sense.get_orientation()
print("Pitch: {:.0f} degrees".format(orientation["pitch"]))
print("Roll: {:.0f} degrees".format(orientation["roll"]))
print("Yaw: {:.0f} degrees".format(orientation["yaw"]))
time.sleep(0.5)
這個程式碼會不斷地讀取 IMU 的資料,並列印預出俯仰、橫滾和偏航的值。
內容解密:
sense.get_orientation()
函式傳回一個字典,包含俯仰、橫滾和偏航的值。orientation["pitch"]
、orientation["roll"]
和orientation["yaw"]
分別傳回俯仰、橫滾和偏航的值。time.sleep(0.5)
函式使程式暫停 0.5 秒,以控制讀取資料的速度。
圖表翻譯:
flowchart TD A[開始] --> B[初始化 Sense HAT] B --> C[讀取 IMU 資料] C --> D[列印俯仰、橫滾和偏航值] D --> E[暫停 0.5 秒] E --> C
這個流程圖展示了程式的執行流程,包括初始化 Sense HAT、讀取 IMU 資料、列印俯仰、橫滾和偏航值,以及暫停 0.5 秒。
使用 Sense HAT 感應器測量方向
Sense HAT 是一款為 Raspberry Pi 設計的擴充板,內建了各種感應器,包括加速度計、陀螺儀和磁力計。這些感應器可以用來測量 Sense HAT 的方向。
安裝 Sense HAT 函式庫
要使用 Sense HAT,需要先安裝 Sense HAT 函式庫。可以使用 pip 安裝:
pip install sense-hat
測量方向
以下是使用 Sense HAT 測量方向的範例程式:
from sense_hat import SenseHat
sense = SenseHat()
sense.set_imu_config(True, True, True)
while True:
o = sense.get_orientation()
print("pitch: {:.0f}, roll: {:.0f}, yaw: {:.0f}".format(o['pitch'], o['roll'], o['yaw']))
這個程式會不斷地測量 Sense HAT 的方向,並印出 pitch、roll 和 yaw 的值。
pitch、roll 和 yaw 的意義
- pitch:Sense HAT 的前後傾斜角度,單位為度。
- roll:Sense HAT 的左右傾斜角度,單位為度。
- yaw:Sense HAT 的旋轉角度,單位為度。
感應器原理
Sense HAT 使用加速度計、陀螺儀和磁力計來測量方向。
- 加速度計:測量 Sense HAT 的加速度,包括重力加速度,可以用來計算 pitch 和 roll。
- 陀螺儀:測量 Sense HAT 的旋轉速度,可以用來計算 yaw。
- 磁力計:測量 Sense HAT 的方位,可以用來計算 yaw。
應用
Sense HAT 的方向感應器可以用於各種應用,例如:
- 自走車:可以用來測量自走車的方向和速度。
- 機器人:可以用來測量機器人的方向和位置。
- 遊戲:可以用來創造更真實的遊戲體驗。
其他應用
Sense HAT 還可以用於其他應用,例如:
- 測量溫度和濕度:Sense HAT 內建了溫度和濕度感應器,可以用來測量環境的溫度和濕度。
- 測量大氣壓力:Sense HAT 內建了大氣壓力感應器,可以用來測量環境的大氣壓力。
- 偵測磁鐵:Sense HAT 可以用來偵測磁鐵的存在,可以用於各種應用,例如安全系統。
感測磁鐵使用Sense HAT的磁力計
問題描述
您想要使用Sense HAT的內建磁力計和Python程式來感測磁鐵的存在。
解決方案
利用Sense HAT的Python函式庫來與其磁力計進行互動。
首先,開啟編輯器並貼入以下程式碼(ch_13_sense_hat_magnet.py):
from sense_hat import SenseHat
import time
hat = SenseHat()
fill = (255, 0, 0)
while True:
reading = int(hat.get_compass_raw()['z'])
if reading > 200:
hat.clear(fill)
time.sleep(0.2)
else:
hat.clear()
如同本文中的所有程式範例,您也可以下載此程式(請參考Recipe 3.22)。
當磁鐵靠近Sense HAT時,LED燈將全部變成紅色,持續0.2秒。
討論
不論您使用哪個軸的磁力計資料,都會被磁鐵嚴重幹擾。
圖表翻譯:
flowchart TD A[開始] --> B[初始化Sense HAT] B --> C[取得磁力計資料] C --> D[判斷磁鐵是否靠近] D --> E[若靠近則顯示紅色LED] E --> F[延遲0.2秒] F --> G[清除LED顯示] G --> C
內容解密:
上述程式碼使用Sense HAT的Python函式庫來取得磁力計資料。當磁鐵靠近時,磁力計資料將大於200,觸發LED燈變成紅色。程式碼使用while
迴圈不斷取得磁力計資料和更新LED顯示。
圖表說明:
上述Mermaid圖表展示了程式碼的邏輯流程。從初始化Sense HAT開始,取得磁力計資料,判斷磁鐵是否靠近,若靠近則顯示紅色LED,延遲0.2秒後清除LED顯示。然後再次取得磁力計資料,如此迴圈不斷。
使用超音波測距感測器進行距離測量
問題描述
您想要使用超音波測距感測器來測量距離。
解決方案
使用低成本的 HC-SR04 測距感測器。該裝置需要兩個 GPIO 引腳:一個用於觸發超音波脈衝,另一個用於監測回聲傳回的時間。
所需元件
-麵包板和跳線(見「原型設計裝置和套件」)
- HC-SR04 測距感測器(eBay)
- 470Ω 電阻器(見「電阻器和電容器」)
- 270Ω 電阻器(見「電阻器和電容器」)
組裝元件
將元件安裝在麵包板上,如圖 13-24 所示。電阻器是必要的,以將測距感測器的回聲輸出從 5V 降低到 3.3V(見配方 9.12)。
程式碼實作
開啟編輯器並貼入以下程式碼(ch_13_ranger.py):
from gpiozero import DistanceSensor
from time import sleep
sensor = DistanceSensor(echo=18, trigger=17)
while True:
cm = sensor.distance * 100
inch = cm / 2.5
print("cm={:.0f}\tinches={:.0f}".format(cm, inch))
sleep(0.5)
如同本文中的所有程式範例,您也可以下載此程式(見配方 3.22)。
程式運作描述
當程式執行時,它會每秒報告一次以公分和英寸為單位的距離。使用您的雙手或其他障礙物來改變讀數:
$ python3 ch_13_ranger.py
cm=154.7 inches=61.8
討論
HC-SR04 測距感測器是一種低成本且易於使用的裝置,使用超音波技術來測量距離。它透過傳送超音波脈衝並監測回聲傳回的時間來計算距離。該程式使用 gpiozero
函式庫來控制測距感測器,並計算距離以公分和英寸為單位。
Mermaid 圖表:超音波測距感測器工作原理
flowchart TD A[觸發超音波脈衝] --> B[傳送超音波] B --> C[監測回聲傳回] C --> D[計算距離] D --> E[輸出距離]
圖表翻譯:
此圖表描述了超音波測距感測器的工作原理。首先,觸發超音波脈衝,然後傳送超音波。接著,監測回聲傳回的時間,然後計算距離。最後,輸出距離以公分和英寸為單位。
內容解密:
程式碼中使用 DistanceSensor
類別來控制測距感測器。echo
和 trigger
引數分別設定為 18 和 17,代表著 GPIO 引腳的編號。while
迴圈不斷地計算距離並輸出結果。距離的計算使用 sensor.distance * 100
來將距離從米轉換為公分。英寸的計算使用 cm / 2.5
來將公分轉換為英寸。
Raspberry Pi 搭配 Sense HAT 的應用已滲透到教育、創客和物聯網等多元領域。本文深入探討了 Sense HAT 的 IMU 和其他感測器,包括加速度計、陀螺儀、磁力計和超音波測距感測器,展示了其在方向感測、磁場偵測和距離測量方面的應用。透過 Python 程式碼和圖表,我們清晰地闡述瞭如何取得和應用這些感測器資料,並提供了實際操作範例和原理說明。
然而,Sense HAT 的感測器精確度和穩定性仍受限於其低成本特性,例如 IMU 易受環境磁場幹擾,超音波測距易受溫度和濕度影響。對於高精確度需求的應用場景,則需考慮更高階的感測器方案。此外,程式碼範例僅提供基礎功能,實際應用中需要根據具體需求進行調整和最佳化,例如加入校正演算法和資料濾波處理。
展望未來,隨著邊緣計算和物聯網的蓬勃發展,預計 Sense HAT 這類別易於使用的感測器平臺將扮演更重要的角色。未來發展方向包含整合更多種類別的感測器、提升資料處理能力,以及發展更簡潔易用的程式函式庫和工具。玄貓認為,對於入門者和教育用途而言,Sense HAT 仍是理想的學習平臺,能有效降低開發門檻,激發更多創新應用。