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

相关推荐
lucy153027510791 小时前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
scan113 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0114 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh15 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司15 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比16 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie16 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔16 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@17 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^1382879887219 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源