自制室内空气监测记录仪 篇二:入手Arduino,开始漫漫折腾路
上一次说到了关于激光pm2.5传感器直接连电脑检测空气中pm2.5浓度的应用。虽然能测,但是在使用便捷度上并不是那么方便,不要说背着电脑出门了,就算在家里各个房间测测都要折腾一番。于是卤煮开始折腾起arduino,关于arduino这货,说实话卤煮在折腾之前是听也没听说过的,只是在搜索pm2.5激光传感器的时候时不时看到这个词,于是卤煮就好奇心大发的去搜索了一下。
以下文字来自度娘:
Arduino是源自意大利的一个开放源代码的硬件项目,该平台包括一片具备简单I/O功效的电路板以及一套整合开发环境软件。Arduino可用来开发独立运作、并具互动性的电子产品,也可以开发与PC相连的周边装置,同时能在运行时与PC上的软件进行交互。
Arduino的电路板硬件可以自行焊接组装,也可以购买已组装好的成品,而整合开发环境软件则可通过网络免费下载与使用。目前Arduino的硬件部分支持Atmel的ATmega 8与ATmega 168等微控器。 此外,Arduino方案获得2006年Prix Art Electronica电子通讯类方面的荣誉奖。 Arduino的硬件电路参考设计部分是以知识共享(Creative Commons;CC)形式提供授权。相应的原理图和电路图都可以从Arduino网站上获得。
可能只看这样的文字不是很直观,下面上张图,让大家看一下arduino的本尊。
这是最普通也是最常见的Arduino UNO(淘宝售价大约20元)版子,卤煮在这块板子上掉过多个大坑。所以在详细说明之前先提醒下,如果你和卤煮一样想接多个传感器,或者想向网络传送多种数据,那就千万不要买它!!!!千万不要买它!!!!千万不要买它!!!!
那么ARDUINO这样一块板子能做些啥呢,卤煮了解下来,有很多人用他装智能机器人,多轴飞行器的飞控,以及3D打印机等等等等,反正都是异常高大上的项目,而卤煮的什么接个感应器做个空气监测的项目,算是入门中的入门了,当然,作为从零开始的Arduino小白,能做到最后实现卤煮想要的功能,卤煮已经异常满足了。
当然,除了ARDUINO,类似开源的硬件还有很多很多,如果对性能啥的要求比较高的,就有大名鼎鼎的树莓派。卤煮就不展开了(其实是完全不懂,想说也说不出啊)。
除了UNO之外,卤煮之后选择了比他性能更为强大的MEGA2560作为多感应器和网关的主机板,选择了NANO作为户外感应器的主机板。
A(淘宝售价大约50元)
Arduino NANOArduino MEGA 2560(淘宝售价大约10元)
各型号之间的区别参加下表:
我们可以清楚的看到表中所说的使用人数最多的是UNO,但是UNO的内存只有2K,这是一个大坑,当UNO接了多个传感器之后,可用内存会变的很少,运行的时候稳定性会非常非常差,那会卤煮的UNO没有一次是运行正常的。所以卤煮后来选择了MEGA 2560,2560除了性能高之外,还有个额外好处是,几乎所有为UNO设计的扩展板,都能兼容MEGA2560,要知道UNO作为使用人数最多的ARDUINO型号,他的扩展板种类除了足够多之外,还足够便宜。
这东西看起来比较可能略显复杂,但是实际使用的时候,特别是接各类传感器的时候,却异常简单,见下图:
我们只要关心右边的0-13数字接口和左边的A0-A5接口以及所有的5v,3.3V,GND插口就行了。
好了,arduino的基本介绍就到这,大家如果想跟着卤煮自己动手的话,建议下载个网易云课堂,看里面的arduino教程,卤煮大概只看了3课就自己干上了。。。
好了,准备工作做完了,接下去就是接线工作了,接线是非常简单的工作,在这卤煮此时已经打算往上面塞一大堆感应器了,所以事先买了一块UNO用的传感器扩展板,如果你也准备和卤煮一样准备大干一番的话,这东西是用的到的,而且不贵(10元以下)。但是这块板子也有缺点,就是所有的VCC都是5V接口的,没有3.3V。卤煮装气压模块的时候按照说明在上面找到了一个3.3V引脚,但接上后气压传感器并不工作,所以后来把气压模块接在户外分机上。这是后话,这儿就先不说了。
然后按照上篇的介绍,把传感器的第一根线接在VCC 5V上,第二根接GND,第五根……第五根接哪……原谅卤煮,卤煮在买这一大堆东西之前,真的是对编程和ARDUINO一点都不懂啊,这东西商家说是数字的,那就先随便接个数字口吧,反正等会代码里面可以定义是从哪个针脚来读取数据。然后打开之前做的准备工作下载的源码。(在ARDUINO.CN上,有多位大神曾使用过此款传感器,并无私的将源码公开。再此,卤煮先要感谢下度娘来的各大论坛上的网友以及arduino.cc官方网站,没有你们,卤煮基本到这里就歇菜了)。然后连了电脑,准备把程序写进Arduino,这是卤煮遇到的第一个雷。
这儿先说一下arduino库的使用方法,库的获取途径有很多种方法,一个是刚才说的各个论坛的网友分享,还有一个就是大名鼎鼎的Github(链接) 这个网站再接下来会使用多次,但是这次并没有用到,这次用到的库是来自于arduino.cn上mc.six大神所写的,搜索关键词PTKJ。我们先把库下载下来,然后解压到Arduinolibraries目录下即可使用,一般库文件都自含示例程序,如下图一样打开(右图为示例打开后界面):
虽然卤煮不会编程,但大概看还是会看点的,于是浏览了一遍,嗯?怎么没有定义是接那个脚的,大概和读取数去有关的就一个:
while (Serial2.available())
Serial2是什么鬼,我不知道啊,先不管了,先运行下再说吧。
然后果不其然的,就出错了。
'Serial2' was not declared in this scope
大概意思是串口2在此循环里没有定义。为啥Serial2没有定义,Serial同在程序里就没问题呢,那要不这样吧,我把Serial2直接替换成Serial,这样总行了吧,然后程序成功上传,但是在串口监视器里面确实一片空白……卤煮大概知道是线接错了,于是论坛里面找啊找啊,找到一张人家的接线,发现人家是第五根线是接在端口0上,那旧照葫芦画瓢,我也接个5吧,结果接上去更惨,串口监视器都没法打开了,直接显示port busy。
看来arduino这货也不是想的这么简单,卤煮原来看到的介绍是给10多岁的孩子玩的……
于是卤煮再次请出了度娘,查找关于arduino的串口信息,结果发现,UNO只有一个硬串口(0,1)并且这个串口负责和计算机通信(瞬间回想起了云课堂里老师说的一般我们接线都接在2以后的引脚上,01负责和计算机通信)好吧,也就是UNO只有一个串口,你连着电脑就不能连其他,连了其他就不能连电脑……如果要同时连电脑和传感器呢????卤煮不死心,继续找,终于发现UNO可以模拟软串口,可以定义任何的数字引脚为软串口,好吧,那继续搞吧,这时候卤煮再次说明下,arduino自带的示例库非常之强大,很多代码可以直接打开示例直接复制黏贴了用,我们只要在示例里面找到SoftwareSerial然后打开Example就行了,摸索一下,就大概知道怎么改了,改动部分为圈出来的部分(左侧为源程序)。
大概就是文件头加载下软串口的库,然后定义下软串口使用哪两个数字接口。然后把setup和loop里面的Serial2统统替换成mySerial就成。然后上传,串口监视器返回画面:
这一刻,卤煮真的是快感动哭了啊。这里稍微说明下,源程序里写着:
/Test on Uno R3.
M3C UnoR3
TX <---> 0(Rx)/
意思是原作者在UNO R3上进行测试的,第二句不明白,第三句的意思是传感器的TX端接版子的0(RX),但是代码里的Serial2究竟是怎么出来的,卤煮就想不明白了,只能理解为原作者的小失误了。
好了,进行到这,传感器接arduino的工程就完结了。但是现在如果要读取数据,仍然是需要arduino连接电脑的,有什么办法能脱离电脑呢,卤煮决定按照自己挖坑填坑的过程说吧。
其实Arduino除了在片头说的那些应用,实际工业上最大的应用是现在非常火的“物联网”。卤煮的一个朋友原先是做智能家居的,他们初期开发产品的时候,用的解决方案就是arduino。所以自然而然的,卤煮决定把Arduino读取的数据直接上传到物联网平台,然后通过手机来读取(别问我为啥先想到的不是用手机连蓝牙读,说实话我也不知道)。国内有两大免费的物联网平台,YEELINK和乐联网(在上一篇的评论里,卤煮多次把乐联说成乐维,还望大家见谅),并且他们对arduino都提供非常好的支持,有在github上提供完整的库文件和示例程序以及论坛上有多篇教程,大家请自行搜索浏览学习。
卤煮首选的平台其实是yeelink,因为人提供手机app,app对于现代人来说,是多么重要的一件事啊(事后发现,乐联虽然没有提供单独下载的iOS APP,但是提供了WEB APP,相对起YEELINK打开速度,查看数据的方式和界面更为优秀)。但是非常无奈的,卤煮折腾了好几天也没能成功,作为一个没有恒心不懂得坚持的人,卤煮就第一时间投靠了乐联网,然后一试就成功……,下面来说说连接乐联网卤煮用到的额外硬件——W5100网络模块:
这个网络模块可以直接插在UNO上,然后再把传感器插在这个模块上。如下图组装:
因为路由器自带USB口,所以非常方便的就直接插上给ARDUINO取电了,不过怪事是每次插拔USB路由器都会自动重启下。
下面来说说乐联网程序,之前提过,乐联网非常友好的提供了能供像卤煮一样的小白直接使用的程序库和示例,你所要做的就是注册个账号,在我的设备里添加传感器,然后下载程序。关于注册账号和添加传感器,卤煮就不多说了,卤煮就直接点说,如何把乐联的程序和我们之前的程序结合起来。
这儿有个重要信息,网上流传的乐联库文件有两个,卤煮用的是这个,另一个略显复杂,看了两眼就放弃了,我们只要打开其中的示例append_send(注意,github上面打包下载的库都会有-master的后缀,拷贝到arduino文件夹后请改名)。然后再打开我们刚才成功运行的传感器示例程序,依照小图,文件头合并,SETUP合并,LOOP合并。然后上传,就大功告成了。见下图
这里说明下,截图都是卤煮之后做的,仅供说明之用,所以上图第一段里面没有软串口的定义,请大家忽略。
最后一张图
lwc->append("你的传感器名字",(float)(pmcf25));
这段就是把什么数据发送到哪,其中pmcf25就是传感器源文件里面定义的pm25值(CF=1,标准颗粒物)。至于每一个数字表示什么,见下图:
可以看到G5这个传感器能提供非常详尽的各档pm值数据(G3和G1和G5相比少了颗粒物计数,目前已经出到了G7,详见攀藤科技官网)。大致上你要传什么数据,就直接添加一句
lwc->append("你的传感器名字",(float)(数据名));
不过卤煮测试这样还是只能传第一个数据,卤煮也懒得深究什么原因,就直接复制了从 if (lwc)到delay(POST_INTERVAL);}的所有代码再添加一次。其中(float)转换一定要加,不然出错,这个也是个雷,卤煮特地请教了朋友才解决。
代码上传好了之后,就把我们的arduino+w5100接上电源和网线,打开你的网页或是手机,看看实时更新的结果吧。注意,默认代码里面 delay(POST_INTERVAL);定义的是30秒,多个传感器之间你可以把POST_INTERVAL改成自己想要的数字,1000=1秒。
卤煮第一次上传的时候用了4个数据,现在加了其他传感器,所以只保留了pm2.5和pm10,一则乐联网免费用户最多使用8个传感器,二则其实这么多也没意义,接下来卤煮会只保留pm2.5一个数据就行了。
实时链接继续放上。
好了,到目前为止,卤煮已经实现了不开电脑arduino接着网线上传数据到乐联网,然后再通过手机或电脑查看家中实时的pm空气质量数据。但是大家是不是觉得依旧不是很方便呢,毕竟这货要接着网线,要是房间没有布有线网呢,岂不是这个检测仪就不能测了么。。。
于是卤煮想了个非常简单的方法,就是买个小的无线路由器,接着arduino,间接实现arduino的无线工作。不过这样一接线就有些多,而且还需要个USB HUB给两个设备供电。所以目前已不再使用。
还有更简单的办法,就是购买arduino的时候直接购买WIDO版, 就是价格稍贵,都要180+,而且可能还需要配置WIFI的工作,卤煮没有研究,就不做评论,看大家各取所需了,至于卤煮现在的解决方案,将会再接下来的续篇中讲到。也可能是下下篇,大家可以评论让卤煮下篇是讲其他传感器还是讲其他的连接方法。
神秘岛的赛勒斯
校验提示文案
weisoft
校验提示文案
nt941
另外是买攀藤有个pm2.5+甲醛二合一传感器G5S,是这个好还是Pm2.5和甲醛分开买好呢?谢谢!
校验提示文案
muzaiyang
校验提示文案
[已注销]
校验提示文案
塞北的雪
校验提示文案
kerwin567
校验提示文案
last532
校验提示文案
zgrmjfj81
校验提示文案
kelly_fr
校验提示文案
moneyNauty
校验提示文案
eric824
校验提示文案
happyazhe
校验提示文案
wan_zhang
校验提示文案
败家家
另外本篇修改示例程序的一段,弄一个软串口没有必要啊,按照文中那么改,没有收到正确数据。然后我删了串口2,并把有串口2的位置还成串口1就成功了。
校验提示文案
catsir
校验提示文案
hehelumia
校验提示文案
lasibh
校验提示文案
值友8393964671
校验提示文案
值友6755830554
校验提示文案
值友6755830554
校验提示文案
值友4172711940
校验提示文案
姓余的小伙子
校验提示文案
灶灶
校验提示文案
值友8393964671
校验提示文案
nt941
另外是买攀藤有个pm2.5+甲醛二合一传感器G5S,是这个好还是Pm2.5和甲醛分开买好呢?谢谢!
校验提示文案
lasibh
校验提示文案
hehelumia
校验提示文案
catsir
校验提示文案
Rally8m
校验提示文案
苦逼高三党
校验提示文案
败家家
另外本篇修改示例程序的一段,弄一个软串口没有必要啊,按照文中那么改,没有收到正确数据。然后我删了串口2,并把有串口2的位置还成串口1就成功了。
校验提示文案
nanjing218
能把代码发一份给我吗。
谢谢了nanjing218#163.com
校验提示文案
TDK998
校验提示文案
wan_zhang
校验提示文案
moneyNauty
校验提示文案
happyazhe
校验提示文案
jiayongjian
校验提示文案
睡不醒1
校验提示文案
lwl5633
校验提示文案