开发环境是Arduino, 在板卡管理器中,选择“Arduino Mbed OS Nano Boards”
后续在过程贴中记录开发的一些细节。
采集车内气压数据使用的是LPS22HB大气压力传感器。LPS22HB 是一款超紧凑型压阻式绝对压力传感器,可用作数字输出气压计。该器件包括一个传感元件和一个 I2C 接口,该接口通过 I 2 C 或 SPI 从传感元件与应用程序进行通信。
检测绝对压力的传感元件由采用 ST 开发的专用工艺制造的悬浮膜组成。
LPS22HB 采用全模制、带孔 LGA 封装 (HLGA)。保证在 -40 °C 至 +85 °C 的温度范围内运行。封装上有孔,以允许外部压力到达传感元件。对于LPS22HB,可以使用IIC进行通讯。要注意最大通信速率为400K.
要驱动这个传感器,需要安全驱动:
初始化:
#include <Arduino_LPS22HB.h> if (!BARO.begin()) { Serial.println("Failed to initialize pressure sensor!"); while (1) ; }
这颗传感器还同时可以获取温度!
float pressure = BARO.readPressure(); // print the sensor value Serial.print("Pressure = "); Serial.print(pressure); Serial.println(" kPa"); float temperature = BARO.readTemperature(); // print the sensor value Serial.print("Temperature = "); Serial.print(temperature); Serial.println(" C");
串口测试:
对于车内湿度数据的获取,采用HS300X驱动板载的HS3003温湿度传感器。
float humidity = HS300x.readHumidity(); Serial.print("Humidity = "); Serial.print(humidity); Serial.println(" %"); // print an empty line Serial.println();
串口输出:
APDS9960是一个多功能传感器,不仅可以用作接近传感器,还可以分别颜色,通过R,G,B三个分量结合公式,可以算出相对光亮照度。
代码
static int proximity; if (APDS.proximityAvailable()) { // read the proximity // - 0 => close // - 255 => far // - -1 => error proximity = APDS.readProximity(); // print value to the Serial Monitor Serial.print("Proximity = "); Serial.println(proximity); } static int r, g, b; #if 1 // Check if a color reading is available if (APDS.colorAvailable()) { APDS.readColor(r, g, b); } // print the values Serial.print("r = "); Serial.println(r); Serial.print("g = "); Serial.println(g); Serial.print("b = "); Serial.println(b); Serial.println(); float lux; lux = ((r * 299.0) + (g * 587.0) + (b * 114.0)) / 1000.0;
为了实现蓝牙开关灯的效果,加入了Arduino BLE模块,这样手机就可以连接开发板,控制板载的LED灯。
enum { LED_OFF = -1, LED_R = 0, LED_G = 1, LED_B = 2, LED_Default = 3 }; int led = -1; const char* deviceServiceUuid = "19b10000-e8f2-537e-4f6c-d104768a1214"; const char* deviceServiceCharacteristicUuid = "19b10001-e8f2-537e-4f6c-d104768a1214"; BLEService ledService(deviceServiceUuid); BLEByteCharacteristic ledCharacteristic(deviceServiceCharacteristicUuid, BLERead | BLEWrite);
在loop循环中:
BLEDevice central = BLE.central(); Serial.println("- Discovering central device..."); if (central) { Serial.println("* Connected to central device!"); Serial.print("* Device MAC address: "); Serial.println(central.address()); Serial.println(" "); while (central.connected()) { if (ledCharacteristic.written()) { led = ledCharacteristic.value(); writeled(led); } UpdateSensorValue(); } Serial.println("* Disconnected to central device!"); }
烧录后,打开手机蓝牙助手,可以看到小开发板的设备名称。
通过发送不同的指令,可以控制不同颜色的灯。