【基于stm32c8t6的智能加湿系统】

基于stm32c8t6的智能加湿系统

下面将自己最近做的一个简易的智能加湿系统进行分享

准备工作

一、硬件部分
加湿器
继电器
蜂鸣器
水位传感器
OLED显示屏
DHT11温湿度传感器
按键若干
杜邦线若干
stm32c8t6最小系统板

图1 c8t6

【基于stm32c8t6的智能加湿系统】_第1张图片

图2 加湿器
【基于stm32c8t6的智能加湿系统】_第2张图片

图3 oled
【基于stm32c8t6的智能加湿系统】_第3张图片

图4 水位传感器
【基于stm32c8t6的智能加湿系统】_第4张图片

图5 继电器

【基于stm32c8t6的智能加湿系统】_第5张图片

图6 dht11

【基于stm32c8t6的智能加湿系统】_第6张图片

图7 蜂鸣器

【基于stm32c8t6的智能加湿系统】_第7张图片

二、软件部分

1开发环境 烧入 调试工具

【基于stm32c8t6的智能加湿系统】_第8张图片

2 主程序

/************************************智能加湿器系统********************************

1、可以通过按键设置湿度阈值。
2、可以通过按键设置湿度阈值。

3、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
4、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。

5、环境湿度测量范围:20%-95% RH,测量误差:±5%。5、具有容器水位检测功能。
6、环境湿度测量范围:20%~95%RH,测量误差:±5%。5、具有容器水位检测功能。

系统采用3个不同颜色的LED灯表示三种不同的湿度状态
湿度<40  40 < s湿度< 60  湿度 > 60

*******************************************************************************
Author:xiao yin
Date:2022-4
*******************************************************************************/
#include "stm32f10x.h"
#include "usart.h"
#include "oled.h"
#include "delay.h"
#include "led.h"
#include "adc.h"
#include "key.h"
#include "buzzer.h"
#include "string.h"
#include "jdq.h"
#include "dht11.h"
#include "water.h"


uint16_t i;
uint8_t k;
uint8_t kk;
uint8_t kkk; //温湿度变量相关
unsigned char keyvalue;//按键返回值
unsigned char flag;//界面切换标志
unsigned char flag_function = 0;//函数功能标志位
unsigned char interface_flag = 0; //在温湿度实现界面标志
unsigned char m_humidity = 20; //修改湿度变量 设置初值
unsigned char Relay = 1;// 继电器状态标志  默认为关   0开
unsigned char water = 20; //水位高度
unsigned char hfier = 1;//  加湿器状态标志  默认为关   0 开
extern unsigned int ad_value;
extern unsigned int val;

void main_interface(void);  //主界面
void Interface2(void);  //湿度数值界面
void Key_Mode(void); //模式切换


/*********************************************界面显示函数*****************************/
//主页面
void main_interface(void)
{
//		OLED_Clear(0);
//		delay_ms(10);

		OLED_ShowCHinese_six(6,0,0);//智
		OLED_ShowCHinese_six(26,0,1);//能
		OLED_ShowCHinese_six(46,0,2);//加
		OLED_ShowCHinese_six(66,0,3);//湿
		OLED_ShowCHinese_six(82,0,4);//系
		OLED_ShowCHinese_six(98,0,5);//统	  
		OLED_ShowNum(6,3,2022,4,16);
		OLED_ShowCHinese_TWO(40,3,0);//年 
		OLED_ShowNum(50,3,4,2,16);
		OLED_ShowCHinese_TWO(74,3,1);//月 
		OLED_ShowNum(92,3,12,2,16);
		OLED_ShowCHinese_TWO(108,3,2);//日 	
		OLED_ShowCHinese_six(35,6,6); //名字显示
		OLED_ShowCHinese_six(55,6,7);
		OLED_ShowCHinese_six(75,6,8);
	  
}

//界面2 温湿度显示及湿度修改值
void Interface2(void)
{
	//以字符串的形式显示
	OLED_ShowString(35,1,(unsigned char *)"C_T:",3); // Current_Temperature 当前温度
	OLED_ShowCHinese_Three(85,0,11); //C
	
	OLED_ShowString(35,3,(unsigned char *)"C_H:",3); // Current_Humidity 当前湿度
	OLED_ShowCHinese_Three(85,2,13); //.
	
	OLED_ShowString(35,5,(unsigned char *)"M_H:",3); // Modi_Humidity 修改当前湿度
	OLED_ShowCHinese_Three(85,5,13); //.	
}

//界面三 水位、继电器、加湿器状态显示
void Interface3(void)
{
	//以字符串的形式显示
	OLED_ShowString(35,1,(unsigned char *)"Relay:",6); //Realy 状态 0-》开 on 1 -》关 off
	OLED_ShowNum(88,1,Relay,1,3); //状态值
	
	OLED_ShowString(35,3,(unsigned char *)"Hfier:",6); // 加湿器状态 0->开On  1-》关 0ff
	OLED_ShowNum(88,3,hfier,1,3);//状态值
	OLED_ShowString(35,5,(unsigned char *)"Water:",6); // 水位高度
	OLED_ShowNum(88,5,water/100,1,3); //状态值
	OLED_ShowNum(96,5,water/10%10,1,3);
	OLED_ShowNum(102,5,water%10,1,3);
}


/******************************三种LED控制********************************/
void Led_Switch(void)
{
	//1.湿度 < 40
	if(kk < 40)
	{
			Led1_on();
			//printf("led1_on\n");
	}
	else
	{
		Led1_off();
		//printf("led1_off\n");
	}
	
	//2.40 < 湿度 < 60
	if((kk > 40) &&(kk < 60))
	{
		Led2_on();
		//printf("led2_on\n");
	}		
	else
	{
		Led2_off();
		//printf("led2_off\n");
	}
	
	//3.湿度 > 60
	if(kk > 60)
	{
			Led3_on();
		//printf("led3_on\n");
	}
	else
	{
		
		Led3_off();
		//printf("led3_off\n");
	}
		
}

//温度获取函数
void Get_Temperature(void)
{
//		uint16_t i;
//		uint8_t k;
//		uint8_t kk;
//		uint8_t kkk;
//上面定义为全局 其他地方要用到
		DHT11_UpdateData();
		
		i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
    if(Rxbuff[4] ==i)
		{
		  	k=Rxbuff[2];
			kk=Rxbuff[0];
			kkk=Rxbuff[3];
			OLED_ShowNum(68,1,k/10,3,3);
			OLED_ShowNum(76,1,k%10,3,3);
			OLED_ShowNum(68,3,kk/10,3,3);
			OLED_ShowNum(76,3,kk%10,3,3);
			OLED_ShowNum(68,5,m_humidity/10,3,3);  //修改湿度值显示
			OLED_ShowNum(76,5,m_humidity%10,3,3);

		}
				Led_Switch();
			//printf("t:%d  %d\n",k,kk);  //测试的时候通过串口打印数据
}


/************************************功能函数********************************************/

//通过按键来进行界面的切换
void Key_Mode(void)
{
	keyvalue = KEY_Scan(); //按键1来进行模式的切换
	
	if(keyvalue == 1) //判断按键1是否被按下 向上进行界面切换
	{
		Buzzer_On();
		delay_ms(100);
		Buzzer_Off();
		delay_ms(100);
		flag++;	
		if(flag > 3) //界面边界处理
		{
			flag = 1;
		}
	}	
	if(keyvalue == 4)  //向下进行界面切换
	{
		Buzzer_On();
		delay_ms(100);
		Buzzer_Off();
		delay_ms(100);	
		flag--;
		if(flag < 1)  //界面边界处理
		{
			flag = 3;
		}
	}
	if(flag == 2) //按键处理 进行湿度修改
	{
		
		if(keyvalue == 2)
		{
			Buzzer_On();
			delay_ms(100);
			Buzzer_Off();
			delay_ms(100);
			m_humidity +=2; //每次加2
			if(m_humidity >= 95) //边界处理最大95
			{
					m_humidity = 20;  //超过最大值重新置为初值
			}
			
		}
		
		if(keyvalue == 3)
		{
			Buzzer_On();
			delay_ms(100);
			Buzzer_Off();
			delay_ms(100);
			m_humidity -= 2;//每次减2
			if(m_humidity <= 20) //边界最小处理
			{
					m_humidity = 95; //小于最小值设置为最大值
			}	
		}
	}
		
}


void Relay_Controal(void)
{
		unsigned char i =0;//次数
		//通过比较当前湿度与我们设置的阈值 和水位控制继电器的开与断
	 //当前湿度小于我们所设置的阈值 打开继电器进行加湿
		if((kk < m_humidity) &&((water !=0)))
		{
			Relayopen();
			Relay = 0; //打开标志
			hfier = 0; //加湿标志
		}
		else if(kk > m_humidity)//关闭
		{
			Relayoff();
			Relay = 1; //关闭标志
			hfier = 1; //加湿标志
		}	
	//水位为0 是发出警报
		else	if(water == 0) 
			{
				Relayoff();
				Relay = 1; //关闭标志
				hfier = 1; //加湿标志
				for(i =0;i<5;i++)
				{
					Buzzer_On();
					delay_ms(100);
					Buzzer_Off();
					delay_ms(100);
				}
			}		
}

/*****************************************主函数*********************************/
int main(void)
{		
	 KEY_GPIO_INIT();//按键初始化
	 USART_INIT(115200);
	 LED_GPIO_INIT();// led初始化
	 InitRelay();
	 ADC1_Init(); //水位传感器初始化
	 Buzzer_GPIO_Init();//蜂鸣器初始化
	 OLED_Init();			//初始化OLED  
	 OLED_Clear(0);	
	 Relayoff();	
	while(1)
	{

		Key_Mode();
		switch(flag)
		{
			case 1: OLED_Clear(0);main_interface();break;
			case 2: OLED_Clear(0);Get_Temperature();Interface2();break;
			case 3: OLED_Clear(0);Interface3();break;
			default:
				break;
		}
		Relay_Controal();
		Led_Switch();
		water = water_Get_Value();

	}
}

三、效果图

接线有点乱 整体效果还是有的

【基于stm32c8t6的智能加湿系统】_第9张图片

【基于stm32c8t6的智能加湿系统】_第10张图片
【基于stm32c8t6的智能加湿系统】_第11张图片

工程链接

链接:https://pan.baidu.com/s/1m8LwLMFuzUaNjzjuQDCazQ
提取码:exrd
–来自百度网盘超级会员V4的分享

你可能感兴趣的:(简单小项目,stm32,智能加湿系统)