【自造DIARY】micro:bit 空氣盒子製作教學(下篇)

作者:創客萊吧 MakerLab

在上篇中曾介紹過如何撰寫空氣盒子的基本感測器讀取與顯示程式,這篇會再進一步教大家,如何使用 PMS3003 與 ESP-12F 的低功耗模式,讓空氣小屋的功能更完整,還能更加省電。

上一篇【自造DIARY】micro:bit 空氣盒子製作教學(上篇)我們已經教大家如何撰寫基本感測器讀取與顯示程式,也將感測到的資料上傳到 ThingSpeak ,本篇將教大家如何使用 PMS3003 與 ESP-12F 的低功耗模式,並加入震動感測器的功能。

PMS3003

首先先來說明一下 PMS3003 的低功耗模式,還記得我們 PMS3003 的接線有一條名稱為 SET 嗎? 沒錯!只要將 SET 輸入高電位, PMS3003 將工作在連續採樣的正常模式,風扇會一直持續轉動。若將 SET 輸入低電位, PMS3003 將進入低功耗模式,風扇將會停止轉動。

那我們要怎麼將這個功能放入我們之前寫好的程式裡呢?之前的程式是一直重複讀取資料並上傳到 ThingSpeak ,其實讀取完資料後,資料會存在我們設定的變數裡,如下圖所示:

讀取完資料後,資料會存在我們設定的變數裡(圖片來源:創客萊吧提供)

當我們調用「 PMS3003 pin… 」 與「 DHT 11 pin… 」 的程式積木時, micro:bit 會向感測器要資料,然後如上圖我們所撰寫的,將資料依序丟進變數裡( Data1、Data2、….. ),之後程式會進到上傳資料的步驟,這時 PMS3003 其實是閒置的狀態,我們可以在此時讓 PMS3003 進入低功耗模式,等到上傳完資料後要再讀取 PMS3003 前,讓它進到正常模式即可。光是偶爾讓風扇停止轉動就能省很多電了呢!調用的程式積木如下圖:

PMS3003 閒置時,可以進入低功耗模式,需要用時再進到正常模式,能省很多電(圖片來源:創客萊吧提供)

我們將這個積木如剛剛的描述放在變數們的下方,記得要選對連接 pin 的位子,並在 set 後方選擇 ON 打開低功耗模式。

將上圖裡的積木放在變數們的下方(圖片來源:創客萊吧提供)

順便來新增一下當 micro:bit 要讀取 PMS3003 感測的數值時,開啟正常模式的程式積木。因為開啟時風扇會開始轉動,此時若馬上讀取數值會因為空氣擾動而使讀取的數值不正確。所以在開啟正常模式後,我們會加入一個暫停時間的積木,讓風扇轉動一陣子後再讀取數值。在此是設定 10 秒鐘,其實應該要大過 30 秒比較保險,您可以依照自己的狀況延長時間。

開啟正常模式與進入低功耗模式的程式積木一樣,只是要在 set 的後方選擇 OFF 關閉低功耗模式。程式寫到這裡,您的風扇應該會依照程式轉動與停止囉!

為避免空氣擾動而使讀取的數值不正確,可以加入一個暫停時間的積木,讓風扇轉動一陣子後再讀取數值(圖片來源:創客萊吧提供)

ESP-12F

接下來我們來設定 Wi-Fi ,什麼時候要讓它進入睡眠模式呢?沒錯!也就是上傳完資料後,傳完資料後我們正開啟 PMS3003 的風扇,等到真的讀取到 PM2.5 其實過了不少時間,這段時間我們沒有動用到 ESP-12F ,所以在傳完資料後我們可以讓 ESP-12F 進到睡眠模式,等到讀取完 PMS3003 的資料後,再喚醒 ESP-12F 。

依照 ESP-12F 的 Datasheet 它的睡眠模式有幾種,分別是 Modem-sleep 、 Light-sleep 與 Deep-sleep 。很遺憾的依照我們目前的接線( TX 、 RX 、 VCC 、 GND )只能使用 Modem-sleep ,因為其餘模式如果要喚醒的話,需要多一條線在 ESP-12F 的某腳位輸入 HIGH 才行,但是我們沒有多餘的接線能連接到那隻腳位,有興趣的夥伴可以自行研究,只要再加一組線上去就好了。

要讓我們的 ESP-12F 進入睡眠模式非常簡單, MbitBot 程式庫內有包含 Modem-sleep 開啟與關閉的程式積木,只要調用下方的程式積木即可。

讓 ESP-12F 進入睡眠模式需調用的積木(圖片來源:創客萊吧提供)

程式撰寫如下,在上傳完 ThingSpeak 後方加入睡眠模式的程式積木,記得連接的 pin 腳要選對,並在 set 後方選擇 ON 打開睡眠模式。

將睡眠模式的程式積木加在後方(圖片來源:創客萊吧提供)

那喚醒的積木也與睡眠模式的程式積木一樣,但要在 set 後方選擇 OFF 喚醒我們的 ESP-12F,並於喚醒積木的下方加入暫停時間 1 秒的積木來等待它喚醒。

(圖片來源:創客萊吧提供)

這樣我們 ESP-12F 也完成設定囉!

震動感應器:

其實讓 PMS3003 與 ESP-12F 進入低耗模式,已比之前全開時省電不少,特別是那個風扇一關掉整個非常有感,但是不是忘記還有幾個功能其實都是一直全開的呢?沒錯,就是我們的顯示螢幕、 micro:bit 表情 LED 矩陣與 MbitBot 上的 RGB LED 燈,這也是加入震動感測器的原因,概念是當接收到外來震動才會出現上述三種功能,比方說敲敲它、拿起來搖一搖或者敲擊擺放的桌面…等。

會調用到的積木如下圖所示,如果不想加入這功能或沒有感測器的夥伴可以跳過這一部份喔!

這步驟依個人需求來決定要不要做(圖片來源:創客萊吧提供)

程式的寫法比較複雜一點,可不是加入「 if…else 」 即可。因為整個程式在運行的過程中加入非常多需要等待的指令,例如暫停時間。這類型的積木會讓整個程式凍結在那個步驟,此時若是想讀取其他指令是辦不到的。例如: micro:bit 正開啟 PMS3003 的風扇,此時進入暫停 10 秒的步驟,等待氣流正常才讀取數值。在 10 秒還未到的情況下是沒辦法接收訊息的,因為這個程式流程必須等待這 10 秒,就算我們敲的再大力, micro:bit 也無法接收到震動感測器的狀態。

照這樣說起來是不是很無解呢?別擔心! MakeCode 提供了另外一個程式積木,這個積木能讓您同時執行兩組程式,那就是所謂的「背景運行」,它位在進階 > 控制的積木儲藏列裡。

意思是它能有一個正常執行的程式與一個背景運行的程式,且兩個程式的資料可以互通,只要功能不重複,基本上可以看成是兩個獨立運行的程式,當正常執行的 A 程式執行等待時間的指令時,背景運行的 B 程式依舊可以接收或執行動作,而不會被 A 程式影響到。

所以我們把讀取空氣感測數值以及上傳的程式留在「重複無限次」的積木裡,至於 OLED 螢幕顯示、 micro:bit 表情 LED、 MbitBot RGB LED 與震動感測器的程式,我們將它寫到背景運行的程式積木裡。

「背景運行」的程式積木不像「重複無限次」的積木一樣,它只會執行一次,但是我們需要一直重複接收敲擊並顯示。所以為了要讓它不斷執行,我們需要加入一個 While Loop 進去,那加入 While Loop 的背景運行程式看起來會像這樣:

為了讓背景運行重複執行,需要加入一個While Loop(圖片來源:創客萊吧提供)

所以我們就在背景運行的程式內寫上,當偵測到有振動時,則顯示所要要顯示的項目持續一段時間,如果沒有則關閉所有顯示項目。

本篇的完整範例程式:

https://makecode.microbit.org/_c3rguu2T6VWA

小結

這樣就算是大公告程囉!我們在上一篇學習到感測器的讀取與上傳,而在這一篇學習到如何節能的小撇步,至於後續的種種就讓大家發揮囉!比方說幫它找個盒子裝,讓它看起來更像個小屋,那我們就下個主題再見吧!

(本文轉載自創客萊吧原文連結;責任編輯:楊子嫻)

創客萊吧MakerLab

創客萊吧MakerLab

分享有趣的創作與教學,提供Maker們創作的軍火庫,DIY 零件 | 套件| 工具。
創客萊吧MakerLab

Author: 創客萊吧MakerLab

分享有趣的創作與教學,提供Maker們創作的軍火庫,DIY 零件 | 套件| 工具。

Share This Post On
468 ad

Submit a Comment

你的電子郵件位址並不會被公開。 必要欄位標記為 *