爱板网论坛

查看: 202|回复: 0

[资料] 爱玩板卡+基于orangepi zero的室内空气质量(PM2.5,甲醛)监测系统

[复制链接]

25

主题

0

好友

737

积分

举人

Rank: 4

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-6-30 00:12:03 |显示全部楼层
    前面想用opi zero做航模的图传和遥控接收,但是太重了(26g),另外电流也很大idle时都有150ma,试了下wifi的响应时间太慢,控制不好怕出事,年末将至也没有那么多时间去折腾了。但是一直以来了想能实时监测室内空气质量。感谢elecfans提供给我这么一个机会,zerowifi,这样可以在室内移动串口和gpio数量也比较合适。
    用的PM2.5传感器是很早以前买的夏普的灰尘传感器GP2Y1010AU0F自己用stm8f103处理数据然后用串口发送,甲醛和voc传感器用的是淘宝上的10多元的传感器,也是串口发送数据。因为没有查到opi zero的ADC怎么用,好像GPIO也没有标出有ADC,但是zero除了调试uart外还有两个uart,所以决定直接用uart来读取数据,然后发送到家用的nas上去。还有一块USART的显示屏,因为甲醛和PM2.5的传感器只是用串口的发送数据,不接收数据,串口的显示屏只需接收显示数据,所以尽管3个串口设备,串口还是够用的。连好线。甲醛传感器接在串口2上,Pm2.5传感器串口的显示屏接在串口1(分别用刀串口1RX,TX)。还是用python,因为代码量少,实时性要求不高。
    考虑到传感器的寿命,不一直测量,而是30分钟测量一次,但是为了有时可以手动实时测量,需要有个按键,一旦按下,立刻测量,所以在主程序里面,一直读取PA10的电位,一旦PA10是高电位,就立刻读取数据(用gpio控制mos管立刻给传感器通电因为放假没发作板子),测量时zero的status led发光,测量完了后status led熄灭。
    主程序
    def control():
            button=port.PA10
            status_led=port.STATUS_LED
            start_status=False
            gpio.init()
            gpio.setcfg(status_led, gpio.OUTPUT)
            gpio.setcfg(button, gpio.INPUT)          #配置button gpio为输入
            gpio.pullup(button, gpio.PULLDOWN)  #配置下拉电阻,如果想一直测量配置上拉电阻PULLUP。
            gpio.output(status_led,0)                                #初始化status led熄灭
            max_sleep_time=1800  #max halt time 30min 测量30min一次
            sleep_time=0
            while True:
                    state = gpio.input(button)
                    print "start_status:",start_status
                    print "button status:",state
                    if state:  #如果手动按下按钮 那么应该要立刻的量
                            if not start_status:  #如果没有测量,那么立刻测量,如果在测量,那不操作
                                    start_status=True  
                                    gpio.output(status_led,1)
                                    Run()   #运行测量函数,每个传感器测量时读取10组数据。取平均值
                                    start_status=False
                                    gpio.output(status_led,0)
                    sleep(2)
                    sleep_time+=2
                    if sleep_time>max_sleep_time:#30分钟测量一次。数据发送到NAS
                            state=1
                            sleep_time=0
    Run()函数里面开了两个线程读取传感器数据,读取的数据通过全局变量传递回来。测量的时候读取10组有效数据,取平均值,然后用通过网络发送家用NAS上面去,并且同时在串口屏幕上显示。在NAS上的UDP 服务端程序接收到数据后判断数据类型,把接收数据时间和数据存入相应文件。查看NAS上接受的数据采用BS模式,网页每两秒自动刷新一次。


    两个传感器特写
    下面是连接图片,连线比较乱。图片里面zero比较拗小,在屏幕和传感器之间。
    测量的结果,今天本地天气比较好气象局的是在50,自己测的室外是在71。
    nas记录的数据。甲醛的数据有误差,因为传感器对有机物也敏感,这个数据还算是正常的。PM2.5数据和甲醛数据比较小的数据是在家里新风口测得的。

    转载自网络,版权归原作所有。
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /2 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-11-23 17:00 , Processed in 0.357576 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部