STM32F103单片机控制继电器开关小风扇和加热片

前言:

   在智能衣柜中,使用异味传感器检测柜内异味值,当异味值大于设定值时会自动开启小风扇,小风扇起到一个排污去浊的功能,再加上温湿度传感器检测柜内的温度和湿度,当温湿度达到设定值时,加热片自动发热,起到一个降温除霉的作用。想要使小风扇和加热片自动开启或者关闭,就要使用继电器作为一个自动开关装置。

一,5V继电器

二,两路5V继电器

2.1简介

继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用,可以用来控制5V的小风扇和加热片。

2.2继电器硬件图

放一张继电器图,主要是让大家避避雷,我第一次使用的时候,一直没效果,上网搜索好多博客来看才明白输出端的线怎么接的,写在这里也是希望大家不用像我一样。

输入端口:外接5V电源,输入端哪里有个绿色框框,黑色跳帽可以控制继电器是高电平触发还是低电平触发。

输出端口:从左往右看,分别是NO1/NO2,COM1/COM2,NC1/NC2,代表常开,公共端,常闭三种状态。

继电器的两种状态,开和关,当继电器触发时,为打开状态,NOn口就会被使能,当继电器为关闭状态时,NCn口就会被使能,中间作为公共端连接输出。

元器件的线如何连接?

继电器为打开状态:小风扇红黑两根线子,红线接入继电器的NO1/NO2口,继电器的COM1/COM2拿一根公母杜邦线引出来接入5V电源,小风扇的黑线接STM32的GND口。

继电器为关闭状态:小风扇红黑两根线子,红线接入继电器的NC1/NC2口,继电器的COM1/COM2拿一根公母杜邦线引出来接入5V电源,小风扇的黑线接STM32单片机的GND口。连接图下图所示:

输入端

 输出端

三,软件代码部分

3.1软件部分---STM32CUBEMAX部分

第一步:配置STM32单片机PC2,PC3口味GPIO_OUT输出

 第二步:黑色跳帽插入H端,为高电平触发,在MCU上电时,初始化IO口为低电平输出,开漏输出,输出使能上拉电阻,并设置标签:FAN_IO,HOT_IO,如下图所示:

第三步:STM32Cubemaa生成keil代码。


3.2软件部分---Keilv5代码部分

第一步:因为加热片和小风扇的代码比较少和简单,就把他们合成一个文件去使用哦,在工程文件中添加小风扇和加热片.c和.h控制文件。

 第二步:在fan&hot.h中添加以下代码:

#ifdef H_fan_HOT_H
#define H_fan_HOT_H
#include "main.h"

void FAN_Switch(uint8_t a);//¿ªÆô/¹Ø±Õ·çÉÈ

void HOT_Switch(uint8_t a);//¿ªÆô/¹Ø±Õ¼ÓÈÈÆ¬

#endif

第三步:在fan&hot.c中添加以下代码:

#include "fan&hot.h"
#include "gpio.h"

void FAN_Switch(uint8_t a)
{
	if(a)	//ÅжÏaÊÇ·ñÎªÕæÖµ
	{
	  HAL_GPIO_WritePin(GPIOC,FAN_IO_Pin,GPIO_PIN_SET);
	}
	else
	 HAL_GPIO_WritePin(GPIOC,FAN_IO_Pin,GPIO_PIN_RESET);	//ÉèÖÃPC8Òý½Å״̬Ϊ¸ßµçƽ

}


void HOT_Switch(uint8_t a)
{

 if(a)	//ÅжÏaÊÇ·ñÎªÕæÖµ
	{
	 HAL_GPIO_WritePin(GPIOC,HOT_IO_Pin,GPIO_PIN_SET);
	}
	else
	 HAL_GPIO_WritePin(GPIOC,HOT_IO_Pin,GPIO_PIN_RESET);	//ÉèÖÃPC8Òý½Å״̬Ϊ¸ßµçƽ

}

第四步:在main.c中加入新增.h文件:

 第五步:在mian.c的while循环中打开/关闭小风扇,并在串口处打印输出。

 四,测试输出

4.1sscom串口输出

 看图可知,每隔5s打开/关闭小风扇,继电器控制小风扇/加热片成功。

4.2实际控制测试

VID_20221208_153540

看视频可知,小风扇5s打开,5s之后关闭的状态。

五,总结

总结:上面部分我只是做了继电器控制小风扇的测试,如果想要做成达到预订异味值就开启风扇或加热片的效果,可以加上温度值进行判断,就是在while中加一个if 判断函数,就可以了哦。目前规划就是加紧把剩下的部分更新出来吧,争取1月之前更完。

有什么问题可以私信给我,我看到都会回的,当然直接要整个毕业设计的代码勿扰哈!

基于STM32加热控制模块通常需要以下几个步骤: 1. **硬件连接**: - 将加热的电源线接到STM32的GPIO口,通常是通过一个中间的电阻将5V电压降压到适合加热的工作电压,比如3.3V或2.8V。 - 如果有温度传感器,也需将其连接到ADC输入口。 2. **初始化GPIO**: 使用STM32 HAL库初始化GPIO,设置为推挽输出模式(如果使用的是PWM控制),以便精确调整电流。 ```c #include "stm32f4xx_hal.h" // 初始化GPIO void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; // 配置加热控制GPIO GPIO_InitStruct.Pin = GPIO_PIN_x; // 替换为实际使用的GPIO引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 输出推挽 GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉下拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOx, &GPIO_InitStruct); } ``` 3. **温度检测** (如果有): 使用ADC读取温度传感器的数据,并可能需要进行A/D转换处理。 ```c uint16_t ReadTemperature(void) { uint16_t TempValue = 0; ADC_HandleTypeDef* hadc = ...; // 获取ADC handle HAL_ADC_Start(hadc); // 开始转换 HAL_ADC_PollForConversion(hadc, 1000); // 等待转换完成 if(HAL_ADC_GetState(hadc) == HAL_ADC_STATE_COMPLETED){ TempValue = HAL_ADC_GetValue(hadc); // 对数据进行处理校准 } return TempValue; } ``` 4. **控制加热**: 如果是使用PWM,可以设置周期占空比来调节电压进而控制发热。 ```c void PWM_HeaterControl(uint8_t dutyCycle) { TIM_HandleTypeDef* htim = ...; // 获取定时器handle float pwm_value = (float)dutyCycle / 100.0 * STM32_PWM_MAX_DUTY_CYCLE; HAL_TIM_SetCompare(htim, 1, (uint16_t)pwm_value); HAL_TIM_Base_Start_IT(htim); } ``` 5. **主循环与控制逻辑**: 在`while(1)`循环中,监控温度并根据需求调整加热的功率。 ```c int main() { // 其他系统初始化... while (1) { int temp = ReadTemperature(); if (temp > desired_temperature) { PWM_HeaterControl(decrease_pwm_duty); } else if (temp < desired_temperature) { PWM_HeaterControl(increase_pwm_duty); } } } ```
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值