Funpack第八期:基于Arduino Nano 33 BLE Sense的环境监测站
Arduino公司最新推出的NANO 33 BLE是一款基于nRF52840 SoC ARM-32位处理器的微型开发板
标签
嵌入式系统
MPU
德雷克
更新2021-05-20
857

一、板卡介绍

Arduino公司最新推出的NANO 33 BLE是一款基于nRF52840 SoC ARM-32位处理器的微型开发板,其主控芯片集成了蓝牙低功耗(BLE)。NANO 33 BLE不仅保留了与经典款NANO同样的尺寸与管脚,且在此基础上配有多种高性能传感器(角速度,加速度,压力,温湿度,距离,光感,姿态)等,在实现完全兼容的条件下增加了无限多种的组合玩法,可以迅速实现并验证转瞬即逝的灵感火花,是一款所有创客都梦寐以求的伴侣。FmeE4YliyWiWfk1XP1mRVrHm_knK

二、任务介绍

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

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

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

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

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

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

三、代码功能讲解

首先是本次项目所用到的库函数:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Arduino_HTS221.h>
#include <PDM.h>
#include <Arduino_LPS22HB.h>
#include <math.h>
#include <Arduino_APDS9960.h>

接下来是各个传感器的初始化

void setup() {
 //初始化I2C
 Wire.begin();
 //初始化oled
 display.begin(SSD1306_SWITCHCAPVCC,0x3C);
 //初始化温湿度传感器
 HTS.begin();
 //初始化音频传感器
 PDM.onReceive(onPDMdata);
 PDM.begin(channels, frequency);
 //初始化压力传感器
 BARO.begin();
 //初始化颜色传感器
 APDS.begin();
}

由于使用的0.96的OLED屏幕,无法一次性将信息显示完整,需要分两次显示出来

void display_sensor1(){
 delay(1500);
 display.clearDisplay();
 display.setTextColor(WHITE);
 display.setTextSize(1);
 
 displaytemperaturehumidity();

 displaynoise();
}

void display_sensor2(){
 delay(1500);
 display.clearDisplay();
 display.setTextColor(WHITE);
 display.setTextSize(1);
 
 displayPressure();

 displaycolor();
}

接下来是各个传感器模块函数

温湿度传感器:

void displaytemperaturehumidity(){
  float temperature = HTS.readTemperature();
  float humidity    = HTS.readHumidity();
  display.setCursor(0,0);
  display.print("Temperature:  ");
  display.print(temperature);
  display.print(" C");
  display.setCursor(0,10);
  display.print("Humidity:  ");
  display.print(humidity);
  display.print(" h");
}

噪声传感器:

void displaynoise(){
   int sum = 0;
   float simple = 0;
   for (int i = 0; i < samplesRead; i++) {
       sum += sampleBuffer[i] * sampleBuffer[i];
   }
   simple = 20 * log10(sum / samplesRead);
   display.setCursor(0,20);
   display.print(simple);
   display.print(" db");
   samplesRead = 0;
}

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;
}

大气压强传感器:

void displayPressure(){
     float pressure = BARO.readPressure();
     display.setCursor(0,0);
     display.print(pressure);
     display.print(" kPa");   
}

环境光传感器:

void displaycolor(){
if (APDS.proximityAvailable()) {
        proximity = APDS.readProximity();
   }
 if (APDS.colorAvailable()) {
        APDS.readColor(r, g, b, c);
    }
  if (millis() - lastUpdate > 100) {
        display.setCursor(0,10);
        lastUpdate = millis();
        if(c < 30){
          display.print("night");
        }
        else{
          display.print("day");
        }
    }
}

四、实物展示

FtvusMM6tQw7YluAH2B0Eevl-KgH

FicGOelZH2TrTc7-6yr5Yoca21cK

五、心得体会

通过本次Funpack活动,切身体会了Arduino的生态,了解了Arduino的开发过程,能过快速将想法变为现实,尤其是在一些在一些需要单片机电路中,可以快速的进行搭建,以后我还将积极参与funpack的接下来的其他活动。

 

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