内容介绍
内容介绍
本次分享是Funpack第八期的任务二:环境监测站
利用NANO-33 BLE的传感器, 搭建一个小型环境监测站用于监测户外环境。待监测的参数包括:
-
周边环境温度(精度:±0.1°C, ±0.1°F)
-
周边环境湿度(精度:±1%)
-
大气压强(精度:±0.1kPa, ±0.1psi)
-
日照强度(用于判断白天/夜晚)
-
周边平均噪声(精度:±1dB)
我本次实现制作显示出的是:
- 周边环境温度(单位:℃)
- 周边环境湿度(单位:%)
- 大气压强(单位:KPa)
- 日照强度(day/night)
- 周边环境噪声(单位:dB)
1.声明部分
首先是将使用到头文件都声明。
以下是我使用到的各个传感器和模块对应的库:
#include <Arduino_APDS9960.h>
#include <Arduino_HTS221.h>
#include <Arduino_LPS22HB.h>
#include <PDM.h>
#include <Arduino.h>
#include <U8g2lib.h>
这里我应用I2C的屏幕,所以要初始化I2C:
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);
2.模块的初始化
紧接着就是初始化各个模块的代码:
if(!HTS.begin())
{
Serial.println("Failed to initialize humidity temperature sensor!"); //初始化失败提醒
while(1);
}
if (!BARO.begin())
{
Serial.println("Failed to initialize pressure sensor!"); //初始化失败提醒
while (1);
}
if(!APDS.begin())
{
Serial.println("Failed to initialize APDS9960 sensor."); //初始化失败提醒
while(1);
}
PDM.onReceive(onPDMdata);
if(!PDM.begin(channels, frequency))
{
Serial.println("Failed to initialize PDM!"); //初始化失败提醒
while (1);
}
u8g2.begin();
3.数据的读取与处理
- 麦克风
板子上的麦克风模块采集到的并非是分贝,而是声音的信号,这里我查了不少的资料,上边的公式我基本都试了,但是使用时误差较大,所以我自己调整了一下:
int i = 0;
uint16_t dB=0;
uint16_t sum = 0;
uint16_t avg=0;
if (samplesRead) {
for (i = 0; i < samplesRead; i++) {
if(sampleBuffer[i]<0)
{
sampleBuffer[i] = -sampleBuffer[i]; //将负的电信号转化为正的
}
sum = sum + sampleBuffer[i]; //求和
}
avg = sum/i; //求平均数
dB = 30*log10(avg); //转为音量
samplesRead = 0;
}
- 屏幕
SSD1306显示部分的代码:
u8g2.clearBuffer(); //清除缓存的数据
u8g2.setFont(u8g2_font_ncenB08_tr); //设置字符大小
u8g2.setCursor(0,10); //设置起始点坐标x,y
u8g2.print("Pressure = ");
u8g2.print(pressure1); //OLED显示气压
u8g2.print(" KPa ");
u8g2.setCursor(0,25); //设置起始点坐标x,y
u8g2.print("Temperature = ");
u8g2.print(temp1);
u8g2.print("°C ");
u8g2.setCursor(0,35); //设置起始点坐标x,y
u8g2.print("Humidity = ");
u8g2.print(humidity);
u8g2.print(" %");
u8g2.setCursor(0,45); //设置起始点坐标x,y
if(c>60){ //c是APDS9960可以读取的光照强度
u8g2.print("It's daytime now!"); //对光强进行判断
}
else{
u8g2.print("It's night now!");
}
u8g2.setCursor(0,55); //设置起始点坐标x,y
u8g2.print("Volume = ");
u8g2.print(dB);
u8g2.print(" dB");
u8g2.sendBuffer();
- 其他
另外在下面的完整代码中 还有对 psi(磅每平方英寸) ℉(华氏度)的读取及显示,各位使用时可以取消注释即可。
其余的数据读取很简单,在示例中就可以找到,而且容易理解就不再说明了,放在下面完整代码中了。
4.心得体会
通过这次的Funpack学习,让我这个初学者对于arduino有了更深的了解,也让我开了眼界,原来arduino已经可以做的这么精致,这么强,可以运用到人工智能方面,激发了我对这个这方面的兴趣。活动非常的赞!
参考开发需要的库(在库管理中添加):
- Arduino_APDS9960
- Arduino_HTS221
- Arduino_LPS22HB
- U8g2
- PDM
附件下载
Funpack_8.ino
团队介绍
团队成员
SorryMaker
一个dreamer
评论
0 / 100
查看更多
猜你喜欢
Funpack第八期-Arduino nano 33 ble sense环境监测站Funpack第八期活动,用Arduino nano 33 ble sense板子做一个环境监测站,监测的数据有周边环境温度,湿度,大气压强,噪声。
xbreeze
647
Funpack第八期 — Arduino Nano 33 BLE Sense 环境监测站利用 Arduino Nano 33 BLE Sense 的板载传感器,搭建一个小型环境监测站用于监测户外环境,待监测的参数包括温湿度、大气压强、日照强度、周边平均噪声等信息。
枫雪天
865
Funpack 第八期 Arduino Nano 33 BLE Sense 环境监测站使用Arduino Nano 33 BLE Sense检测环境参数,并通过OLED显示屏显示
tinysheeep
882