原标题:软妹子的毕业设计:用Python制作防盗门系统!

源 /PythonerCN文 /木易小光

背景

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

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

硬件准备:

树莓派

人体红外感应模块

火焰传感器

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分钟,所以即使有事我也能跑回来。这样想想,我都不用去治病了(雾)。

-END-

转载声明:本文选自「PythonerCN」,搜索「pyercn」即可关注。

世界正在奖励坚持学习的人!返回搜狐,查看更多

责任编辑:

python做毕业设计选题_软妹子的毕业设计:用Python制作防盗门系统!相关推荐

  1. 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育

    原标题:用python做个自我介绍(python入门教程)_逻辑教育 本文涉及的python基础语法为:数据类型等 数字类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里 ...

  2. python网络安全论文题目_全新计算机专业毕业设计选题(毕业论文题目)

    计算机专业有很多开发语言,每个专业所学的知识点都是不一样的, 计算机的专业也分本科,专科,自考,电大,成人,硕士等 计算机专业包含了很多编程语言,比如有http://vb.net,asp,http:/ ...

  3. python做数学计算器_从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  4. 为什么不用python做大数据_光环大数据告诉你为什么说:人生苦短,我用Python

    首先我们要说明的是本文不扯什么大道理,只是先介绍Python的背景,然后从实用的角度出发举一两个真实栗子. 首先要想了解要一门语言的好坏,或者为什么招程序员喜欢(卧槽,原来程序员喜欢不是女朋友?)我们 ...

  5. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  6. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  7. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

    原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...

  8. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

    原标题:技术图文:如何利用 Python 做一个简单的定时器类? 背景 今天在B站上看有关 Python 最火的一个教学视频 -- "零基础入门学习 Python",这也是我们 P ...

  9. python做地图导航_「Python」利用高德地图做你想做之事

    玩grasshopper基本上都知道OpenStreetMap 这个地图网站,毕竟有一个好用的地图插件,可以在Rhino中绘制出所需,但是一个不好的地方就在于国内的数据量太少,无法满足我们的需求. 此 ...

最新文章

  1. 2021年2月程序员工资统计,又拖后腿了……
  2. 友盟-统计不到线上应用数据的坑
  3. mysql转换double_MySQL 字符串转in/double类型——CAST/CONVERT函数的用法
  4. uiiamgeview 设置圆角
  5. oracle for dotnet
  6. 高职学生如何成为编程高手
  7. 【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)
  8. ecshop 前台个人中心修改侧边栏 和 侧边栏显示不全 或 导航现实不全
  9. python requests返回值为200 但是text无内容_接口测试入门神器 - Requests
  10. turtle模块还能这样玩?(一条条金龙鱼、雨景)
  11. 谈谈python enumerate()函数的用法_python enumerate函数的使用方法总结
  12. MATLAB六自由度机械臂正逆运动
  13. 【git】git的删除命令与如何删除仓库文件的方法
  14. Android系统定位获取经纬度
  15. XCTF mobile新手区解题记录(WP)以及一些总结和思考
  16. 若依微服务版部署到IDEA(超详细,小白看了也能会)
  17. 掌阅Android App插件补丁实践(ZeusPlugin)
  18. 【转自Oracle官方博客】一个ASMCA无法识别磁盘设备的问题
  19. 【连载】物联网全栈教程-从云端到设备(十二)---最简单的单片机上云方法!...
  20. 积目在网络诈骗类黑产对抗的防控与思考

热门文章

  1. 数据结构与算法之前缀数
  2. 腾讯GaiaStack容器平台负责人罗韩梅:All on GaiaStack
  3. 关于centos docker版本过低导致 is not a valid repository/tag: invalid reference format
  4. Tcpdump(linux)下载、安装、使用说明
  5. 发布新的个人博客地址和微信公众号
  6. TensorFlow文件操作
  7. 请求的链式处理——职责链模式
  8. Scala _11SparkWordCountscala语言java语言
  9. leetcode 390. Elimination Game | 390. 消除游戏(Java)
  10. Squash my last X commits together using Git | Git 如何合并历史提交记录?