Gertboard 作為 Raspberry Pi 的擴充套件板,能顯著提升其硬體互動能力。本文除了介紹 Gertboard 各元件的功能,也提供電路控制和馬達控制的 Python 程式碼範例,讓讀者能實際操作並深入理解 Gertboard 的應用。特別是開集電極驅動器的使用,能讓 Raspberry Pi 控制更多種類別的外部裝置,拓展其應用範圍。此外,文章也說明瞭 Gertboard 上的 A/D 和 D/A 轉換器的使用方法,以及如何計算電壓輸出值,讓讀者能更精確地控制外部裝置。
Gertboard 完整指引
Gertboard 是一個強大的擴充套件板,專為 Raspberry Pi 設計,旨在提升其與外部硬體的互動能力。這篇文章將探討 Gertboard 的各個元件及其應用,並提供實務經驗與具體案例。
關鍵元件與功能
Atmega 晶片
Gertboard 上的 Atmega 晶片雖然沒有預先安裝 Arduino 軟體,但可以很容易地載入該軟體。如圖 13-3 所示,這些被圈出來的針腳是連線到 Atmega 晶片的介面。這些介面使得 Atmega 晶片能夠與 Raspberry Pi 進行數位和類別比的資料交換。
A-to-D 與 D-to-A 轉換器
任何像 Gertboard 這樣的擴充套件板,轉換器都是其核心元件之一。如圖 13-4 所示,這些轉換器負責將數位訊號轉換為類別比訊號,反之亦然。這些轉換器對於處理音訊和影片訊號特別有用。例如,現代音訊訊號通常以數位 MP3 格式儲存,但在播放時必須轉換為類別比形式以便透過擴音器播放。
類別比到數位轉換同樣重要,特別是在將數位電腦連線到類別比裝置時。例如,當讀取來自壓力感測器的值時,這些值是類別比的,而 Raspberry Pi 的 GPIO 銷腳只能讀取數位輸入。因此,必須使用轉換器將類別比值轉換為數位高低電平,以便 Raspberry Pi 能夠理解。
I/O 段落
Gertboard 的 I/O 段落專門用於緩衝輸入和輸出,包括開關、按鈕和 LED。如圖 13-5 所示,除了上排的頭針之外,還包括一排小型表面貼裝 LED、三個推撥式開關和三個 SN74HC244N 裝置。這些緩衝器用於防止意外操作對 Raspberry Pi 傷害。例如,如果錯誤地將 GPIO 組態為輸出但仍保留輸入跳線,系列電阻會保護處理器免受損壞。同樣地,將 9V 電壓施加到組態為輸入的 GPIO 銷腳可能會損壞處理器,如果沒有這些緩衝器就更糟。
I/O 銷腳組態
需要記住的是,儘管 Gertboard 的針腳可以組態為「輸入」或「輸出」,它並不是 Raspberry Pi 的延伸。例如,如果將 Gertboard 上的一個針腳組態為「輸入」,那麼它將接收 Raspberry Pi 的輸出。反之亦然,「輸出」針腳在 Gertboard 上是向 Raspberry Pi 的「輸入」針腳傳送訊號。
電機控制器
Gertboard 的電機控制器部分特別適合機器人和其他需要高功率的專案。它允許使用者控制大型電機等高功耗裝置,並且可以使用外部電源源提供更多電流。儘管本文中的專案不會使用這部分功能(如第 12 章「潛水艇」),如果你有 Gertboard ,完全可以考慮使用它來替代外部控制器。
如圖 13-6 所示,兩個中間螺絲端子用於連線電機,外側端子允許連線可提供更多電流的電源源(比 Gertboard 或 Raspberry Pi 本身更多)。電機的方向和速度由兩個標有 MOTA 和 MOTB 的頭針控制。
開集合驅動
在板子的右側有一個 ULN2803 裝置(如圖13-7),作為開集合驅動使用。它有六個埠用來開啟和關閉需要不同電壓、更高電流或與Pi或Gertboard分開供電的外部裝置。簡單來說,開集合驅動將外部電路的地線連線到板子上的地線,並為電路供電.每個埠可承受高達50V,並能提供500mA.
跳線設定
當購買 Gertboard時,它附帶一組塑膠跳線(如圖13-8)。這些跳線用來連線相鄰的針腳而不需要使用短跳線,否則會導致板子上的跳線亂七八糟。跳線的放置經常決定某個特定針腳是作為「輸入」還是「輸出」。不要丟失這些跳線。大多數套件也附帶幾條更長的跳線.如果你的沒有,不要擔心;標準女對女跳線在板子上也能很好地工作。
跳線設定
當購買 Gertboard時,它附帶一組塑膠跳線(如圖13-8)。這些跳線用來連線相鄰的針腳而不需要使用短跳線,否則會導致板子上的跳線亂七八糟。跳線的放置經常決定某個特定針腳是作為「輸入」還是「輸出」。不要丟失這些跳線。大多數套件也附帶幾條更長的跳線.如果你的沒有,不要擔心;標準女對女跳線在板子上也能很好地工作。
此圖示解說
此圖示展示了 Gertboard 各主要元件之間的關係及其功能。
- Atmega晶片透過GPIO介面與Raspberry Pi進行互動。
- D-to-A 轉換器負責將數位訊號轉換為類別比形式以供音訊或影片裝置使用。
- A-to-D 轉換器則將類別比訊號(如壓力感測器)轉換為數位訊號。
- I/O 段落包括LED、按鈕和開關等元件。
- 電機控制器則負責控制高功率電機。
- 開集合驅動用於開啟和關閉外部電路。
使用 Gertboard 控制馬達與外部電路
控制馬達的基本原理
當你需要控制馬達順時針轉動時,只需將 MOTA 傳輸 0 並將 MOTB 傳輸 1。這是因為雙極性步進馬達需要兩個方向的控制訊號來決定其轉動方向。在 Python 範例中,提供了詳細的程式碼來展示馬達驅動器的功能。
開啟 motor-rg.py,仔細閱讀其中的內容。你應該會認得出一些初始的匯入陳述式,然後是一些變數宣告和設計來執行馬達的函式。根據你的開發板型號,會有不同的接線說明,然後主程式開始執行。
接線及執行步驟
- 將馬達的一根導線連線到 MOTA,另一根連線到 MOTB。
- 將電源的正負極分別連線到 MOT+ 和 MOT- 引腳。
- 使用兩根跳線將 GP17 與 MOTB 以及 GP18 與 MOTA 連線。
- 在終端機中輸入
sudo python motor-rg.py。
執行這些步驟後,馬達將會依照程式碼所設定的方式執行:從零轉速逐漸加速至最大轉速再回到零轉速,然後重複相同過程但反向執行。這段程式碼使用了 GPIO 引腳 17 和 18 作為輸出。如果你選擇使用這個馬達控制器,可以自行設定任何你喜歡的 GPIO 引腳來作為馬達輸出。
import RPi.GPIO as GPIO
import time
# Set up GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
def forward():
GPIO.output(17, GPIO.HIGH)
GPIO.output(18, GPIO.LOW)
def backward():
GPIO.output(17, GPIO.LOW)
GPIO.output(18, GPIO.HIGH)
def stop():
GPIO.output(17, GPIO.LOW)
GPIO.output(18, GPIO.LOW)
try:
while True:
forward()
time.sleep(2)
stop()
time.sleep(1)
backward()
time.sleep(2)
stop()
time.sleep(1)
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
內容解密:
這段 Python 程式碼展示瞭如何使用 Raspberry Pi 的 GPIO 引腳來控制馬達的轉動。首先,我們匯入了必要的模組並設定了引腳模式和引腳編號。然後定義了三個函式:forward() 用於使馬達順時針轉動、backward() 用於逆時針轉動以及 stop() 用於停止馬達。
在主迴圈中,我們不斷地呼叫這些函式來使馬達按照指定的順序執行:先順時針轉動兩秒鐘、停止一秒鐘、然後逆時針轉動兩秒鐘、再停止一秒鐘。這樣形成了一個簡單的迴圈控制。
控制外部電路
Gertboard 上的開放集電極驅動器是最被忽視但卻最實用的一部分。它們可以用來透過 Raspberry Pi 開啟或關閉外部電路,無論該電路需要多少伏特或安培(在合理範圍內)。因此,它們與馬達控制器類別似,但更加靈活——畢竟,馬達控制器只能用於馬達。
Gertboard 提供了六個開放集電極驅動器,可以用來控制六個外部電路。一個簡單的測試電路可以是一個串聯 LED 和一個電阻。
import RPi.GPIO as GPIO
import time
# Set up GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
def turn_on_led():
GPIO.output(25, GPIO.HIGH)
def turn_off_led():
GPIO.output(25, GPIO.LOW)
try:
while True:
turn_on_led()
time.sleep(1)
turn_off_led()
time.sleep(1)
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
內容解密:
這段 Python 程式碼展示瞭如何使用 Gertboard 的開放集電極驅動器來控制 LED 的開啟和關閉。首先,我們匯入了必要的模組並設定了引腳模式和引腳編號。然後定義了兩個函式:turn_on_led() 用於點亮 LED 和 turn_off_led() 用於熄滅 LED。
在主迴圈中,我們不斷地呼叫這些函式來使 LED 每秒閃爍一次。這樣可以清晰地展示開放集電極驅動器能夠控制外部電路的一個簡單範例。
數位/模擬轉換器
Gertboard 配備了一顆 Microchip 的數位到模擬轉換晶片(D/A 轉換)。根據製造時可取得的元件不同,這顆晶片可能是 8、10 或 12 位元版本。要確認你擁有的是哪一種版本,仔細檢查 U10 晶片上的編號——它可能是 4802、4812 或 4822。第三位數字會告訴你晶片是否是 8、10 或 12 位元版本。
無論你擁有的是哪一種晶片版本,引腳排列方式都是相同的,而結果也都是相同的:輸入一個數位訊號 HIG、或所有為「1」 (例如: 0b1111111、0b0b1111),產生出約 2.04V 的模擬訊號。根據晶片資料手冊所提供公式:
$$ V_{out} = \left(\frac{D_{in}}{256}\right) \times 2.048V $$
在 Gertboard 上也有一顆 Microchip 的模擬到數位轉換晶片(A/D 轉換),型號為 MPC3002(10 位元),當其輸入端接受到 3.3V 的模擬訊號時會產生 HIG (數位訊號所有為「0b0b1」)。如果輸入端接受到較低伏特訊號則其輸出會相對應減低。
Raspberry Pi 與 Arduino:完美搭配
Raspberry Pi 與 Arduino 的互補優勢
就像花生醬和果醬、蝙蝠俠和小夥伴一樣,某些東西天生就該搭配在一起。Raspberry Pi 和 Arduino 恰好就是如此:許多愛好者和工程師(包括玄貓)曾經使用 Arduino 作為專案的核心元件,但總希望有一個體積相同且效能更強大的裝置。Raspberry Pi 滿足了這個需求:它比 Arduino 有更強大的處理能力(因為 Arduino 本質上只是一個微控制器),並且搭載完整 ARM 處理器。
當然市場上還有其他消費者級微處理器板卡選擇。Beagleboard 是另一款根據 ARM 處理器並執行不同版本 Linux(包括 Angstrom 和 Ubuntu)的板卡選項之一;但其缺點是價格高昂(約 $NTD3300)。Parallax 推出了一些專業級板卡選項如 Propeller 驅動元件以及內建雜糧版本;不過它與 Raspberry Pi 比較相似而非與 Arduino;且售價高昂(約 $NTD3960)。Intel 最新推出之微處理市場選項 Galileo 是與 Arduino 驅動元件相容之開發板卡;目前售價亦高昂(約 $NTD3360)。
然而上述幾款板卡都未曾獲得像 Arduino 一樣之廣泛採用率:周邊相關書籍、網站論壇社群不勝列舉;玄貓不會在此重述來源;然而關於 Raspberry Pi 與 Arduino 搭配之資料確實相對稀少。Raspberry Pi 是根據 Linux 作業系統;因此完全能夠執行 Arduino 軟體;本章節玄貓將帶領讀者安裝軟體並製作幾項簡單之專案—完全不用桌面電腦就可完成操作。
認識 Arduino
如果你對 Arduino 不太熟悉;它是微控制技術的一種常見實作方式—專門設計給初學者易於編寫及進行複雜有趣之電子工程任務。對於想要創造東西的人而言它是一大福音;Arduino 的整合發展環境(IDE)幾乎能執行於任何型態電腦;其編寫語言也非常類別似 C 語言—最棒的是其價格低廉;大多數版本價格都低於 $NTD966。
Arduino 有多種版本;從小巧迷你尺寸 Nano 模型到大型 Duemilanove 模型以及 Mega 模型都有;每個板卡上都有一顆 Atmega 主處理晶片;並且內建序列到 USB 標準晶片以便於與電腦進行溝通交流;他們具有類別似於 Raspberry Pi 的跳線佈置形式;但大多數均為母座插頭而非公座針腳形式。
在一般電腦上使用 Arduino
在一般電腦上使用 Arduino 是非常簡單的一件事—首先從官方網站下載適合你電腦型態之 IDE 軟體並安裝即可;安裝完成後就能夠開啟新建立之「草圖」(sketch)並立即開始編寫與硬體互聯之程式碼。(如圖示)
接線及基本操作
首先玄貓以 Duemilanove 型態作為範例說明:
豐富解說:
此圖示展示了一台 Duemilanove 型態Arduino 與其他元件之互連方式:Arduino 中心由 Microcontroller 主處理晶片組成;並透過 USB 標準晶片連結至一般電子電腦進行操作或傳輸資料。 Microcontroller 主處理晶片同時也連結至多對 General Purpose Input Output (GPIO) 插頭以便進行電子工程實作操作。(如圖示)
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Gertboard 深入:硬體互動與電路控制
package "物聯網架構" {
package "感知層" {
component [感測器] as sensor
component [執行器] as actuator
component [嵌入式裝置] as device
}
package "網路層" {
component [閘道器] as gateway
component [MQTT Broker] as mqtt
component [邊緣運算] as edge
}
package "平台層" {
cloud "IoT Platform" as platform
database [時序資料庫] as tsdb
component [規則引擎] as rules
}
package "應用層" {
component [監控儀表板] as dashboard
component [告警系統] as alert
component [數據分析] as analytics
}
}
sensor --> device : 資料採集
device --> gateway : 資料傳輸
gateway --> mqtt : MQTT 協議
mqtt --> edge : 邊緣處理
edge --> platform : 雲端上傳
platform --> tsdb : 資料儲存
platform --> rules : 規則處理
rules --> alert : 觸發告警
tsdb --> analytics : 資料分析
analytics --> dashboard : 視覺化
@enduml豐富解說:
此圖示展示了一個簡易 LED 電路搭配 Gertboard 上 Open Collector Driver 離散元件進行操作流程。 首先將 LED 延伸至串聯 Resistor 元件再接至外部 Power Supply 元件供應穩定直流電壓再接至 Open Collector Driver 元件進行開/關切換操作; 透過此 Open Collector Driver 元件可以間接透過 Raspberry Pi 主機進行遠端操作。 Open Collector Driver 是 Gertboard 上重要且靈活運用之元件之一—可藉由遙控 Raspberry Pi 主機進行外部系統之開/關操作。