初玩树莓派 B 6人体红外感应报警 bbs.pediy.com 前面的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,那么就是高电平,状态是很确定的。如果我们什么都不接,那么这个针脚处于悬浮状态,很容易受到外接的干扰,可能是高也可能是低,也可能是处于高和低之间的状态。这时候我们就要明确指定这个针脚应该处于高或者低,不能让他处于悬浮状态。接入一个上拉电阻能够让这个针脚处于明确的高电平状态,接入一个下拉电阻能够让他处于明确的低电平状态。前面我们用作输出的时候都是明确给定了输出的高低状态。关于上拉电阻和下拉电阻,有一篇英文解释写的很不错,我也是参考这篇来看的,里面的测试大家也可以用树莓派测试一下。(faaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3u0A6N6q4)9J5k6o6p5H3x3g2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6Q4x3@1k6H3i4K6y4p5x3K6R3I4x3#2!0q4c8W2!0n7b7#2)9^5z5g2!0q4x3#2)9^5x3q4)9^5x3R3`.`. 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模式,套接头接上面两个脚。也就是不可以重复触发,检测到人体,输出高电平一段时间,后续一小段时间内检测到也不再延长这个高电平时间,必须等到锁定时间过了才会再次检测。 可以看出中间高电平的时间不是持续的。 检测的代码很简单:
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!