logo头像

学如逆水行舟

一起玩转树莓派(6)——倾斜传感器与震动传感器实践

一起玩转树莓派(6)——倾斜传感器与震动传感器实践

通过本系列博客的前几篇文章,我们已经掌握了树莓派应用开发的基本方法。很多时候,树莓派可以做什么更多的取决于我们的创造力。本篇博客,我们将通过实践来学习在树莓派开发中常用的两个开关元件:倾斜传感器与震动传感器。

倾斜传感器和震动传感器都是一种开关元件,其可以通过外界的物理变化来改变状态。在生活中的很多报警系统中都有应用。试想一下,如果我们使用到的某个设备需要避免倾斜和震动,就可以使用这两种传感器做报警电路。

一、传感器工作原理

本次实验本身的逻辑代码没有什么难度,所需要使用到的知识都是之前有涉及过的。在开始编写代码和进行实验之前,我们先来了解下倾斜传感器与震动传感器的工作原理。

1.倾斜传感器

倾斜传感器又称为倾斜开关,其可以对元件相对与重力方向的倾角做出感应。早期的倾斜传感器多采用贡倾斜传感器,其管体内部使用汞作为导电介质,当有倾斜发生时,金属汞会流动到管体末端,从而接通电路。汞倾斜传感器的优点是耐用寿命长,但其对环境有害,目前已经很少使用。

当下比较流行的是球形倾斜传感器,这种传感器设计简单,管体内放入金属球,当发生倾斜时,金属球滚动接通电路。本次实验,我们采用SW520D型号的倾斜传感器,如下图所示:

其头部的管体就是倾斜开关,其搭载的功能板子分解如下:

此传感器有3个引脚,其中VCC需要接3.3-5V的电压,中间引脚接地,DO引脚是信号输出引脚,我们通过其进行倾斜感应。如上图所示,此传感器自带电源和开关两个LED灯,接通电源后,电源LED灯发光,当传感器触发倾斜时,开关LED灯发光。对于DO引脚,当开关LED发光时,其输出低电平,表示开关打开,当开关LED灯不亮时,其输出高电平,表示开关断开。用其我们可以很方便的实现倾斜断电保护功能。如上图中,此传感器还提供了一个灵敏度的电位调节单元,其工作原理电路图如下所示:

2.震动传感器

震动传感器与倾斜传感器的工作原理基本一致,不同的地方只在于开关的触发方式,震动传感器感应外界的震动从而触发电路的导通。常用的震动开关有滚珠式和弹簧式两种,以弹簧式为例,当发生震动时,弹簧与电极接触,从而导通电路,本次实验我们使用的震动传感器如下图所示:

可以看到,其搭载的功能板与上面介绍的倾斜传感器完全一致,这里我们就不再赘述。

二、开始试验

1.动手连线

对于本次实验,我们将倾斜传感器与震动传感器作为模拟警告开关来使用,当设备发生震动或倾斜时,通过输出Log信息来做提示。首先我们先确认要使用到的GPIO引脚,对于电源和负极直接连接即可,我们暂定使用BCM编号为GPIO5和GPIO6的两个引脚,其对应的物理引脚分别为29和31。物理29引脚我们接震动传感器的信号引脚,物理31引脚我们接倾斜传感器的信号引脚。笔者这里使用扩展板连线如下图所示。如果不使用扩展板,直接连接物理引脚即可。

温馨提示:可以通过线的颜色参考示意图中的连线。

2.编写代码

我们使用GPIO引脚的INPUT功能来监听传感器的状态,示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#coding:utf-8

# 导入GPIO控制薄块
import RPi.GPIO as GPIO
# 设置使用的引脚编码模式
GPIO.setmode(GPIO.BOARD)
# 定义震动开关引脚 BCM5
swi_shake = 29
# 定义倾斜开关引脚 BCM6
swi_slop = 31

# 进行开关引脚的初始化,设置为输入引脚,且默认为高电平
GPIO.setup(swi_shake, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(swi_slop, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 定义状态变化的回调函数
def switch_shake(channel):
# 低电平为开关打开状态
if not GPIO.input(channel):
print("注意,发生了震动!")

def switch_slop(channel):
# 低电平为开关打开状态
if not GPIO.input(channel):
print("注意,发生了倾斜!")

# 添加输入引脚电平变化的回调函数
GPIO.add_event_detect(swi_shake, GPIO.FALLING, callback=switch_shake, bouncetime=200)
GPIO.add_event_detect(swi_slop, GPIO.FALLING, callback=switch_slop, bouncetime=200)

while True:
pass

上面的代码比较简单,运行上面代码,通过触发传感器的震动与倾斜,可以观察程序的打印输出信息,同时传感器上的开关指示灯也可以提示传感器的接通状态。

三、休息一下

本次实验非常简单,但是我们可以发挥创造力,通过这两个传感器做出一些有意思的东西,尽情想象吧!

专注技术,懂的热爱,愿意分享,做个朋友

QQ:316045346