当前位置: 首页 > news >正文

外设模块学习(12)——SW-520D倾斜传感器、SW-420震动传感器、声音传感器(三引脚)(STM32代码参考)

  引言

       本次,我们继续学习三种传感器,分别是SW-520D倾斜传感器、SW-420震动传感器以及声音传感器,这三种传感器也是和前面几个传感器类似,都是用了比较器电路加上核心传感器构成。不过本次介绍的控制比前面简单,因为这只有三根线,少了输出模拟量的AO口。当然,由于厂商提供资料感觉太少,所以到处找了一下资料整理后才得出本篇内容。

       由于这几个传感器控制方式极其类似,因此这里核心介绍各个模块中核心传感器的相关内容,最后附上自己编写的STM32代码供大家参考。


一、SW-520D 倾斜传感器介绍

1.1 是什么

       对于该模块来说,核心在于SW-520D这个传感器,这是一款双珠型钢珠开关传感器,是一种基于机械结构实现倾斜检测的元件,如下图所示。

 

      它通过内部钢珠的位置变化控制电路通断,核心功能是感知设备或环境的倾斜角度变化,当倾斜角度达到设定阈值时,会触发电路状态切换,进而输出相应的通断信号,适用于需要监测角度变化的场景。

1.2 有何作用

       该传感器模块的主要作用是实时检测目标物体的倾斜状态,当物体倾斜角度超过特定范围时,传感器输出信号发生改变,可作为触发信号驱动后续设备动作。当然了,个人感觉该模块功能比较简单,且倾斜方向有些限制,更适合学习使用哈。

1.2 相关参数

参数类别

具体参数

供电电压

3.3~5V

工作电流

10mA

工作温度范围

-20℃~80℃

1.3 工作原理

       SW-520D 内部包含两颗钢珠与对应的电极触点,其有脚端为 ON 导通触发端,无脚端为 OFF 开路端。

       当传感器受到外力影响发生倾斜,且有脚端角度低于水平适当角度时,内部钢珠会因重力滚动并接触电极,使电路短时或持续导通(输出 ON 信号);当传感器恢复静止状态,且无脚端角度低于水平线时,钢珠复位脱离电极,电路恢复开路(输出 OFF 信号),以此实现对倾斜状态的检测与信号输出。

1.4 模块驱动方法

1.4.1 引脚定义及功能

引脚标识功能描述
VCC电源正极,输入电压范围 3.3-5V
GND电源负极,接地端
DO开关信号输出端,输出数字电平信号,反映倾斜状态

1.4.2 模块使用方法

       单片机接收模块通过DO发出的电平信号,倾斜一定程度时DO输出低电平,点亮模块上的LED,反之输出高电平,模块上的LED熄灭。

1.5 参考代码(STM32)

1.5.1 tilt.h

/** @Descripttion: 倾斜传感器驱动文件(.h)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#ifndef __TILE_H
#define __TILE_H#include "stm32f10x.h"/*** 引脚接线* * VCC  --->  3.3/5V* GND  --->  GND* DO   --->  PA0* 
*/void Tilt_Init(void);
uint8_t Tilt_Detect(void);#endif 
/*** (C) COPYRIGHT 2025 END OF FILE ***/

1.5.2 tilt.c

/** @Descripttion: 倾斜传感器驱动文件(.c)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#include "tilt.h"/*** @brief      倾斜传感器初始化* @param      void 无* @return     void* @example    Tilt_Init();* @attention  */
void Tilt_Init(void)
{// 1. 开启时钟 PARCC->APB2ENR |= RCC_APB2ENR_IOPAEN;// 2. DO-PA0 浮空输入 mode-00 cnf-01GPIOA->CRL &= ~GPIO_CRL_MODE0;GPIOA->CRL |= GPIO_CRL_CNF0_0;GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
}/*** @brief      检测倾斜,获取状态* @param      void 无* @return     uint8_t* @example    uint8_t TiltState = Tilt_Detect();* @attention  */
uint8_t Tilt_Detect(void)
{uint8_t TiltState = 0;if (GPIOA->IDR & GPIO_IDR_IDR0){TiltState = 1;}return TiltState;
}

1.5.3 main.c

       逻辑很简单,10ms查询一次,倾斜点亮LED,反之熄灭

/** @Descripttion: 倾斜传感器测试* @Author: JaRyon* @version: v1.0* @Date: 2025-10-28 12:19:43*/
#include "stm32f10x.h"
#include "Systick.h"
#include "oled.h"
#include "tilt.h"
#include "LED.h"int main(void)
{uint32_t waitTimes = 0;char *str = "Normal";// 初始化Systick_Init();LED_Init();OLED_Init();OLED_ClearAll();Tilt_Init();waitTimes = Systick_GetTick();while(1){	if (Systick_GetTick() - waitTimes >= 10000){if (Tilt_Detect() == 0){str = "Dump!!";LED_On(LED1);}else{str = "Normal";LED_Off(LED1);}waitTimes = Systick_GetTick();}OLED_ShowString(39, 27, str, 8);OLED_Update();}
}

二、SW-420 震动传感器介绍

2.1 是什么

       SW-420 震动传感器是一款常闭型机械式震动检测模块,核心元件为内部的金属导电球与电极结构,主要功能是检测环境或设备的振动、冲击,当振动强度达到触发阈值时,模块内部电路通断状态改变,输出相应的数字信号,可作为振动触发信号源,适配多种需要振动检测的场景。

2.2 有何作用

       核心作用是实时监测振动或冲击信号,当检测到目标物体发生振动时,输出状态变化的信号,进而驱动后续设备实现报警、控制等功能。当然了,个人感觉该传感器还是比较简单,更适合学习使用哈。

2.3 有何特点

       信号稳定性:采用 LM393 宽电压比较器,输出信号干净、波形好,有效滤除杂波干扰,减少误触发。

       感应特性:具备全向感应能力,可检测任意方向的振动,无检测角度限制,适配多维振动检测场景。

2.4 相关参数

参数类别

具体参数

型号

SW-420

传感器类型

常闭型震动传感器模块(机械式)

输出类型

数字开关量输出(0 和 1)

工作电压

3.3V-5V

输出电平逻辑

无震动时输出低电平(绿色指示灯亮);震动时输出高电平(绿色指示灯不亮)

驱动能力

超过 15mA

感应方向

全向

响应特性

快速响应振动变化;自动复位(振动停止后)

电流消耗

最大 0.5mA

核心元器件

LM393 宽电压比较器、金属导电球

2.5 工作原理

       SW-420 基于机械结构与电路结合实现震动检测,无振动时,模块内部的金属导电球在重力作用下与电极保持接触,震动开关呈闭合导通状态,电路形成回路,模块输出低电平,绿色指示灯亮;当受到振动或冲击时,金属导电球因惯性脱离电极,震动开关瞬间断开,电路断路,模块输出高电平,绿色指示灯熄灭;振动停止后,金属导电球在重力作用下复位,重新接触电极,开关闭合,模块恢复低电平输出,以此实现对振动状态的检测与信号转换。

2.6 模块驱动方法

2.6.1 引脚定义及功能

引脚标识功能描述
VCC接入 3.3V~5V ,适配主流单片机供电
DO信号输出端,震动时输出高电平,无震动时输出低电平,同步反馈传感器状态
GND电源负极,与单片机、电源负极共地

2.6.2 模块使用方法

  单片机接收模块通过DO发出的电平信号,出现震动时DO输出高电平,熄灭模块上的LED,反之输出低电平,模块上的LED点亮。注意:这种状态只会在出现震动瞬间发生,若震动不持续则会很快恢复无震动状态。

2.7 参考代码(STM32)

2.7.1 vibration.h

/** @Descripttion: 震动传感器驱动文件(.h)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#ifndef __VIBRATION_H
#define __VIBRATION_H#include "stm32f10x.h"/*** 引脚接线* * VCC  --->  3.3/5V* GND  --->  GND* DO   --->  PA0* 
*/void Vibration_Init(void);
uint8_t Vibration_Detect(void);#endif 
/*** (C) COPYRIGHT 2025 END OF FILE ***/

2.7.2 vibration.c

/** @Descripttion: 震动传感器驱动文件(.c)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#include "vibration.h"/*** @brief      震动传感器初始化* @param      void 无* @return     void* @example    Vibration_Init();* @attention  */
void Vibration_Init(void)
{// 1. 开启时钟 PARCC->APB2ENR |= RCC_APB2ENR_IOPAEN;// 2. DO-PA0 浮空输入 mode-00 cnf-01GPIOA->CRL &= ~GPIO_CRL_MODE0;GPIOA->CRL |= GPIO_CRL_CNF0_0;GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
}/*** @brief      检测震动,获取状态 震动-1 正常-0* @param      void 无* @return     uint8_t* @example    uint8_t VibState = Vibration_Detect();* @attention  */
uint8_t Vibration_Detect(void)
{uint8_t VibState = 0;if (GPIOA->IDR & GPIO_IDR_IDR0){VibState = 1;}return VibState;
}

2.7.3 main.c

       逻辑很简单,10ms查询一次,震动超过阈值点亮LED,反之熄灭

/** @Descripttion: 震动传感器测试* @Author: JaRyon* @version: * @Date: 2025-10-28 12:19:43*/
#include "stm32f10x.h"
#include "Systick.h"
#include "oled.h"
#include "vibration.h"
#include "LED.h"int main(void)
{uint32_t waitTimes = 0;char *str = "Normal";// 初始化Systick_Init();LED_Init();OLED_Init();OLED_ClearAll();Vibration_Init();waitTimes = Systick_GetTick();while(1){	if (Systick_GetTick() - waitTimes >= 10000){if (Vibration_Detect() == 1){str = "vibrate";LED_On(LED1);}else{str = "Normal";LED_Off(LED1);}waitTimes = Systick_GetTick();}OLED_ShowString(39, 27, str, 8);OLED_Update();}
}

三、CZN-15E 声音传感器介绍

3.1 是什么

       CZN-15E 声音传感器是一款全向性驻极体电容麦克风传感器模块,核心元件为驻极体电容麦克风与 LM393 比较器(或类似信号处理芯片),主要功能是将环境中的声音信号(声波)转换为电信号,经内部放大、滤波、比较等电路处理后,输出数字或模拟信号,用于感知声音的有无或声音强度变化,适配多种声音检测与触发场景。

3.2 有何作用

       核心作用是实现声音信号的采集与转换,通过输出信号反映环境中声音的存在或强度,进而驱动后续设备实现报警、控制、监测等功能。例如,在教育实验中,用于声音信号采集与电信号转换的教学演示。

3.3 有何特点

       全向性感应:采用全向性驻极体电容麦克风,可接收来自各个方向的声音信号,无明显方向限制,适配多方位声音检测场景。

       灵敏度可调:模块通常设有灵敏度调节电位器,可根据环境噪音情况调整检测阈值,减少安静环境误触发或嘈杂环境漏检测的问题。

       信号处理集成:内部集成放大电路、滤波电路与比较器,无需外部额外搭建复杂信号处理电路,直接输出稳定的数字或模拟信号,简化使用流程。

       电压适配:工作电压范围为 1.5V-10V,标准工作电压为 4.5V,兼容多种电源与控制平台(如单片机、嵌入式系统)的供电需求。

       性能稳定:信噪比大于 60dB,信号纯净度高,减少噪音干扰;3V 电压下灵敏度衰减在 - 3dB 以内,低电压环境下仍能保持较好性能;电流消耗最大 0.5mA,功耗低,适配电池供电设备。

3.4 相关参数

参数类别

具体参数

型号

CZN-15E

传感器类型

全向性驻极体电容麦克风传感器

灵敏度

-46±3dB、-42±3dB、-38±3dB、-34±3dB(0dB=1V/pa,1KHz)

频率范围

20-16000Hz

工作电压范围

1.5V-10V

标准工作电压

4.5V

电流消耗

最大 0.5mA

灵敏度衰减

3V 时衰减在 - 3dB 以内

信噪比(S/N ratio)

大于 60dB

输出类型

数字开关量输出(高 / 低电平)或模拟输出(与声音强度成正比的电压信号,部分模块支持)

3.5 工作原理

       CZN-15E 声音传感器的工作原理分为信号转换与信号处理两部分:首先,模块内部的驻极体电容麦克风将环境中的声音机械振动(声波)转换为微弱的模拟电信号;该微弱电信号随后进入内部放大电路,被放大至可处理的幅度;接着,放大后的信号经滤波电路滤除高频或低频噪音(如环境中的电磁干扰、低频杂音),保留有效声音信号;

       若为数字输出模式,滤波后的信号进入 LM393 比较器,与预设阈值(通过电位器调节)对比,当信号强度高于阈值时,输出高电平,低于阈值时输出低电平;若为模拟输出模式,滤波后的模拟信号直接输出,信号电压随声音强度增大而升高,以此实现声音信号到电信号的转换与输出。

3.6 模块驱动方法

3.6.1 引脚定义及功能

引脚标识功能描述
VCC供电引脚,接入 3.3V~5V 
DO信号输出端,声音振动达到设定阈值输出低电平,反之高电平
GND电源负极,与单片机、电源负极共地

3.6.2 模块使用方法

       单片机接收模块通过DO发出的电平信号,外界环境声音振动超过设定阈值时DO输出低电平,点亮模块上的LED,反之输出高电平,模块上的LED熄灭。

3.7 参考代码(STM32)

3.7.1 voice.h

/** @Descripttion: 声音传感器驱动文件(.h)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#ifndef __VOICE_H
#define __VOICE_H#include "stm32f10x.h"/*** 引脚接线* * VCC  --->  3.3/5V* GND  --->  GND* DO   --->  PA0* 
*/void Voice_Init(void);
uint8_t Voice_Detect(void);#endif 
/*** (C) COPYRIGHT 2025 END OF FILE ***/

3.7.2 voice.c

/** @Descripttion: 声音传感器驱动文件(.c)* @Author: JaRyon* @version: * @Date: 2025-10-29 13:05:16*/
#include "voice.h"/*** @brief      声音传感器初始化* @param      void 无* @return     void* @example    Voice_Init();* @attention  */
void Voice_Init(void)
{// 1. 开启时钟 PARCC->APB2ENR |= RCC_APB2ENR_IOPAEN;// 2. DO-PA0 浮空输入 mode-00 cnf-01GPIOA->CRL &= ~GPIO_CRL_MODE0;GPIOA->CRL |= GPIO_CRL_CNF0_0;GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
}/*** @brief      检测声音,获取状态 声音足够大-1 正常-0* @param      void 无* @return     uint8_t* @example    uint8_t VibState = Voice_Detect();* @attention  */
uint8_t Voice_Detect(void)
{uint8_t voiceState = 0;if ((GPIOA->IDR & GPIO_IDR_IDR0) == 0){voiceState = 1;}return voiceState;
}

3.7.3 main.c

/** @Descripttion: 声音传感器测试* @Author: JaRyon* @version: * @Date: 2025-10-28 12:19:43*/
#include "stm32f10x.h"
#include "Systick.h"
#include "oled.h"
#include "voice.h"
#include "LED.h"int main(void)
{uint32_t waitTimes = 0;char *str = "Normal";// 初始化Systick_Init();LED_Init();OLED_Init();OLED_ClearAll();Voice_Init();waitTimes = Systick_GetTick();while(1){	if (Systick_GetTick() - waitTimes >= 10000){if (Voice_Detect()) // 高声-1{str = "Noise!";LED_On(LED1);}else{str = "Normal";LED_Off(LED1);}waitTimes = Systick_GetTick();}OLED_ShowString(39, 27, str, 8);OLED_Update();}
}

资料参考

  1. Arduino动手做(14)---倾斜角度传感器模块 - 知乎
  2. SW 420- 振动传感器模块指南
  3. CZN-15E Electret Condenser Microphone - CZN-15E
  4. CZN-15E PDF 数据手册

  

http://www.dtcms.com/a/557562.html

相关文章:

  • 行业网站解决方案wordpress主题点赞
  • 微网站的特点模板之家html5
  • 模电基础和数电基础
  • 企业免费网站模板企业宣传册范例
  • 神经网络组植物分类学习规划与本周进展综述13
  • 生产管理系统详解:10 张表覆盖“下单→设计→生产→采购→出入库→售后”全链路,字段与流程图节点一一对应,直接建库即可使用
  • 炒币网站开发网站建设项目经验
  • 论坛类网站开发报价wordpress官方主题下载地址
  • 安路FPGA_LED闪烁
  • 徐州模板开发建站营销型网站设计公司哪里有
  • C# 进程管理实战:检查与启动EXE程序的完整指南
  • ssm面试六十题
  • 做网站内容需要自己填的吉安做网站
  • C# 使用 CSRedisCore指南
  • AD域 BloodHound 2025最新Linux穩定版|Docker封鎖繞過安裝脚本
  • 基于单片机的高频感应加热式棉花糖机的电气控制系统的设计(论文+源码)
  • C++:模板的幻觉 —— 实例化、重定义与隐藏依赖势中
  • 国外市场网站推广公司毕业设计做网站大小有什么要求
  • 【LUT技术专题】SVDLUT代码讲解
  • 基于多模态特征提取与贝叶斯优化的污染源智能识别与分类系统
  • 将遥感数据处理成dfine可以处理的数据
  • 网站关键词掉了织梦网站后台一键更新没反应
  • 前端进阶:从理论到实践体系
  • Android Build系列专题【篇五:构建系统主入口文件build/core/makefile】
  • 网站制作中需要注意的地方研磨材料 东莞网站建设
  • 数字马力Java开发面试题及参考答案(中)
  • MCP服务构建、使用
  • 合肥设计网站公司郑州网站优化外包顾问
  • 什么是共模电平
  • opencv学习笔记8:haar特征、决策树、adaboost初步认识