編輯軟體,完成"心跳風扇"!

動手開始做: 4/4

在心跳扇專案的最後一課中,我們將建立一個能利用偵測到的心跳同步驅動伺服馬達的程式。然後就可以坐下來、放輕鬆,在接下來的夏天享受您的扇子。

程式流程圖

上一課我們完成了硬體組裝,在最後一節課中,我們將建立控制此硬體的程式。具體來說,我們需要一個能偵測心跳感測器資訊並據以驅動伺服馬達的程式。我們希望馬達在每一下心跳時驅動扇子搧一次。

我們希望扇子每搧一次時,能移至預設的角度(位移)再返回原位。為避免伺服馬達過載,我們將角度設為30度。應注意,馬達的規格顯示馬達走完此距離需要0.1秒的時間。

現在,我們來看看感測器的輸出長什麼樣子(圖1)。上方為正常心跳時的訊號,下方為激動時的心跳訊號。在兩種情況中,感測器都顯示出相當長的低電壓區間(波谷),並穿插持續時間更短的高電壓(波峰)。我們將波峰稱為「R區間」,波谷稱為「非R區間」。

接著我們寫一個程式,使伺服馬達在R區間發生時轉30度,並於後續的非R區間發生時返回。

圖1:正常(上圖)及激動(下圖)時的心跳資料

圖1:正常(上圖)及激動(下圖)時的心跳資料

感測器輸出的訊號將傳送至GR-SAKURA微控制器中的A/D轉換器。我們將考慮對應至R區間、等於或高於特定門檻值的數值。在我們的程式中,將此門檻值設為常數R_HEIGHT。當程式判定輸入資料上升至超過此門檻值時,將向伺服器發送轉動指示,造成扇子動作。當程式判定輸入資料降至低於此門檻值時(表示非R區間開始),則發送指示告訴伺服馬達將扇子移回原位。

別忘了,伺服馬達移動30度約需要0.1秒。由於我們不希望在此時間內發生反向移動,在寫程式時,我們要使其在這0.1秒內封鎖任何其他動作。

圖2為所需程式的流程圖。流程圖協助程式設計師及其他人瞭解程式必須執行的工作。

我們已按照此流程寫出一個程式(原始碼)。 心跳程式(原始碼)

在本系列中,我們不會進行程式解說,而是直接編譯程式並使其驅動風扇。但程式本身非常簡單,我們鼓勵您試著自己寫一個程式。

Program Flow for Heartbeat Fan

圖2:心跳扇程式流程圖

利用我們的線上函式庫及編譯器輕鬆編寫程式

我們的GR-SAKURA線上編譯器,讓我們能輕鬆編寫所需要的程式。我們先建立一個名為「Heartbeat Fan」的新專案。 請參閱第2課:詳細說明GR-SAKURA電路板並做好準備

接著,我們要匯入含有用以驅動伺服馬達之程式碼的函式。在網頁編譯器上方選單列中選擇Libraries,再從選單中選擇gr_sakura_servo函式庫,再點擊Import(圖3)。這告訴編譯器在編譯程式(原始碼)時必須將伺服馬達函式庫關聯至目的碼。應注意,有許多函式庫能與GR-SAKURA搭配使用,以輕鬆編寫各種專案的程式。

圖3:匯入伺服馬達函式庫

圖3:匯入伺服馬達函式庫

接著繼續建立程式。點擊gr_sketch.cpp(網頁編譯器左側)開啟原始碼視窗,如圖4所示。

原始碼視窗開啟後,會顯示可用以驅動GR-SAKURA LED的範本原始碼。我們現在能著手改寫此原始碼,建立我們需要的原始碼。在今天的專案中,我們只需要藉由簡單的剪下貼上或手動輸入我們按照上方流程圖準備的 Heartbeat Fan Program (source code)心跳扇程式(原始碼)取代此程式碼即可。完成後,點擊Save去儲存完成的原始碼。。

下一步,點擊Build啟動編譯器。若沒有發生錯誤,編譯器將建立目的碼並將其傳送至名為sketch.bin的檔案內。。

圖4:gr_scetch.cpp程式(原始碼)

圖4:gr_scetch.cpp程式(原始碼)

Downloding scrtch.bin

圖5:下載scrtch.bin

現在您必須下載此sketch.bin檔案,以便將其載入至您的GR-SAKURA內。在檔名sketch.bin上按右鍵,選擇Download(圖5)。您的瀏覽器會開始將此檔案下載至預設的下載資料夾。

打開電源,萬事俱備!

我們就快可以啟動扇子了。按照第三課檢查硬體組件,確認一切就緒。按照電路圖連接GR-SAKURA、心跳感測器、麵包板及伺服馬達(照片1)。

照片1:GR-SAKURA及麵包板接線

照片1:GR-SAKURA及麵包板接線

接下來(依序)完成以下項目:

  • (1) 使用USB線連接GR-SAKURA與電腦(開始供電給GR-SAKURA)
  • (2) 將電池盒的卡扣連接至麵包板(開始供電給麵包板)

應注意要先將GR-SAKURA通電,其才能保護伺服馬達,以免在從麵包板供電給馬達時發生問題。為確保安全,這是您在建構專案時一般應遵守的順序:先啟動控制電源的電腦(在此情況下為GR-SAKURA),再啟動周邊裝置(在此情況下為麵包板及伺服馬達)。

接著,在電腦上將下載的sketch.bin檔案拖曳至GR-SAKURA(以磁碟機的形式裝載)。載入完成後,LED燈熄滅且伺服馬達開始運轉。現在,用魔鬼氈將心跳感測器固定在您的大姆指上。為取得最佳的效果,魔鬼氈不用綁太緊但應完全覆蓋,如同要擋住所有照到感測器上的光線一般。

最後,將扇子(固定馬達)放在適當的位置,按下GR-SAKURA上的藍色按鈕。若一切按計畫進行,LED燈將閃爍且扇子會隨著您的心跳動作並帶來微風。

若想要停下扇子,按下紅色按鈕。若想要完全關閉,切斷板子電源並拔掉USB線。關閉時,應該要先切斷周邊裝置的電源,再切斷控制器電源(與啟動順序相反)。

希望一切都沒問題,您的扇子如預期般和您的心跳同步動作。編寫的程式能使扇子的搧動率隨您的心跳變化加速或減速(最大速度為120次/秒)。

我們經常遇到對這類專案有興趣但因為感到困難而卻步的初學者。過去或許是如此,很多這類專案都沒有適合初學者的說明,而且對沒有經驗的小工具建造者而言有很多障礙。但現在因為有了強健的支援以及使用GR-SAKURA這類專案導向的電路板而變得很簡單。我們鼓勵所有初學者試一下這些挑戰。

影片:成功了!

影片:成功了!

播放

GR-SAKURA中的程序被稱為“涂鸦(sketch)” ,由啟動時只被讀取一次的函數“setup()” 和被多次調出的函數“loop()” 所構成。

教學程式(1)

setup()函數設置輸入/輸出連接埠、設定A/D轉換器的輸入電壓範圍並執行其他必要的初始化。由於在本專案中,我們也想要讓燈泡與心跳同步閃爍,因此setup()函數內含將LED0定義為輸出目的地的程式碼。此功能亦定義PIN_SW輸入,能將藍色按鈕當作啟動開關操作、將伺服馬達初始位置設在75度,接著進入監測藍色按鈕值的待命迴路,直到偵測到按下按鈕。

教學程式(2)

loop()函數偵測心跳,在發生跳動時據以驅動扇子。使用兩個函數執行偵測:rPulseDetect()監視R區間,而nonRDetect()監視非R區間。每個函數在偵測到相應區間開始時,會監測區間的持續時間並將結果回傳(單位為ms)。接著將每個回傳值發送至fanservo.write()函數,其將據以驅動馬達。delay()函數確保扇子連續動作之間的最小間隔時間。

hakase

我們四節的小工具建構專案入門課程到此結束。希望您享受建造一個實用裝置的過程,期待我們日後能推出更多小工具建構專案。

動手開始做!

  1. 該如何進行呢?
  2. 深入了解GR-SAKURA開發板,動手開始做!
  3. 硬體組裝
  4. 編輯軟體,完成"心跳風扇"!