一、摘要
本作品以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)
本文章已同步发表在知乎:星空文章来源:https://www.toymoban.com/news/detail-789391.html
基于AIR32F103CCT6单片机的智能家居系统 - 知乎 (zhihu.com)文章来源地址https://www.toymoban.com/news/detail-789391.html
到了这里,关于基于AIR32F103CCT6单片机的智能家居系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!