目录
第一部分 设计概述
第二部分 系统组成及功能说明
第三部分 完成情况及性能参数
第四部分 总结
第五部分 参考文献
第六部分 附录(代码)
第一部分 设计概述
1.1设计目的
目前智能家居涉及到人们家庭内部生活的各个方面,一个功能强大丰富,操作方便简单的家居控制系统是非常必要的。本设计就是为了使控制智能家居更加简单方便。为此以住宅为平台,必备建筑设备、网络通讯、信息家电和设备自动化,集系统、结构、服务、管理为一体的高效、舒适、安全、便利、环保的居住环境。智能家居在保持传统的居住功能的基础上,摆脱了被动模式,成为具有能动性的智能化现代工具。
1.2应用领域
家居,会议室,办公室等有用电器的场合
1.3主要技术特点
(1)语音识别:支持词条唤醒,支持离线词汇识别,支持中英文识别。
(2)支持脱离局域网控制。可从网络上获取当地实时时间和气温天气。
(3)支持绝大部分家用电器的红外协议破解。
(4)支持室内实时温湿度采集,并且更新在手机APP中。
(5)控制系统可采用外部供电和自带电池两种方式供电。
(6)自带OLED屏幕,可显示设备的状态和当前的一些参数。
(7)使用SG90舵机模拟实际生活中的开关门状态。
(8)使用RGB模拟实际家庭中不同房间的灯光。
1.4关键性能指标
(1)语音识别最高支持150条离线词汇,识别率可达98%。
(2)实时时间、天气、室外气温和室内温湿度在手机APP的刷新频率可达一秒十次。
(3)红外协议最高支持500个跳变电平的破解,破解准确度可达95%以上。
(4)使用电池供电最高续航时间可达20天。
(5)OLED屏幕尺寸为0.96寸,分辨率为128*64。
1.5主要创新点
(1)控制家居时,由于本地离线的语言模块,以及获得红外协议的控制功能,使得即使因为特殊原因引起的网络无法连接时,本套方案仍能通过语音进行本地的顺利控制。可靠性更高。
(2)家居控制系统设有高破解率的红外协议破解功能,可对日常生活中常用的红外遥控设备(空调、电视、投影仪等)的红外协议进行破解,并将破解好的数据进行编码并发送到上位机,若想使用破解的红外编码只需要用上位机发送即可。
(3)家居控制系统支持语音和手机远程控制设备,并且可在手机端实时监测各个家用电器的状态。
第二部分 系统组成及功能说明
2.1整体介绍
整个系统可分为输入部分,输出部分,输入输出部分。输入部分包括DHT11模块,用来采集室内温湿度并把数据传给主控;红外接收头,用来破解红外协议,破解成功后会把数据通过串口发送到上位机。输出部分包括红外发射管,用来发送解码的红外协议;舵机用来模拟开关门;RGB用来模拟各个房间的灯光;OLED显示屏用来显示一些必要的参数。输入输出部分包括ESP32模组,通过WIFI实现手机APP和主控的通信;语音模组,采集语音信号并处理传给主控,同时主控可以传输数据给语音模组进行语音播报。
2.2各模块介绍
ESP32模组:ESP32-WROOM-32 是一款通用型 Wi-Fi+BT+BLE MCU 模组,功能强大,用途广泛,可以用于低功耗传感器网 络和要求极高的任务,例如语音编码、音频流和 MP3 解码等。 此款模组的核心是 ESP32-D0WDQ6 芯片 *,具有可扩展、自适应的特点。两个 CPU 核可以被单独控制。时钟 频率的调节范围为 80 MHz 到 240 MHz。用户可以切断 CPU 的电源,利用低功耗协处理器来不断地监测外设 的状态变化或某些模拟量是否超出阈值。ESP32 还集成了丰富的外设,包括电容式触摸传感器、霍尔传感器、 低噪声传感放大器,SD 卡接口、以太网接口、高速 SDIO/SPI、UART、I2S 和 I2C 等。 模组集成了传统蓝牙、低功耗蓝牙和 Wi-Fi,具有广泛的用途:Wi-Fi 支持极大范围的通信连接,也支持通过路 由器直接连接互联网;而蓝牙可以让用户连接手机或者广播 BLE Beacon 以便于信号检测。ESP32 芯片的睡眠 电流小于 5 µA,使其适用于电池供电的可穿戴电子设备。模组支持的数据传输速率高达 150 Mbps,天线输出 功率达到 20 dBm,可实现最大范围的无线通信。
语音模组:JX108是机芯智能针对大量纯离线控制场景和产品最新推出的低成本纯离线语音识别芯 片,搭载高质量的语音算法和模型,为客户提供超低成本的离线语音识别方案,可广泛且快速应用 于智能家居, 各类智能小家电,玩具,开关、插座、灯具等需要语音操控的产品。 该芯片采用 32bit RSIC 架构内核,并加入了专门针对信号处理和语音识别所需要的 DSP 指令集,支持浮点运算的 FPU 运算单元,以及 FFT 加速器。 该方案支持 100 条本地指令离线识别,支持 RTOS 轻量级系统,具有丰富的外围接口, 以及简单友好的客制化工具。
DHT11温湿度传感器:DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。传感器包括一个电阻式感湿元件和一个NTC测 温元件,该模块具有超快响应、抗干扰能力强、性价比极高等优点。
0.96OLED模组: OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性分辨率为128*64 驱动IC为SSD1306;其具有内部升压功能,可通过两线IIC进行进行控制。
红外遥控:配备了一对红外发射管和红外接收管,可以通过红外接收管可以实现,学习所需红外信号的通信协议,根据所需协议通过红外发射管发射载波控制目标设备。
CH32V307VCT6核心板:CH32V305/7系列是基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。
第三部分 完成情况及性能参数
部署在本地的终端能够通过DHT11温湿度传感器获取当时环境湿度。反应灵敏,误差较小。
红外遥控功能
可以通过红外接收管实现,学习所需红外信号的通信协议,根据所需协议通过红外发射管发射载波控制目标设备。红外协议最高支持500个跳变电平的破解,破解准确度可达95%以上。
WIFI上报及控制功能
通过ESP32访问互联网得到时间,气温等数据,以及利用串口得到CH32V307VCT6读取湿度传感器数据,客户端可通过手机APP实时查看各类信息,并且可以远程控制红外遥控,开关灯,开关门等动作。在网络信号稳定的情况下,反应迅速,延时低
语言控制功能及OLED显示
支持词条唤醒,支持离线词汇识别,识别到特殊指令时会通过串口控制控制CH32V307VCT6控制三色RGB灯,舵机等外设,在5米内反应灵敏识别率稳定可达到百分之95以上。
普通状态下,OLED会动态显示表情以来表示待机状态。当语言模块识别到特殊指令就会在OLED显示相应数据的展示页面,等待语音播报完成后继续随机播放表情动画。
第四部分 总结
4.1可扩展之处
红外协议,由于芯片内存以及研发时间原因,目前的红外控制只是在程序编写时固定了一种协议,并不能做到通用,后续拓展的话需要加上FLASH进而可以储存多种红外信号,使得更加万能。
屏幕动画,目前动画只是两个表情动画的轮播,且交互上只有语言控制显示特点数据页面,并不足够智能,而且由于没用操作系统,表情动画的刷新全部放在中断,存在其他中断干扰的风险。后续拓展可以加上轻量型的操作系统,使得动画更流畅,交互更顺利。
功耗,智能家居可靠性也是非常重要的,因此断电的续航也不可忽视,目前的设计并未启用低功耗模式,这也是未来改进的一个方向。
通信控制方式的拓展,本作品目前只用了红外通信,普适性并不高,因此后续可以增加比如2.4G通信等来实现更广泛,
主机从机系统,当前的方案只是用一个主机来控制设备,比较狭隘,其实除了我们作品的主机以外,将其他设备都用物联网芯片来连接主机的内网,这样相比运用多种通信方式来控制,这样的方案更稳定,配置更简便。
4.2心得体会
本次比赛,中由于ESP32串口中断,CH32V307VCT串口中断以及屏幕刷新定时器中断的优先级冲突较多,由此让我们小组明白,单片机系统开发中的裸机开发的稳定性和流畅性都比较弱,因此我们要补充相应的轻量型操作系统知识并应用。
其次在实现红外解码并遥控的功能时,如果发送载波的中断优先级较低的话,会引起信号丢失,因此在发送信号的时候,要么以最高中断优先级发送,要么关闭所有中断才能使得红外信号的正常发送才是正确的选择
第五部分 参考文献
[1]文波.物联网技术在工业自动化中的应用研究[J].中国设备工程,2022(09):190-192.
[2]张博昱. 经IO模拟实现红外协议的方法、系统、设备和存储介质[P]. 广东省:CN112000600A,2020-11-27.
[3]原卓亮.基于语音识别的智能家电控制系统设计[J].电子技术,2022,51(05):12-14.
[4]徐东,张志强,周获. 基于红外协议的信号调制方法、电路及遥控终端[P]. 广东省:CN111627200B,2021-03-19.
第六部分 附录(代码)
mian文件
#include "debug.h"
#include "dma.h"
#include "led.h"
#include "usart.h"
#include "dht11.h"
#include "oled.h"
#include "timer.h"
#include "su_03t.h"
#include "ir_remote.h"
#include "emoj.h"
extern u8 ESP32_SendBuff[SEND_BUF_SIZE]; //发送数据缓冲区
extern u8 ESP32_ReceiveBuff[RE_BUF_SIZE]; //接收数据缓冲区
extern u8 ESP_hour,ESP_min,ESP_cmd; //ESP32的时间和命令
extern SU_03T_date Voice_date; //语音助手发送变量
extern IR_Structure IR;
extern Servo_Structure Servo;
extern int task_one_flag; //初始为0
extern u8 ESP_cmd; //ESP32的命令
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
LED_Init();
emoj_Init(); //动画初始化
//TIM2_Int_Init(719,1999);//20ms定时器
TIM3_Int_Init(69,8);//舵机和红外载波
UART1_Init(); //语音
UART2_Init(); //ESP32
DMA_Memory_to_Peripherals_Init(DMA1_Channel7,(u32)&USART2->DATAR,(u32)ESP32_SendBuff,SEND_BUF_SIZE); //初始化DMA发送通道
DMA_Peripherals_to_Memory_Init(DMA1_Channel6,(u32)&USART2->DATAR,(u32)ESP32_ReceiveBuff,RE_BUF_SIZE); //初始化DMA接收通道
USART_DMACmd(USART2,USART_DMAReq_Rx|USART_DMAReq_Tx,ENABLE); //使能串口1的DMA收发送
while(DHT11_Init()) //DHT11初始化
{
static u8 i=0;
i++;
if(i==50) break;
}
OLED_Init();
OLED_Clear(0);
GPIO_WriteBit(GPIOE, GPIO_Pin_12,1);
//GPIO_WriteBit(GPIOA, GPIO_Pin_4,1);
Servo.servo_angle=0;
OLED_Clear(0);
while(1)
{
DHT11_refresh_date();
Cmd_SU_03T(Voice_date.res_cmd); //语音模块处理
SYS_check();
Cmd_ESP32();
if(ESP_cmd!=0&&task_one_flag)
{
Voice_date.send_cmd=0x01;
Voice_date.send_dates[0]=0x01;
Voice_date.send_dates[1]=0x55;
SU_03T_date_send(&Voice_date); //ESP32就绪
task_one_flag=0;
}
}
}
万能红外解码:
void TIM4_IRQHandler(void)// 因为每进入一次捕获中断,计数器就会被清零,因此在发送数据时不可能发生溢出中断
{
static int i=0;
if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)//如果进入定时器更新中断说明采集已经结束或者出错
{
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC4P=1 设置为下降沿捕获
if(IR_get_flag==1) IR_get_flag=2;
i=0;//清空存储值
LED0=!LED0;
}
if(TIM_GetITStatus(TIM4,TIM_IT_CC4)!=RESET)
{
LED1=0;
IR_get_flag=1; //开始捕获了 标记为1
if(i==0) //第一个下降沿
{
TIM_SetCounter(TIM4,0); //清空定时器值
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC4P=1 设置为上升沿捕获
IRdate_BUF[0]=0;
}
if(i%2==0&&i!=0) //如果是下降沿进中断
{
IRdate_BUF[i]=TIM_GetCapture4(TIM4); //读取CCR4也可以清CC4IF标志位
TIM_SetCounter(TIM4,0); //清空定时器值
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC4P=1 设置为上升沿捕获
}
else if(i%2==1) //如果是上升沿进中断
{
IRdate_BUF[i]=TIM_GetCapture4(TIM4); //读取CCR4也可以清CC4IF标志位
TIM_SetCounter(TIM4,0); //清空定时器值
TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC4P=1 设置为上升沿捕获
}
i++;
}
本文章来源于互联网,如有侵权,请联系删除!原文地址:RISC-V MCU 智能语音物联网家居控制系统
相关推荐: 【MQTT】基于阿里云物联网平台实现两设备间相互订阅及发布消息
一、准备: 1.下载MQTT.fx – 1.7.1工具 https://www.jianshu.com/p/c9f50cf81cd2 2.进入物联网平台,并按照产品文档创建产品及设备 阿里云登录 – 欢迎登录阿里云,安全稳定的云计算服务平台 3.打开两个MQT…