前言

前一篇文章中,我們利用 WFduino 與 Scratch 3.0 建立了 LASS 資訊的查詢程式。而在這篇文章中我們將加上 DiFi 實驗板與 LCD1602 液晶顯示器,做出一個更為完整的空氣品質顯示器。此外,再搭配上 Google 語音服務,提供即時的語音提示功能。

開發環境建置

如果你還沒有建置 WFduino + Scratch 3 的開發環境,請參考這篇文章

在這篇文章中我們同樣使用 Scratch 3 抓取已被上傳至 LASS 的監測數據,而不會建置自己的監測器。

線路圖

DiFi V51 LCD1602 接線圖

DiFi V51 LCD1602 接線圖

  1. 我們需處理 LCD1602 背面的 GND、VCC、SDA、SCL 四支接腳,與 DiFi 腳位對應如下:
    LCM1602 IIC V1 接腳DiFi 實驗板腳位杜邦線顏色
    GNDGND黑色
    VCC+4.6V紅色
    SDAWFduino 編號 2橘色
    SCLWFduino 編號 1棕色
  2. DiFi 實驗板 I2C 介面的 SDA 與 SCL 固定分別使用 WFduino 編號 2 與 1 的腳位,連接至其他的 GPIO 將無法正常動作。
  3. 如果找不到完全與範例同色的杜邦線也沒關係。但是無論如何請使用四種不同顏色的杜邦線加以連接,以方便區分各個接腳。
  4. 此範例還會使用到內建的 RGB LED 燈泡,因此需要利用跳線帽分別將 LED1、LED2、LED3 連結至 WFduino 編號 7、6、5 腳位。如果對腳位如何配對有不清楚的地方,可參考這裡的說明
  5. 在此範例中省略使用麵包板以簡化線路圖。

程式

因為程式比較複雜,所以我們分成四個部分來逐一分析。

變數

WFduino LASS 讀取程式變數

WFduino LASS 讀取程式變數

  1. 變數 “PM25″、”Temperature”、”Humidity” 分別用來儲存由 LASS 所讀取到的 PM2.5 數值、攝氏溫度與濕度。
  2. 變數 “DQAIIndex” 用來儲存根據 PM2.5 數值所轉換出來的 PM2.5 空氣品質指標。轉換依據為英國政府所使用的標準,也是過去環保署所使用的方式之一 (目前環保署已經改用 AQI 綜合指標)。這個標準把 PM2.5 的空氣品質指標分為 1~10 級,只要 PM2.5 數值超過 71 ug/m3 就是最危險的等級 10,用紫色來表示,也就是我們常聽到的紫爆。
  3. 變數 “PreviousDQAIIndex” 用來儲存上一次的空氣品質指標。因為我們的程式會利用語音回報目前的空氣品質指標,但是如果每次查詢後都予以回報會太過吵鬧,所以選擇只有空氣品質指標發生變化時才進行回報。此變數與 DAQIIndex 可用來判斷空氣品質指標是否發生變化。
  4. 變數 “Message” 用來儲存 Scratch 舞台所顯示的資訊,同時也是語音報告的內容。
  5. 清單變數 “DAQI” 用來儲存所有空氣品質指標等級的下限數值。

    WFduino LASS 讀取程式 DAQI 清單變數

    WFduino LASS 讀取程式 DAQI 清單變數

  6. 清單變數 “DAQIColorRed”、”DAQIColorGreen”、”DAQIColorBlue” 分別用來儲存各個空氣品質指標所代表顏色的 R、G、B 數值。例如空氣品質指標 1 的代表顏色為 156(Red) + 255 (Green) + 156 (Blue)。可用在 RGB LED 燈泡的控制,使其產生對應的顏色。

    WFduino LASS 讀取程式 RGB 清單變數

    WFduino LASS 讀取程式 RGB 清單變數

自訂積木 PM25ToDAQIIndex

WFduino LASS 讀取程式自訂 PM2.5 空氣指標積木

WFduino LASS 讀取程式自訂 PM2.5 空氣指標積木

  1. 這個自訂積木將讀取到的 PM2.5 數值轉換成空氣品質指標。
  2. 空氣品質指標共有 10 個等級,如果使用 “如果” 積木來判斷 PM2.5 數值屬於哪個指標共需要重複 10 次類似下列的積木組合,程式過於攏長。

    使用 "如果" 積木判斷空氣品質指標

    使用 “如果” 積木判斷空氣品質指標

  3. 我們改用清單變數的方式,清單變數 DQAI 記住每個指標等級的下限,之後輪流檢查 PM2.5 的數值是否已經超過下限,即可找到所屬等級。以 PM2.5 數值為 43 當作範例,”重複直到” 積木會停在變數 “i” 為 6 的時候,此時變數 “DAQIIndex” 已被指定為 5,即為空氣品質指標的等級。
  4. 此外,程式還要檢查是否已經比完變數清單中的所有資料,也就是檢查變數 i 是否已經等於 DAQI 清單變數的長度 + 1。如果 PM2.5 的數值比最高等級的下限還要大,即表示空氣品質指標為最高等級。

自訂積木 DisplayOnLCD

WFduino LASS 讀取程式自訂 LCD 顯示積木

WFduino LASS 讀取程式自訂 LCD 顯示積木

  1. 這個自訂積木將各項數值顯示在 LCD 1602 的適當位置上。
  2. 其實這兩個自訂積木都不是很複雜,即使不使用自訂積木也是可以完成同樣的功能。但是透過自訂積木的作法,可以讓主要程式更加簡單易懂。

主要程式

WFduino LASS 讀取程式

WFduino LASS 讀取程式

  1. 程式一開始將變數 “DAQIIndex” 與 “PreviousDAQIIndex” 設定為 -1,表示尚未讀取到有用的資料。
  2. 這個程式讀取編號為 74DA38E69E46 的 LASS 設備所傳送的監測數據,請記得改用距離你最近的監測器。如果不知道要怎麼找尋,可參考此處的說明
  3. 接著程式讀取 LASS 設備的數據,並分別儲存至變數 “PM25″ (PM2.5 數值)、”Temperature” (攝氏溫度) 與 “Humidity” (濕度)。
  4. 程式呼叫自訂積木 “PM25ToDAQIIndex”,計算目前 PM2.5 空氣品質指標。
  5. 程式呼叫自訂積木 “DisplayOnLCD”,將相關數據顯示至 LCD1602。
  6. 接著程式判斷空氣品質指標是否發生變化,一旦發生變化就
    1. 組合訊息字串,此字串會顯示在 Scratch 舞台上,也會透過 Google 語音服務進行提示。
    2. 接著程式設定 RGB LED 燈泡的顏色,請注意編號 7、6、5 腳位所對應的顏色順序為綠 (Green)、紅 (Red)、藍 (Blue)。在此,我們事先將每個等級所需的顏色數值儲存在三個變數清單當中,也就是 DAQIColorGreen 的第一個項目就是等級一所需的綠色數值,而 DAQIColorRed 與 DAQIColorBlue 的第一個數值則為等級一所需的紅色與藍色數值。如此一來,我們就可以利用同樣的方式取出每個等級所需的綠色、紅色、藍色數值,而不需像下面方式一樣使用一大堆的 “如果” 積木:
      使用 "如果" 積木控制 RGB LED 燈泡

      使用 “如果” 積木控制 RGB LED 燈泡

      這種設計方式稱為查表法,通常不但寫出來的程式更為簡潔,而且還有執行速度上的優勢。此外,所有顏色數值集中設定,日後要修改時也會方便許多。

    3. 程式分別顯示與說出訊息字串。
    4. 將 PreviousDAQIIndex 設定為 DAQIIndex,以便判斷下一次空氣品質指標變化的發生。

當我們執行程式後,應可看到 Scratch 貓咪說出目前的空氣品質狀態,如下圖所示:

WFduino 讀取 LASS 資訊執行結果 (Scratch 3)

WFduino 讀取 LASS 資訊執行結果 (Scratch 3)

除了電腦畫面上的顯示,LCD 液晶顯示器上亦會顯示相關數據,並且透過 DiFi 實驗板上的 RGB LED 燈泡顯示對應顏色,如下圖所示:

DiFi V51 利用 LCD1602 顯示 LASS 資訊

DiFi V51 利用 LCD1602 顯示 LASS 資訊

此外,程式剛啟動或空氣品質指標發生變化時,還會有語音的提示。透過之前幾篇文章的組合應用,我們完成了一個即時的空氣品質顯示器,是不是很酷呢?

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