极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: 废墟

攀藤G5+DHT22 温湿度&PM2.5测量器

[复制链接]
发表于 2016-8-27 23:02:31 | 显示全部楼层
塑料盒可以用电烙铁直接烫,没有的话 用回形针烧红了烫也可以
比较好的方法是用电磨,挖方孔用刀片,打洞用钻头,挖坑可以用铣头。。。
回复 支持 反对

使用道具 举报

发表于 2016-12-9 21:13:48 | 显示全部楼层
请教楼主
  if (loopCnt % 40 == 0) {
    getDHT22();
  }
应该怎么理解摸?
还有,我数据格式报错,请问是什么问题? sketch_dec09c.ino: In function 'int Filter()':
sketch_dec09c.ino:26:16: error: incompatible types in assignment of 'int' to 'int [100]'
sketch_dec09c.ino:32:39: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
sketch_dec09c.ino:33:21: error: invalid conversion from 'int*' to 'int' [-fpermissive]
sketch_dec09c.ino:34:20: error: incompatible types in assignment of 'int' to 'int [100]'
sketch_dec09c.ino:40:48: error: invalid conversion from 'int*' to 'int' [-fpermissive]
编译有误。

第三个问题,怎么能从5秒钟或者10个数后开始显示数据,因为G5可能是里面脏了前几个数据偏大。
回复 支持 反对

使用道具 举报

发表于 2016-12-21 13:08:01 | 显示全部楼层
请教下楼主,在编译时出错,中位值平均滤波那段,filter_buf = filter_buf[i-1]; 提示“incompatible types in assignment of 'int' to 'int [5]' ”,怎么改呢?
回复 支持 反对

使用道具 举报

发表于 2017-1-11 08:58:59 | 显示全部楼层
G5传感器0.3颗粒物有显示吗?
回复 支持 反对

使用道具 举报

发表于 2017-3-24 01:23:32 | 显示全部楼层
请问下oled的连线方式,谢谢
回复 支持 反对

使用道具 举报

发表于 2017-3-24 10:49:38 | 显示全部楼层
3Q for sharing.
回复 支持 反对

使用道具 举报

发表于 2017-4-7 20:06:05 | 显示全部楼层
感谢LZ!!!
mega2560+G1+DHT22+LCD12864(接线8,9,3)稍微改了一下代码  ,一次通过!
滤波那一段代码可以去掉吗?实在是看不大懂
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:20:02 | 显示全部楼层
摘取了你的G5程序,但是串口监视器那什么都没有,因为我的传感器是一个原来的学长留下来的,所以没有例程,只能借用你的了,帮忙看看程序哪错了,谢谢。
#include <SoftwareSerial.h>

SoftwareSerial mySerial(9, 10);

struct PARAMS {
  float T;//显示温度
  float H;//显示湿度
  long P;//显示PM2.5
  long _P;//读取PM2.5
} _params;

//G5 相关变量
static unsigned char ucRxBuffer[250];
static unsigned char ucRxCnt = 0;

//循环计数器
unsigned char loopCnt = 0;

void setup() {
  Serial.begin(9600);
  //软串口读取G5
  mySerial.begin(9600);
  delay(500);
  
}

//获取PM2.5的值
void getPM25(unsigned char ucData) {

  ucRxBuffer[ucRxCnt++] = ucData;

  if (ucRxBuffer[0] != 0x42 && ucRxBuffer[1] != 0x4D)  {
    ucRxCnt = 0;
  }
  if (ucRxCnt > 31) {
    _params._P = (float)ucRxBuffer[6] * 256 + (float)ucRxBuffer[7]; //美国标准
    //    _params._P = (float)ucRxBuffer[12] * 256 + (float)ucRxBuffer[13]; //中国标准
    ucRxCnt = 0;
  }
}

//中位值平均滤波,处理PM2.5的值
#define FILTER_N 5
int Filter() {
  int i;
  int filter_sum = 0;
  int filter_max, filter_min;
  int filter_buf[FILTER_N];
  for (i = 0; i < FILTER_N; i++) {
    filter_buf[i] = _params._P;
    delay(1);
  }
  filter_max = filter_buf[0];
  filter_min = filter_buf[0];
  filter_sum = filter_buf[0];
  for (i = FILTER_N - 1; i > 0; i--) {
    if (filter_buf[i] > filter_max)
      filter_max = filter_buf[i];
    else if (filter_buf[i] < filter_min)
      filter_min = filter_buf[i];
    filter_sum = filter_sum + filter_buf[i];
    filter_buf[i] = filter_buf[i - 1];
  }
  i = FILTER_N - 2;
  filter_sum = filter_sum - filter_max - filter_min + i / 2; // +i/2 的目的是为了四舍五入
  filter_sum = filter_sum / i;
  return filter_sum;
}

void loop() {

  while (mySerial.available())   {
    getPM25(mySerial.read());
  }
_params.P = Filter();
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 22:05 , Processed in 0.044169 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表