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

相关推荐
芜湖_3 小时前
CLion入门2.0(优雅进行STM32和ESP32开发)(船新版本)
stm32·esp32·开发环境·clion
爱学电子的刻刻帝4 小时前
LVGL+FreeRTOS实战项目:智能健康助手(蓝牙模块篇)
单片机·嵌入式硬件
【ql君】qlexcel6 小时前
STM32的ADC工作模式
stm32·同步·adc·工作模式·规则组·注入组·交叉
2401_843785236 小时前
STM32 GPIO
stm32·单片机·嵌入式硬件
jiuri_12157 小时前
单片机内存管理剖析
单片机·嵌入式硬件
shdbdndj7 小时前
STM32单片机:GPIO模式
stm32·单片机·嵌入式硬件
2401_843785238 小时前
STM32简介
stm32·单片机·嵌入式硬件
【 STM32开发 】8 小时前
STM32_SD卡的SDIO通信_基础读写
stm32·cubemx·sd卡·tf卡·sdio
tadus_zeng12 小时前
stm8s单片机(二)外部中断实验
单片机·嵌入式硬件
大专生学编程13 小时前
基于ESP32-IDF驱动GPIO输出控制LED
嵌入式硬件·esp32·esp-idf