这个传感器接线算比较简单的,程序也不麻烦。不过这东西是颗粒物传感器吧,不是神马PM2.5(总悬浮颗粒物),不是神马PM10(可吸入颗粒物)。插个螺丝刀进去度数也是变的,不是说的很清楚原理是反光嘛…………这个在弄的时候也狠狠的参照了官方文档:

一、连线:

蓝V-LED:过150Ω电阻接5V

绿LED-GND:接GND

白LED:接一个用于你输出周期信号的PIN(不是用PWM),我接的是3

黄S-GND:接GND

黑VO:接一个模拟输入PIN,我接的A0

红:VCC:接5V

在5V和GND之间接一个220μF的电容。

二、程序:

1、输出周期信号:

官方文档上说,这个东西需要的信号是10±1ms周期内0.32±0.02ms高电平。所以,可以知道,最少需要9毫秒(9000-320),而剩下的2毫秒我们假定各种write,delay函数以及其他计算函数在2毫秒内可以完成。所以,第一次延时为320,第二次为8680。

int ParticulateWork() {
digitalWrite(ledPower, HIGH);
delayMicroseconds();
digitalWrite(ledPower, LOW);
delayMicroseconds();
return analogRead(dustPin);
}

2、读取和计算:

double ParticulateTest(int testcount) {

    double result = 0.0;
for (int i = ; i < testcount; i++) {
result += ParticulateWork();
}
//取平均值并映射为电压。
result = result * VoMax / testcount / ;
//if (result <= CalibrationVoltage) {
// return 0.0;
//}else{
// //将平均电压带入公式:(CalibrationVoltage为无尘电压,RatioK为系数。)
// result = (result - CalibrationVoltage) * 10.0 * RatioK * 1000;
// return result;
//}
return result;
}

先不要关注注释掉的部分,也不要关注公式是怎么来的——先来校准一下你的传感器,没有专业设备来校准这十几块的东西时,我是这样做的:

堵住两侧的孔洞,调节传感器孔洞右下角的电位器,观察上面函数的输出值(注意格式化输出位数:Serial.println(ParticulateTest(10),6);),反正我是没调节到0,调节到某一个范围时,输出值比较稳定了,此时,记录输出中的最小值,把这个值作为无尘电压。当然,这个值不是准确值,我也无法得到准确值,所以后面函数中还做了比较。

现在,关注一下注释掉的部分,这公式就是一个颗粒物浓度和电压的一次函数。我用VS写代码,所以选定它们之后,按下CTRL+K、CTRL+U取消注释,现在再次运行代码,你将得到当前空气中颗粒物浓度(微克每立方米),然后点上一颗烟,朝着检测孔吹一下,(不管你笑没笑,反正我是这么干的),输出数值接近250,对你没看错就是二百五……不管你笑没笑,若按照现行标准,151-200μg/m3已经是重度污染,大于250就是严重污染。所以,我认为这个公式还是有一定的准确度的。

最后,解释一下这个公式,它是我从官方文档上扒下来的,这样说是不是像很有理有据了?那么我来解释一下这个道理:首先计算电压偏移,然后*10,我不知道为啥文档上这么写的……然后*K,我也不知道为啥是0.5,文档上也是这么写的,只有最后一个1000我知道,因为测量单位是毫克每立方米把它换算成微克每立方米就要*1000。所以呢?道理解释完了,很有道理吧。其实,总体来说,10也好K也好都是一个系数,讲道理应该是根据电路计算得来的,用来放大结果到符合客观事实的。但无论如何,我觉得它符合我的要求,知道一口二手烟过来已经重度污染了这就可以了。下面是我的参数:

double CalibrationVoltage = 0.003;         //注释掉换算部分实测得出的
double RatioK = 0.5; //官方文档上扒下来的
double VoMax = 1.5; //官方文档上扒下来的,实测1.47

好了,又可以愉快的玩耍一个新玩具了……

智能家居入门DIY——【三、GP2Y10之颗粒物传感器】的更多相关文章

  1. 智能家居入门DIY——【一、ESP8266之软串口HTTP请求】

    前段时间做了一个激光雕刻,玩的不亦乐乎.对Arduino大感兴趣,于是又入手一块20大洋版,配上买学习套件时的诸多零件——红外发射管.一体化红外接收头.DHT11温湿度传感器.ESP8266等,以及某 ...

  2. 智能家居入门DIY——【四、组合】

    前面几篇介绍了一些传感器和代码,这篇介绍一下把它们组合起来.之所以单独列出这部分,原因在于组合更多功能的时候发现使用软串口库驱动ESP8266时由于内存过小导致发送失败甚至整个系统无法工作的情况.所以 ...

  3. 智能家居入门DIY——【六、使用OneNet后台处理数据】

    OneNet使用起来要比lewei50复杂一些,它没有前台需要自己开发.命令下发也和之前介绍的lewei50有一些区别,这里着重介绍一下使用MQTT协议来进行通讯. 一.准备 1.Esp8266开发板 ...

  4. 智能家居入门DIY——【七、添加一个LCD12864吧】

    今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...

  5. 智能家居入门DIY——【五、执行命令】

    前面几篇介绍了ESP8266使用AT命令来连接WIFI实现一系列功能.这一篇介绍一下使用Wemos D1 Wifi来进行开发,当然也可以用常见的8针ESP8266来完成(只是需要按网上的方法将Ardu ...

  6. 智能家居入门DIY——【二、LD3320之语音识别】

    前一篇说了一下只有RX,TX,VCC,GND的WIFI模块软串口通讯:在实现了远程观察数据,类似的就可以实现远程控制.接下来说一下近距离控制,很多情况下应用语音识别技术无疑比掏出手机操作要更人性化一些 ...

  7. DIY智能家居——零基础入门篇

    概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...

  8. 智能家居DIY

    近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...

  9. 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)

    入门智能家居,从 IFTTT 到 HomeKit 自动化(二)   目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...

随机推荐

  1. Tomcat 发布项目 conf/Catalina/localhost 配置 及数据源配置

    本文介绍通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目.因为这样对 tomcat 的入侵性最小,只需要新增一个配置文件,不需要修改原有配置:而且支持动 ...

  2. Installing VirtualBox DKMS in Kali 2.0

    Kali linux is one of the mainly used operating system by the Ethical hackers and information securit ...

  3. 存储结构简明分析——DAS、NAS和SAN

    存储的总体分类     主流存储结构   网络存储结构大致分为三种:直连式存储(DAS:Direct Attached Storage).存储区域网络(SAN:Storage Area Network ...

  4. luogu P1192 台阶问题

    https://www.luogu.org/problem/show?pid=1192 登楼梯 肯定能想到  dp[i] = dp[i-1] + dp[i-2] + ...+ dp[i-k] 然后想到 ...

  5. root权限和sudo得到权限的区别

    参考: 知乎 命令前加sudo执行和用真正的root用户执行有什么区别?pansz的回答 root用户和sudo使用root权限的区别 变换用户身份为root的方法su 与 sudo root权限和s ...

  6. [转] sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...

  7. QT 正则表达式无效

    背景:写了一个判断IP地址合法的正则表达式,并让它应用在输入框中 代码如下 QRegExp rx_ip("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}( ...

  8. codeforces 256 div2 C. Painting Fence 分治

    C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard in ...

  9. shell 变量赋值运算

    .变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s - ...

  10. UVALive-3126 Taxi Cab Scheme (DAG的最小路径覆盖)

    题目大意:要给n个人安排车,已知每个人的出发时间和起点与终点,问最少需要安排几辆车才能完成任务. 题目分析:最小路径覆盖.如果送完a到目的地后能在b出发之前赶来接b,那么连一条有向边a->b,最 ...