震动传感器详解

当涉及到物体的震动检测和感应时,震动模块成为一种常见且实用的工具。这种小巧而功能强大的设备可以用于各种应用,从智能家居到安防系统,再到工业自动化等领域。通过感知和转换物体震动为电信号,震动模块在许多方面都发挥着重要的作用。

本文将介绍震动模块的原理、工作方式以及其在不同领域中的应用。无论您是对电子技术感兴趣还是希望了解如何利用震动模块改进产品或系统,本文将为您提供有益的信息和见解。

1. 源码下载及前置阅读

本文首发 良许嵌入式网 :https://www.lxlinux.net/e/ ,欢迎关注!

本文所涉及的源码及安装包如下(由于平台限制,请点击以下链接阅读原文下载):

https://www.lxlinux.net/e/stm32/SW-18010P-tutorial.html

超全的嵌入式入门教程,欢迎小白。

  • 手把手教你安装和使用STM32CubeMX:【一文教你使用STM32CubeMX开发工具:https://www.lxlinux.net/e/stm32/stm32cubemx-tutorial.html】
  • 嵌入式基本功,为后续学习打下坚实的基础:【STM32串口接收不定长数据(接收中断+超时判断):https://www.lxlinux.net/e/stm32/stm32-usart-receive-data-using-rxne-time-out.html】
  • 嵌入式开发者的得力助手,强大的MDK仿真:【手把手教你使用MDK仿真调试:https://www.lxlinux.net/e/stm32/mdk-debug-tutorial.html】

往期精彩教程,有兴趣的小伙伴可以看看。

  • 让你轻松掌握温湿度传感器:【手把手教你玩转DHT11(原理+驱动):https://www.lxlinux.net/e/stm32/dht11-tutorial.html】
  • 计算机概念理清,生动形象,通俗易懂:【图解固件、驱动、软件的区别:https://www.lxlinux.net/e/stm32/firmware-driver-software.html】
  • 解析红外编解码模块的原理、功能和应用:【红外模块详解:https://www.lxlinux.net/e/stm32/infrared-sensor-tutorial.html】

2. 震动模块介绍

2.1 型号介绍

有很多种型号的震动模块,801S、SW-520D、SW-420、SW-18010P 等等,它们之间大同小异。

今天我们的主角是 SW-18010P,模块介绍如下。

接好 VCC 和 GND,电源指示灯将被点亮。

当检测到震动时,板载指示灯点亮;震动停止,板载指示灯熄灭。

用螺丝刀转动「灵敏度调节电位器」可以调节灵敏度。大家可以将电位器旋到最左或最右,然后测试往哪边旋可以提高灵敏度。

2.2 工作参数及引脚介绍

SW-18015P 为密封弹簧型、无方向性震动感应触发开关,任何角度均可触发。

正常使用情况下开关寿命可达20万次。

引脚接线图如下:

SW-18010PSTM32
VCC3.3或5V
GNDGND
DO任意 GPIO 口
AO模拟输出,无效,不接

3. SW-18015P原理

SW-18015P 在静止时为开路 OFF 状态, 当受到外力碰触而达到相应震动力时,或者移动速度达到适当离(偏)心力时,导电接脚会产生瞬间导通呈瞬间 ON 状态;当外力消失時,开关恢复为开路 OFF 状态。

所以,SW-18015P 在无震动或者震动强度达不到设定阈值时,DO 口输出高电平,当外界震动强度超过设定阈值时,模块 D0 输出低电平。

请注意这个模块在感应到小的震动时触发时间会很短,无法驱动继电器,有些的资料显示可以直接和继电器模块相连,但实际运用效果不佳。

4. 通信示意图

实现目标:我们有一个三色 LED 灯,无震动时,绿灯亮,红灯灭;当震动模块感受到震动,绿灯灭,红灯亮。

这个小案例的应用场景可以是博物馆等场所防盗,玻璃柜如果有震动,可能发生偷窃,开始报警。

5. 编程实战

5.1 硬件接线

本教程使用的硬件如下:

  • 单片机:STM32F103C8T6
  • 震动模块:SW-18010P
  • 小灯:三色 LED 灯模块
  • 烧录器:ST-LINK V2

接线如下:

SW-18010PSTM32LED
VCC5V
GNDGND
DOA4
A5R
A7G
GNDGND

烧录的时候接线如下表,如果不会烧录的话可以看我之前的文章【[STM32下载程序的五种方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html】。

ST-Link V2STM32
SWCLKSWCLK
SWDIOSWDIO
GNDGND
3.3V3V3

接好如下图:

开发板使用的是我们自绘的板子。大家也可以用自己的板子,只要是 STM32F103C8T6 主控芯片就行。

5.2 LED初始化

LED 灯的代码简简单单,只要进行一下两个灯的初始化就行。

void led_init(void)
{GPIO_InitTypeDef gpio_init_struct;LED1_GPIO_CLK_ENABLE();                                 /* LED1时钟使能 */LED3_GPIO_CLK_ENABLE();                                 /* LED3时钟使能 */gpio_init_struct.Pin = LED1_GPIO_PIN;                   /* LED1引脚 */gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct);       /* 初始化LED1引脚 */gpio_init_struct.Pin = LED3_GPIO_PIN;                   /* LED3引脚 */HAL_GPIO_Init(LED3_GPIO_PORT, &gpio_init_struct);       /* 初始化LED3引脚 */LED1(0);                                                /* 关闭 LED1 */LED3(0);                                                /* 关闭 LED3 */
}

LED 的 .h文件:

#ifndef _LED_H
#define _LED_H
#include "sys.h"/******************************************************************************************/
/* 引脚 定义 */#define LED1_GPIO_PORT                  GPIOA
#define LED1_GPIO_PIN                   GPIO_PIN_5
#define LED1_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)             /* PA口时钟使能 */#define LED3_GPIO_PORT                  GPIOA
#define LED3_GPIO_PIN                   GPIO_PIN_7
#define LED3_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)             /* PA口时钟使能 *//******************************************************************************************/
/* LED端口定义 */
#define LED1(x)   do{ x ? \HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET) : \HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET); \}while(0)#define LED3(x)   do{ x ? \HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_GPIO_PIN, GPIO_PIN_SET) : \HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_GPIO_PIN, GPIO_PIN_RESET); \}while(0)/* LED取反定义 */
#define LED1_TOGGLE()   do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0)        /* 翻转LED1 */
#define LED3_TOGGLE()   do{ HAL_GPIO_TogglePin(LED3_GPIO_PORT, LED3_GPIO_PIN); }while(0)        /* 翻转LED3 *//******************************************************************************************/
/* 外部接口函数*/
void led_init(void);                                                                            /* LED初始化 */#endif

5.3 震动模块初始化

初始化一下震动模块的 DO 引脚。

我们采用中断的方式亮红灯,需要初始化和使能一下 EXTI。

void sw_init(void)
{GPIO_InitTypeDef gpio_initstruct;SW_CLK();                                               /* IO口时钟使能 */gpio_initstruct.Pin = SW_PIN;                           /* DO引脚 */gpio_initstruct.Mode = GPIO_MODE_IT_FALLING;            /* 下降沿触发 */gpio_initstruct.Pull = GPIO_NOPULL;                     /* 无电阻 */HAL_GPIO_Init(SW_GPIO, &gpio_initstruct);               /* 初始化DO引脚 */HAL_NVIC_SetPriority(EXTI4_IRQn,2,0);                   /* 抢占优先级2,响应优先级0 */HAL_NVIC_EnableIRQ(EXTI4_IRQn);                         /* 使能EXTI4 */
}

5.4 震动模块控制灯

复写「HAL_GPIO_EXTI_Callback」函数,检测到中断下降沿,则表示震动模块感受到震动,「swflag」置1。

uint16_t get_swflag(void)
{return swflag;}void set_swflag(uint16_t value)
{swflag = value;
}void EXTI4_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);         /* 调用中断处理公用函数 清除中断线 的中断标志位 */__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_4);         /* HAL库默认先清中断再处理回调,退出时再清一次中断,避免按键抖动误触发 */
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == SW_PIN){if(HAL_GPIO_ReadPin(SW_GPIO, SW_PIN) ==  GPIO_PIN_RESET)                //如果有震动{swflag = 1;}}
}

5.5 主函数

主函数如下:

依据「swflag」,为0时表示无震动,绿灯亮,红灯灭;为1时表示震动模块感受到震动,绿灯灭,红灯亮。

int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */led_init();                         /* LED初始化 */sw_init();                          /* 震动模块初始化 */while(1){if (get_swflag())                                                             //有震动时{HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET);         //红灯亮HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_GPIO_PIN, GPIO_PIN_RESET);   //绿灯灭delay_ms(500);set_swflag(0);}else{                                                                      //无震动时HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_GPIO_PIN, GPIO_PIN_SET);         //绿灯亮HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET);       //红灯灭}}
}

5.6 运行效果

拍拍面包板,戳戳震动模块都可以让震动模块感受到震动。

无震动时,绿灯亮,红灯灭。(我的小绿灯不是很亮,用旧了,嘻嘻)

有震动时,绿灯灭,红灯亮。

6. 总结

随着技术的不断进步和创新,我们可以期待未来震动模块的进一步发展,以满足不断变化的需求和应用场景。无论是改善生活质量、提升工作效率,还是增强安全性,震动模块将继续为我们的日常生活和工作带来更多的创新和便利。

希望本文对您对于震动模块的理解和应用有所帮助。感谢各位看官,love and peace!

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/248964.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode88合并两个有序数组

力扣(LeetCode)-合并两个有序数组 方法一 | 合并后排序 题目要求将两个有序数组合并并保证合并后的数组仍然有序。 观察题目可以看出,nums1的容量大小总是 mn,所以 nums2能够合并到 nums1中。 那就将 nums1中未赋值的地方赋上 …

yarn 现代的包管理工具 介绍

一、前言 yarn 是一个现代的包管理工具,它是 npm(Node Package Manager)的一个替代品。yarn 由 Facebook 开发,并在 2016 年发布。它解决了当时 npm 的一些问题,尤其是在性能和安全性方面。 yarn 主要用于以下几个方面…

C语言基础13

今天是学习嵌入式相关内容的第十四天,以下是今日所学内容 1.结构体: 1.结构体类型定义 2.结构体变量的定义 3.结构体元素的访问 4.结构体的存储 内存对齐 结构体整体的大小必须为最大基本类型长度的整数倍 5.结构体作为函数参数 值传递 练习:定…

Collections集合工具类-JAVA

java.util.Collections:是个集合工具类它不是集合&#xff0c;而是集合的工具类 常用 API&#xff1a;注意 binarySearch 方法要求元素有序 方法实现&#xff1a; public class Test01 {public static void main(String[] args) {ArrayList<String>list1new ArrayList…

html+js+css静态故宫主题

登录代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>登录 - 故宫博物院</title><…

前端Web开发

安装flask框架 pip install flask 导入flask模块 from flask import Flask 【可能遇到的问题】 出现了如下警告&#xff1a; WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.You should consider upgrading via the D:\Python\python…

鸿蒙ArkUI开发-实现增删Tab页签

场景介绍 部分应用在使用过程中需要自定义添加或删除标签的场景&#xff0c;比如在浏览器中的顶部标签栏中需要新打开或关闭网页页签&#xff0c;而这种场景与Tabs组件效果类似&#xff0c;但Tabs组件不提供增加或删除页签的功能&#xff0c;不能自由的增加删除页签&#xff0…

python数据类型-列表

1 python中列表的定义 python中列表是一种有序和可更改的集合&#xff0c;允许重复的成员&#xff0c;列表中的元素之间数据类型可以不同&#xff08;元素之间数据类型可以不相同&#xff0c;这一点和其它的面向对象的开发语言有很大的不同&#xff0c;如C#、Java&#xff09;…

UI设计行业的就业前景如何?

UI设计师的就业前景是许多新人进入这个行业之前关注的问题之一。在数字时代&#xff0c;用户界面设计在各个行业发挥着越来越重要的作用。优秀的UI设计师需要优化他们的产品和服务&#xff0c;无论是互联网公司、软件开发公司、医疗器械、汽车制造等传统行业。本文将从市场需求…

基于Javaweb开发的二手图书零售系统详细设计【附源码】

基于Javaweb开发的二手图书零售系统详细设计【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

【Vue】前端项目引入阿里图标

【Vue&React】前端项目引入阿里图标 方式11、登录自己的iconfont-阿里巴巴矢量图标库&#xff0c;把需要的图标加入到自己的项目中去&#xff1b;2、加入并进入到项目中去选择Font class 并下载到本地3、得到的文件夹如下4. 把红框中的部分粘贴到自己的项目中&#xff08; …

【HarmonyOS 4.0 应用开发实战】TypeScript入门之接口详讲

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

接口的多继承

接口的多继承也就是一个接口可以同时继承多个接口&#xff0c;也是使用extends关键字实现。 接口的多继承的好处&#xff1a;假如有一个实现类要继承三个接口&#xff0c;现在只需要将多个接口“合并”为一个接口&#xff0c;就可以便于实现类实现。 注意&#xff1a;1.如果一…

为什么要用云手机养tiktok账号

在拓展海外电商市场的过程中&#xff0c;许多用户选择采用tiktok短视频平台引流的策略&#xff0c;以提升在电商平台上的流量&#xff0c;吸引更多消费者。而要进行tiktok引流&#xff0c;养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式&#xff0…

Kafka-服务端-PartitionLeaderSelector、ReplicaStateMachine

PartitionLeaderSelector 通过对前面的分析可知&#xff0c;PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现&#xff0c;PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。 图展示了PartitionLead…

WINDOWS中电源设置小工具

你可以使用WinPowerSet&#xff0c;玩CS2之前&#xff0c;把电源设置为“高性能”&#xff0c;玩后设置为“平衡”。 WinPowerSet 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1iOp29c4ica9L47t_l9lZ2w?pwdd248 提取码&#xff1a;d248 最近新配了一台12…

vue使用富文本

1、安装 cnpm install vue-quill-editor2、在main.js中引入 // 富文本 import VueQuillEditor from vue-quill-editor // require styles 引入样式 import quill/dist/quill.core.css import quill/dist/quill.snow.css import quill/dist/quill.bubble.css Vue.use(VueQuill…

Roxlabs全球IP代理服务:解锁高效数据采集与网络应用新境界

引言 在这个数字化迅速发展的时代&#xff0c;数据采集和网络应用的重要性显得愈发突出。江苏阿克索网络科技有限公司旗下的Roxlabs&#xff0c;以其卓越的全球IP代理服务&#xff0c;正引领着这一领域的创新和发展。Roxlabs不仅提供遍及200多个国家和地区的高质量动态住宅IP资…

Linux下使用信号量实现PV操作

一.信号量与PV操作概述 在多道程序系统中&#xff0c;由于资源共享与进程合作&#xff0c;使各进程之间可能产生两种形式的制约关系&#xff0c;一种是间接相互制约&#xff0c;例如&#xff0c;在仅有一台打印机的系统&#xff0c;同一时刻只能有一个进程分配到到打印机&…

ONLYOFFICE | 免费开源办公神器新选择

目录 前言&#xff1a; 1、什么是ONLYOFFICE&#xff1f; 2、ONLYOFFICE下载使用 3、ONLYOFFICE团队协作云办公功能 4、ONLYOFFICE 8.0新版本的亮点功能 4.1、显示协作者头像 4.2、插件 UI 界面更新 4.3、可填写的 PDF 表单 5、最后 前言&#xff1a; 一个好的开发工具…