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

news2024/9/22 19:20:58

在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的关闭。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线学习考试设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

“CSS”第一步——WEB开发系列13

CSS (Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文件扩展名为 .css。 一、什么是 CSS&a…

ubuntu x86_64系统上安装运行aarch系统的虚拟机

安装qemu-system-aarch64 创建sda.qcow2 虚拟磁盘 运行命令启动虚拟机 sudo qemu-system-aarch64 -M virt-4.0 -m 4G -cpu cortex-a57 -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -cdrom ~/下载/openEuler-24.03-LTS-aarch64-dvd.iso -drive ifnone,filesda.qcow2,idhd0…

王老师 linux c++ 通信架构 笔记(五)编译后生成的 nginx 可执行程序的启动

(22) 启动 nginx : 上网测试一下: 端口号 介绍: (23) 因为 nginx 监听知名端口号 80 ,http 服务。也可以知名端口号,格式如下: 生产环境下可以设置 ngi…

Pulsar官方文档学习笔记——架构概览

架构概览 在最高配置下,pulsar服务应该由一个或多个pulsar集群组成。 一个pulsar集群可以包括如下组件 一个或多个broker。broker会将生产者 的消息分派给消费者。与pulsar配置存储通信来协调各种任务。将消息 存储在 BookKeeper实例中 (也可以叫book…

计算机毕业设计选什么题目好?springboot 基于Java的学院教学工作量统计系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

java生成随机数字,生成随机ID

java在代码中生成随机数字和ID的两个方法 import java.util.UUID; import java.util.Random; public class randomID {public static void main(String[] args) {// TODO Auto-generated method stubUUID uuid UUID.randomUUID();String randomId uuid.toString();System.ou…

Qt自定义控件之提升法

1、参考:Qt之实现自定义控件的两种方式——提升法 2、概述:自定义控件是常需要使用到的技能,在既有的Qt控件不能满足开发的前提下,自定义控件给了程序员很多的发挥空间和便利。自定义控件有两种方式,一种是通过提升法来…

记录win10下 yolov8 tensorrt模型部署

前言 我的环境是 CUDA11.6 cudnn8.4 python3.8 vs2022 tensorRT8.4.2.4 实现 参考了下面这个视频和文章(跟着视频做为主,文章为辅)一遍成功,因为这个博主写的很详细,很赞,我就不再重复去写了。 视频&…

C++ Primer 总结索引 | 第十八章:用于大型程序的工具

1、大规模应用程序的特殊要求包括: 在独立开发的子系统之间 协同处理错误的能力使用各种库(可能包含独立开发的库)进行 协同开发的能力对比较复杂的应用 概念建模的能力 对应 异常处理、命名空间和多重继承 1、异常处理 1、异常处理机制 …

【算法】令牌桶算法

一、引言 令牌桶算法(Token Bucket Algorithm, TBA)是一种流行于网络通信领域的流量控制和速率限制算法。它允许一定程度的突发传输,同时限制长时间内的传输速率。令牌桶算法广泛应用于网络流量管理、API请求限流等场景。其基本原理是通过一个…

vue3 响应式 API:computed()

介绍 基本概念: computed()接收一个 getter 函数或者一个包含 getter 和 setter 函数的对象作为参数,并返回一个基于原始响应式数据计算得到的新的响应式数据对象。计算属性的值会根据其依赖的响应式数据自动更新,当依赖的数据发生变化时&am…

设计模式23-职责链

设计模式23-职责链 动机定义与结构定义结构职责链模式图中元素解释工作流程 C 代码推导优缺点应用场景总结 动机 在软件构建过程中,一个请求可能被多个对象处理。但是每个请求在运行时只能有一个接受者。如果显示指定将必不可少的带来请求发送者与接受者的紧耦合。…

lvs+keepalive大战haproxy+keepalive实现高可用集群

华子目录 lvskeepalive实验架构实验前的准备工作1.主机准备2.KA1和KA2上安装lvskeepalive3.webserver1和webserver2上安装httpd4.制作测试效果网页内容5.所有主机关闭firewalld和selinux6.开启httpd服务 实验步骤1.webserver1和webserver2上配置vip2.webserver1和webserver2上关…

【C语言】 作用域和存储期

C语言的作用域和存储期 一、作用域1、概念:2、函数声明作用域3、局部作用域4、全局作用域5、作用域的临时掩盖6、static关键字 二、存储期1、概念2、自动存储期3、静态存储期4、自定义存储期 一、作用域 1、概念: \quad C语言中,标识符都有一…

《小迪安全》学习笔记03

须知少时凌云志,曾许人间第一流。 静态页面(HTML)是没有漏洞的,没有数据传递。 动态网站一般来说,有开发组合,即开发语言和数据库,两者兼容性比较好: 而且有的数据库不支持windows或…

网站自动化锚文本的实现逻辑

锚文本,‌即超链接的文本部分,‌它在网页中扮演着至关重要的角色。‌通过点击锚文本,‌用户可以方便地在网页间进行跳转,‌从而极大地提升了用户体验。‌同时,‌在搜索引擎优化(‌SEO)‌领域&am…

idea 修改背景图片教程

🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明修改背景图片 开篇说明 给小白看得懂的修改图片教程&…

Spring项目:文字花园(三)

一.实现博客详情 1.后端逻辑代码 controller层添加方法&#xff08;根据博客id查看博客详情&#xff09; RequestMapping("/getBlogDetail")public Result<BlogInfo> getBlogDetail(Integer blogId){log.info("getBlogDetail, blogId: {}", blogId…

并发编程 | Future是如何优化程序性能

在初识Future一文中介绍了Future的核心方法。本文中接着介绍如何用Future优化我们的程序性能。 在此之前&#xff0c;有必要介绍Future接口的一个实现类FutureTask。 FutureTask介绍 FutureTask继承结构 首先我们看一下FutureTask的继承结构&#xff1a; public class Futur…