Raspberry Pi 樹莓派套件_Build HAT|奧斯丁教育 OURSTEAM in EDUCATION
icon教學資源
102022.02

Raspberry Pi 樹莓派套件_Build HAT

介紹

在此專案中將製作一個能把數據視覺化的儀表板;您可以選擇線上一系列的資源作為數據資料。您的數據儀表板須符合下列的專案簡介

儀表板是一種使用者介面,提供重要的訊息摘要,通常以圖型或是容易閱讀的形式顯示。此專有名詞源自於汽車,透過大且明亮的錶盤和刻度顯示資訊,讓駕駛能快速了解車輛目前的狀態。
  • 使用 LEGO® 馬達和零組件建立自動化指示器
  • 取得線上 API (Application Programming Interface),使用 Python 檢索有趣的數據
  • 透過您使用樂高製作的儀表板顯示所選擇的數據

所需項目

硬體
  • 樹莓派 Raspberry Pi
  • 樹莓派 Raspberry Pi Build HAT
  • 樹莓派 Raspberry Pi Build HAT 7.5V PSU
  • 2 款 LEGO® Technic™ 系列馬達(自由選擇)
  • 1 款 LEGO® SPIKE™ 系列的力量感測器
  • 各種 LEGO® 系列(在此我們選用 LEGO® SPIKE™ Prime kit 系列)
  • 紙張或卡片
  • 用於黏接紙張卡片的大頭釘或膠帶
  • 馬克筆或鉛筆
  • 剪刀或美工刀

選配
  • LED 燈
  • 電阻器
  • 跳線
  • 麵包板
  • M2 螺栓和螺母(兩組用於將樹莓派 Raspberry Pi 鎖上 LEGO® 的建構板)

軟體
  • 控制 Build HAT 的 Build HAT Python 資料庫
  • Thonny Python IDE
下載
  • 此專案的完整程式碼可由此處取得。

開始前,您需要設定樹莓派 Raspberry Pi,並連接到 Build HAT:

使用 M2 螺絲組將樹莓派 Raspberry Pi 所到 LEGO 的建構板上,確認樹莓派 Raspberry Pi 與建構板的某一側平貼無溝槽,如下圖:

 
Raspberry Pi bolted to a magenta LEGO Build Plate.

以此種方式安裝樹莓派 Raspberry Pi 可輕鬆取用端口和 SD 卡插槽。此建構板讓您可以更簡單地將樹莓派 Raspberry Pi 連接儀表板的主要架構。

將 Build HAT 對齊樹莓派 Raspberry Pi,確認看到 This way up 的標誌;確保所有的 GPIO 引腳皆被 HAT 覆蓋並用力壓下固定。(此範例使用加高的引腳示範較為清楚。)





利用 Build HAT 上的 7.5V 筒形插孔為樹莓派供電,才有辦法使用馬達。

如果您尚未開始,請按照說明設定您的樹莓派 Raspberry Pi:設定樹莓派

樹莓派 Raspberry Pi 啟動後,點擊樹莓派 Raspberry 清單按鈕,選擇「Preferences」→「Raspberry Pi Configuration」,開啟 Raspberry Pi Configuration 工具。

點選「interfaces」調整設定如下:



另外,還需要按照以下說明安裝 buildhat python 資料庫:

安裝 buildhat Python 資料庫

按 Ctrl+Alt+T 在樹莓派 Raspberry Pi 上開啟終端窗口。
按照提示輸入:sudo pip3 install buildhat
按下 Enter 並等待「installation completed」安裝完成。

專案簡介:LEGO® 數據儀表板

您的任務是建立一個可顯示所選數據的樂高 LEGO 儀表板。數據來源可以是任何您喜歡的 API,但在此範例中,我們會示範如何獲取 OpenAQ,可自由選擇是否註冊。

對於我們的示範數據,將會測量:
  • 所選地點的 NO₂ (二氧化氮)濃度。 二氧化氮 (Nitrogen dioxide ,NO₂)屬於高反應性氣體的一種,為氮氧化物(NOx,nitrogen oxides)組成的一種,主要透過燃料燃燒釋放到空氣中。
  • 所選地點的細懸浮微粒(PM2.5)濃度。 「fine particles」或「particulate matter 2.5 (PM2.5)」一詞是指空氣中粒徑在2.5微米(μm)以下之粒狀污染物。 歸類為 PM2.5 的粒狀汙染物也是造成霧霾的主要物質之一。
此範例的 API 使用來自 OpenAQ 的數據,這是一個主張「fighting air inequality through open data」的非營利性組織。全世界約有八分之一的死亡是由於空氣品質不佳所造成的;因此 OpenAQ 蒐集了全球空氣品質數據,希望藉此幫助更多人了解世界上某些地區的空氣污染問題日益嚴重。

儀錶板專案目標:
  • 使用樂高 LEGO® 清晰顯示所選取的數據
  • 連結線上 API 取得最新的數據資料
  • 至少需要兩組樂高 LEGO® 指示器

儀錶板功能:
  • 使用其它電子元件(LED、蜂鳴器)
  • 可連接輸入元件(LEGO® Technic™ 馬達、LEGO® 力量感測器、GPIO 按鈕、距離感測器)
尋找靈感

觀察以下範例尋找靈感,想想您希望儀表板顯示何種資訊。

此範例為天氣儀表,以垂直滑動的指針顯示當前溫度;以 LED 顯示雲層厚度;並依照溫度(包含風和其它天氣狀況)轉動圓盤建議合適的外出服裝;最後使用世界氣象組織的代碼(WMO)顯示詳細的天氣狀況。



規劃製作儀錶板

按照此步驟規劃儀錶板要顯示的資訊。您可以透過思考、修補、繪畫或書寫,依照任何您喜歡的方式進行規劃!

在此我們將使用 OpenAQ 獲取的 API 作為範例專案,示範如何製作及使用數據儀表板。您可以依照喜好選擇想要的 API (如果想嘗試不同來源的數據,在最後的步驟中有部分 API 連接可供參考)

為何要製作儀表板?

思考一下儀表板的用途:
  • 顯示何種資訊?
  • 以何種方式顯示資訊?
  • 介面如何規劃?是否易於閱讀?

使用者是誰?

思考一下儀表板的觀看者(受眾者)是誰?
  • 使用何種符號或刻度可以讓顯示內容一目了然?
  • 用戶如何取得當前數據?
  • 用戶會喜歡明亮的色彩燈光,亦或簡潔乾淨的設計?
  • 儀錶板是否合乎用戶期望的存放位置?

開始製作

使用紙筆規劃您的儀表板:
  • 思考您手邊有多少可用於為指示器供電的馬達 — 每個指示器都需要一顆馬達
  • 您會使用 LED、蜂鳴器、按鈕等其它電子元件嗎?分別作為何用呢?
  • 如何將不同的指標和輸入組合到同一個架構中呢?
  • 需要那些樂高 LEGO 物件?
畫出您的儀表板,包含整個架構、指標以及各種需要用到的輸入元件;並將其分別標記出會顯示或輸入的資訊。

在下一步驟中,將使用樂高 LEGO® 為儀錶板建立讀數!
 
儲存檔案


製作樂高 LEGO® 滑動指示器

如果您不想要這款滑動指示器,可直接跳至下一步製作 LEGO 轉盤。

滑動指示器如下圖:



您也可依照喜好將指示器改成水平滑動,方法是將組件逆時針旋轉 90 度。

按照下列說明組合垂直滑動指示器:

組裝此模型,請參照連結:組裝指南

 

取一個黃色板子,並使用 90 度螺柱連接兩個藍色支架,如下圖:



垂直組裝兩個灰色支架,兩個間隔一列,如下圖:



將兩個灰色長螺柱組到垂直支架的上方,如下圖:



將兩個垂直的灰色支架以三孔黃色積木水平連接,如下圖:



組裝黑色小齒輪和短軸,如下圖:



組好軸心的齒輪插入黃色建構板,如下圖:



將黑色鋸齒長條積木、紅色十字軸心及指示箭頭組合在一起,指示箭頭指向鋸齒側,如下圖:



將組裝好的鋸齒長條從上方往下滑入組裝,如下圖:



轉動齒輪,讓鋸齒狀長條積木可以卡進齒輪之後,便可輕鬆上下滑動。穩定連接馬達。

取一個馬達,在其上方孔洞組裝兩個連接軸。



連接黑色滑桿前,請確認馬達邊緣的兩個棒棒糖符號已對齊,表示已「歸零」,如下圖:



將馬達組裝固定在建構板的另一面,確認馬達的軸心完整插入,組裝位置如下圖:



測試滑動指示器

針對滑動指示器編程,可利用曾在 LEGO® Data plotter 中編寫的部分代碼。

將馬達連接至 Build HAT 的 A 端口。

接下來會使用到 BuildHAT Python 資料庫,請確認是否已安裝:

安裝 BuildHAT Python 資料庫
  • 按住 Ctrl+ Alt+T 在樹莓派 Raspberry Pi 上開啟終端窗口。
  • 依照提示輸入:pip3 install buildhat
  • 按下 Enter 等待「安裝完成」的訊息。
 
製作刻度

取一張與鋸齒長條積木等長的紙張,貼在指針旁,準備好馬克筆或鉛筆。

從樹莓派的 Programming 清單中開啟 Thonny

在視窗底部三個箭頭旁的 Shell 輸入:from buildhat import Motor 後按 Enter。您應該會看到新的一行,有三個箭頭。

接著輸入:motor = = Motor('A') 後按 Enter。

現在已完成馬達的滑動設定,接著要發送最大及最小的讀數,觀察它可以移動多遠 — 在側邊的卡片標記位置。

輸入:motor.run_to_position(-180, 100) 後按 Enter
在卡片上箭頭所指的地方做記號。此為最小可能讀數。

輸入:motor.run_to_position(180, 100, direction=clockwise) 後按 Enter
在卡片上箭頭所指的地方做記號。此為最大可能讀數。

現在已知最小及最大可能讀數位置;當滑移指針連接到某些數據後,即可畫出準確的刻度。

 
針對滑動指示器編寫程式碼顯示實時數據

在空白行輸入下列編碼:



將檔案儲存為 slider_test.py 後,點擊運行。即可看見滑軸上下移動(或前後移動)!

儲存檔案


製作樂高 LEGO® 儀表

另一種快速顯示數據的方法是使用刻度盤,也稱為儀表。您以前肯定見過它們;它們通常是圓形或半圓形,有兩個主要部分:
  • 表面刻度,上面顯示了比例
  • 指針,沿著刻度移動顯示數據讀數

儀表或刻度盤是最簡單的數據讀數類型,僅需製作刻度和指針,直接連接到到馬達,組成非常簡單:

將馬達連接到儀表的背面前,請確認馬達邊緣的兩個棒棒糖符號已對齊,表示已「歸零」:



製作刻度

您需要紙張或卡片以及其它美術工具繪製儀表。組裝機制和編碼完全相同,只需思考您希望使用哪種介面。

選擇您要製作的錶盤類型。

可使用樂高 LEGO® 製作兩款簡單的錶盤:
  • 旋轉指針顯示資訊:
  • 旋轉錶盤顯示資訊:

按照您希望的大小在空白紙上畫一個正圓;標記中心點後用剪刀剪下。

將圓盤劃分成相同大小(每個讀數一等份),或在邊緣繪製刻度。

在每一等份中繪製圖標或寫下資訊內容。

完成錶盤介面後,將其安裝到建構板上。


旋轉指針式儀表

將錶盤中心點穿過齒輪軸心,用萬用黏土或膠帶固定。


 
在軸心裝上 90 度直角轉接積木後再裝上指針。請確保作為指針的積木夠長,可清楚地指出讀數。


 
指針垂直向上(且馬達「歸零」),後面計算讀數所需的旋轉量會更輕鬆。


旋轉錶盤式儀表

安裝一組齒輪,避免卡住建構板,並使用萬用黏土浮貼錶盤,如下圖:
請將錶盤的中間刻度對其上方的指針(與對齊棒棒糖符號「歸零」的概念相同),最小值和最大值位於底部。



測試儀表

將儀表馬達連接到 Build HAT 的 A 端口。

接下來會使用 BuildHAT Python 資料庫,請確認是否已安裝:

安裝 BuildHAT Python 資料庫
  • 按住 Ctrl+ Alt+T 在樹莓派 Raspberry Pi 上開啟終端窗口。
  • 依照提示輸入: pip3 install buildhat
  • 按下 Enter 等待「安裝完成」的訊息。
 
從樹莓派的 Programming 選單中開啟 Thonny

在空白行輸入下列代碼:

gauge_test.py


將檔案另存為 gauge_test.py 後點 Run 開始運行。您可以看見儀表板開始運作!


製作 LED 刻度表

另一種很酷的數據顯示方法是使用一系列隨著讀數變化開關的 LED 燈 — 讀數越高,點亮的 LED 燈越多;如同電腦中顯示音樂音量的圖型等化器。
 

製作 LED 顯示器需要數顆 LED 燈泡 — 燈泡越多越準確,但是有上限:只能使用與 GPIO 引腳數量一樣的 LED。此範例中使用了五顆 LED,您也可依照意願連接更多顆。

注意:礙於 Build HAT 的設計,無法取用 GPIO 14 或 15(引腳 8 和 10)。

組裝 LEDs、電阻器、M–F 跳線以及麵包板。



仔細觀察 LED — 你會發現兩根金屬不等長。



將 LED 較短的那一支金屬插入麵包板邊緣的接地軌(位於邊緣的藍線旁),較長的插入相對應的編號行,如下圖:



您需要在電路中加入一個電阻器,避免 LED 過載燒壞或爆裂。

取一個電阻,一端插入序列中第一個 LED 所在的同一行;另一端插入麵包板中線另一側的同一行,如下圖:



每顆 LED 都重複上述步驟:



將 M–F 跳線的 M 端插入每個電阻器所在的同一行,以便連接到樹莓派Raspberry Pi 上的引腳:



另取一條跳線的 M 端插入接地軌的末端,如下圖:



完成後的組裝圖如下:



下一步驟是將其連接到樹莓派 Raspberry Pi 上的 GPIO 引腳。

將連接到接地軌的跳線的 F 端連接到引腳 39,它會將所有 LED 燈泡接地。



將其他跳線連接到各 GPIO 引腳,記下連接的引腳。

在此範例中使用了引腳 16、19、20、21 和 26(為了保持整潔,將它們全部放在同一端):



現在 LED 已連接到樹莓派 Raspberry Pi,接下來要進行編程。

將 7.5V 電源連接到 Build HAT 上的筒形插孔。應該會看到樹莓派 Raspberry Pi 啟動並載入 Raspberry Pi OS 桌面。

Programming 選單中開啟 Thonny

程式碼的首行將導入 gpiozero 及 randint 資料庫,設定 LED 為可操控。您需要更改括號中的數值,配對 LED 連接到的引腳編號。 

 
注意:數字的順序很重要!引腳編號排列要從最低值到最高值。

在空白行輸入下列代碼:

led_bargraph.py

針對 LED 編碼的前置作業已完成。下一步驟要拉出想測量的數據,然後根據結果決定要開啟幾顆 LED 燈。在此,應選擇隨機數據。

我們的目的為讓 LED 在讀數增加時亮燈;讀數減少時關燈。與其它的指示器一樣,需要將數據與刻度相對照。

在程式碼中的結尾輸入下列代碼:

led_sequence.py

將檔案另存為 led_sequence.py 後,點選 Run 開始運行。您可以看見 LED 按照讀數量燈!


儲存檔案


取用 OpenAQ API

API 全名為 Application Programming Interface;是一款可以讓兩個應用程式互相溝通的軟體。使用 Facebook、發送即時訊息,或是使用手機查看天氣皆屬於 API 的範疇。

每次使用手機的應用程序時,該應用程序都會連接到互聯網並將相關內容的數據發送到伺服器。接著,該伺服器會檢索您想要的數據並回傳至手機,透過手機應用程式獲取回傳的數據,已可讀的方式提供相關訊息。這就是所謂的 API:透過網路操控各個裝置皆是透過 API 完成。

而最棒的部分是,您可以編寫專屬的應用程式調用線上的數據資料,回傳至您組裝的樂高 LEGO® 儀錶板,而不是手機 — 以樹莓派 Raspberry Pi 作為獲取數據的大腦,然後將資訊顯示在專屬於您的手工訂製樂高 LEGO 顯示器!

為此,您需要決定幾件事:選定測量空氣品質的地點 — 任君選擇!以及決定標示空氣品質的圖標。

OpenAQ — 空氣品質開放式數據庫

在示範的儀表板中會透過 API 取用 OpenAQ 的開放式全球空氣品質的數據資料。OpenAQ 允許大家查看世界各地大量的空氣汙染數據,這些數據是由世界各地的數千個側量站收集而來的。

如果您以相當孰悉 API,可以取用任何您喜歡的數據製作儀錶板;如果想依照教學步驟一步步嘗試使用 OpenAQ,請先找出想調查的測量站以及想查看的數據。

點擊此處進入 OpenAQ 頁面,會出現一張有標示的世界地圖。

選定您想收集關於空氣品質數據的地區,可以是您居住的地區;也可以是您覺得有趣的地區。

由於我們的總部位於英國劍橋,因此將以它作為範例。

空氣品質監測站有許多不同的測量。OpenAQ 數據庫包含了下列空氣污染的資訊:
  • PM2.5 和 PM10(懸浮微粒):漂浮在空氣中的微小顆粒(煙霧、煙霧)
  • NO2(二氧化氮):產生臭氧,導致兒童哮喘
  • CO(一氧化碳):對人類致命,燃燒化石燃料的產物
  • SO2(二氧化硫):氣味難聞,會導致呼吸困難,產生酸雨,工業處理的產物
  • O3(臭氧):當 NO2 與陽光發生反應時產生,會產生煙霧,對植物有害
  • BC(黑碳):在許多地方(美國和波蘭)未測量,由低能效的燃料燃燒引起,加劇全球變暖,對人類有害
選擇您最想測量的空汙類型。您可以從畫面左側的彩色刻度附近的下拉選單中選擇不同的選項。


注意:圓形標記為重要的空氣品質監測站,可以測量更多不同的污染物。

放大地圖上您選定的地區,找到離欲測量地區最近的點;點擊查看該地區的詳細資訊;在彈出視窗中點選「View Location」。



新頁面會顯示在該地點測量的詳細資訊,請記住新頁面 URL 中的數字;這是空氣品質監測站的 OpenAQ 識別碼。(本範例為 Sandy Roadside 監測站,識別碼為 2480



在地點頁面中,可以看到該地區測量的汙染物類型。選擇兩種您希望顯示在儀錶板上的資訊。



Sandy 附近的監測站顯示了 NO2、PM10、和 PM2.5 — 我們將使用 NO2 和 PM2.5 示範。


使用儀錶板顯示污染數據

目前您的儀錶板是使用介於 -175 至 175 間的隨機整數;因為馬達在每個方向上的行程有限(不會達到 180 度,因為可能會導致運行問題)。來自 API 的數據範圍與儀錶不同,因此需要將其變更為適合馬達的範圍。

校準指示器意味著將 API 中的最大和最小可能數據值對應到馬達轉動的 -175° 和 175° 之間。最大可能讀數為 -175°;最小可能讀數為 175°。(因為馬達為反向安裝!)

在範例中,我們將細懸浮微粒 (PM2.5) 的測量值顯示在儀錶上;滑動指示器則顯示二氧化氮 (NO2) 濃度。 PM2.5 為霧霾的主要組成物,難以用肉眼看見。

與英寸、米和毫米一樣,微米是距離的測量單位。一英寸大約有 25,000 微米。PM2.5 尺寸範圍內較大顆粒的寬度比人類頭髮的寬度小約 30 倍。

在範例中,滑動指示器將顯示二氧化氮 (NO2) 濃度。滑動指示器的最大可能讀數取決於您選定的地點,因為城市地區的讀數經常比農村地區高;而最小可能讀數即為 0。另外,您需要思考測量中的正常範圍是多少,並繪製儀錶。

要確定最大可能讀數,可在之前開啟的網頁中查看所選地區的歷史數據:



上圖可以看出,雖然有部分異常的數值,但針對 Sandy Roadside 地區的空氣品質監測站大部分的數值可以取 60 作為最大的可能讀數。(如果想用 100 作為最大讀數也可以,只需要更改成 max_value = 100

將滑動指示器馬達連接到 Build HAT 上的端口 A。
將儀錶馬達連接到端口 B。

在新開的 Thonny 視窗中輸入以下內容:
 
data_dash.py

您已導入了必要的資料庫並設定了測量的詳細資訊,接著可以製作術語辭典設定 API 檢索。

在 Thonny 視窗中,繼續新增代碼:

data_dash.py

下一步需要編寫的函數為使用設定的參數檢索 API。

接著新增第39-63行的代碼:

data_dash.py

下一步要編寫的是巧妙的數學運算,將數據範圍對應到馬達範圍內(基本上與 LEGO Data plotter project 的功能相同)。

在現有的代碼中繼續新增函數:

data_dash.py

函數已建立,接著您需要創建一個循環,用於:
  • 找出馬達當前所處的角度
  • 從 remap 函數中拉出汙染數據,改變馬達角度
  • 移動到新角度顯示讀數
新增73-91行代碼:

data_dash.py


最後一部分要調用 check_air() 函數運行整個程序,持續檢索 API 獲取最新的數據。

最後新增93-95行(確認無縮行),輸入:

data_dash.py

另存檔案為 data_dash.py ,點擊 Run 開始運行。滑動指示器會開始移動顯示您選擇的 OpenAQ 監測站 NO2 數據;儀錶也會開始移動顯示 PM2.5 讀數。做得好!
 
儲存檔案


延伸項目

您可以儀錶板上新增第三個馬達,或者建立一個 LED 長條圖顯示來自 OpenAQ 的其它數據。現在您也以了解了如何使用樂高 LEGO® 指示器顯示數據,您可以用新的數據儀錶板顯示任何感興趣的數據!

下列為可用於儀錶板上的數據來源:
跟著 Introduction to LEGO Build HAT 指引,可繼續學習 LEGO Robot face 專案。在此專案中,您會使用到樂高 LEGO® 以及部分 LED 陣列製作一張臉,然後將其連接到機器學習模型識別物體,並讓以有趣的表情做出反應!
 

如果您已完成所有的樂高史派克 LEGO® Spark 專案,可嘗試其它專案探索 Python,獲得更多樂趣。
  • icon
  • icon
  • icon
  • icon
  • icon
  • icon電話:04-2376-6276
  • icon傳真:04-2256-9949
  • icon統編:13438259
  • iconE-mail:oursteamtw@gmail.com
  • iconLINE ID:@oursteam