一起玩转树莓派(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功能来监听传感器的状态,示例代码如下:

#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

目录
相关文章
|
存储 运维 机器人
Nvidia和AMD显卡是如何制作的
Nvidia和AMD显卡是如何制作的
636 0
|
运维 Java 程序员
Spring5深入浅出篇:Spring动态代理详解
# Spring动态代理详解 本文探讨了Spring中的MethodBeforeAdvice和MethodInterceptor在动态代理中的应用和差异。MethodBeforeAdvice在方法执行前执行额外功能,而MethodInterceptor则可在方法执行前后或抛出异常时运行额外逻辑。MethodInterceptor还能影响原始方法的返回值。
|
6月前
|
PyTorch 算法框架/工具 Swift
ms swift torch 与 transformer版本问题造成的nonetype error
当使用ms swift时,需确保安装PyTorch≥2.5.0版本,否则transformer的并行策略将被设为None,导致在并行检测中出现“Nonetype not iterable”错误。
|
11月前
|
人工智能 计算机视觉 异构计算
LLaVA-Med:微软推出专为临床放射学优化和报告生成的多模态模型
LLaVA-Med是微软推出的小型多模态模型,专注于高效生成高质量的胸部X光放射学报告,支持快速临床部署。
682 7
|
人工智能 安全 测试技术
微软开源4.2B参数多模态SLM模型Phi-3-vision,魔搭社区推理、微调实战教程来啦!
在 Microsoft Build 2024 上,微软持续开源了 Phi-3 系列的新模型们。包括 Phi-3-vision,这是一种将语言和视觉功能结合在一起的多模态模型。
|
SQL 存储 JSON
MySQL 8.0新特性
MySQL 8.0新特性
1116 0
|
传感器 编解码 IDE
|
前端开发 JavaScript
axios拦截器封装:await遇上reject时catch的优雅处理方式
前端项目中使用 axios 请求接口,基于 axios 二次封装了一些业务逻辑,一般我们会在请求和响应拦截器里添加自己项目相关的业务逻辑
|
机器学习/深度学习 Python
【代数学习题4.2】从零理解范数与迹 —— 求数域元素的范数与迹
【代数学习题4.2】从零理解范数与迹 —— 求数域元素的范数与迹
294 0

热门文章

最新文章