2021-06-23

Arduino nano 33 BLE sense的初级任务(温湿度传感器,压力传感器,颜色识别)

简介

本次使用arduino nano 33ble sense,建立一个小型环境监测站,检测周围压强,温湿度,光照,还有声音。
利用NANO-33 BLE的传感器, 搭建一个小型环境监测站用于监测户外环境。待监测的参数包括:
1.周边环境温度(单位:℃)
2.周边环境湿度(单位:%)
3.大气压强(单位:KPa)
4.日照强度(day/night)
5.周边环境噪声(单位:dB)
在这里插入图片描述

1.声明部分

首先是将使用到头文件都声明。
以下是我使用到的各个传感器和模块对应的库:

#include <Arduino_APDS9960.h>
#include <Arduino_HTS221.h>
#include <Arduino_LPS22HB.h>
#include <PDM.h>
#include <Arduino.h>
#include <U8g2lib.h>

这里我应用I2C的屏幕,所以要初始化I2C:

#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);

2.模块的初始化

紧接着就是初始化各个模块的代码:

if(!HTS.begin())                        
  {
      Serial.println("Failed to initialize humidity temperature sensor!"); //初始化失败提醒
      while(1);
  }
  if (!BARO.begin())               
  {
     Serial.println("Failed to initialize pressure sensor!");    //初始化失败提醒
     while (1);
  }
  if(!APDS.begin())
  {
      Serial.println("Failed to initialize APDS9960 sensor.");     //初始化失败提醒
      while(1);
  }
  PDM.onReceive(onPDMdata);
  if(!PDM.begin(channels, frequency))                    
  {
      Serial.println("Failed to initialize PDM!");                  //初始化失败提醒
      while (1);
  }
 
  u8g2.begin();

3.数据的读取与处理

  • 麦克风
    板子上的麦克风模块采集到的并非是分贝,而是声音的信号,这里我查了不少的资料,上边的公式我基本都试了,但是使用时误差较大,所以我自己调整了一下:
  int i = 0;
  uint16_t dB=0;
  uint16_t sum = 0;
  uint16_t avg=0;
  if (samplesRead) {
     for (i = 0; i < samplesRead; i++) {
      if(sampleBuffer[i]<0)
      {
         sampleBuffer[i] = -sampleBuffer[i];   //将负的电信号转化为正的
      } 
      sum = sum + sampleBuffer[i];            //求和
    }
    avg = sum/i;                           //求平均数
    dB = 30*log10(avg);                    //转为音量
    samplesRead = 0;
  }
  • 屏幕
    SSD1306显示部分的代码:
  u8g2.clearBuffer();                       //清除缓存的数据
  u8g2.setFont(u8g2_font_ncenB08_tr);       //设置字符大小
  u8g2.setCursor(0,10);                     //设置起始点坐标x,y
  u8g2.print("Pressure = ");                
  u8g2.print(pressure1);                     //OLED显示气压
  u8g2.print(" KPa ");
  u8g2.setCursor(0,25);                     //设置起始点坐标x,y
  u8g2.print("Temperature = ");
  u8g2.print(temp1);
  u8g2.print("°C ");
  u8g2.setCursor(0,35);                     //设置起始点坐标x,y
  u8g2.print("Humidity = ");
  u8g2.print(humidity);
  u8g2.print(" %");
  u8g2.setCursor(0,45);                     //设置起始点坐标x,y
  
  if(c>60){                                 //c是APDS9960可以读取的光照强度
      u8g2.print("It's daytime now!");      //对光强进行判断
  }
  else{
      u8g2.print("It's night now!");
  }                     
  u8g2.setCursor(0,55);                     //设置起始点坐标x,y
  u8g2.print("Volume = ");
  u8g2.print(dB);
  u8g2.print(" dB");
  u8g2.sendBuffer();

另外在下面的完整代码中 还有对 psi(磅每平方英寸) ℉(华氏度)的读取及显示,各位使用时可以取消注释即可。
其余的数据读取很简单,在示例中就可以找到,而且容易理解就不再说明了,放在下面完整代码中了。
参考开发需要的库(在库管理中添加):

Arduino_APDS9960
Arduino_HTS221
Arduino_LPS22HB
U8g2
PDM

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值