工業(yè)物聯(lián)網(wǎng) (IIoT) 在很大程度上要依賴傳感器從便攜式可穿戴系統(tǒng)收集數(shù)據(jù),以便監(jiān)控運動、壓力、濕度和其他眾多特征,然后將這些數(shù)據(jù)饋送至云進行處理。
通過模塊方式,我們可以快速輕松地將傳感器添加到設計中,但在將這些模塊連接到網(wǎng)絡的其余部分時,我們通常會面臨一些挑戰(zhàn)。有很多不同方法可以進行這種連接,但其中一種最簡單的方法是采用最新的低功耗藍牙 (BLE) 技術。BLE 收發(fā)器采用了芯片級封裝,尺寸有所縮減,因而足夠小巧,能夠輕松與工業(yè)物聯(lián)網(wǎng)設計中的各種傳感器配合使用。
圖 1:Dialog 物聯(lián)網(wǎng)傳感器加密狗。
無線收發(fā)器設計公司 Dialog Semiconductor 實現(xiàn)了這個目標,他們的 SmartBond 物聯(lián)網(wǎng)傳感器開發(fā)套件讓運動和環(huán)境檢測應用的開發(fā)工作變得更輕松。
Dialog 將無線收發(fā)器和傳感器組合在專用模塊中,進而獲得世界上功耗最低的 12 自由度 (DOF) 無線傳感器模塊。該模塊在縮減系統(tǒng)尺寸和成本的同時,還包含了用于加快物聯(lián)網(wǎng)系統(tǒng)開發(fā)的所有必要硬件和軟件。通過組合所有這些元件,Dialog 能夠利用代碼來融合來自各個傳感器的數(shù)據(jù),提供更有意義的輸出,而不只是提供數(shù)據(jù)流。這就有助于降低收發(fā)器的負載,減少存儲器需求和電流消耗,從而延長電池壽命并縮短開發(fā)時間。
這種系統(tǒng)優(yōu)化只有通過開發(fā)完整的模塊才能實現(xiàn),而這種模塊要將 BLE 收發(fā)器和 ARM? Cortex?-M0 處理器與 Bosch Sensortec 的加速計、陀螺儀、磁力儀、環(huán)境傳感器組合在一塊尺寸僅為 16 x 15 mm 的電路板上。
圖 2:該物聯(lián)網(wǎng)模塊組合了三種傳感器和一個藍牙收發(fā)器,實現(xiàn) 12 自由度測量。
它還包括 SmartFusion,也就是 Dialog 獨有的智能傳感器融合軟件庫,可進行數(shù)據(jù)采集、傳感器校準和融合。這樣一來,該模塊只需使用 4.5 KB 的 ROM 和 500 字節(jié)的 RAM,并且能決定傳感器的數(shù)據(jù)速率。
該模塊采用 DA14583 低功耗藍牙 SoC,配備工作頻率為 12.5 Hz 的 BMI160 6 軸慣性測量裝置、工作頻率為 10 Hz 的 BMM150 3 軸地磁傳感器,以及以 0.5 Hz 測量壓力、溫度和濕度的 BME280 集成環(huán)境傳感器裝置。
所有這些都只需要 Cortex-M0 處理器提供相對較低的 0.5 MIPS 處理資源,以支持磁力儀自動校準和 9 自由度的傳感器融合。其中慣性測量裝置中的陀螺儀和加速計的工作頻率分別為 100 Hz 和 10 Hz。
融合的方向數(shù)據(jù)通過 BLE 接口傳輸?shù)皆?Android 和 iOS 上運行的一個物聯(lián)網(wǎng)傳感器應用,從而實現(xiàn)了傳感器、方向數(shù)據(jù)和配置的可視化。
DA14583 搭載完全集成的無線收發(fā)器和基帶處理器,在該模塊中可用作獨立控制器。它擁有 1 Mb 閃存來存儲藍牙規(guī)范和自定義應用代碼,所有這些均能夠以無線方式 (OTA) 更新。合格的 BLE 協(xié)議棧保存在專門的 ROM 中,而所有軟件則通過一個簡單的計劃程序在 ARM Cortex-M0 處理器上運行。
BLE 固件包括 L2CAP 服務層協(xié)議、安全管理器 (SM)、屬性協(xié)議 (ATT)、通用屬性規(guī)范 (GATT) 和通用訪問規(guī)范 (GAP)。
收發(fā)器提供 93 dB 的射頻鏈路預算,帶有一個單端 50 W 匹配式 RFIO 接口,用于連接陶瓷芯片天線。所有射頻模塊均由片載低壓差穩(wěn)壓器 (LDO) 供電,而且所有的射頻模塊都有自己的偏置控制。
Bosch Sensortec BMM150 是一款獨立的地磁傳感器,可在三個垂直軸上測量磁場,適用于手機、手持設備、計算機外設、人機接口、虛擬現(xiàn)實功能和游戲控制器。它有自己的處理器,可將地磁傳感器的輸出轉換為數(shù)字結果,而這些結果可通過行業(yè)標準數(shù)字接口(SPI 和 I2C)讀取。
圖 3:Bosch Sensortec 的 BMM150 地磁傳感器可提供羅盤和位置數(shù)據(jù)。
晶圓級芯片尺寸封裝 (WLCSP) 的尺寸僅為 1.56 x 1.56 x 0.6 mm,可在 1.62 至 3.6 V 的電壓下工作,VDDIO 電壓范圍為 1.2 至 3.6 V。
BME280 是集濕度、壓力和溫度傳感器于一體的數(shù)字傳感器,采用金屬蓋 LGA 封裝,尺寸為 2.5 × 2.5 mm,高度為 0.93 mm。濕度傳感器可在寬溫度范圍內(nèi)提供快速響應和總體精度,而壓力傳感器則為絕對氣壓傳感器,具有極高的精度和分辨率,而且噪聲遠低于以前的版本。集成的溫度傳感器經(jīng)過優(yōu)化,可提供最低的噪聲和最高的分辨率。另外,輸出可用于壓力和濕度傳感器的溫度補償,也可用于評估環(huán)境溫度。傳感器提供了 SPI 和 I2C 接口,可在 1.71 至 3.6 V 的電壓范圍內(nèi)工作,VDDIO 電壓范圍為 1.2 至 3.6 V。
傳感器必須小心放置在模塊上,以避免出現(xiàn)問題。磁傳感器應該距離鈕扣電池 3 mm 至 5 mm,距離高電流路徑 10 mm,例如 DC-DC 轉換器和電感器附近的路徑,最好距離電源軌 3 mm 至 4 mm。鈕扣電池本身放置于 PCB 下方,盡可能與傳感器保持最大距離,以避免可能產(chǎn)生的干擾。
模塊在休眠模式下平均僅消耗 11 μA 的電流,而在廣播模式下,在它尋找要連接的主機時,平均電流消耗將提升至 110 μA。連接后,在沒有運動且所有傳感器處于活動狀態(tài)時,平均電流消耗為 560 μA。當模塊正在移動時,測量的最高功耗為 1.35 mA(平均值)。
BMI160BME280BMM150物聯(lián)網(wǎng)傳感器(平均值)工作電流 (mA)0.950(全功能模式)0.340(85°C 下進行濕度測量) 0.714(85°C 下進行壓力測量) 0.350(85°C 下進行溫度測量)0.500(正常模式)休眠電流 (μA)3(掛起模式)0.33(掛起模式)11圖 4:物聯(lián)網(wǎng)模塊內(nèi)部的傳感器的功率數(shù)據(jù)。
Dialog 特意簡化了連接方法,我們可通過 Play Store 上的 Android 應用或 App Store 上的 iOS 應用連接到模塊。這些應用會自動連接到電路板,并顯示來自傳感器的數(shù)據(jù)。
要通過 Evothings 等開發(fā)環(huán)境對模塊進行編程,可使用 Github 上的軟件庫。其中包括 JavaScript 庫,可用于通過 Cordova 應用與模塊進行通信,該應用包含了低功耗藍牙插件,另外也可通過 Evothings Workbench 中的一個新應用進行通信。
初始化和連接
包括iotsensor.js文件
通過指定您使用的項目類型(RAW 或 SFL)創(chuàng)建新的 iotsensor 對象。
//Devicetypeweareconnectingto,caneitherbeRAWorSFLvartype=evothings.iotsensor.SFL;//CreateanewIoTSensorSFLinstancevariotsensor=evothings.iotsensor.createInstance(type);
然后,將新的物聯(lián)網(wǎng)傳感器實例連接到使用 BLE 的傳感器。程序庫提供了選項,可使用 connectToClosestSensor(scanTime, callbackFun, disconnectFun) 函數(shù),自動連接到最近的物聯(lián)網(wǎng)傳感器。
//Scanfor3000msiotsensor.connectToClosestSensor(3000,function(){console.log('Weareconnected!');},function(error){console.log('Disconnecterror:'+error);});還可以手動連接到器件。
iotsensor.startScanningForDevices(function(device){console.log('Devicefound:'+device.name+'RSSI:'+device.rssi);if(iotsensor.isIoTSensor(device)){//WehaveanIoTSensor,let'sconnect!iotsensor.connectToDevice(device,function(){//Connectedanddeviceisready},function(error){console.log('Disconnecterror'+error);});}});傳感器數(shù)據(jù)
物聯(lián)網(wǎng)傳感器提供一份報告,指出哪些傳感器可用以及已連接器件的固件版本。最好是使用這些選項來確定器件的功能。
console.log('IoTSensordeviceinfo:'+' Devicemodel:'+iotsensor.getDeviceModel()+' Firmware:'+iotsensor.getFirmwareString()+' Accelerometer:'+iotsensor.isAccelerometerAvailable()+' Gyroscope:'+iotsensor.isGyroscopeAvailable()+' Magnetometer:'+iotsensor.isMagnetometerAvailable()+' Barometer:'+iotsensor.isBarometerAvailable()+' Temperature:'+iotsensor.isTemperatureAvailable()+' Humidity:'+iotsensor.isHumidityAvailable()+' SensorFusion:'+iotsensor.isSflAvailable());要從其中一個傳感器接收數(shù)據(jù),必須設置回調(diào)函數(shù)。每次當有來自傳感器的可用新數(shù)據(jù)時,就會調(diào)用該函數(shù)。設置回調(diào)之后,則可啟用傳感器。
//Settheaccelerometercallbackandturnontheaccelerometeriotsensor.accelerometerCallback(handleReply).accelerometerOn();functionhandleReply(data){console.log('Accelerometer:'+' x:'+data.x+' y:'+data.y+' z:'+data.z);}
設置
器件的設置可分為三個類別:基本、傳感器融合和校準。
configuration.BASIC 對象是一個陣列,包含 11 個不同設置,用于控制傳感器。這些對象包含了可寫入器件的所有可能值。
//Changeaccelerometerrangeto16giotsensor.configuration.BASIC.ACCELEROMETER_RANGE=iotsensor.enums.ACCELEROMETER_RANGE._16g;//Afterchangingasettings,setthebasicconfigurationindeviceiotsensor.setBasicConfiguration();
//Optional-Storebasicconfigurationinflashiotsensor.storeBasicConfigurationInFlash();
//Optional-Retrievenewsettingsfromdeviceiotsensor.readBasicConfiguration(function(data){console.log('Settings:'+data);});
傳感器融合
更改傳感器融合系數(shù)的方式與更改基本配置相同:
//ChangeBetaAto2000iotsensor.configuration.SFL_COEF.BETA_A=2000;//Setbasicconfigurationindeviceiotsensor.setSflCoefficients();
//Retrievesensorfusioncoefficientsfromdeviceiotsensor.readSflCoefficients(function(data){console.log('Sflcoefficients:'+data);});
校準
使用 configuration.CAL_COEF和configuration.CAL_CONTROL對象更改校準系數(shù)和校準控制標志設置。
//SetQ_FORMATiotsensor.configuration.CAL_COEF.Q_FORMAT=12;
//Setoffsetvectoriotsensor.configuration.OFFSET_VECTOR=newInt16Array([100,100,100]);
//Setmatrixiotsensor.configuration.MATRIX=[newInt16Array([100,0,0]),newInt16Array([0,100,0]),newInt16Array([0,0,100])];
//SetCalibrationcoefficientsindeviceiotsensor.setCalibrationCoefficients();
//Retrievecalibrationcoefficientsfromdeviceiotsensor.readCalibrationCoefficients(function(data){console.log('Calibrationcoefficients:'+data);});//Setcalibrationcontrolflagbyte2(CONTROL_FLAG[0])iotsensor.configuration.CAL_CONTROL.CONTROL_FLAGS[0]=28//0011100
//Setcalibrationcontrolflagsindeviceiotsensor.setCalibrationControl();
//Retrievecalibrationcontrolflagsfromdeviceiotsensor.readCalibrationControl(function(data){console.log('Calibrationcontrol'+data);});
然后,函數(shù) storeCalibrationAndControl() 會將傳感器融合和校準的所有設置存儲在藍牙收發(fā)器的閃存中。
總結
Dialog Semiconductor 的無線模塊將多個傳感器組合在一起,實現(xiàn)了 12 自由度的測量,適合用于工業(yè)物聯(lián)網(wǎng)和可穿戴設備設計。通過低功耗技術和最新的低功耗藍牙技術,開發(fā)人員獲得了一種簡便的方式,通過 Android 和 iOS 應用輕松啟動傳感器模塊開發(fā)。利用傳感器融合軟件庫,可以組合原始數(shù)據(jù),以減少模塊的傳輸數(shù)據(jù)、功耗和存儲空間,從而降低成本和復雜度。這些軟件庫還可在像 Evothings 這樣的開發(fā)環(huán)境中使用,以針對特定應用開發(fā)更復雜的代碼。
-
傳感器
+關注
關注
2565文章
52971瀏覽量
767128 -
工業(yè)物聯(lián)網(wǎng)
關注
25文章
2443瀏覽量
66213
發(fā)布評論請先 登錄
評論