基于STM32的智能温控系统

一、智能温控系统简介

本系统是基于STM32F103C8T6的智能温控系统,可以做到温度过高,会产生报警信息,并且自动打开风扇降温;温度过低会自动开启加热装置进行加热。温度采集选用DS18B20温度传感器,实时对温度进行采集。

二、温度传感器

DS18B20是一款以总线通信方式读取温度数据的传感器。外观图如下。

根据下图的工作时序图,可以编写出它工作的代码。 

/*******************************************************************************
* 函 数 名         : DS18B20_Read_Byte
* 函数功能		   : 从DS18B20读取一个字节
* 输    入         : 无
* 输    出         : 一个字节数据
*******************************************************************************/
u8 DS18B20_Read_Byte(void)    // read one byte
{        
    u8 i,j,dat;
    dat=0;
	for (i=1;i<=8;i++) 
	{
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }						    
    return dat;
}

*******************************************************************************
* 函 数 名         : DS18B20_Write_Byte
* 函数功能		   : 写一个字节到DS18B20
* 输    入         : dat:要写入的字节
* 输    出         : 无
*******************************************************************************/
void DS18B20_Write_Byte(u8 dat)     
{             
	u8 j;
    u8 testb;
	DS18B20_IO_OUT();//SET PG11 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;// Write 1
            Delay_us(2);                            
            DS18B20_DQ_OUT=1;
            Delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;// Write 0
            Delay_us(60);             
            DS18B20_DQ_OUT=1;
            Delay_us(2);                          
        }
    }
}

 二、OLED显示屏

 温度显示采用0.96寸的OLED液晶显示屏,该显示屏具有64*128个像素点。采用IIC通信方式,与主控端进行数据传输;完全适用本系统的温度数据、风扇状态、加热器状态显示。根据IIC通信的时序编写显示屏的驱动代码。

/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void OLED_I2C_Start(void)
{
	OLED_W_SDA(1);
	OLED_W_SCL(1);
	OLED_W_SDA(0);
	OLED_W_SCL(0);
}

/**
  * @brief  I2C停止
  * @param  无
  * @retval 无
  */
void OLED_I2C_Stop(void)
{
	OLED_W_SDA(0);
	OLED_W_SCL(1);
	OLED_W_SDA(1);
}

/**
  * @brief  I2C发送一个字节
  * @param  Byte 要发送的一个字节
  * @retval 无
  */
void OLED_I2C_SendByte(uint8_t Byte)
{
	uint8_t i;
	for (i = 0; i < 8; i++)
	{
		OLED_W_SDA(Byte & (0x80 >> i));
		OLED_W_SCL(1);
		OLED_W_SCL(0);
	}
	OLED_W_SCL(1);	//额外的一个时钟,不处理应答信号
	OLED_W_SCL(0);
}

 三、风扇和加热片

加热使用PTC加热片,通电后就可以工作,使用继电器控制通断即可。 

 风扇采用继电器控制直流电机通断完成散热功能。

最后附上整个工程的代码。 

基于STM32单片机的智能温控系统资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/qq_62291061/89232155

### 继电器外接PTC加热片接线及STM32F103C8T6控制 #### 一、硬件连接说明: **继电器模块** 1. **IN(输入端):** 接到STM32的GPIO口,用于通过程序控制继电器开关状态; 2. **VCC和GND:** 分别接到电源正极和地线上供电给整个电路。 **PTC加热片** 1. PTC的一侧接入主回路电源正极端; 2. 另一侧则需经由常开触点NO (Normally Open) 和公共端COM回到另一相线形成闭合路径;当继电器吸合时才会让电流流过该负载完成加热过程。 请注意选择适当规格保险丝以保障安全,并确保所有电气连接牢固可靠避免虚焊情况发生。同时建议采用隔离措施如光耦等减少干扰对单片机的影响并保护其他元器件免受损害。 #### 二、软件编程部分: 对于`STM32F103C8T6`而言,在初始化阶段需要配置好对应的IO作为输出功能去驱动外部元件工作。可以利用标准库函数或是HAL库来进行操作,下面给出基于后者简单示例代码片段: ```c // 初始化 GPIO 端口 MX_GPIO_Init(); void MX_GPIO_Init(void) { // 配置 LED 管脚为推挽输出模式 GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } // 控制继电器开启或关闭 void Control_Relay(bool state){ if(state == true){ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 打开继电器 }else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 关闭继电器 } } ``` 上述只是非常基础性的引导思路,请结合实际应用场景调整具体的参数设定以及增加必要的防护机制比如加入延时等待确认动作是否成功等功能特性。另外还需编写相应的定时任务或者其他事件触发条件来调用此接口实现自动化流程管理。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张_Serendipity !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值