STM32项目分享:智能家电控制系统

目录

 一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

七、包含内容

  项目分享


 一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能家电控制系统

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的智能家电控制系统

功能如下:

  1. STM32F103C8T6单片机系统板作为主控单元
  2. 显示功能:温湿度数据实时显示在OLED屏幕上
  3. 自动控制:判断温湿度是否在阈值范围内,否则蜂鸣器报警
  4. 阈值更改:按键可调节阈值大小
  5. 远程控制:通过机智云APP远程控制灯光、风扇和窗帘的开关
  6. 远程监视:机智云APP可以远程监视环境温湿度数据信息

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DHT11温湿度传感器
  • ESP8266-01S  WiFi模块
  • 继电器
  • 大功率LED灯模块
  • 风扇模块
  • 步进电机

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	OLED_Init();
	DHT11_UserConfig();
	MOTOR_UserConfig();
	Key_Init();
	USB_Init();
	Buzzer_Init();
	
	Temp_value = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASH
	Humi_value = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASH
	
	Timer2_Init(9,14398);
	uart2_init(9600);
	uart1_init(115200);
	
	GENERAL_TIM_Init();
	userInit();	//完成初始赋值
	gizwitsInit();
	IWDG_Init();
	
	while (1)
	{
		IWDG_ReloadCounter(); //重新加载计数值 喂狗

		switch(Menu)
			{
				case 1:
					Menu1();	//显示菜单1
				
					/*判断电机启动标志位是否为1*/
					if(Curtain_ON_Flag == 1)
					{
						MOTOR_Direction_Angle(1,0,180,1);	//顺时针电机旋转 180度
						MOTOR_STOP();	//电机停止
						Curtain_ON_Flag = 0;
					}
					
					/*判断电机关闭标志位是否为1*/
					if(Curtain_OFF_Flag == 1)
					{
						MOTOR_Direction_Angle(0,0,180,1);	//逆时针电机旋转 180度
						MOTOR_STOP();	//电机停止
						Curtain_OFF_Flag = 0;
					}
					break;
					
				case 2:
					OLED_Clear();	//清屏
					Menu2();	//显示菜单2
					Menu = 3;	
				case 3:
					OLED_Option(SetNum);	//显示当前选择的位置
					OLED_ShowNum(2,10,Temp_value,2);	//显示温度阈值数据
					OLED_ShowNum(3,10,Humi_value,2);	//显示湿度阈值数据
				
					/*累计按键1按下的次数*/
					if(KeyNum == 1)
					{
						KeyNum = 0;
						SetNum++;
						if(SetNum > 2)
						{
							SetNum = 1;
						}
					}
					
					/*当位置指向温度阈值根据按键3或4调节数值*/
					if(SetNum == 1)
					{
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Temp_value++;
							if(Temp_value >= 100)
							{
								Temp_value = 0;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Temp_value--;
							if(Temp_value >= 100)
							{
								Temp_value = 99;
							}
						}
					}

					/*当位置指向湿度阈值根据按键3或4调节数值*/
					if(SetNum == 2)
					{
						if(KeyNum == 3)
						{
							KeyNum = 0;
							Humi_value++;
							if(Humi_value >= 100)
							{
								Humi_value = 0;
							}
						}
						if(KeyNum == 4)
						{
							KeyNum = 0;
							Humi_value--;
							if(Humi_value >= 100)
							{
								Humi_value = 99;
							}
						}
					}
					
					/*当按键2按下时回到主菜单*/
					if(KeyNum == 2)
					{
						KeyNum = 0;
						
						/*将更改过的阈值存入Flash中*/
						FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value);
						OLED_Clear();	//清屏
						Menu = 1;	//显示菜单1
					}
					break;
					
				default : break;
		}
		userHandle();
		gizwitsHandle((dataPoint_t *)&currentDataPoint);

	}
}

六、实验效果 

七、包含内容

  项目分享

猜你喜欢

转载自blog.csdn.net/qq_44016222/article/details/145367851
今日推荐