前言

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

開發環境建置

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

在這篇文章中我們使用 Scratch 3 抓取已被上傳至 LASS 的監測數據,而不會建置自己的監測器。如果想要自行建置 PM2.5 監測器,可參考此篇文章

線路圖

Arduino 與 LCD1602 顯示器及 RGB 全彩燈泡

Arduino 與 LCD1602 顯示器及 RGB 全彩燈泡

  1. 我們需處理 LCD1602 背面的 GND、VCC、SDA、SCL 四支接腳,與 Arduino 腳位對應如下:
    LCM1602 IIC V1 接腳Arduino Uno 腳位杜邦線顏色
    GNDGND橘色
    VCC+5V黃色
    SDAA4綠色
    SCLA5藍色
  2. Arduino I2C 介面的 SDA 與 SCL 固定分別使用 Arduino 的 A4 與 A5 腳位,連接至其他的 GPIO 將無法正常動作。
  3. 此範例還須使用全彩 LED 燈泡,而我使用的是共陽極的全彩 LED 燈泡,所以共用的陽極接腳連結至電源輸出腳位,也就是 Arduino 上的 +5V 腳位。
  4. 限流電阻分別串聯三支不共用的接腳與控制用的輸出腳位,在此我統一使用 220 歐姆的電阻。此三個限流電阻相當靠近,接線時務必小心,以避免彼此之間發生接觸。
  5. 各顏色之控制腳位對應如下
    全彩 LED 接腳Arduino 對應腳位杜邦線顏色
    紅色 (R) 接腳腳位 9紅色
    藍色 (B) 接腳腳位 10藍色
    綠色 (G) 接腳腳位 11綠色
    VCC (V) 接腳+5V黃色
  6. 每個全彩 LED 燈泡的腳位編排可能有所不同,需依照實際使用的元件作出相對的調整。
  7. 如果找不到完全與範例同色的杜邦線也沒關係。但是無論如何請使用不同顏色的杜邦線加以連接,以方便區分各個接腳。

程式

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

變數

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. 這個自訂積木將各項數值顯示在 LCD1602 的適當位置上。
  2. 我們在每個積木中間暫停 0.2 秒。如果不做暫停的動作,LCD 積木很容易卡住而導致程式無法正常執行。
  3. 其實這兩個自訂積木都不是很複雜,即使不使用自訂積木也是可以完成同樣的功能。但是透過自訂積木的作法,可以讓主要程式更加簡單易懂。

主要程式

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 燈泡的顏色,請注意編號 9、10、11 腳位所對應的顏色順序為紅 (Red)、藍 (Blue)、綠 (Green)。在此,我們事先將每個等級所需的顏色數值儲存在三個變數清單當中,也就是 DAQIColorRed 的第一個項目就是等級一所需的紅色數值,而 DAQIColorBlue 與 DAQIColorGreen 的第一個數值則為等級一所需的藍色與綠色數值。如此一來,我們就可以利用同樣的方式取出每個等級所需的紅色、藍色、綠色數值,而不需像下面方式一樣使用一大堆的 “如果” 積木:
      使用 "如果" 積木控制 RGB LED 燈泡

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

      這種設計方式稱為查表法,通常不但寫出來的程式更為簡潔,而且還有執行速度上的優勢。此外,所有顏色數值集中設定,日後要修改時也會方便許多。
      此外,因為我們使用的是共陽極的全彩 LED 燈泡,所以必須用 255 減去對應的數值才是真正該顏色所需要顯示的亮度。

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

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

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

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

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

Arduino 利用 LCD1602 顯示 LASS 資訊

Arduino 利用 LCD1602 顯示 LASS 資訊

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

目前 WFduino Scratch 3 的 LCD 積木似乎仍有穩定性的問題。除了之前提到每次 Scratch 程式停止後必須先中斷 Arduino 的連線後再重新連接才可再次執行 Scratch 程式,連續執行多個 LCD 積木也很容易產生不正常的結果、甚至是沒有作用。目前 WFduino 對於 Scratch 3 的支援仍在測試階段,期待正式釋出時能夠有更穩定的表現。

Facebook 留言
Print Friendly, PDF & Email
Summary
使用 WFduino + Scratch 3 + Arduino 建立 LASS 空氣品質顯示器
Article Name
使用 WFduino + Scratch 3 + Arduino 建立 LASS 空氣品質顯示器
Description
在之前的文章中,我們利用 WFduino 與 Scratch 3.0 建立了 LASS 資訊的查詢程式。而在這篇文章中我們將加上 Arduino 與 LCD1602 液晶顯示器,做出一個更為完整的空氣品質顯示器。此外,再搭配上 Google 語音服務,提供即時的語音提示功能。
Author
Publisher Name
Everlearn Studio
Publisher Logo