物聯網系統整合應用 (五) IOT (Internet Of Things)
物聯網(IOT)系統整合應用 課程安排 Part1, 物聯網系統架構介紹 實作: 各裝置硬體實體之熟悉, 以及Beaglebone WebServer基本操作
Part 2,3 Arminno 軟硬體環境介紹及藍芽應用, 與ZigBee Coordinator 流程介紹 實作: Arminno 開發環境使用熟悉及 Arminno+ZigBee 程式說明
Part 4,5 Arduino 軟硬體及相關Ozone模組介紹, 及ZigBee End Devices 流程介紹 實作: Arduino 開發環境使用與ZigBee End, 以及其他感測器相關模組程 式練習
Part 6 Beaglebone WebServer 流程, 及 Phthon Script 程式介 紹 實作: 修改Beaglebone程式, 與其他Linux指令操作練習
課程主題 (Part 5)
Ozone 模組與 Arduino Shield的差異 Sonar 模組介紹 Thermal 模組介紹 Compass 模組介紹 Acceleometer 模組介紹 RGB Color 模組介紹 MP3 Player 模組介紹 Servo Runner 模組介紹
超音波感應 (Sonar) 模組 特性 可做為偵測距離之工具。配合移動機構(機器人 、自走車…等),可達到避障的功能。 使用簡單,並設有單次(Ranging)、多次(Repeat Ranging)等指令。 可設定簡測結果回傳格式( us、cm、inch)。
接法
偵測限制
Sonar 常用的模組程式庫 SetFloorLevel(FloorLevel) - 以FloorLevel 設定超音波模組 離地高度。(0:離地 > 5cm、1:離地 > 20cm、2:離地 > 50cm、3:近小物體偵測,預設值為0 。)* RepeatRanging(void) - 重複(週期性)執行超音波偵測。 Status=GetDistance(Type, Distance)- 取得接收狀態存放 於Status,並以Type設定取得資料型態,存入Distance 中。 (Status:0=not ready,1=ready,2=timeout;Type:0 = us, 1=cm,2=inch。) 其他可參考 "SonarA_V2.0.pdf" 文件
Sonar (超音波) 範例程式 #include <ozone.h> SonarA mySonar(5); // 設定 Sonar 模組編號為 5 LCD4X20A myLCD(7); // 設定 LCD 模組編號為 7 uint8_t Status; //儲存取得的偵測結果狀態 uint16_t Distance; //儲存取得的偵測結果 void setup() { myLCD.BacklightOn(0); mySonar.SetFloorLevel(0); //設定離地高度為大於5cm } void loop() { Status = 0; do { mySonar.Ranging() ; //執行偵測 delay(100); //等待100ms Status= mySonar.GetDistance(1, Distance); //取得偵測結果 } while(Status != 1); //迴圈停止條件(Status = 1) myLCD.CursorRC(2,1); myLCD.ClearEOL(); myLCD.BacklightOn(1); myLCD.Display("Sonar Distance: "); myLCD.Display(Distance); delay(500); }
溫度感應 (Thermal) 模組 基本規格 特性 可量測溫度範圍 -40°C ~ 123.8°C 可取得溫度、溼度、露點資料。 可透過I2C方式,下達指令。
接法
濕度 一般在氣象學中指的是空氣濕度,它是空氣中水蒸氣的含量。空 氣中液態或固態的水不算在濕度中。不含水蒸氣的空氣被稱為乾空氣。 由於大氣中的水蒸氣可以佔空氣體積的0%到4%,一般在列出空氣中各 種氣體的成分的時候是指這些成分在乾空氣中所佔的成分。
其中的符號分別是: e – 蒸汽壓,單位是帕斯卡(Pa) Rw – 水的氣體常數=461.52J/(kg K) T – 溫度,單位是開爾文(K) m – 在空氣中溶解的水的質量,單位是克(g) V – 空氣的體積,單位是立方米(m3)
相對溼度(RH) 溼度計正在記錄相對溼度「相對溼度(RH)是絕對溼度與最高溼度之間的比, 它的值顯示水蒸氣的飽和度有多高。相對溼度為100%的空氣是飽和的空氣。 相對溼度是50%的空氣含有達到同溫度的空氣的飽和點的一半的水蒸氣。
露點 (英語:Dew point)或露點溫度(英語:Dew point temperature)是在固 定氣壓之下,空氣中所含的氣態水達到飽和而結成液態水所需要降至的溫度。 在這溫度時,凝結的水飄浮在空中稱為霧、而沾在固體表面上時則稱為露, 因而得名露點。
溫度感應模組常用的程式庫 GetTemp10F(int16_t Value) - 取回最新的溫度值 存於 Value,為華氏溫度乘以十的整數。 回傳值範圍為-400~2549。
GetHumi10(uint16_t Value) - 取回最新的溼度值 存於 value,回傳值為溼度值乘以十的整數。 value 的回傳值範圍為0~1000。
Thermal 模組範例程式 #include "ozone.h" ThermometerA MyTh(1); int16_t Temp; uint16_t Humid;
//
宣告 ThermometerA 模組 ID = 3
void setup() { Serial.begin(38400); } void loop() {
MyTh.GetTemp10F(Temp); // 取得目前溫度值 Temp = (Temp-320)*5/90; // 轉換數值(華氏X10)為攝氏 MyTh.GetHumi10(Humid); Serial.println(Temp); delay (500); }
特性
Compass電子羅盤模組規格
高精確度電子羅盤,可以用指令取得磁北到模組順時針方 向的夾角值,或是磁場強度 提供偏向角設定,讓使用者能取得與特定角度的差異角度, 不需要都以正北為基準。 偏向角提醒事件,可以在超出設定的角度,產生提醒訊息。 可以儲存現在角度,或是儲存任意角度,做為偏向角設定 時的基準。 能偵測磁場強度為±8Gauss (1高斯=1,000毫高斯=微瓦/每 平方公尺。 每秒可執行最多50次偵測。
接法
Compass電子羅盤模組常用的程式庫 GetAngle(Angle)- 取得由磁北與設定軸向順時針方向 的夾角,以度為單位回傳值範圍為 0~359。 SetTargetAngle (Angle) - 將輸入的Angle 值, 儲存在EEPROM 中。
GetDevAngle (Angle) - 取得與設定為基準方位差異的偏 向角。 SetDevAngleLimit(Angle)- 設定判斷偏向角的差異值, Status = GetDevAngleLimitStatus(void)- 回傳現在角度是 否大於偏向角極限值,若Status 回傳為1,則代表現在偵測 的方位大於偏向角極限,若Status 回傳為0,則代表在偏向 角極限內
Compass電子羅盤模組範例程式 #include <ozone.h> CompassB myCompass(3); // 設定模組編號為 3 uint16_t wAngle; void setup() { Serial.begin(38400); } void loop() { myCompass.GetAngle(wAngle); Serial.print("Angle="); Serial.println(wAngle); delay(200); }
Accelerometer加速度感測模組規格 特性
Accelerometer 模組是一個高精確度三軸加速度 感測模組。可作為靜態與動態加速度的量測,以感測 受力大小與方向。 提供四種精準度(1.5g,2g,4g,6g)。 可以直接以指令讀取各軸向的數位電壓值。 能偵測範圍達±6g的加速度值。
接法 CMD Bus
Accelerometer加速度感測模組常用程式庫 GetXYZForce(int16_t ForceX, int16_t ForceY, int16_t ForceZ) - 取得X,Y,Z 軸向的力量值,X 軸向存在ForceX, Y 軸向存在ForceY,Z 軸向存在ForceZ,單位會根據設定模式 不同。 GetAngle2D(uint16_t Angle) - 取得2D 平面的合成力與主軸 向的夾角存在Angle,單位為度 GetAngle3D(uint16_t Angle1, uint8_t Angle2) - 取得3D 的 合成力於XY 平面的分力與X 軸向的夾角存在Angle1,單位為 度,力與Z 軸的夾角存在Angle2,單位為度 SetMode(uint8_t Mode) - Mode 可以輸入0~3: Mode = 0 當量測到Force = 800 等於1g,適合量測±1.5 g 內的加速度值 Mode = 1 當量測到Force = 600 等於1g,適合量測±2 g 內的加速度值 Mode = 2 當量測到Force = 400 等於1g,適合量測±4 g 內的加速度值 Mode = 3 當量測到Force = 300 等於1g,適合量測±6 g 內的加速度值
SetRefreshFreq(uint8_t Rate) - Rate 可以輸入為0~4 等五種 速率: Rate = 0 Rate = 1 Rate = 2 Rate = 3
每10 ms 更新角度值 (100 Hz) 每20ms 更新角度值 (50 Hz) 每40ms 更新角度值 (25Hz) 每100ms 更新角度值 (10 Hz)
SetAxis2D(uint8_t Type) - Type 可以輸入0~5,分別代表: Type=0 X 為0 度軸,Y 為90 度軸 Type =1 Y 為0 度軸,X 為90 度軸 Type =2 X 為0 度軸,Z 為90 度軸 Type =3 Z 為0 度軸,X 為90 度軸 Type =4 Y 為0 度軸,Z 為90 度軸 Type =5 Z 為0 度軸,Y 為90 度軸
Accelerometer模組範例程式 #include <ozone.h> Accelerometer3A myG(2); // 設定模組編號為2 void setup() { myG.SetMode(0); // 設定靈敏度模式為0,適合量測正負1.5g 的加速度值 myG.SetRefreshFreq(3); // 設定更新速率為每秒更新十次 myG.SetAxis2D(0); } void loop() { myG.GetXYZForce(g_iFx, g_iFy, g_iFz); // 取得XYZ 三軸的加速度值 myG.GetAngle3D(g_wAngle1, g_bAngle2); // 取得3D 和 2D 角度值 Serial.print("fx="); Serial.println(g_iFx); Serial.print("fy="); Serial. println (g_iFy); Serial.print("fz="); Serial. println (g_iFz); Serial.print("Angle="); Serial. println (g_wAngle1); Serial.print("Angle="); Serial. println (g_bAngle2); }
Color RGB 顏色感測模組 特性
接法
Color RGB 模組是三波長顏色感測模組,可量測物體反射的 三色值。 可以分別感測紅藍綠三色光的反射值(λp,紅: 640 nm,綠: 524 nm,藍: 470 nm )。 可以感測三色光混和的光強度。 可以設定顏色編號與感測值,進行自動配對比較,模組提供 三色LED,可以直接調整光源強度。 三組光感測時間可供隨時變換,達到類似快門切換效果。 提供多組內建回傳值比例切換。 CMD Bus
Color RGB 顏色感測模組常用程式庫 Status = GetRGB(ValueR, ValueG, ValueB) - 取得量測狀態放 在Status,0 代表上次讀值後尚未更新量測值,1 則代表此為更新的量測值, 並取得紅綠藍光感測值, 分別存在ValueR、ValueG、ValueB,此數值為 量測到的計數值,為0~65535 間的整數 Status = GetCRGB(ValueC, ValueR, ValueG, ValueB) - 取得 無濾鏡與紅綠藍光感測值 StartMeasure(void)啟動偵測,執行後會根據設定的感測時間,執 顏色的量測,須先執行此命令,並等到量測結束,才能用取得感測值相關指 令,得到最新的感測值,請注意執行量測時,會自動根據設定的LED 強度, 在量測時點亮LED 光源
TurnOnLED() SetLEDRGB( Red, Green, Blue) - 分別以Red、Green、Blue, 設定LED 三色光 (紅,綠,藍)點亮時的強度,Red、Green、Blue可以輸入0~255 間的整數值
ColorRGB模組範例程式 #include <ozone.h> ColorRGB myC(6); void setup() { myC.LoadLED(); myC.SetPeriod(0); // 設定量測時間 myC.SetPrescalar(0); // 設定量測倍率 } void loop() { myC.StartMeasure() ; // 開始量測 do { bStatus = myC.GetCRGB(g_wC, g_wR, g_wG, g_wB); //讀取感測顏色 delay(10); } while(bStatus != 1); Serial.print("C"); Serial.println(g_wC); Serial.print("R"); Serial.println(g_wR); Serial.print("G"); Serial.println(g_wG); Serial.print("B"); Serial.println(g_wB); delay(200); }
MP3 撥放模組 特性
接法
Player模組可以分析Micro SD卡中的檔案,判斷MP3檔案並播 放。可以播放或暫停音樂,也能指定曲目, Micro SD卡插槽,能讀取最多2G的Micro SD卡資料 提供32階音量控制。 十二種EQ(等化器)設定。 上一首與下一首快速跳首指令。 檔案必須放在記憶卡跟目錄的”InnovatiMusic”資料夾中, 錯誤的資料夾名稱與存放位置,都會造成系統無法正常讀取。
MP3 撥放模組常用程式庫-1
Play(void) - 播放檔案中的曲目,會直接從頭播放目前設定編號的歌曲, 若是原先為暫停狀態,則會從暫停的時間繼續播放 Pause(void)
Stop(void) Forward(void) Backward(void) SetPlayNum(uint16_t Num) - 根據Num的設定值,設定要播放的 曲目。
VolUp(void) , VolDown(void) AnalSD(void) - 解析記憶卡內容,只有在記憶卡已經安裝至模組,並且可以 辨識,此指令才有效。執行後會開始解析記憶卡中的MP3檔案數量,並自動排序儲 存相關位置。指令解析中無法執行播放等相關動作,請以GetSDStatus指令確認是 否解析完成。
SetRepeat(uint8_t Mode) 0: 資料夾重複播放,當播放完資料夾中 的最後一首,自動從第一首開始播放。 1: 單曲重複播放,重複播放同一首歌曲。 2: 不重複播放。
MP3 撥放模組常用程式庫-2
Status = GetSDStatus(void) - 取得記憶卡的狀態,存放於Status 參數中。 Status會回傳0~8之間的整數值。 0: 沒有偵測到記憶卡。 1: 記憶卡辨識中。 2: 偵測到錯誤裝置。 3: 記憶卡中沒有可以播放的檔案。 4: 記憶卡為閒置裝置。 5: 歌曲停止播放。 6: 歌曲暫停。 7: 歌曲播放中。 8: 讀取到錯誤資訊。 安裝記憶卡後,要先確定記憶卡狀態不為0,才可以執行播放等動作。
GetTotalNum(uint16_t &Num) - 取得可以解析到的檔案總數,存 放於Num中。Num會回傳0~1000間的整數值。
MP3播放模組模組範例程式 #include <ozone.h> PlayerA myPlayer(4); void setup() { } void loop() { uint8_t bStatus; // 宣告儲存狀態的參數 //-------------------------------------------------------//--- 無窮迴圈等待記憶卡插上 --//-------------------------------------------------------do { bStatus = myPlayer.GetSDStatus(); } while(bStatus <= 1); myPlayer.AnalSD(); // 開始解析記憶卡 //------------------------------------------------------//--- 無窮迴圈等待記憶卡解析完成 --//-------------------------------------------------------do { bStatus = myPlayer.GetSDStatus(); } while(bStatus <= 1); myPlayer.SetVol(15); // 設定播放音量 myPlayer.Play(); // 開始播放歌曲 while(1); }
Servo Runner (十六組)伺服機輸出控制模組 特性
利基Servo Runner A模組可以一次控制十六個伺服機,並且 提供整合好的指令,讓使用者可以直接使用速度或時間,決定伺 服機的移動模式。設有多達250組記憶體可以儲存伺服機目標位 置與移動方式(速度或時間),讓各種動作輕易組合完成。 提供 32階音量控制。 可控制伺服機位置由0.5 ms至2.5 ms。軟體設定達到微調各 個伺服機轉向角度的目的,可設定-128~127 μS。 程式可以設定伺服機轉向速度,使用者可根據需求設定多段 的伺服機轉向速度。 使用者可以設定一個共同時間,讓各個伺服機在同時間達到 不同的轉向角度。 內建250組伺服機記憶空間, 每組可以儲存目前設定好的 十六個伺服機目標位置,與速度 或時間參數,在需要時直接呼叫, 可以免去重覆設定的動作。