首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

女生把Python应用到极致,制作一扇防盗门系统,惊艳全场!

背景

毕业季又要到了,而这次我加入了毕业季的大军,在外面租了房子。但是不知道为什么,每天上班我都会担心家里会不会遭小偷?有没有哪个插头没拔会不会引起火灾啊?听说这是病,只可惜我没钱治,不过好在我有树莓派。

如果你感觉学不会?莫慌,小编推荐大家加入群,

前面548中间377后面875,群里有志同道合的小伙伴,

互帮互助,还可以拿到许多视频教程!

好吧,我们要达到的目标是树莓派通过传感器判断是否有人闯入或者是否有火焰,并将数据发送到服务器,手机再从服务器获取数据。于是流程大概就是这样的:

硬件准备:

树莓派

人体红外感应模块

火焰传感器

10K电阻

面包板和杜邦线

人体红外感应模块和火焰传感器都是通过树莓派的GPIO口与树莓派连接的,我们使用11号和12号引脚。树莓派的GPIO有多种编号方式,为了防止懵逼我们这里就只说一种,看图,下面那个迷之突起就是代表它是1号引脚,别人还友好的标出了P1。

我们用12号引脚连接人体红外感应模块,11号引脚连接火焰传感器。

硬件连接很简单,人体红外感应模块虽然供电要求5V但是信号输出却是3.3V,而且电流很小,所以信号输出OUT直接连接12号引脚就行了。人体红外感应模块也就是一个热释电模块,人体辐射的红外线中心波长为9~10–um,若探头接收到人体 辐射的红外线则输出高电平。简单的说就是有人时输出高电平,没人时输出低电平。当然,这么一来弱点也很明显,第一就是容易受到其他热源的影响,第二就是 人体的红外辐射容易被遮挡,小偷如果用很奇怪的东西把自己包裹的很好,那么就无能为力了。记得小时候看科普节目,有人用一面玻璃骗过了红外感应报警器。

火焰传感器就是探测有没有火焰嘛,它自身的电阻值会随着火焰的增大而变大。那么如何采集信号呢?我们让它与10K电阻串联,初中学过串联分压,电阻值越大分得的电压也就越大。蛋似,它是输出模拟信号,而树莓派没有自带ADC,怎么办呢?当然我们可以直接买一个数字信号输出的火焰传感器模块,也可以自己买个ADC芯片,而我试了试,当火焰靠近传感器时输出电压能达到3V,也就是说满足了树莓派对高电平的定义。当然了,这样的话只有火焰足够大才能报警,但也比没人知道发生火灾的情况好。火焰传感器的连接方式如图,不过要注意的是,树莓派的GPIO电平是3.3V,所以这里的VCC也应该是3.3V,信号输出就直接连到11号引脚就好啦。

然后附上引脚的编号图,大家对照着图给人体红外传感器和火焰传感器连接上VCC和GND就好了。

比如我是1号引脚给火焰传感器供电,9号引脚作为火焰传感器的GND,11号引脚作为火焰的信号线;2号引脚给人体红外感应模块供电,6号作为人体红外感应模块的GND,12号引脚是信号线。

连接好后大概就是这样:

然后就是Python编程了,树莓派上我们当然用python,python可以很方便的操作GPIO。我们读取GPIO的电平情况然后发送到服务器就行了。

在服务器这边,我们就简单的用flask写一个api吧。

首先要给树莓派提供一个发送信息的api,为了方便我们使用GET请求的方式发送数据,参数i表示否是有人闯入,参数f表示是否有火焰。之后要给手机留一个获取信息的api,返回json格式的数据,当然为了方便我们也是使用GET请求数据。其实这种对实时性有要求的项目还是用socket比较靠谱。代码大概就是长这个样子,我承认我偷了个懒。

再之后就是安卓手机这边了,其实功能简单到我都不知道界面该怎么做,就是显示有没有人闯入和有没有火焰。当然,我们在有人闯入和有火焰时也要有报警提示才行。

安卓这边也比较简单。首先是发送GET请求从服务器获取数据。貌似现在有新的方法做GET请求了,我很久没写过安卓app了所以方法有点老旧还请大家指教。

当然不能在主线程里面直接做网络访问,我们另起一个线程,每5秒钟请求一次数据,并且通过handler与主线程通信。另外当发现有人入侵或者有火焰时,在通知栏弹出消息提示。

这个主要还是对我的心里安慰,不过现在上班的地方离住的地方走路只要10分钟,所以即使有事我也能跑回来。这样想想,我都不用去治病了(雾)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910A0YFRG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券