内容介绍
内容介绍
任务
利用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
查看更多