STM32小项目——震动感应灯

文章目录

  • 前言
  • 一、继电器原理
    • 1.简单使用说明
    • 2.接口说明
    • 3.代码实现
  • 二、震动传感器原理
    • 1.工作原理
    • 2.代码展示
  • 三、项目搭建
    • 1.流程构建
    • 代码展示
  • 总结


前言

一位学习STM32的小白~ 有错误请评论区或私信指出~


一、继电器原理

1.简单使用说明

继电器就相当一个开关只不过这个开关使用电信号控制,控制信号又IN口控制
在这里插入图片描述

2.接口说明

1、VCC:接电源正极(电压按继电器要求,有5V、9V、12v和24v选择)
2、GND:接电源负极
3、IN:可以高或低电平控制继电器吸合
输出部分
1、NO:继电器常开接口,继电器吸合前悬空,在控制信号作用下,继电器可以吸合与COM行程短接。通俗来说,就是未通电状态下,是断开的,通电后在电磁线圈的作用下(吸合)处于闭合状态。
2、COM:继电器公用接口
3、NC:继电器常闭接口,没有控制信号作用下,继电器吸合前与COM短接,吸合后悬空,即通常下NC与COM短接。通俗来说,就是即未通电状态下,NC是闭合的,通电后在电磁线圈的作用下(吸合)处于断开状态。

3.代码实现

在这里插入图片描述

//继电器IO初始化
#include "relay.h"
#include "stm32f10x.h"                  // Device headervoid Relay_Init(void)
{GPIO_InitTypeDef Relay_InItStruvture;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);Relay_InItStruvture.GPIO_Mode = GPIO_Mode_Out_OD;Relay_InItStruvture.GPIO_Pin = GPIO_Pin_3;Relay_InItStruvture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&Relay_InItStruvture);
}
#include "stm32f10x.h"
#include "main.h"
#include "LED.h"
#include "Relay.h"
void delay_ms(uint32_t xms);int  main()
{Relay_Init();while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_3);//在低电平期间驱动公共端口亮灯delay_ms(1000);GPIO_SetBits(GPIOA,GPIO_Pin_3);}
}void delay_ms(uint32_t xms)
{uint32_t i;while(xms--){while(i--);{i = 12000;}}}

在这里插入图片描述

二、震动传感器原理

1.工作原理

传感器内部有两个导针,在传感器没有震动时,震动轴静止,导针A和导针B处于导通状态,平时任何角度开关都是接通状态,受到振动或移动时,震动轴会产生移动或振动,从而导致导针A和B会出现断开。(DO口产生电平变化,单片机接收这个电平信号,控制继电器开灯)

2.代码展示

//震动传感器IO初始化
#include "shake.h"
#include "stm32f10x.h"                  // Device header
void shake_Init(void)
{GPIO_InitTypeDef  shake_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);shake_InitStructure.GPIO_Mode = GPIO_Mode_IPD;shake_InitStructure.GPIO_Pin = GPIO_Pin_5;shake_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&shake_InitStructure);}

三、项目搭建

1.流程构建

在这里插入图片描述

代码展示

#include "stm32f10x.h"
#include "main.h"
#include "Relay.h"
#include "shake.h"
void delay_ms(uint32_t xms);int  main()
{Relay_Init();shake_Init();while(1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5) == 0){GPIO_ResetBits(GPIOA,GPIO_Pin_3);delay_ms(1000);}GPIO_SetBits(GPIOA,GPIO_Pin_3);}}void delay_ms(uint32_t xms)
{uint32_t i;while(xms--){while(i--);{i = 12000;}}}

外部中断实现:

void EXTI1_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line1) != RESET){GPIO_ResetBits(GPIOA,GPIO_Pin_3);delay_ms(1000);GPIO_SetBits(GPIOA,GPIO_Pin_3);}EXTI_ClearITPendingBit(EXTI_Line1);
}

总结

1.继电器想当一个开关有单片机操控IO口电平操控继电器所控制电器的开关
2.震动传感器静置是导通的输出DO口高电平,震动时导针有一瞬间断开输出低电平产生震动效果.

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

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

相关文章

用Copilot画漫画,Luma AI生成视频:解锁创意新玩法

近年来,随着人工智能技术的不断发展,各种创意工具也层出不穷。今天,我们就来介绍一种全新的创作方式:使用Copilot画漫画,再将漫画放入Luma AI生成视频。 Copilot:你的AI绘画助手 Copilot是一款基于人工智…

C++访问Private,Protecd的一些方法总结

前言 在编写C程序中 我们偶尔会碰到这样的三种特殊修改变量值的需求: [1]在不修改类原本的实现下,访问修改类的Private变量 [2]在不修改类原本的实现下,修改类的Protected变量 Private变量访问 public类模版函数特化 这种办法利用了类模…

解决Qt的multimedia库在clion中依赖库补全的问题

解决Qt的multimedia库在clion中使用报错的问题 在clion中,使用Qt的multimedia库时会报如下错误: defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" 我猜测出现这个错误的原因很可能是因为…

区块链中的gas与转账收款相关概念

区块链是一个经济系统 计算与存储系统都是稀缺的,区块链的工作需要消耗资源共识、trustless需要矿工的工作,而矿工需要激励Transaction的执行有成本(gas),gas费成为矿工的奖励ether是这个经济生态系统的通行货币 关心的问题 合…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙(主要介绍 AI agent 让我感受很深) ,那什么是 AI Agent呢? 是一个智能体,由大语言模型驱动,具有自主理解、感知、规划、…

【react小项目】bmi-calculator

bmi-calculator 目录 bmi-calculator初始化项目01大致布局01代码 02完善样式02代码 03输入信息模块03代码 04 使用图表04代码 05详细记录信息渲染05代码 06 让数据变成响应式的06-1输入框的数据处理06-2图表,和记录信息的区域数据处理 07 删除功能,撤销功…

维度建模中的事实表设计原则

维度建模是一种数据仓库设计方法,其核心是围绕业务过程建立事实表和维度表。事实表主要存储与业务过程相关的度量数据,而维度表则描述这些度量数据的属性。 以下是设计事实表时需要遵循的几个重要原则,来源于《维度建模》那本书上&#xff0…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

STM32学习记录(五)————外部中断EXTI

文章目录 前言一、外部中断EXTI基础知识1.外部中断介绍2.外部中断框架2.1AFIO2. 2.STM32外部中断机制框架 总结 前言 一个学习STM32的小白~ 有问题私信或评论区指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、外部中断EXTI基础知识 1.外部中…

git删除已创建tag标签

前言 一不小心把tag标签名称复制错了&#xff0c;现将删除 1.删除本地标签 1.1.执行下面命令 git tag -d 1.5.2401161.5.240116是创建的tag标签名称 2.如果是删除远程的tag标签名称的话&#xff0c;看下面命令 2.1.删除远程标签 git push --delete origin <tagname>…

C学习自学笔记

C学习笔记 0>C语言概述 为什么学习C语言 1&#xff09;C的起源和发展------了解即可 B语言、C语言、C语言的产生地&#xff1a;都出自 美国贝尔实验室 2&#xff09;C的特点 优点&#xff1a;代码量小、速度快、功能强大 缺点&#xff1a;危险性高、开发周期长、可移植性…

【PL理论】(25) C- 语言:表达式求值的推理规则 | 执行语句的推理规则 | 语句执行的推理规则

&#x1f4ad; 写在前面&#xff1a;本章我们将继续更新我们的 "C-" 语言&#xff0c;更新表达式求值的推理规则、执行语句的推理规则以及语句执行的推理规则。 目录 0x00 C- 语言更新&#xff1a;表达式求值的推理规则 0x01 C- 语言更新&#xff1a;执行语句的推…

13.docker registry(私有仓库)

docker registry&#xff08;私有仓库&#xff09; 1.从公有仓库中下载镜像比较慢 &#xff0c;比如docker run执行一个命令假设本地不存在的镜像&#xff0c;则会去共有仓库进行下载。 2.如果要是2台机器之间进行拷贝&#xff0c;则拷贝的是完整的镜像更消耗空间。 3.如果1个…

springboot优雅shutdown时如何保障异步线程的安全

我前面写了一篇springboot优雅shutdown的文章&#xff0c;看起来一切很美好。 https://blog.csdn.net/chenshm/article/details/139640775 那是因为没有进行多线程测试。如果一个请求中包括阻塞线程&#xff08;主线程&#xff09;和非阻塞线程&#xff08;异步线程&#xff09…

JVM 垃圾回收分配及算法

一、判断对象是否可以回收 垃圾收集器在做垃圾回收的时候&#xff0c;首先需要判定的就是哪些内存是需要被回收 的&#xff0c;哪些对象是「存活」的&#xff0c;是不可以被回收的&#xff1b;哪些对象已经「死掉」了&#xff0c;需 要被回收。 一般有两种方法来判断&#xff…

[Cloud Networking] SPDY 协议

文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议&#xff0c;提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…

第一篇:容器化的未来:从Docker的革命到云原生架构

容器化的未来&#xff1a;从Docker的革命到云原生架构 1. 引言 在当今快速演进的技术领域&#xff0c;容器化技术已经成为云计算和微服务架构的重要组成部分。该技术以其高效的资源利用率、快速的部署能力和卓越的隔离性能&#xff0c;彻底改变了软件开发和部署的方式。容器化…

RPG游戏完整指南

环境&#xff1a;unity2021urp 本教程教大家如何使用Unity创建一个RPG游戏&#xff0c;玩家可以在城镇场景中进行导航并寻找战斗&#xff0c;并在战斗中遇到不同类型的敌人。玩家可以向敌人施加不同的动作&#xff0c;如&#xff1a;常规攻击和撤离。这会是一个十分有趣的体验。…

c++20 规范, vs2019 , 头文件 <mutex> ,注释以及几个探讨

&#xff08;1 探讨一&#xff09; mutex 这个名称的来源是 mutual exclusion &#xff1a;互相排斥。 mutex 与 recursive_mutex 的数据成员的定义如下&#xff1a; 测试如下&#xff1a; 运行以下&#xff1a; 以及&#xff1a; &#xff08;2 探讨二&#xff09; recursive_…

cmake构建Qt项目

cmake构建Qt项目 项目结构 一、添加头文件 # 添加头文件目录&#xff0c;还需要在add_executable中添加头文件&#xff01;&#xff01;&#xff01; include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_executable(landlardsinclude/test.h)二、添加源文件 aux…
最新文章