微信号:ikanxue

介绍:致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号.

初玩树莓派B人体红外感应报警(六)

2016-09-28 17:40 IamHuskar

前面的LED灯我们操作使用的GPIO的输出功能,这次我们终于需要用到GPIO的输入功能了。由于这个人体红外感应模块的使用比较简单。所以我们实验完毕以后配合前面的蜂鸣器一起,做一个简单的人体感应报警器。

1、HC-SR501 感应模块简介

我们采用 HC-SR501型号的人体红外感应器来探测人体。更加详细的参数参考模块的使用说明书。










对照前面的参数以及电路图,找到下面的左右针脚正负极,中间的PIN为感应输出,感应到人体时,输出3.3V高电平,检测不到信号时输出0。同时还要求工作电压在4.5V-20V之间。恰好树莓派的P1编号中第2,4号PIN都是5V的电压,满足要求,所以这次我们要接5V的电压。
 

参数调节旋钮是用来扭动控制一些参数的。比如探测的延时时间,灵敏度等等。具体可以参看 HC -SR501的说明书。这里我们都使用默认值。

但是有一个关键的L H模式调节阀门要介绍一下,右上角有三个针脚,按照我实物照片,假定从上到下为123 。还有一个黄色的套接头,图中套接头接通了2 3号,代表了H模式,这个套接头是可以拔下来的,然后插到上面来,接通1 2号,代表了L模式。


L模式是不可重复触发,当探测到一次人体时,输出一次高电平,保持一段时间恢复低电平,在此期间如果还是检测到了人体也不再延长这个高电平的时间。等到低电平的封锁时间(前面默认是2.5S)过了以后才又开始检测。


H模式是可以重复触发,如果一直感应到人体时,会一直输出高电平,直到探测不到人体后保持小段时间然后恢复低电平。

2、GPIO输入的上拉和下拉

对于学习软件的人来说,软件的世界只有0和1,所以我接触硬件之前也是这么认为的。所以我在使用人体红外感应的时候遇到了一个问题,我认为只要设置GPIO的模式为INPUT,后面只需要读取针脚的状态0,1就行了。结果我遇到一个问题。当我在设置比如pin22(wiringpi标号为6)为INPUT模式,接上一根线后,这一条线另一端什么都不接,按理说这时应该输入为0V,但是我尝试读取发现并不是一直保持低电平,而是一会儿高,一会低,用手握住另外一端就会输出高电平。当我接pin3(wiringPi 标号为8)却始终是高电平。不得不查询各种资料,发现还有上拉和下拉这种说法。


当我们给一个针脚接入GND,那么就是低电平,如果我们给一个针脚3.3V,那么就是高电平,状态是很确定的。如果我们什么都不接,那么这个针脚处于悬浮状态,很容易受到外接的干扰,可能是高也可能是低,也可能是处于高和低之间的状态。这时候我们就要明确指定这个针脚应该处于高或者低,不能让他处于悬浮状态。接入一个上拉电阻能够让这个针脚处于明确的高电平状态,接入一个下拉电阻能够让他处于明确的低电平状态。前面我们用作输出的时候都是明确给定了输出的高低状态。关于上拉电阻和下拉电阻,有一篇英文解释写的很不错,我也是参考这篇来看的,里面的测试大家也可以用树莓派测试一下。(http://www.bit-101.com/blog/?p=3813)。


PIN3始终处于高电平状态是因为。这个PIN口是用于树莓派I2C设备的,内部外接了一个物理的上拉电阻。所以他的状态一直是高电平,作为INPUT不能使用这个PIN。

 PIN22 时高时低就是由于处于悬浮状态。所以我们要使用这个PIN就比如为他明确指定悬浮的时候是高还是低。wiringpi通过pullUpDnControl来控制这个变量。

3、接线以及测试

模块左边的针脚1接P1编号的PIN2 为5V的正极,模块右边的针脚3的负极接PIN6,模块中间的针脚2输出线接PIN22(wiringPi就是标号6)。

接线图如下:

图中我连蜂鸣器也接上去了。当我们检测到人体的时候。使用前一节的beep函数发出警告声音。


我们先初步检测一下模块有没有工作正常。测试HC-SR501不同的模式。

选择的H模式,套接头接下面两个脚。也就是可以重复触发,检测到人体,一直处于高电平。



可以看出中间是连续的检测,也就是高电平的时间随着人的活动延长了。


如果选择的L模式,套接头接上面两个脚。也就是不可以重复触发,检测到人体,输出高电平一段时间,后续一小段时间内检测到也不再延长这个高电平时间,必须等到锁定时间过了才会再次检测。



可以看出中间高电平的时间不是持续的。

检测的代码很简单:


我们稍微修改一下。在检测到人体的时候使用第五节的beep函数执行报警的操作,这里我们选择使用H模式,持续感应,感应到以后使用beep发声。这样就简单实现了人体感应后自动报警。


 
看雪学院 更多文章 揭开0day神秘的面纱 初玩树莓派B控制蜂鸣器演奏乐曲(五) 防止软件被暴力破解 Android Linux内核编译调试 漏洞挖掘方法之静态扫描+经典栈溢出实例
猜您喜欢 Rails: 搞懂多态(Polymorphic)关联关系 Android探索之旅 | Android Studio 2.1 浅谈C++物理设计:代码规范 在武汉,谁比我强? 一期班创平均薪资7471元! 阿里巴巴技术论坛邀你共享技术盛宴