STM32小项目——震动感应灯

文章目录


前言

一位学习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.代码实现

c 复制代码
//继电器IO初始化
#include "relay.h"
#include "stm32f10x.h"                  // Device header

void 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);
}
c 复制代码
#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.代码展示

c 复制代码
//震动传感器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.流程构建

代码展示

c 复制代码
#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;
		}
		
	}

}

外部中断实现:

c 复制代码
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口高电平,震动时导针有一瞬间断开输出低电平产生震动效果.

相关推荐
SANGEDZ_YYDS38 分钟前
三格电子上新了——IO-Link系列集线器
单片机
亿道电子Emdoor1 小时前
【ARM】MDK如何将变量存储到指定内存地址
arm开发·stm32·单片机
搬砖的小码农_Sky1 小时前
FPGA:Lattice的FPGA产品线以及器件选型建议
嵌入式硬件·fpga开发·硬件架构·硬件工程
mftang1 小时前
Zephyr OS Nordic芯片的Flash 操作
单片机·嵌入式硬件·物联网
阿川!3 小时前
嵌入式软件--stm32 DAY 6 USART串口通讯(下)
stm32·单片机·嵌入式硬件
繁星无法超越5 小时前
详解Windows(九)——系统性能优化
windows·stm32·性能优化
small_wh1te_coder11 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
WKJay_12 小时前
深入理解 Cortex-M3 特殊寄存器
stm32·单片机·嵌入式硬件
Linux嵌入式木子14 小时前
# 2-STM32F103-复位和时钟控制RCC
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式16 小时前
单片机-STM32部分:13-1、编码器
单片机·嵌入式硬件