版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《传感器应用》主讲教师:XXX
项目十三智能保险箱PART13※智能保险箱接近报警功能※智能保险箱密码开锁功能13※实现智能保险箱功能项目概述贵重物品的安全,是人身财产安全的重要一环。随着科技水平的提高,各种盗取财物的手段不断升级。因此,人们对安全稳定性好、操作便捷的智能保险柜的需求也在不断提高。某公司要设计一个智能保险箱,要求保险箱具有有人接近时报警功能、使用数字式转盘作为解锁方式,语言播报产品作为特色。小林是公司的产品研发工程师需要将其设计出来,使用树莓派开发套件编写程序调试实现上述功能,便于后续产品的研发。掌握编写智能保险箱接近报警功能方法01掌握编写智能保险箱密码开锁功能方法02学习目标objective技能目标objective掌握编写智能保险箱功能方法01掌握实现编写综合程序方法02TASKTHREE任务三实现智能保险箱功能4任务概述储备知识任务实施任务目标231本次任务:在学习掌握编写智能保险箱接近报警功能与智能保险箱密码开锁功能后,将其整合在一起实现完整的智能保险箱功能,并在代码中添加异常处理、线程语句让代码更完善。任务概述4任务概述储备知识任务实施任务目标231TASKTHREE任务三实现智能保险箱功能01.掌握异常处理语句的使用02.掌握线程的使用方法任务目标03.掌握综合程序的编写方法4任务概述储备知识任务实施任务目标231TASKTHREE任务三实现智能保险箱功能01.认识异常处理语句try…except语句储备知识02.认识线程01.认识异常处理语句try…except语句1.1.什么是异常异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。(一个事件)异常在Python无法正常处理程序时就会发生一个异常,异常是Python对象,表示一个错误,当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。一般情况下1.2.异常处理try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。捕捉异常可以使用try语句可以使用except语句如果你不想在异常发生时结束你的程序,只需在try里捕获它。1.3.语法02.认识线程2.1.为什么使用线程在获取一个数据时会卡在一个循环当中无法再获取另外一个数据,这时就需要将两个循环进行分离同时执行,就需要使用线程这个方法。在python程序的编写中有时需要在同一时间内做很多事情,如获取当前超声波的数据旋转编码器是否被转动这两件事情都需要两个while循环来实时获取。2.2.什么是线程是操作系统能够进行运算调度的最小单位。线程(英语:thread)它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流。一个进程中可以并发多个线程。每条线程并行执行不同的任务。在UnixSystemV及SunOS中被称为轻量进程(lightweightprocesses)轻量进程更多指内核线程(kernelthread),而把用户线程(userthread)称为线程。一个进程可以有很多线程。每条线程并行执行不同的任务。2.3.Python中线程的使用(1)首先需要引用类库Threading与其他使用到的类库,代码如下所示。import
threadingimporttime(2)声明一个线程事件的触发函数,代码如下所示。def
action():
whileTrue:
print("hello")
time.sleep(1)代码详解代码中的线程事件主要负责打印出hello在终端中并且不断的每秒循环打印。代码详解代码中target=action其中action为要启动线程事件的函数名称,args为启动函数时是否添加参数,本次案例未添加参数。当声明完成后即可启动线程函数job1.start(),启动成功后在终端中即每秒打印hello。#声明线程job1=threading.Thread(target=action,args=())#启动线程job1.start()(3)在主程序中声明并启动线程事件,代码如下所示。技能拓展(1)编写代码声明两个线程事件,连接三色灯模块,两个线程中一个线程为让红色灯不断闪烁1秒一次,另外一个线程绿色灯以每秒2秒闪烁一次。(2)编写代码将任务一中的接近报警功能封装至线程中,使之正常运行。4任务概述储备知识任务实施任务目标231TASKTHREE任务三实现智能保险箱功能03.Python程序实现智能保险箱任务实施03.Python程序实现旋转编码器任务所需软件如下所示:环境准备任务所需硬件如下所示:Python3PyCharm树莓派4B旋转编码器LCD1602模块三色灯模块超声波模块3.1.根据引脚说明和连线图连接设备步骤1:根据连线图连接线路(1)设备对应接口如下表说明树莓派T型转接板旋转编码器-G21SCL-G22DT-G23SW5V5VVCCGNDGNDGND树莓派T型转接板LCD1602SDASDASDASCLSCLSCLGNDGNDGNDVCC5VVCC树莓派T型转接板超声波模块-G17Trig-G18Echo5V5VVCC(+)GNDGNDGND树莓派T型转接板三色灯模块GNDGNDGND-G26R-G27G(2)如图所示,使用杜邦线将树莓派连接面包板后的GPIO与旋转传感器、LCD1602、超声波模块、三色灯模块连接起来,由板载的5V为模块供电。图:树莓派连接模块图3.2.Python程序实现智能保险箱功能步骤1:打开“Pycharm”软件(1)开启树莓派电源->打开Pycharm软件->打开工程名称为“SmartStrongbox”,等待树莓派启动成功。(2)在工程中新建一个文件名称为main.py的文件。(1)在main.py文件中逐步添加代码,首先添加模块所使用的引用库,代码如下所示。步骤2:编写Main.py主函数代码并执行importRPi.GPIOas
GPIOimport
time#引用模块类库importsupersonicimport
ledimport
ro_encodeimport
LCD1602(2)声明对应任务一、任务二所需要的全局变量,如下所示。superconic_flag=TrueRot_flag=True#当前密码password_list=[0,0,0,0,0,0,0,0]InPwd_list=[0]globalCounter=0count=0distance_min=0.2
#有人接近的最小距离变量(3)在main.py文件中main函数中编写多个模块的初始化IO函数,代码如下所示。if__name__=="__main__":
supersonic.init()#初始化超声波模块IO
led.init()#初始化LED模块IO
ro_encode.init()#初始化旋转模块IO
LCD1602.init()#初始化LCD1602IO(4)在main.py文件中编写超声波线程事件函数,代码如下所示。def
superconic_thread():
while
superconic_flag:
#获取超声波模块数据
s=supersonic.supersonic()
if
s<distance_min:#当前超声波距离到达设置范围时
led.light(led.r_open)
led.light(led.g_close)
print("有人进入!")
else:
led.light(led.g_open)
led.light(led.r_close)
time.sleep(0.5)代码详解只是将任务一的代码进行了封装,每半秒调用一次超声波获取数据。代码与任务一的代码类似False时结束线程。当superconic_flag使用superconic_flag变量作为线程的结束变量(5)在main.py文件中编写旋转编码器线程事件函数,代码如下所示。def
Rot_thread():
#获取旋转模块数据
global
globalCounter
global
password_list
global
InPwd_listglobal
count
LCD1602.init()#初始化LCD1602IO
LCD1602.write(0,0,"InputPassword:")
while
Rot_flag:
tmp=ro_encode.Rot_Deal()#旋转编码方向位判断函数
if
tmp!=globalCounter:#判断状态值发生改变
globalCounter=tmp
InPwd_list[count]=globalCounter
LCD_DISP2=''.join(str(x)for
x
in
InPwd_list)#组合密码字符串
LCD1602.write(0,1,LCD_DISP2)
#在第二行显示world!
#确定按钮判断
if
ro_encode.Rot_SW():
InPwd_list.append(globalCounter)
LCD_DISP2=''.join(str(x)for
x
in
InPwd_list)#组合密码字符串
LCD1602.write(0,1,LCD_DISP2)
#在第二行显示world!
count=count+1
if
count==(len(password_list)-1):
if
InPwd_list==password_list:print('密码正确,已为您打开保险柜!')LCD_DISP1='PASSWORDOK'LCD1602.write(0,0,LCD_DISP1)#在第一行显示Hello
breakelse:print('密码错误,请重新输入!')
count=0globalCounter=0InPwd_list=[0]LCD1602.write(0,1,"")代码详解代码与任务二相似,需要注意的是在线程中要使用全局变量,需要在事件函数中再次声明变量,使用global关键字进行申明。global
globalCounterglobal
password_listglobal
InPwd_listglobal
count(6)在main.py文件中编写声明并启动两个线程,代码如下所示。if__name__=="__main__":……
job1=threading.Thread(target=superconic_thread,args=())
job2=threading.Thread(target=Rot_thread,args=())
job1.start()
job2.start()
while
True:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车修理和保养作业火灾预防培训
- 高处动火安全作业规范
- 煤矿主井更换主提升绳、箕斗安全技术措施培训
- 指节机职业健康安全操作规程培训
- 一般机械木工安全操作规程培训
- 2026中国铁塔江西分公司社会招聘49人易考易错模拟试题(共500题)试卷后附参考答案
- 压力容器制造的特征、常见问题及对策
- 2026中国航天科工二院25所(新型研发机构)公开招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2026中国联通江苏省分公司春季校园招聘166人易考易错模拟试题(共500题)试卷后附参考答案
- 办公汽车租赁合同范本
- 2026年工会社会工作者招聘笔试题目及答案
- 《建筑新能源应用设计规范》DB11T 1774-2026
- 4.6.4 激素调节 课件(共20张+内嵌视频3个)生物学人教版(2024)八年级上册
- 2026年秋新教材版人教版五年级上册小学数学教学计划
- 2026年中国老挝磨憨一磨丁经济合作区管委会(35人)考试备考试题及答案详解
- UL 50E 中文版 电气外壳环境防护性能标准
- 《智能信息检索与生成式AI应用》课件-项目2:学术文献检索
- 施工现场防火材料、耐火构配件、消防设备设施进场质量管理制度2026db
- 2026新教材人教版九年级上册英语:各单元话题作文指导(写作模板+满分范文)
- 2026-2030中国手机零售行业销售动态及竞争策略分析报告
- 《深度学习与神经网络》全套教学课件
评论
0/150
提交评论