工业物联网 (IIoT) 在很大程度上要依赖传感器从便携式可穿戴系统收集数据,以便监控运动、压力、湿度和其他众多特征,然后将这些数据馈送至云进行处理。
通过模块方式,我们可以快速轻松地将传感器添加到设计中,但在将这些模块连接到网络的其余部分时,我们通常会面临一些挑战。有很多不同方法可以进行这种连接,但其中一种最简单的方法是采用最新的低功耗蓝牙 (BLE) 技术。BLE 收发器采用了芯片级封装,尺寸有所缩减,因而足够小巧,能够轻松与工业物联网设计中的各种传感器配合使用。
![Dialog Semiconductor 物联网传感器加密狗图片](https://www.digikey.com.cn/-/media/Images/Article%20Library/TechZone%20Articles/2017/May/Using%20Bluetooth%20Low%20Energy%20Connect%20Wearable%20Wireless%20Sensors%20IoT/article-2017may-using-bluetooth-low-energy-fig1.jpg?ts=14c339f2-3334-4046-9593-6915924f6916&h=326&w=300&la=zh-CN-RMB)
图 1:Dialog 物联网传感器加密狗。
无线收发器设计公司 Dialog Semiconductor 实现了这个目标,他们的 SmartBond 物联网传感器开发套件让运动和环境检测应用的开发工作变得更轻松。
Dialog 将无线收发器和传感器组合在专用模块中,进而获得世界上功耗最低的 12 自由度 (DOF) 无线传感器模块。该模块在缩减系统尺寸和成本的同时,还包含了用于加快物联网系统开发的所有必要硬件和软件。通过组合所有这些元件,Dialog 能够利用代码来融合来自各个传感器的数据,提供更有意义的输出,而不只是提供数据流。这就有助于降低收发器的负载,减少存储器需求和电流消耗,从而延长电池寿命并缩短开发时间。
这种系统优化只有通过开发完整的模块才能实现,而这种模块要将 BLE 收发器和 ARM® Cortex®-M0 处理器与 Bosch Sensortec 的加速计、陀螺仪、磁力仪、环境传感器组合在一块尺寸仅为 16 x 15 mm 的电路板上。
![组合了三种传感器和一个蓝牙收发器的 Dialog 物联网模块图片](https://www.digikey.com.cn/-/media/Images/Article%20Library/TechZone%20Articles/2017/May/Using%20Bluetooth%20Low%20Energy%20Connect%20Wearable%20Wireless%20Sensors%20IoT/article-2017may-using-bluetooth-low-energy-fig2.jpg?ts=f1eb41b3-6521-4562-aef6-9af2543f14fd&h=298&w=600&la=zh-CN-RMB)
图 2:该物联网模块组合了三种传感器和一个蓝牙收发器,实现 12 自由度测量。
它还包括 SmartFusion,也就是 Dialog 独有的智能传感器融合软件库,可进行数据采集、传感器校准和融合。这样一来,该模块只需使用 4.5 KB 的 ROM 和 500 字节的 RAM,并且能决定传感器的数据速率。
该模块采用 DA14583 低功耗蓝牙 SoC,配备工作频率为 12.5 Hz 的 BMI160 6 轴惯性测量装置、工作频率为 10 Hz 的 BMM150 3 轴地磁传感器,以及以 0.5 Hz 测量压力、温度和湿度的 BME280 集成环境传感器装置。
所有这些都只需要 Cortex-M0 处理器提供相对较低的 0.5 MIPS 处理资源,以支持磁力仪自动校准和 9 自由度的传感器融合。其中惯性测量装置中的陀螺仪和加速计的工作频率分别为 100 Hz 和 10 Hz。
融合的方向数据通过 BLE 接口传输到在 Android 和 iOS 上运行的一个物联网传感器应用,从而实现了传感器、方向数据和配置的可视化。
DA14583 搭载完全集成的无线收发器和基带处理器,在该模块中可用作独立控制器。它拥有 1 Mb 闪存来存储蓝牙规范和自定义应用代码,所有这些均能够以无线方式 (OTA) 更新。合格的 BLE 协议栈保存在专门的 ROM 中,而所有软件则通过一个简单的计划程序在 ARM Cortex-M0 处理器上运行。
BLE 固件包括 L2CAP 服务层协议、安全管理器 (SM)、属性协议 (ATT)、通用属性规范 (GATT) 和通用访问规范 (GAP)。
收发器提供 93 dB 的射频链路预算,带有一个单端 50 W 匹配式 RFIO 接口,用于连接陶瓷芯片天线。所有射频模块均由片载低压差稳压器 (LDO) 供电,而且所有的射频模块都有自己的偏置控制。
Bosch Sensortec BMM150 是一款独立的地磁传感器,可在三个垂直轴上测量磁场,适用于手机、手持设备、计算机外设、人机接口、虚拟现实功能和游戏控制器。它有自己的处理器,可将地磁传感器的输出转换为数字结果,而这些结果可通过行业标准数字接口(SPI 和 I2C)读取。
![Bosch Sensortec 的 BMM150 地磁传感器图片](https://www.digikey.com.cn/-/media/Images/Article%20Library/TechZone%20Articles/2017/May/Using%20Bluetooth%20Low%20Energy%20Connect%20Wearable%20Wireless%20Sensors%20IoT/article-2017may-using-bluetooth-low-energy-fig3.jpg?ts=8ae735b9-2275-4643-bd41-fe85ad2f827e&la=zh-CN-RMB)
图 3:Bosch Sensortec 的 BMM150 地磁传感器可提供罗盘和位置数据。
晶圆级芯片尺寸封装 (WLCSP) 的尺寸仅为 1.56 x 1.56 x 0.6 mm,可在 1.62 至 3.6 V 的电压下工作,VDDIO 电压范围为 1.2 至 3.6 V。
BME280 是集湿度、压力和温度传感器于一体的数字传感器,采用金属盖 LGA 封装,尺寸为 2.5 × 2.5 mm,高度为 0.93 mm。湿度传感器可在宽温度范围内提供快速响应和总体精度,而压力传感器则为绝对气压传感器,具有极高的精度和分辨率,而且噪声远低于以前的版本。集成的温度传感器经过优化,可提供最低的噪声和最高的分辨率。另外,输出可用于压力和湿度传感器的温度补偿,也可用于评估环境温度。传感器提供了 SPI 和 I²C 接口,可在 1.71 至 3.6 V 的电压范围内工作,VDDIO 电压范围为 1.2 至 3.6 V。
传感器必须小心放置在模块上,以避免出现问题。磁传感器应该距离钮扣电池 3 mm 至 5 mm,距离高电流路径 10 mm,例如 DC-DC 转换器和电感器附近的路径,最好距离电源轨 3 mm 至 4 mm。钮扣电池本身放置于 PCB 下方,尽可能与传感器保持最大距离,以避免可能产生的干扰。
模块在休眠模式下平均仅消耗 11 µA 的电流,而在广播模式下,在它寻找要连接的主机时,平均电流消耗将提升至 110 µA。连接后,在没有运动且所有传感器处于活动状态时,平均电流消耗为 560 µA。当模块正在移动时,测量的最高功耗为 1.35 mA(平均值)。
图 4:物联网模块内部的传感器的功率数据。
Dialog 特意简化了连接方法,我们可通过 Play Store 上的 Android 应用或 App Store 上的 iOS 应用连接到模块。这些应用会自动连接到电路板,并显示来自传感器的数据。
要通过 Evothings 等开发环境对模块进行编程,可使用 Github 上的软件库。其中包括 JavaScript 库,可用于通过 Cordova 应用与模块进行通信,该应用包含了低功耗蓝牙插件,另外也可通过 Evothings Workbench 中的一个新应用进行通信。
初始化和连接
包括 iotsensor.js 文件
通过指定您使用的项目类型(RAW 或 SFL)创建新的 iotsensor 对象。
// Device type we are connecting to, can either be RAW or SFL
var type = evothings.iotsensor.SFL;
// Create a new IoT Sensor SFL instance
var iotsensor = evothings.iotsensor.createInstance(type);
然后,将新的物联网传感器实例连接到使用 BLE 的传感器。程序库提供了选项,可使用 connectToClosestSensor(scanTime, callbackFun, disconnectFun) 函数,自动连接到最近的物联网传感器。
// Scan for 3000ms
iotsensor.connectToClosestSensor(
3000,
function()
{
console.log('We are connected!');
},
function(error)
{
console.log('Disconnect error: ' + error);
}
);
还可以手动连接到器件。
iotsensor.startScanningForDevices(
function(device)
{
console.log('Device found: ' + device.name + ' RSSI: ' + device.rssi);
if(iotsensor.isIoTSensor(device))
{
// We have an IoT Sensor, let's connect!
iotsensor.connectToDevice(
device,
function()
{
// Connected and device is ready
},
function(error)
{
console.log('Disconnect error ' + error);
}
);
}
}
);
传感器数据
物联网传感器提供一份报告,指出哪些传感器可用以及已连接器件的固件版本。最好是使用这些选项来确定器件的功能。
console.log('IoT Sensor device info:'
+ '\n Device model: ' + iotsensor.getDeviceModel()
+ '\n Firmware: ' + iotsensor.getFirmwareString()
+ '\n Accelerometer: ' + iotsensor.isAccelerometerAvailable()
+ '\n Gyroscope: ' + iotsensor.isGyroscopeAvailable()
+ '\n Magnetometer: ' + iotsensor.isMagnetometerAvailable()
+ '\n Barometer: ' + iotsensor.isBarometerAvailable()
+ '\n Temperature: ' + iotsensor.isTemperatureAvailable()
+ '\n Humidity: ' + iotsensor.isHumidityAvailable()
+ '\n Sensor Fusion: ' + iotsensor.isSflAvailable());
要从其中一个传感器接收数据,必须设置回调函数。每次当有来自传感器的可用新数据时,就会调用该函数。设置回调之后,则可启用传感器。
// Set the accelerometer callback and turn on the accelerometer
iotsensor.accelerometerCallback(handleReply)
.accelerometerOn();
function handleReply(data)
{
console.log('Accelerometer: ' +
'\n x: ' + data.x +
'\n y: ' + data.y +
'\n z: ' + data.z);
}
设置
器件的设置可分为三个类别:基本、传感器融合和校准。
configuration.BASIC 对象是一个阵列,包含 11 个不同设置,用于控制传感器。这些对象包含了可写入器件的所有可能值。
// Change accelerometer range to 16g
iotsensor.configuration.BASIC.ACCELEROMETER_RANGE = iotsensor.enums.ACCELEROMETER_RANGE._16g;
// After changing a settings, set the basic configuration in device
iotsensor.setBasicConfiguration();
// Optional - Store basic configuration in flash
iotsensor.storeBasicConfigurationInFlash();
// Optional - Retrieve new settings from device
iotsensor.readBasicConfiguration(
function(data)
{
console.log('Settings: ' + data);
}
);
传感器融合
更改传感器融合系数的方式与更改基本配置相同:
// Change Beta A to 2000
iotsensor.configuration.SFL_COEF.BETA_A = 2000;
// Set basic configuration in device
iotsensor.setSflCoefficients();
// Retrieve sensor fusion coefficients from device
iotsensor.readSflCoefficients(
function(data)
{
console.log('Sfl coefficients: ' + data);
}
);
校准
使用 configuration.CAL_COEF 和 configuration.CAL_CONTROL 对象更改校准系数和校准控制标志设置。
// Set Q_FORMAT
iotsensor.configuration.CAL_COEF.Q_FORMAT = 12;
// Set offset vector
iotsensor.configuration.OFFSET_VECTOR = new Int16Array([100, 100, 100]);
// Set matrix
iotsensor.configuration.MATRIX = [new Int16Array([100, 0, 0]), new Int16Array([0, 100, 0]), new Int16Array([0, 0, 100])];
// Set Calibration coefficients in device
iotsensor.setCalibrationCoefficients();
// Retrieve calibration coefficients from device
iotsensor.readCalibrationCoefficients(
function(data)
{
console.log('Calibration coefficients: ' + data);
}
);
// Set calibration control flag byte 2 (CONTROL_FLAG[0])
iotsensor.configuration.CAL_CONTROL.CONTROL_FLAGS[0] = 28 // 0011100
// Set calibration control flags in device
iotsensor.setCalibrationControl();
// Retrieve calibration control flags from device
iotsensor.readCalibrationControl(
function(data)
{
console.log('Calibration control ' + data);
}
);
然后,函数 storeCalibrationAndControl() 会将传感器融合和校准的所有设置存储在蓝牙收发器的闪存中。
总结
Dialog Semiconductor 的无线模块将多个传感器组合在一起,实现了 12 自由度的测量,适合用于工业物联网和可穿戴设备设计。通过低功耗技术和最新的低功耗蓝牙技术,开发人员获得了一种简便的方式,通过 Android 和 iOS 应用轻松启动传感器模块开发。利用传感器融合软件库,可以组合原始数据,以减少模块的传输数据、功耗和存储空间,从而降低成本和复杂度。这些软件库还可在像 Evothings 这样的开发环境中使用,以针对特定应用开发更复杂的代码。