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

STM32之继电器与震动传感器的使用,实现震动灯

在STM32的外设应用中,继电器扮演着重要的角色。继电器作为一种电控制器件,其主要作用是通过小电流控制大电流的通断,实现电路的自动控制和保护。具体来说,继电器在STM32外设中的作用可以归纳为以下几点:

  1. 电路隔离与保护
    • 继电器可以有效地隔离STM32微控制器与高压、大电流电路,保护微控制器免受直接电流冲击,提高系统的安全性和稳定性。
    • 在某些应用中,如电机控制、电源管理等,继电器可以用来切换高电压或大电流负载,从而保护STM32及其外围电路不受损坏。
  2. 自动化控制
    • 继电器可以与STM32的GPIO(通用输入输出)引脚相连,通过编程控制GPIO的高低电平来实现继电器的开闭,进而控制外部电路的通断。
    • 这种自动化控制方式广泛应用于工业自动化、智能家居、汽车电子等领域,实现设备的远程控制和自动化操作。
  3. 信号转换与放大
    • 继电器可以将STM32输出的微弱控制信号转换为能够驱动大电流负载的强信号,实现信号的转换与放大。
    • 这使得STM32能够轻松控制各种大功率设备,如电机、加热器、照明设备等。
  4. 多路控制
    • 通过使用多个继电器,STM32可以实现对多个独立电路的分别控制。每个继电器都可以独立地控制一个或多个负载,从而实现复杂的多路控制功能。
  5. 安全保护
    • 在某些应用中,继电器还可以作为安全保护装置使用。例如,在电机过载或短路时,继电器可以迅速切断电源,防止设备损坏或引发火灾等安全事故。
  6. 实现特定功能
    • 继电器还可以与其他外设配合使用,实现特定的功能。例如,在智能家居系统中,继电器可以与传感器、控制器等配合使用,实现灯光、窗帘、空调等设备的自动化控制。

综上所述,继电器在STM32外设中扮演着重要的角色,通过其独特的电气特性和控制方式,为STM32提供了强大的电路控制能力和安全保护功能。在实际应用中,我们可以根据具体需求选择合适的继电器类型和连接方式,以实现所需的电路控制功能。

使用继电器点亮LED灯

配置引脚与时钟的函数

主函数:

具体接线可参考下图:

下面介绍振动传感器相关知识,实现震动返回信号控制LED灯的亮灭

主函数:

LED函数:

震动函数:

在这里我用GPIO C13  作为震动传感器的引脚,GPIO A3 作为LED灯的控制引脚,当受到震动时,DO返回信号单片机,单片机执行并向发出低电平使灯亮(闪烁一秒)。

当然我们也可以加上继电器实现震动灯

源代码为

#include "stm32f10x.h"  // 继电器初始化函数  
void Relay_Init(void) {  GPIO_InitTypeDef GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 启用GPIOA时钟  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA的Pin3为输出  // 初始化时关闭继电器(假设低电平关闭继电器)  GPIO_ResetBits(GPIOA, GPIO_Pin_3);  
}  // LED(通过继电器)控制函数  
void LED_Control_via_Relay(uint8_t state) {  if (state) {  // 打开继电器(假设高电平打开继电器)  GPIO_SetBits(GPIOA, GPIO_Pin_3);  } else {  // 关闭继电器(假设低电平关闭继电器)  GPIO_ResetBits(GPIOA, GPIO_Pin_3);  }  
}  // 震动传感器初始化函数(与之前相同)  
void Shake_Init(void) {  // ...(与之前Shake_Init函数相同)  
}  int main(void) {  Relay_Init(); // 初始化继电器  Shake_Init(); // 初始化震动传感器  while (1) {  // 检查震动传感器引脚的状态  if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0) {  // 检测到震动(假设低电平表示检测到震动)  LED_Control_via_Relay(1); // 通过继电器打开LED  // 这里可以添加延时,但通常不建议在main循环中使用阻塞延时  // 注意:由于没有在这里添加延时,LED将一直保持打开状态,  // 直到下一次循环中传感器不再检测到震动为止。  // 如果希望LED在震动停止后自动关闭,需要在循环中添加额外的逻辑来检测这一点。  } else {  // 没有检测到震动  LED_Control_via_Relay(0); // 通过继电器关闭LED  }  // 在实际应用中,您可能希望在这里添加其他任务或空循环以减少CPU使用率  // 但由于这是一个简单的示例,我们让循环尽可能快地运行以响应传感器变化  }  
}  // 注意:上面的代码示例中,LED(通过继电器)会在检测到震动时立即打开,  
// 并在震动停止时立即关闭。如果希望LED在震动停止后保持打开一段时间,  
// 需要在main循环中添加额外的逻辑来跟踪震动状态,并使用定时器或延时来控制LED的关闭。

相关文章:

  • Docker的安装与镜像配置
  • Oracle开始严查Java许可!
  • flink+flinkcdc+同步(MYSQL到MYSQL)实践
  • git restore对工作区及暂存区文件的影响
  • 自养号测评技术:如何挑选适合的IP环境方案
  • 引发C++程序内存泄漏的常见原因分析与排查方法总结
  • openlayers+vite+vue3加载离线地图并实现初始化(一)
  • 高性能 Web 服务器:让网页瞬间绽放的魔法引擎(上)
  • [uniapp/wx小程序] 给自定义组件或ui组件加样式在wx小程序不生效
  • 搭建智能客服机器人:langgraph实现用户订单管理
  • 尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块
  • 图像处理 -- ISP 之 tone mapping功能的实现原理
  • systemback制作Ubuntu自己的系统镜像
  • 观察者模式解析:实现对象间的舞蹈同步!
  • 怎么生成一个springboot的项目
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular 响应式表单之下拉框
  • Codepen 每日精选(2018-3-25)
  • Hibernate最全面试题
  • IDEA 插件开发入门教程
  • IP路由与转发
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript HTML DOM
  • JavaScript中的对象个人分享
  • java第三方包学习之lombok
  • js中的正则表达式入门
  • mysql中InnoDB引擎中页的概念
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Node + FFmpeg 实现Canvas动画导出视频
  • 创建一种深思熟虑的文化
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于webpack 的 vue 多页架构
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 自制字幕遮挡器
  • ​​​【收录 Hello 算法】9.4 小结
  • ​ssh免密码登录设置及问题总结
  • ​如何在iOS手机上查看应用日志
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #### go map 底层结构 ####
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (多级缓存)缓存同步
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (二十六)Java 数据结构
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (过滤器)Filter和(监听器)listener
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Mysql的优化设置
  • (转)项目管理杂谈-我所期望的新人
  • .NET CLR Hosting 简介
  • .net core 6 redis操作类
  • .NET Core IdentityServer4实战-开篇介绍与规划