收藏官网,优惠快人一步
您可以尝试通过快捷键 CTRL + D 加入收藏夹
瑞萨MCU杯第八届立创电子设计开源大赛正式落幕,最终获奖项目正式出炉!本文介绍的是:本届大赛三等奖项目《基于瑞萨R7FA2E1A72DFL实现的智能空调伴侣》。
本文作者:瑞萨MCU杯第八届立创电子设计开源大赛选手@lingfengcys,禁止商用,未经许可禁止转载。
本作品是一款放置在家中的智能空调伴侣,旨在使用户家中传统的空调实现智能控制。智能伴侣以瑞萨R7FA2E1A72DFL作为主控,利用温湿度传感器单元、WiFi数据传输单元、红外收发单元、语音单元、LCD显示单元等进行智能控制,实现了室内温湿度采集、实时天气预报、空调工作状态设置、语音识别、语音播报、LCD显示等功能。产品具体特性如下:
本项目软件、硬件完全开源,可以浏览、下载本项目资源,或在此基础上进行二次开发,但是禁止未授权的商用。
系统整体方案
本作品是基于瑞萨R7FA2E1A72DFL微控制器作为主控制器。整个系统分为7个单元,分别为供电单元、主控单元、传感器采集单元、WiFi数据传输单元、语音处理单元、显示单元以及控制输出单元。具体方案框图如下所示:
各单元详细介绍如下:
(1)供电单元:
原理图如下:
如上原理图所示,供电单元采用micro usb作为供电接口输入5V电压,采用AMS1117-3.3 LOD作为5V转3.3V电源使用。由于该USB接口为常用电源插拔口,为了安全增加USB专用ESD芯片USBLC6-2P6,防止插拔过程中产生静电造成接口损伤;USB转串口通讯部分放到控制输出单元详细说明。
(2)主控单元
原理图如下:
主控单元由上图所示,程序下载调试接口使用SWD口;芯片子时钟配置为32.768K用于RTC定时使用;芯片工作模式选择接口默认设置为高电平,为单芯片模式;芯片复位电路上增加续流二极管,可以将复位线上电容的电压快速泄放到电源上;
(3)传感器采集单元
原理图如下:
传感器采集单元如上图所示,DHT11主要用于室内温湿度采集,如果传感器和主控芯片之间通讯距离过远导致误码,可以适当减小R20,延长通讯距离;NTC10K主要用于不采集湿度只采集温度场景下,降低成本使用;
(4)WiFi数据传输单元
原理图如下:
WiFi数据传输单元如上图所示,此WiFi模组采用乐鑫ESP8266模块,按键SW3用于下载WiFi程序使用,WiFi下载时,IO0=0,再按下SW2复位后才可进入下载模式。WiFi供电需要保证3.3V,0.5A,在WiFi进入smart config模式时峰值电流可能达到500mA左右。WiFi串口0连接主控芯片串口1,由于有时WiFi需要单独测试使用,所以在WiFi与主芯片连接串口之间增加了跳线帽,方便测试使用。
(5)语音处理单元:
原理图如下:
语音处理单元如上图所示,5V供电,保证0.5A供电电流,由于喇叭工作时电流波动较大,所以电源处要增加电容。注意喇叭和mic差分走线,PCB上最好对这两对线做包地处理,减少音频信号传输干扰。在mic和喇叭接口处增加双向TVS,防止ESD干扰,注意TVS一定选取寄生电容小的,防止对音频产生干扰。H4音频模组烧录接口,烧录时SW5需要按下。
(6)显示单元:
原理图如下:
显示单元如上图所示,10Pin SPI通讯2.4寸LCD屏,LCD主控芯片为ST7789V2。R15、R14、R16为LCD背光限流使用。
(7)控制输出单元:
原理图如下:
控制输出单元如上图所示,分为三部分,红外收发、通讯接口、单按键开关。红外接收单元用于接收市面上红外遥控器发送的编码,发送单元用于发送空调控制编码,二者底层驱动皆采用NEC协议。USB接口连接CH340实现USB转串分别用于与主芯片打印串口连接和与WiFi串口0连接,具体连接哪一个可以使用SW4进行选择,SW4抬起连接WiFi串口,SW4按下连接主控芯片串口2。单按键开关工作原理在原理图上已经标明,通过两个GPIO可以实现整个设备的开启关闭,注意此电路只能实现延迟关闭不能实现延迟开启。
总原理图如下所示:
PCB如下所示:
实物图如下所示:
如上图所示:PCB设计时注意项如下:
1、WiFi模组天线位置将PCB切除,且WiFi天线周围做净空处理,防止对WiFi信号产生影响;
2、语音模块的喇叭还有mic注意差分走线,且走线包地良好;
3、晶振附近的地保证良好,防止EMI;
4、SPI线注意等长;
5、电源线注意粗细合理,按照10mil最大500mA设计;
6、退耦电容放在芯片电源引脚附近,越近越好。ESD器件放在干扰源传输的入口处;
7、PCB板的接口和安装孔布局合理,可能产生互相干扰的器件分开放置;
8、后续可能需要进行调试的信号PCB添加测试点;
一、程序简介
WiFi程序:https://github.com/caiyongsheng-designer/EST_TEST.git
主控MCU程序:https://github.com/caiyongsheng-designer/Intelligent-air-conditioner-box.git
(1)主控MCU程序设计:
主控芯片程序设计使用时间片轮转法,时间片周期为100ms,该周期使用滴答定时器中断来触发。
代码结构如下:
源码运行流程如下:
(2)WiFi程序设计:
WiFi程序设计基于乐鑫ESP8266_RTOS_SDK开源代码进行设计。代码结构如下:
源码运行流程如下:
二、具体实现方法介绍
2.1 MCU部分介绍
2.1.1时间片轮询法具体程序架构如下:
Step1、参数初始化:
// 初始化任务结构
typedef struct _TASK_COMPONENTS
{
uint8_t Run; // 程序运行标记:0-不运行,1运行
uint8_t Timer; // 起始计时器
uint8_t ItvTime; // 任务运行间隔时间【AKA计时器初始值值】
void (*TaskHook)(void); // 要运行的任务函数,注意该函数不得传参
} TASK_COMPONENTS; // 任务定义
static TASK_COMPONENTS TaskComps[] =
{
{0, 2, 2, WiFi_Uart_Receive_All}, // 间隔200MS运行一次,读WiFi串口数据
{0, 3, 3, ir_receive_data_output}, // 间隔300MS读一下红外接收是否有数据
{0, 5, 5, WiFi_data_Upload}, // 间隔500ms比较WiFi上传数据变化,变化则上报
{0, 10, 10, Read_Temperature_Display}, // 间隔1S运行一次,温度测量
{0, 20, 20, rtc_minute_30_read}, // 间隔2S,读RTC,间隔30Min获取实时天气并读取室内湿度
{0, 50, 50,Wifi_state_inquire}, // 间隔5S,检查WiFi状态
{0, 100,100,WiFi_data_Upload_Timing_Report}//间隔10S进行当前设备状态上报
};
typedef enum _TASK_LIST
{
TASK_WiFi_Uart_Receive_All,
TASK_ir_receive_data_output,
TASK_WiFi_data_Upload,
TASK_Read_Temperature_Display,
TASK_rtc_minute_30_read,
TASK_GET_Wifi_State,
TASK_WiFi_data_Upload_Timing_Report,
TASKS_MAX // 总的可供分配的定时任务数目
} TASK_LIST;
Step2、对滴答定时器开启初始化
/**
* @brief 启动系统滴答计时器 SysTick
* @param IT_frequency: 滴答计时器每秒的中断次数
* @retval 无
*/
void SysTick_Init(uint32_t IT_frequency)
{
/* SystemCoreClock在这里默认为48M
* SystemCoreClock / 1000 1ms中断一次
* SystemCoreClock / 100000 10us中断一次
* SystemCoreClock / 1000000 1us中断一次
*/
IT_Period = SystemCoreClock / IT_frequency;
uint32_t err = SysTick_Config (IT_Period);
assert(err==0); //capture error
}
Step3、启动滴答定时器中断,并在中断中对来到的任务标志使能
/**
* @brief SysTick的中断服务函数
* @param 无
* @retval 无
*/
extern void SysTick_Handler(void); //需要先extern声明一下避免编译器警告
void SysTick_Handler(void)
{
TaskRemarks();
}
void TaskRemarks(void)
{
uint8_t i;
for (i=0; i<TASKS_MAX; i++) // 逐个任务时间处理
{
if (TaskComps[i].Timer) // 时间不为0
{
TaskComps[i].Timer--; // 减去一个节拍
if (TaskComps[i].Timer == 0) // 时间减完了
{
TaskComps[i].Timer = TaskComps[i].ItvTime; // 恢复计时器值,从新下一次
TaskComps[i].Run = 1; // 任务可以运行
}
}
}
}
Step4、main函数中调用任务函数TaskProcess,判断任务是否启动
void TaskProcess(void)
{
uint8_t i;
for (i=0; i<TASKS_MAX; i++) // 逐个任务时间处理
{
if (TaskComps[i].Run) // 时间不为0
{
TaskComps[i].TaskHook(); // 运行任务
TaskComps[i].Run = 0; // 标志清0
}
}
}
2.1.2 DHT11驱动介绍
(1)DHT11基本知识介绍
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个8位单片机控制一个电阻式感湿元件和一个NTC 测温元件。DHT11采用单总线协议,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为20%~90%RH(Relative Humidity 相对湿度—指空气中水汽压与饱和水汽压的百分比),误差在±5%RH。DHT11 电路很简单,只需要将Dout引脚连接单片机的一个I/O即可,不过该引脚需要上拉一个电阻,DHT11 的供电电压为 3~5.5V。
(2)DHT11协议及数据格式
DHT11采用单总线协议与单片机通信,单片机发送一次复位信号后,DHT11从低功耗模式转换到高速模式,等待主机复位结束后,DHT11发送响应信号,并拉高总线准备传输数据。一次完整的数据为40bit,按照高位在前,低位在后的顺序传输数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit校验和,一共5字节(40bit)数据。由于DHT11分辨率只能精确到个位,所以小数部分是数据全为0。校验和为前4个字节数据相加,校验的目的是为了保证数据传输的准确性。DHT11只有在接收到开始信号后才触发一次温湿度采集,如果没有接收到主机发送复位信号,DHT11不主动进行温湿度采集。当数据采集完毕且无开始信号后,DHT11自动切换到低速模式。
DHT11操作时序如下所示:
具体操作步骤如下:
步骤一:
DHT11上电后(DHT11上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记
录数据,同时DHT11的DATA数据线由上拉电阻拉高一直保持高电平;此时DHT11的DATA引脚处于输入状态,时刻检测外部
信号。
步骤二:
微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过 30ms),然后微处理器
的I/O设置为输入状态,由于上拉电阻,微处理器的I/O即DHT11的DATA 数据线也随之变高,等待DHT11作出回答信号,
发送信号如图所示:
步骤三:
DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11的DATA引脚处于输出状态,
输出83微秒的低电平作为应答信号,紧接着输出 87 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输
入状态,检测到I/O有低电平(DHT11 回应信号)后,等待87微秒的高电平后的数据接收,发送信号如图所示:
步骤四:
由DHT11的DATA引脚输出40位数据,微处理器根据I/O电平的变化接收40位数据,位数据“0”的格式为: 54微秒的低电平和23-27微秒的高电平,位数据“1”的格式为: 54微秒的低电平加68-74微秒的高电平。位数据“0”、“1”格式信
号如图所示:
结束信号:
DHT11的DATA引脚输出40位数据后,继续输出低电平54微秒后转为输入状态,由于上拉电阻随之变为高电平。但
DHT11内部重测环境温湿度数据,并记录数据,等待外部信号的到来。
具体程序如下所示:
具体代码参考MCU程序user_DHT11文件夹中文件;
2.1.3 红外收发驱动介绍
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。红外遥控的编码目前广泛使用的是: NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC-5
Protocol 的 PPM(脉冲位置调制)。本项目使用的是NEC编码方式。NEC编码方式特点如下:
1、8 位地址和 8 位指令长度;
2、地址和命令 2 次传输(确保可靠性)
3、PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“ 1”;
4、载波频率为 38Khz;
5、位时间为 1.125ms 或 2.25ms;
本程序利用输入捕获来测量高电平的脉宽,来解码红外遥控信号,利用两个定时器产生发送信号,一个定时器
用于PWM脉冲信号发送时间计时一个定时器用于38K PWM脉冲信号产生。
具体程序如下所示:
发送驱动具体代码参考MCU程序user_ir_send文件夹中文件;
接收驱动具体代码参考MCU程序user_bsp_gpt_pwm文件夹中文件;
2.1.4 NTC读取介绍
采用NTC10K热敏电阻,使用AN008通道进行ADC读取,计算出热敏电阻上的电压,再通过公式法算出当前温度,公式法如下所示:NTC 热敏电阻温度计算公式:Rt = R *EXP(B*(1/T1-1/T2))
(1) T1和T2指的是K度,即开尔文温度。
(2) Rt 是热敏电阻在T1温度下的阻值。
(3) R是热敏电阻在T2常温下的标称阻值。10K的热敏电阻25℃的值为10K(即R=10K)。
(4) T2 = (273.15+25)。
(5) EXP(?) 是 e 的 ? 次方。
(6) B值是热敏电阻的重要参数。
通过转换,得到温度 T1 与电阻 Rt 的关系:
T1 = 1 / ( ln( Rt/R ) / B + 1/T2 )
最终对应的摄氏温度:
Temp = T1 - 273.15
具体程序如下所示:
驱动具体代码参考MCU程序user_ntc_3950_10k_read文件夹中文件;
2.2 WiFi部分介绍
本项目Wifi模块使用的是ESP8266,物联网平台使用的是腾讯物联网平台以及心知天气平台,二者分别使用MQTT和HTTP的方式进行连接,下面对WiFi代码比较关键的地方进行具体说明。
2.2.1 WiFi配网流程介绍
腾讯物联网平台WiFi配网过程如下图所示:
WiFi配网流程如上图所示,下面主要讲解下WiFi UDP连接建立,以及如何通过json字符串获得小程序的token。
WiFi UDP建立步骤如下:
1、WiFi进入soft AP模式,找到路由进行连接;
2、连接成功后WiFi建立socket();
3、绑定UDP bind();
4、监听UDP是否有数据传输;
小程序通过UDP传输发送的json字符串如下所示:
{"cmdType":1,"ssid":"Home-WiFi","password":"abcd1234",
"token":"6aa11111****23****546****11****d"}
可以通过cjson对字符串进行解析,解析出当前WiFi所需连接路由的ssid,password,以及要发给腾讯物联网平台的token当设备端连接路由器,与腾讯物联网平台建立MQTT连接并订阅后,将token发送到腾讯物联网平台。发送成功后,手机APP、腾讯物联网平台、设备端三者通过token实现绑定,配网完成。
具体程序如下所示:
驱动具体代码参考WiFi程序user_udp_sever文件夹中文件;
2.2.2 WiFi http连接心知天气流程介绍
WiFi连接路由后,建立socket,进行lwip_connect连接知心天气端口,发送get指令获取返回信息。
具体程序如下所示:
驱动具体代码参考WiFi程序user_http_request文件夹中文件;
2.2.3 WiFi mqtt连接腾讯云流程介绍
1、腾讯物联网三元码动态生成,进行mqtt初始化;
2、连接腾讯物联网平台,腾讯物联网平台端口为1883;
3、连接成功后进行订阅;
4、订阅成功后可以与腾讯物联网平台按照约定的json结构进行数据收发;
具体程序如下所示:
驱动具体代码参考WiFi程序user_mqtt_tcp文件夹中文件;
STM8S003F3P6TR/单片机(MCU/MPU/SOC) | 1.0351 | |
RClamp0524PATCT/静电和浪涌保护(TVS/ESD) | 0.248 | |
BTS724G/功率电子开关 | 10.2 | |
STM32G030C8T6/单片机(MCU/MPU/SOC) | 2.75 | |
A4988SETTR-T/步进电机驱动芯片 | 3.8 | |
SP3485EN-L/TR/RS-485/RS-422芯片 | 0.7454 | |
AD7606BSTZ/ADC/DAC-专用型 | 84.47 | |
ATMEGA64A-AU/单片机(MCU/MPU/SOC) | 13.88 | |
MC34063ADR2G/DC-DC电源芯片 | 1.92 | |
ADM2582EBRWZ-REEL7/隔离式RS485/422收发器(带电源) | 25.08 |
56万现货SKU
品类不断扩充中
科技智能大仓储
最快4小时发货
正品有保障
物料可追溯
明码标价节省时间
一站式采购元器件
您确定要删除此收货地址的吗?
您确定删除此收货地址吗?
content
content