内容介绍
内容介绍
一.介绍用本板卡最终实现了什么功能
利用本板卡最终实现了环境监测站的功能,即利用NANO-33 BLE的传感器,搭建一个小型环境监测站用于监测户外环境。待监测的参数包括:
周边环境温度(精度:±0.1°C, ±0.1°F);
周边环境湿度(精度:±1%);
大气压强(精度:±0.1kPa, ±0.1psi);
日照强度(用于判断白天/夜晚);
周边平均噪声(精度:±1dB)。
二.各功能对应的主要代码片段及解释
温湿度通过HTS221传感器获得,大气压强通过LSP22传感器获得,光照强度通过APDS9960传感器获得,噪声通过数字式麦克风MP34DT06JTR获得的PCM数据根据噪声计算公式得到。通过一个外接的oled显示屏显示参数。
首先引入各项头函数,通过I2C接口接入OLED屏幕,在setup()中初始化U8G2以及各项传感器,在loop()函数中得到传感器具体数据,尤其是把PCM数据转化为以分贝为单位的噪音数据,本文采用了RMS结果取10倍的log值作为噪音分贝数,最后,在oled显示屏中显示结果。
三.结果说明
从图片中可以看出,在OLED屏幕上分别显示了气压Pre,温度Tem,湿度Hum,以及噪音Noi。
四.建议
个人觉得活动室很有意义的,通过活动认识了很多志同道合的朋友,对经典的arduino有了进一步的了解,两个任务难度适中,入门选手可以选择环境监测,进阶选手可以选择投篮,希望继续举办这样的活动!
#include <Arduino.h>
#include <U8g2lib.h>
#include <PDM.h>
#include <math.h>
#include <Arduino_LPS22HB.h> //Include library to read Pressure
#include <Arduino_HTS221.h> //Include library to read Temperature and Humidity
#include <Arduino_APDS9960.h> //Include library for colour, proximity and gesture recognition
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print();
Serial.begin(9600); //Serial monitor to display all sensor values
if (!BARO.begin()) //Initialize Pressure sensor
{ Serial.println("Failed to initialize Pressure Sensor!"); while (1);}
if (!HTS.begin()) //Initialize Temperature and Humidity sensor
{ Serial.println("Failed to initialize Temperature and Humidity Sensor!"); while (1);}
if (!APDS.begin()) //Initialize Colour, Proximity and Gesture sensor
{ Serial.println("Failed to initialize Colour, Proximity and Gesture Sensor!"); while (1);}
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {Serial.println("Failed to start PDM!"); while (1);}
}
void loop(void) {
float a = 0, sum = 0, dB = 0;
if (samplesRead) {
for (int i = 0; i < samplesRead; i++) {
sum += sampleBuffer[i]*sampleBuffer[i];
}
a = sum / samplesRead;
dB = 10*log(a);
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_wqy15_t_gb2312a);
u8g2.setFontDirection(0);
u8g2.setCursor(22, 14);
u8g2.print("环境监测站");
u8g2.setFont(u8g2_font_t0_11_tr); // 这里可以修改字体大小
u8g2.drawStr(0,26,"Pre: ");
u8g2.setCursor(30,24); // write something to the internal memory
u8g2.print(Pressure);
u8g2.drawStr(70,24,"kPa");
//u8g2.setFont(u8g_font_unifont);
u8g2.drawStr(0,34,"Tem: ");
u8g2.setCursor(30, 34);
u8g2.print(Temperature);
u8g2.drawStr(70,28,".");
u8g2.drawStr(72,34,"C");
u8g2.drawStr(0,44,"Hum: ");
u8g2.setCursor(30, 44);
u8g2.print(Humidity);
u8g2.drawStr(70,44,"%");
u8g2.drawStr(0,54,"lig: ");
if (c > 10)
{
u8g2.drawStr(30,54,"day");
}else
u8g2.drawStr(30,54,"night");
u8g2.drawStr(0,64,"noi: ");
u8g2.setCursor(30, 64);
u8g2.print(dB);
u8g2.drawStr(70,64,"dB");
u8g2.sendBuffer();
}
团队介绍
邢庆龙
评论
0 / 100
查看更多