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

相关推荐
蜀黍@猿15 分钟前
【GD32】存储器架构介绍
单片机·mcu
Aczone282 小时前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
EkihzniY9 小时前
OCR 证件识别:驱动澳门酒店自助入住智能化
嵌入式硬件·ocr
好家伙VCC9 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
伴杯猫9 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
搬砖的小码农_Sky9 小时前
常见的显示器接口技术
嵌入式硬件·计算机外设·显示器
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
点灯小铭11 小时前
基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计
stm32·单片机·智能手机·毕业设计·课程设计
沐欣工作室_lvyiyi11 小时前
基于单片机的智能路灯(论文+源码)
单片机·嵌入式硬件·毕业设计
Yyq1302086968211 小时前
SIT1050 5V 供电,±40V 接口耐压,1Mbps 高速 CAN 总线收发器
单片机·嵌入式硬件