前言
在前一篇文章中,我們利用 WFduino 與 Scratch 3.0 建立了 LASS 資訊的查詢程式。而在這篇文章中我們將加上 DiFi 實驗板與 LCD1602 液晶顯示器,做出一個更為完整的空氣品質顯示器。此外,再搭配上 Google 語音服務,提供即時的語音提示功能。
開發環境建置
如果你還沒有建置 WFduino + Scratch 3 的開發環境,請參考這篇文章。
在這篇文章中我們同樣使用 Scratch 3 抓取已被上傳至 LASS 的監測數據,而不會建置自己的監測器。
線路圖
- 我們需處理 LCD1602 背面的 GND、VCC、SDA、SCL 四支接腳,與 DiFi 腳位對應如下:
LCM1602 IIC V1 接腳 DiFi 實驗板腳位 杜邦線顏色 GND GND 黑色 VCC +4.6V 紅色 SDA WFduino 編號 2 橘色 SCL WFduino 編號 1 棕色 - DiFi 實驗板 I2C 介面的 SDA 與 SCL 固定分別使用 WFduino 編號 2 與 1 的腳位,連接至其他的 GPIO 將無法正常動作。
- 如果找不到完全與範例同色的杜邦線也沒關係。但是無論如何請使用四種不同顏色的杜邦線加以連接,以方便區分各個接腳。
- 此範例還會使用到內建的 RGB LED 燈泡,因此需要利用跳線帽分別將 LED1、LED2、LED3 連結至 WFduino 編號 7、6、5 腳位。如果對腳位如何配對有不清楚的地方,可參考這裡的說明。
- 在此範例中省略使用麵包板以簡化線路圖。
程式
因為程式比較複雜,所以我們分成四個部分來逐一分析。
變數
- 變數 “PM25″、”Temperature”、”Humidity” 分別用來儲存由 LASS 所讀取到的 PM2.5 數值、攝氏溫度與濕度。
- 變數 “DQAIIndex” 用來儲存根據 PM2.5 數值所轉換出來的 PM2.5 空氣品質指標。轉換依據為英國政府所使用的標準,也是過去環保署所使用的方式之一 (目前環保署已經改用 AQI 綜合指標)。這個標準把 PM2.5 的空氣品質指標分為 1~10 級,只要 PM2.5 數值超過 71 ug/m3 就是最危險的等級 10,用紫色來表示,也就是我們常聽到的紫爆。
- 變數 “PreviousDQAIIndex” 用來儲存上一次的空氣品質指標。因為我們的程式會利用語音回報目前的空氣品質指標,但是如果每次查詢後都予以回報會太過吵鬧,所以選擇只有空氣品質指標發生變化時才進行回報。此變數與 DAQIIndex 可用來判斷空氣品質指標是否發生變化。
- 變數 “Message” 用來儲存 Scratch 舞台所顯示的資訊,同時也是語音報告的內容。
- 清單變數 “DAQI” 用來儲存所有空氣品質指標等級的下限數值。
- 清單變數 “DAQIColorRed”、”DAQIColorGreen”、”DAQIColorBlue” 分別用來儲存各個空氣品質指標所代表顏色的 R、G、B 數值。例如空氣品質指標 1 的代表顏色為 156(Red) + 255 (Green) + 156 (Blue)。可用在 RGB LED 燈泡的控制,使其產生對應的顏色。
自訂積木 PM25ToDAQIIndex
- 這個自訂積木將讀取到的 PM2.5 數值轉換成空氣品質指標。
- 空氣品質指標共有 10 個等級,如果使用 “如果” 積木來判斷 PM2.5 數值屬於哪個指標共需要重複 10 次類似下列的積木組合,程式過於攏長。
- 我們改用清單變數的方式,清單變數 DQAI 記住每個指標等級的下限,之後輪流檢查 PM2.5 的數值是否已經超過下限,即可找到所屬等級。以 PM2.5 數值為 43 當作範例,”重複直到” 積木會停在變數 “i” 為 6 的時候,此時變數 “DAQIIndex” 已被指定為 5,即為空氣品質指標的等級。
- 此外,程式還要檢查是否已經比完變數清單中的所有資料,也就是檢查變數 i 是否已經等於 DAQI 清單變數的長度 + 1。如果 PM2.5 的數值比最高等級的下限還要大,即表示空氣品質指標為最高等級。
自訂積木 DisplayOnLCD
- 這個自訂積木將各項數值顯示在 LCD 1602 的適當位置上。
- 其實這兩個自訂積木都不是很複雜,即使不使用自訂積木也是可以完成同樣的功能。但是透過自訂積木的作法,可以讓主要程式更加簡單易懂。
主要程式
- 程式一開始將變數 “DAQIIndex” 與 “PreviousDAQIIndex” 設定為 -1,表示尚未讀取到有用的資料。
- 這個程式讀取編號為 74DA38E69E46 的 LASS 設備所傳送的監測數據,請記得改用距離你最近的監測器。如果不知道要怎麼找尋,可參考此處的說明。
- 接著程式讀取 LASS 設備的數據,並分別儲存至變數 “PM25″ (PM2.5 數值)、”Temperature” (攝氏溫度) 與 “Humidity” (濕度)。
- 程式呼叫自訂積木 “PM25ToDAQIIndex”,計算目前 PM2.5 空氣品質指標。
- 程式呼叫自訂積木 “DisplayOnLCD”,將相關數據顯示至 LCD1602。
- 接著程式判斷空氣品質指標是否發生變化,一旦發生變化就
- 組合訊息字串,此字串會顯示在 Scratch 舞台上,也會透過 Google 語音服務進行提示。
- 接著程式設定 RGB LED 燈泡的顏色,請注意編號 7、6、5 腳位所對應的顏色順序為綠 (Green)、紅 (Red)、藍 (Blue)。在此,我們事先將每個等級所需的顏色數值儲存在三個變數清單當中,也就是 DAQIColorGreen 的第一個項目就是等級一所需的綠色數值,而 DAQIColorRed 與 DAQIColorBlue 的第一個數值則為等級一所需的紅色與藍色數值。如此一來,我們就可以利用同樣的方式取出每個等級所需的綠色、紅色、藍色數值,而不需像下面方式一樣使用一大堆的 “如果” 積木:
這種設計方式稱為查表法,通常不但寫出來的程式更為簡潔,而且還有執行速度上的優勢。此外,所有顏色數值集中設定,日後要修改時也會方便許多。
- 程式分別顯示與說出訊息字串。
- 將 PreviousDAQIIndex 設定為 DAQIIndex,以便判斷下一次空氣品質指標變化的發生。
當我們執行程式後,應可看到 Scratch 貓咪說出目前的空氣品質狀態,如下圖所示:
除了電腦畫面上的顯示,LCD 液晶顯示器上亦會顯示相關數據,並且透過 DiFi 實驗板上的 RGB LED 燈泡顯示對應顏色,如下圖所示:
此外,程式剛啟動或空氣品質指標發生變化時,還會有語音的提示。透過之前幾篇文章的組合應用,我們完成了一個即時的空氣品質顯示器,是不是很酷呢?
Facebook 留言
Summary

Article Name
使用 WFduino + Scratch 3 + DiFi 建立 LASS 空氣品質顯示器
Description
在這篇文章中我們利用 DiFi 實驗板與 LCD1602 液晶顯示器,做出一個完整的 LASS 空氣品質顯示器。此外,再搭配上 Google 語音服務,提供即時的語音提示功能。
Author
Cyril Wang
Publisher Name
Everlearn Studio
Publisher Logo

0