Funpack第八期 Arduino Nano 33 BLE Sense 环境检测站
本期完成基于Arduino Nano 33 BLE Sense 环境检测站
标签
嵌入式系统
Arduino
安先生
更新2021-05-12
762

任务

利用NANO-33 BLE的传感器, 搭建一个小型环境监测站用于监测户外环境。待监测的参数包括:

  • 周边环境温度(精度:±0.1°C, ±0.1°F)

  • 周边环境湿度(精度:±1%)

  • 大气压强(精度:±0.1kPa, ±0.1psi)

  • 日照强度(用于判断白天/夜晚)

  • 周边平均噪声(精度:±1dB)

 

Gsensor

  • APDS9960 距离颜色姿势传感器 用来判断白天/夜晚

  • LSM9DS1 九轴加速度重力传感器 -- 暂时没用上

  • HTS221 温湿度传感器 用来测量环境温湿度

  • LPS22HB 压力传感器 用来测量大气压强

  • MP334DT05- A 麦克风 用来判断噪音

 

核心库

Arduino_LPS22HB

Arduino_HTS221

Arduino_APDS9960

Adafruit_GFX

Adafruit_SSD1306

 

 

核心代码

// 硬件初始化

void hw_init(void){ 
Serial.begin(9600); 
delay(1000);

// 
if (!APDS.begin()) 
{ 
Serial.println("Error initializing APDS9960 sensor."); 
while (1); 
}

if (!BARO.begin()) 
{ 
Serial.println("Failed to initialize pressure sensor!"); 
while (1); 
}

if (!HTS.begin()) { 
Serial.println("Failed to initialize humidity temperature sensor!"); 
while (1); 
} 
// Configure the data receive callback PDM.onReceive(onPDMdata); 
if (!PDM.begin(1, 16000)) 
{ 
Serial.println("Failed to start PDM!"); 
while (1); 
}

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

} 
void setup() {

hw_init();

// clear display 
display.clearDisplay(); 
display.display(); 
}

void loop() { 
int r, g, b, a; 
float pressure,f_temperature,c_temperature,humidity; 
uint32_t sample;


//读取数据

pressure = BARO.readPressure();

f_temperature = HTS.readTemperature(FAHRENHEIT); 
c_temperature = (f_temperature-32)/1.8;

humidity = HTS.readHumidity();

while ( APDS.colorAvailable()) 
{ 
APDS.readColor(r, g, b, a); 
Serial.println("a:"); 
Serial.println(a); 
}

while (!samplesRead); 
{ 
uint32_t sample_max = 0; 
for (int i = 0; i < samplesRead; i++) 
{ if(sampleBuffer[i] < 0) 
sampleBuffer[i] = -sampleBuffer[i]; 
if(sampleBuffer[i] > sample_max) 
sample_max= sampleBuffer[i]; 
} 
sample = 24log10(sample_max5); 
} 
samplesRead = 0;




//显示数据 
display.clearDisplay(); 
display.setCursor(0,0); 
display.setTextSize(2); 
display.setTextColor(SSD1306_WHITE);

if(a >= 3)
{ 
display.print(F("day ")); 
}else{ 
display.print(F("night ")); 
} display.print(sample); 
display.println(F("dB")); //换行

display.print(c_temperature); 
display.println(F("C")); //换行

display.print(humidity); 
display.println(F("%")); //换行

display.print(pressure); 
display.println(F("kPa"));//换行

display.display();

delay(1000); }

功能说明

传感器读取:

温度 湿度 大气压  噪音每1秒的间隔更新数据.

白天晚上,根据颜色传感器读取到的亮度值判断

如果高于3 认为是白天 如果小于认为是晚上.

屏幕显示:

I2C接口导出的OLED屏幕显示当前的数据

如下图所示

如下图所示

 

体会感受

感谢硬禾, 通过本次活动 ,发现Arduino的的易用性,和庞大的生态圈.

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