基于AIR32F103CCT6单片机的智能家居系统

发布时间:2024年01月04日

一、摘要

? ? ? 本作品以AIR32F103CCT6单片机为控制核心,设计并制作了智能家居系统。系统由单片机控制电路、电源电路、复位电路等组成。智能家居系统包括蓝牙模块、温湿度模块、语音合成模块、OLED显示屏,通过蓝牙模块可以用手机控制智能家居的开关灯,语音合成模块并且可以播报智能家居实时的温湿度,系统稳定性和安全性高,功能丰富,人机交互良好。

二、智能家居的研究意义

1.提高生活质量:智能家居系统能够通过自动化的方式,实现对家庭设备的智能管理和控制,让家庭生活更加便捷和舒适。例如,通过智能家居系统,用户可以远程控制家中的灯光、空调、电视等设备,实现自动化调节室内温度、湿度和光照,提高居住的舒适度。

2.提升安全性:智能家居系统具有安全监控功能,能够实时监测家庭的安全状况。例如,安装在家中的摄像头和传感器可以及时发现异常情况,并及时报警,保障家庭成员的人身和财产安全。

3.节能环保:智能家居系统能够实现对家庭设备的智能调度和管理,有效降低能源消耗。例如,智能照明系统可以根据室内外光照情况自动调节灯光亮度,智能空调系统可以根据室内外温度和湿度自动调节运行模式,从而实现节能减排。

4.提高工作效率:智能家居系统能够帮助用户节省时间和精力,提高生活和工作效率。例如,用户可以通过智能手机或电脑远程控制家中的设备,实现家庭和工作场所的智能互联,方便用户随时处理家庭事务。

5.促进科技创新:智能家居系统的研究和开发,能够推动相关领域的技术创新和发展。例如,智能家居系统需要用到传感器、控制器、执行器等设备,这些设备的研究和制造技术的发展,将带动整个产业链的升级和变革。

满足个性化需求:智能家居系统能够根据用户的习惯和喜好进行智能化调节,满足用户的个性化需求。例如,智能音响可以根据用户的喜好推荐音乐,智能电视可以根据用户的历史观看记录推荐节目,提供更为贴心的服务。

智能家居的研究具有重要的意义,它能够提高生活质量,提升安全性,节能减排,提高工作效率,促进科技创新,满足个性化需求,推动社会进步和经济发展。

?三、方案设计与论证

方案一:采用蓝牙模块,蓝牙通信范围一般在10米以内,适合在个人和家庭范围内进行设备之间的无线连接和数据传输,蓝牙技术的应用范围非常广泛,涉及到通信、计算、消费电子等多个领域,HC-05 蓝牙模块是专为智能无线数据传输而打造,遵循 V20+EDR 蓝牙规范。

方案二:采用MIFI模块,ESP8266是一种强大的WIFI模块,它由ESPRESSIF SYSTEMS公司开发,可以实现与网络通信的功能。ESP8266在物联网中被广泛使用,可以通过串行通信接口连接到微控制器

方案选择:综上所述方案一使用简单,而且开发简单,价格便宜,最终选择方案一。

四、系统参数的设计

蓝牙模块、DHT11模块和OLED模块已经在我以前的文章详细说过,这里就不多解析了。

基于CH32V307VCT6单片机啊里云和蓝牙的数据传输 (qq.com)

4.1系统硬件设计

4.1.1.SYN6288语音合成模块

SYN6288中文语音合成芯片是背景宇音天下科技有限公司与2010年初推出的一款性价比更高,效果更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通信方式,接收待合成的文本数据实现文本到语音(或TTS语音)的转换。

支持GB2312、GBK、BIG5和UNICODE内码格式的文本
每次合成的文本量最多可达200字节
支持多种控制命令,包括:合成,停止,暂停合成,继续合成,改变波特率等
支持休眠功能,在休眠状态下可降低功耗,支持多种方式查询芯片状态。
支持串口数据通讯接口,支持三种通信波特率:9600,19200,38400
支持16级音量调整,播放文本的前景音量和播放背景音乐的背景音量可分开控制。
可通过发送控制标志调节词语语速,支持6级词语语速调整。
芯片内固化有多首和弦音乐、提示音效和针对某行业领域的常见语音提示音。
内部继承19首声音提示音,23首和弦提示音,15首背景音乐
内置10bit推挽式、可独立供电的功放,进行数模DAC输出
?

SYN6288语音合成模块系统构成框图

SYN6288语音合成模块接线图

这个模块只需要接4个引脚即可工作:

RXD—板子上的TXD
TXD—板子上的RXD
VCC—VCC(5V)
GND—GND

根据手册可以得知需要把对应的串口波特率设置为9600bps。

通讯协议图

主控电路原理图

主控电路PCB图

主控电路3D图

主控电路实物图

嘉立创EDA开源链接:心型灯 - 嘉立创EDA开源硬件平台

?4.1.3.软件设计

软件的总开发环境为MDK5,单片机的PB6和PB7(I2C1)引脚控制OLED的驱动,PA1(GPIO)引脚控制DHT11温湿度传感器的驱动,PA2和PA3(USART2)引脚控制蓝牙模块的数据收发,PB10和PB11(USART3)引脚控制SYN6288语音合成模块的数据收发,其他的引脚用来控制LED灯的亮灭。

主函数代码如下:

int main (void){//主程序
	
	
	RCC_Configuration(); //系统时钟初始化 
	I2C_Configuration();//I2C初始化
	OLED0561_Init(); //OLED初始?
  led_Init();	//LED的初始化
	LED_Init_A();
	LED_Init_B();
	LED_Init_B1();
	uart2_init(115200);		//初始化串口2
	
	OLED_DISPLAY_16x16(0,1*16,0);//显示智能家居系统
	OLED_DISPLAY_16x16(0,2*16,1);
	OLED_DISPLAY_16x16(0,3*16,2);
	OLED_DISPLAY_16x16(0,4*16,3);

	OLED_DISPLAY_16x16(0,5*16,4);//
	OLED_DISPLAY_16x16(0,6*16,5);
	
	while(DHT11_Init())
	{
		//printf("DHT11 Error \r\n");
		delay_ms(1000);
	}

	OLED_DISPLAY_16x16(2,0*16,6);//显示当前温度
	OLED_DISPLAY_16x16(2,1*16,7);
	OLED_DISPLAY_16x16(2,2*16,8);
	OLED_DISPLAY_16x16(2,3*16,9);
	
	OLED_DISPLAY_16x16(4,0*16,6);//显示当前湿度
	OLED_DISPLAY_16x16(4,1*16,7);
	OLED_DISPLAY_16x16(4,2*16,10);
	OLED_DISPLAY_16x16(4,3*16,9);
  syn6288_Init();
	syn6288_Say("欢迎进入智能家居系统AI小权为你服务");
  OLED_DISPLAY_8x16(6,0*8,'A');//
	OLED_DISPLAY_8x16(6,1*8,'I');//
	OLED_DISPLAY_16x16(6,1*16,11);//
	OLED_DISPLAY_16x16(6,2*16,12);
	OLED_DISPLAY_16x16(6,3*16,13);
	OLED_DISPLAY_16x16(6,4*16,14);
	OLED_DISPLAY_16x16(6,5*16,15);//
	OLED_DISPLAY_16x16(6,6*16,16);//
	OLED_DISPLAY_8x16(6,14*8,'!');//
	

	while(1){
	
		   if(flag_start==1)
			 {
				 flag_start=0;	
      	switch (a){
			    case '1':
					  GPIO_ResetBits(GPIOC,GPIO_Pin_13);
					  GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);
					  	GPIO_ResetBits(GPIOB, GPIO_Pin_3);
		GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_15);
		GPIO_ResetBits(GPIOB, GPIO_Pin_0 |GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5|GPIO_Pin_8| GPIO_Pin_9|GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15);
					  syn6288_Say("开灯");
					OLED_DISPLAY_16x16(6,0*16,17);//
					OLED_DISPLAY_16x16(6,1*16,19);
					OLED_DISPLAY_16x16(6,2*16,17);
					OLED_DISPLAY_16x16(6,3*16,19);
					OLED_DISPLAY_16x16(6,4*16,17);//
					OLED_DISPLAY_16x16(6,5*16,19);//
					OLED_DISPLAY_16x16(6,6*16,17);//
					OLED_DISPLAY_16x16(6,7*16,19);//
					break;
				  case '0':
					  GPIO_SetBits(GPIOC,GPIO_Pin_13);
						GPIO_SetBits(GPIOB, GPIO_Pin_3);
		GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_15);
		GPIO_SetBits(GPIOB, GPIO_Pin_0 |GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5|GPIO_Pin_8| GPIO_Pin_9|GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15);
				    syn6288_Say("关灯");
					  OLED_DISPLAY_16x16(6,0*16,18);//
					  OLED_DISPLAY_16x16(6,1*16,19);
					  OLED_DISPLAY_16x16(6,2*16,18);
					  OLED_DISPLAY_16x16(6,3*16,19);
					  OLED_DISPLAY_16x16(6,4*16,18);//
					  OLED_DISPLAY_16x16(6,5*16,19);//
					  OLED_DISPLAY_16x16(6,6*16,18);//
					  OLED_DISPLAY_16x16(6,7*16,19);//
					break;
					case '2':
					  		sprintf((char *)fTempStr,"%s %d %s","当前室内温度",temp,"度");
            		syn6288_Say((char *)fTempStr);
					      OLED_DISPLAY_16x16(6,0*16,18);//
					  OLED_DISPLAY_16x16(6,0*16,0);
					  OLED_DISPLAY_16x16(6,1*16,1);
					  OLED_DISPLAY_16x16(6,2*16,2);
					  OLED_DISPLAY_16x16(6,3*16,3);//
					  OLED_DISPLAY_16x16(6,4*16,20);//
					  OLED_DISPLAY_16x16(6,5*16,21);//
					  OLED_DISPLAY_16x16(6,6*16,8);//
					  OLED_DISPLAY_16x16(6,7*16,9);//
					break;
					case '3':
					  		sprintf((char *)fTempStr,"%s %d %s","当前室内湿度",humi,"克/立方米");
            		syn6288_Say((char *)fTempStr);
					      OLED_DISPLAY_16x16(6,0*16,0);
					  OLED_DISPLAY_16x16(6,1*16,1);
					  OLED_DISPLAY_16x16(6,2*16,2);
					  OLED_DISPLAY_16x16(6,3*16,3);//
					  OLED_DISPLAY_16x16(6,4*16,20);//
					  OLED_DISPLAY_16x16(6,5*16,21);//
					  OLED_DISPLAY_16x16(6,6*16,10);//
					  OLED_DISPLAY_16x16(6,7*16,9);//
					break;
				default:
					break;
			}
		  }	
		        shucudianya(); //温度湿度检测
			      
//				    shedindianliu(); //设定电流
//		        shishidianliu(); //实时电流
//		        dianweiqi();//电位器步进
//		        KEY_flag();//按键扫描
//	          anjian();//按键扫描
	}
}

void USART2_IRQHandler(void)  
{  
    USART_ClearFlag(USART2,USART_FLAG_TC);  
    if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)//检查指定的USART中断发生与否  
    { 
		 a=USART_ReceiveData(USART2);
	        flag_start=1;	  																														   
    }   
} 

五、智能家居小屋的制作

小屋的制作材料是在淘宝买的,商家提供说明书和制作视频

https://m.tb.cn/h.5omSfZCILLmiviX?tk=inrAW6m4Gxk?

部分制作说明书图

六、实物演示效果

实物演示效果图

实物演示效果图

本文章已同步发表在微信公众号:遇事可问

基于AIR32F103CCT6单片机的智能家居系统 (qq.com)

本文章已同步发表在知乎:星空

基于AIR32F103CCT6单片机的智能家居系统 - 知乎 (zhihu.com)

文章来源:https://blog.csdn.net/weixin_54509241/article/details/135357760
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。