2014年10月25日 星期六

Arduino單元測試: With computer(C#) and Arduino over Bluetooth



在這網路時代,如果Arduino不能進行網路連線的話那就太可惜了,雖然說有許多的網路擴充模組但個人仍比較偏向無線,可惜的是,Arduino的無線擴充模組也不便宜(加一加的總採購金額說不一定可以直接買Raspberry Pi),因此有了想利用手機網路或電腦網路的想法。

先介紹如何讓我們的電腦認識藍芽模組
Arduino藍芽模組備註
5VVCC注意電源別接錯
GNDGND注意電源別接錯
Arduino通電之後,藍芽模組上的 LED 會一直閃爍:

  • 與電腦配對,開啟控制台新增藍芽裝置


  •  新增完成後,確認一下 ,所使用的連線COM是多少(此說明為COM5)
  • 再將藍芽模組的 TXD 和 RXD 對接起來,進行Loop Back 測試,下載sscom 工具(英文版點此下載,簡體版點此下載),使用方式可參考(這裡)
  • 使藍芽模組透過 C# 程式與 Arduino 建立通訊,(1)首先確認藍芽模組 baud rate 為 57600 bps。(2)上傳 StandardFirmata 到 Arduino:打開 Arduino IDE,點選 File > Examples > Firmata > StandardFirmata,把程式上傳到 Arduino 板子上,勿在上傳時接藍芽模組。
  • 我們可透過下載 C# 範例程式測試,選好 Serial Port (本例為 COM5),按下 Open 鈕後Arduino 板子上的 LED 燈就會不斷地閃爍,亮一秒,滅一秒。
 如果到這邊為止,都如正常運作的話,我們可以更進階地進行C#程式改寫,將我們要的功能寫進去,所以首先要先建立C#開發環境,可到這裡下載免費的IDE(SharpDevelop)
再透過微軟官方網站提供的C#範例及說明來進行reaquest Data或透過Web service,完成所需要介接的資料,介以判斷驅動Arduino之感測或功能模組。

完成C#程式範例



參考資料
  1. http://coopermaa2nd.blogspot.tw/2012/07/loop-back-test.html
  2. http://coopermaa2nd.blogspot.tw/2012/07/c-and-arduino-over-bluetooth.html
  3. http://coopermaa2nd.blogspot.tw/2011/12/talk-with-arduino-using-c-and-firmata.html
  4. http://community.sharpdevelop.net/blogs/mattward/articles/VisualStudioExpressComparison.aspx
  5. http://www.icsharpcode.net/OpenSource/SD/ 
  6. http://msdn.microsoft.com/en-us/library/456dfw4f%28v=vs.110%29.aspx

2014年10月18日 星期六

Arduino單元測試: 透過藍芽,上傳至手機完成人體紅外線感應保全功能

熱釋電紅外感測器是一種能檢測人或動物發射的紅外線而輸出電信號的感測器。
使用中應注意以下幾點:
  1. 直流工作電壓必須符合我們要求的數值,過高和過低都會影響模組性能,而且要求電源必須經過良好的穩壓濾波,例如電腦USB電源、手機充電器電源、比較舊的9V的層疊電池都無法滿足模組工作要求,建議客戶用變壓器的電源並經過三端穩壓晶片穩壓後再通過220UF和0.1UF的電容濾波後供電。
  2. 調試時人體儘量遠離感應區域,有時雖然人體不在模組的正前方,但是人體離模組太近時模組也能感應到造成一直有輸出,還有調試時人體不要觸摸電路部分也會影響模組工作,比較科學的辦法是將輸出端接一個LED或者是萬用表,把模組用報紙蓋住,人離開這個房間,等2分鐘後看看模組是否還是一直有輸出?
  3. 模組不接負載時能正常工作,接上負載後工作紊亂,一種原因是因為電源容量很小負載比較耗電,負載工作時引起的電壓波動導致模組誤動作,另一種原因是負載得電工作時會產生干擾,例如繼電器或者電磁鐵等感性負載會產生反向電動勢,315M發射板工作時會有電磁輻射等都會影響模組。解決辦法如下:A、電源部分加電感濾波。B、採用負載和模組使用不同的電壓的方法,例如:負載使用24V工作電壓,模組使用12V工作電壓,其間用三端穩壓器隔離。C: 使用更大容量的電源。
  4. 人體感應模組只能工作在室內並且工作環境應該避免陽光、強烈燈光直接照射,如果工作環境有強大的射頻干擾,可以採用遮罩措施。若遇有強烈氣流干擾,關閉門窗或阻止對流。感應區儘量避免正對著發熱電器和物體以及容易被風吹動的雜物和衣物。
  5. 人體感應模組建議安裝在密封的盒裡,否則可能一直會有輸出信號。
  6. 如果要求人體感應模組的探測角度小於90度時,可以用不透明膠紙遮擋鏡片或裁剪縮小鏡片來實現。
  7. 人體感應模組採用雙元探頭,人體的手腳和頭部運動方向與感應靈敏度有著密切的聯繫,而且紅外模組的特性決定了無法精確控制感應距離。
  8. 模組中的探頭(PIR)可以裝焊在電路板的另一面。也可將探頭用雙芯遮罩線延長,長度應在20釐米以內為好。
  • 首先介紹它的外觀與腳位
紅外線人體感應器外觀圖
紅外線人體感應器腳位圖
  • Android Code部分,可參考下載Bluetooth Library(https://github.com/akexorcist/Android-BluetoothSPPLibrary),裡面有提供完整Bluetooth掃描、配對、連線、自動連線功能。我們可以經由裡面的範例改寫,setup()中設定藍芽的DataReceivedListener,處理藍芽收到的Data。如下圖

APP CODE
 最後實際測試結果,即完成將現地之人體感測訊號透過藍芽,將訊號回傳至使用者手機,如下圖:
APP實際測試圖

最後完成腳位圖
 參考資料
http://here-apps.blogspot.tw/2014/07/lab5-arduino.html



2014年10月5日 星期日

Arduino單元測試: 透過藍芽,上傳至手機完成心跳監測

再上個單元已經介紹如何進行心跳監測,這單元將介紹如何實作透過藍芽來控制LED來啟閉心跳監測感測器。
  • 腳位部分將不再詳細說明,請參考前面幾各單元範例。 
  • Arduino Code 部份,我們再loop()中新增下列代碼,透過LED來啟動量測心跳功能
      int ledPinState = digitalRead(ledPin);   // 讀取led的state
       if (ledPinState == HIGH) {
            senseHeartRate();                   // 測量心跳
      } 

  • 而Android Code部分,可參考下載Bluetooth Library(https://github.com/akexorcist/Android-BluetoothSPPLibrary),裡面有提供完整Bluetooth掃描、配對、連線、自動連線功能。我們可以經由裡面的範例改寫,setup()中設定藍芽的DataReceivedListener,處理藍芽收到的Data。如下圖

最後之完成畫面如下。
完成之腳位圖
APP單元測試完成圖

參考資料:
http://here-apps.blogspot.tw/2014/07/lab3-arduino.html