树莓派3B多传感器:倾斜、火焰、烟雾(4) 您所在的位置:网站首页 树莓派2引脚图 树莓派3B多传感器:倾斜、火焰、烟雾(4)

树莓派3B多传感器:倾斜、火焰、烟雾(4)

2023-03-18 04:37| 来源: 网络整理| 查看: 265

1、实验原理:

检测引脚的电平变化,两种方式 一种是不断扫描获取引脚状态,根据电平状态做出响应; 二是采用边缘检测,当有上升沿和下降沿时做出响应,就相当于硬中断。其中边缘检测可设置三种情况,上升沿触发,下降沿触发,上升沿下降沿都触发; 边缘检测可在任意时刻捕捉到电平变化,而扫描获取只有在读引脚状态的一瞬间才获取引脚状态。 本文采用第二种方式,使用上升下降沿都触发。比如火焰传感器,在无火焰时,输出高电平。在检测到火焰时,电平跳变并输出低电平,树莓派检测到此引脚的下降沿,进入相应的函数做出响应比如输出危险警告;当火焰消失,电平跳变为高,树莓派做出响应消除警告。

2、准备:

IDE:thonny 硬件:倾斜传感器、火焰传感器、烟雾气体传感器。(这些都是输出0和1高低电平,所以有其他这种类型的传感器可随意替换,比如人体红外) 引脚连接:见文内代码 树莓派引脚及编号方式图在这篇博客有: https://blog.csdn.net/qq_41102371/article/details/105729297.

3、上代码 # encoding: utf-8 import RPi.GPIO as GPIO import time#pin_set GPIO.setmode(GPIO.BCM) #采用BCM编号方式 input_pin_fire=2 #火焰 input_pin_smoke=3 #烟雾 input_pin_tilt=4 #倾斜 output_pin=17 #输出引脚,可接LED#var firedata='NO FIRE' smokedata='NO SMOKE' tiltdata='NO TILT' # def init():GPIO.setup(input_pin_fire, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(input_pin_smoke, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(input_pin_tilt, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(output_pin, GPIO.OUT) GPIO.setwarnings(False)def my_callback_fire(input_pin_fire):global firedata # print('callback function fire!') # time.sleep(0.005)if GPIO.input(input_pin_fire)==1:firedata='NO FIRE'GPIO.output(output_pin, 1) #拉高引脚else:firedata='FIRE!!!!!!!!!'GPIO.output(output_pin, 0) #拉高引脚returndef my_callback_smoke(input_pin_smoke):global smokedata # print('callback function smoke!') # time.sleep(0.005)if GPIO.input(input_pin_smoke)==1:smokedata='NO SMOKE'GPIO.output(output_pin, 1) #拉高引脚else:smokedata='SMOKE!!!!!!'GPIO.output(output_pin, 0) #拉高引脚returndef my_callback_tilt(input_pin_tilt):global tiltdata # print('callback function tilt!') # time.sleep(0.005)if GPIO.input(input_pin_tilt)==1:tiltdata='NO TILT'GPIO.output(output_pin, 1) #拉高引脚else:tiltdata='TILT!!!!!!!!!'GPIO.output(output_pin, 0) #拉高引脚return #GPIO.BOTH为上升下降沿都触发 #GPIO.RISING为上升沿触发 #GPIO.FALLING为下降沿触发 GPIO.add_event_detect(input_pin_fire, GPIO.BOTH, callback=my_callback_fire) #interruput GPIO.add_event_detect(input_pin_smoke, GPIO.BOTH, callback=my_callback_smoke) #interruput GPIO.add_event_detect(input_pin_tilt, GPIO.BOTH, callback=my_callback_tilt) #interruputwhile True:print('detecting:') time.sleep(1)print('FIRESTATE:',firedata,'\nSMOKESTATE:',smokedata,'\nTLITSTATE:',tiltdata)GPIO.cleanup()

可以看到,while死循环里面只是打印状态,检测函数没放在循环里,因为有上升下降沿时,会自动执行相应函数

4、上结果

在这里插入图片描述

没了!

--------------------------------------------------------------------------------------------诺有缸的高飞鸟202004



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有