Funpack第八期环境监测站
基于Arduino nano 33的环境监测站,完成了环境温湿度、气压、噪音等数据的检测和显示,基本实现了要求的环境监测站要求。
标签
嵌入式系统
Lucheni
更新2021-05-24
701

Arduino Nano

自2008年第一块Arduino Nano推出后,基于此大小,nano已进化出了非常多的变种

ch01-Arduino_Nano

2018年,arduino推出了最新的nano系列:Nano 33

Arduino NANO 33 Made Easy BLE, Sense and IoT

此系列包含三块板卡,分别面向于BLE和Wi-Fi的iot应用,其中BLE和Sense都板载BLE模组,iot板载wifi模组。

Arduino Nano 33 BLE Sense

img

本次活动所采用的为Sense板卡,Sense板卡为BLE板卡的带传感器升级版,在保持原有电路的基础上,携带了非常丰富的传感器。

Nano Sense的核心处理器为nRF52840 SoC,这是一款基于ARM Cortex-M4F核心且集成了蓝牙5.0的SOC,在保证与经典款nano兼容尺寸管脚的基础上,大大提升了处理器性能。同时,Nano Sense配有多种高性能传感器(角速度,加速度,压力,温湿度,距离,光感,姿态)等,配合板载的蓝牙5.0,足以支持大部分iot应用。

Getting Started

如果要在Arduino桌面IDE上使用Arduino Nano 33 BLE Sense,需要依次进行以下操作:

1)安装开发板:工具——开发板——开发板管理器——搜索“nano 33 ble”——安装“Arduino Mbed OS Boards”

2)安装IMU库:项目——加载库——管理库——搜索ArduinLSM9DS1

3)安装麦克风包:项目——加载库——管理库——搜索PDM

4)安装颜色传感器包:项目——加载库——管理库——搜索APDS9960

5)安装气压计包:项目——加载库——管理库——搜索ArduinoLPS22HB

6)安装温湿度传感器包:项目——加载库——管理库——搜索ArduinoHTS221

 

功能展示

FqzyX3d3AFZLXQpWwBlzFTdsWVRm

本次实验完成了要求的第二个小题目:环境检测站。如图采用了0.96寸oled进行显示,依次显示了温度、湿度、气压、正上方RGB色、噪声以及基于RGB色进行的白天/夜晚判断。

代码细节

本实验代码除麦克风外所有传感器代码皆为上方格式,首先调用库函数得到需要的传感器值(具体使用方式见传感器对应例程),之后利用dtostrf函数进行数据类型转换并打印在oled屏幕上。

// read HTS221 sensor values
float temperature = HTS.readTemperature(); // read HTS221 sensor values
float humidity   = HTS.readHumidity(); // read HTS221 sensor values
 
u8g2.drawStr(0,10,"Temperature="); // write something to the internal memory
dtostrf(temperature,3,2,buffer); // 3:小数点前保留3位;2:小数点后保留2位。
u8g2.drawStr(78,10,buffer); // write something to the internal memory 78=12*6+6
u8g2.drawStr(108,10," C"); // write something to the internal memory
​
u8g2.drawStr(0,20,"Humidity="); // write something to the internal memory
dtostrf(humidity,3,2,buffer); // 3:小数点前保留3位;2:小数点后保留2位。
u8g2.drawStr(66,20,buffer); // write something to the internal memory
u8g2.drawStr(96,20,"%"); // write something to the internal memory

 

麦克风部分因为库函数可以获取到的为PDM信号,所以采用了PDM-PCM-DB的思路,先取均方根,再带入公式得到最终的结果。

void onPDMdata() {
// Query the number of available bytes
int bytesAvailable = PDM.available();
​
// Read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
​
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
​
double SPL_cal()
{
double amp=0,sum=0;
int cnt=0;
while(cnt<1020)
{
  if (samplesRead)
  {
    for (int i=0; i<samplesRead; i++)
    {
      sum=sum+double(sampleBuffer[i])*sampleBuffer[i];
    }
    cnt=cnt+samplesRead;
    samplesRead=0;
  }
}
amp=20*log10(10*sqrt(sum/cnt));
return amp;
}

 

可改进点

本次实验中温度传感器获得的数据比室温高2度左右,原因是nano的板卡体积实在太小,板卡本身的发热导致了温湿度传感器的温度高于室温。如果要使其达到室温可采用官方推荐的方式:通过代码将板卡进入尽可能低的低功耗模式,切断下图中的3.3V连接,并绕过DC-DC稳压器为电路板供电。

BLESense CUT3v3

 

附件下载
task1.ino
Readme.md
团队介绍
个人
团队成员
Lucheni
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号