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

相关推荐
ShiinaKaze1 小时前
【MCU】微控制器的编程技术:ISP 与 IAP
单片机·嵌入式硬件·mcu·iap·isp
北京迅为1 小时前
【北京迅为】iTOP-4412全能版使用手册-第十二章 Linux系统编程简介
linux·嵌入式硬件·4412开发板
小吴的笔记本1 小时前
1 ISP一键下载
stm32
不能只会打代码2 小时前
51单片机从入门到精通:理论与实践指南入门篇(二)
单片机·嵌入式硬件·51单片机
Echo_cy_4 小时前
STM32 USART串口发送
单片机·嵌入式硬件
憧憬一下4 小时前
IMX 平台UART驱动情景分析:read篇--从硬件驱动到行规程的全链路剖析
arm开发·嵌入式硬件·嵌入式·linux驱动开发
cd_farsight5 小时前
单片机位数对性能会产生什么影响?!
单片机·嵌入式硬件
DS小龙哥5 小时前
基于STM32设计的智能桌面暖风机(华为云IOT)
stm32·物联网·华为云
honey ball9 小时前
LLC与反激电路设计【学习笔记】
单片机·嵌入式硬件·学习
Graceful_scenery15 小时前
STM32F103外部中断配置
stm32·单片机·嵌入式硬件