智能家居入门DIY——【三、GP2Y10之颗粒物传感器】
这个传感器接线算比较简单的,程序也不麻烦。不过这东西是颗粒物传感器吧,不是神马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之颗粒物传感器】的更多相关文章
- 智能家居入门DIY——【一、ESP8266之软串口HTTP请求】
前段时间做了一个激光雕刻,玩的不亦乐乎.对Arduino大感兴趣,于是又入手一块20大洋版,配上买学习套件时的诸多零件——红外发射管.一体化红外接收头.DHT11温湿度传感器.ESP8266等,以及某 ...
- 智能家居入门DIY——【四、组合】
前面几篇介绍了一些传感器和代码,这篇介绍一下把它们组合起来.之所以单独列出这部分,原因在于组合更多功能的时候发现使用软串口库驱动ESP8266时由于内存过小导致发送失败甚至整个系统无法工作的情况.所以 ...
- 智能家居入门DIY——【六、使用OneNet后台处理数据】
OneNet使用起来要比lewei50复杂一些,它没有前台需要自己开发.命令下发也和之前介绍的lewei50有一些区别,这里着重介绍一下使用MQTT协议来进行通讯. 一.准备 1.Esp8266开发板 ...
- 智能家居入门DIY——【七、添加一个LCD12864吧】
今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...
- 智能家居入门DIY——【五、执行命令】
前面几篇介绍了ESP8266使用AT命令来连接WIFI实现一系列功能.这一篇介绍一下使用Wemos D1 Wifi来进行开发,当然也可以用常见的8针ESP8266来完成(只是需要按网上的方法将Ardu ...
- 智能家居入门DIY——【二、LD3320之语音识别】
前一篇说了一下只有RX,TX,VCC,GND的WIFI模块软串口通讯:在实现了远程观察数据,类似的就可以实现远程控制.接下来说一下近距离控制,很多情况下应用语音识别技术无疑比掏出手机操作要更人性化一些 ...
- DIY智能家居——零基础入门篇
概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...
- 智能家居DIY
近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...
- 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)
入门智能家居,从 IFTTT 到 HomeKit 自动化(二) 目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...
随机推荐
- kernel: swapper: page allocation failure. order:1, mode:0x20
场景:领导电话通知,我们的主站宕机了,到家后从另外一台机器上ssh一直处于等待状态,开始怀疑机器的负载比较高,后查看监控机器,发现网卡.cpu.nginx连接数.....通通都没有数据了,显然不是负载 ...
- HDU 6425 Rikka with Badminton(组合问题签到)题解
题意:问你有多少种选法使得不能满足大于等于2个拍子且大于等于1个球. 思路:数学组合问题,分类讨论一下,刚开始的时候分的很乱,写的乱七八糟的...还有注意MOD,基本上有大数相乘的地方都要先MOD一下 ...
- NOIP 2018 兔纸旅游记
今年是第一次参加tg呢... Day0 早上出发去中旅坐大巴,走有 lz 特色的OI比赛道路. 车上谈笑风生,看 jw 的 GDOI 的小本本. 到动车站取票入站,看 lmh 和 zn 的爱恨情 ...
- Mininet实验 自定义拓扑结构
参考:MiniNet实验2 通过Mininet学习可视化操作,可以在界面上方便的构建拓扑结构. 最新的Mininet 2.2.0内置了一个mininet可视化工具miniedit.miniedit在/ ...
- 16s workfollw
http://bioconductor.org/packages/devel/bioc/vignettes/metagenomeFeatures/inst/doc/Example_16S_Annota ...
- hdu 4549 M斐波那契数列 矩阵快速幂+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Problem ...
- 创建 shiny 应用程序
R 本身是一个优秀的数据分析和数据可视化平台.然而,我们通常不会将 R 和分析脚本提供给客户,让客户自己运行.数据分析的结果不仅可以在 HTML 网页.PDF 文档或 Word 文档中显示,还可以呈现 ...
- Redis高级命令操作大全--推荐
redis安装和使用 redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz cd ...
- Java网络编程和NIO详解6:Linux epoll实现原理详解
Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...
- C++常考面试题
1 new/delete 与 malloc/free的区别 运算符是语言自身的特性,有固定的语义,编译器知道意味着什么,由编译器解释语义,生成相应的代码. 库函数是依赖于库的,一定程度上独立于语言的. ...