基于本地化ARM主控的智能家居联动集成系统设计 陈俊龙,魏小镇,黄堪杰,陈嘉欣,黄映欣(广东东软学院,广东佛山,528200)0 引言随着社会经济不断发展以及人们生活节奏加快,智能家居的应用场景越来越丰富,智能家居使用和方便越来越受人们青睐智能家居泛指以一个网关为总节点,多个传感器和控制终端为子节点,各子节点和总结点之间采用无线或有线方式进行通信的嵌入式自动化系统旨在提高用户的生活水平,带给用户愉快的生活体验但市面上的智能家居系统普遍存在价格高昂,功能花哨而不实用的特点,本课题针对这一痛点设计实验,实现部分日常生活实用价值较高的功能,例如日程定时提醒,全屋联动,家用电器的语音控制,线上控制,及定时开关等1 方案设计智能家居节点终端要求采用低功耗,分布式,允许有一定延迟的嵌入式系统及传感器本文介绍了以低功耗芯片CC2530 为无线模块,STM32F103 芯片为总控(网关)通过路由和节点终端(STM32F103)的连接,结合语音识别模块,构建一套智能家居系统本套智能家居系统共包括两套主板和一个软件门控板和网关主板采用射频通信,模拟物联网通信过程,后期会改用Zigbee(CC2530)完成无线通信开发。
图1 门控终端结构框图门控终端采用12V 电池供电,通过LM2596 降压芯片将电压降为5V,3.3V 供入系统;射频模块采用MFRC-522模块进行读卡;2个独立按键模拟门铃(外侧)和开门按键(内侧);绿色指示灯亮起表示识别成功,红色指示灯提示识别失败;电磁锁采用12V 斜口电磁锁,电磁锁直接从电池取电;无线模块采用Zigbee 模块进行数据收发图2 网关终端结构框图网关终端采用7.2V 电池供电,网关接收温湿度传感器(DHT11)的数据,并显示于OLED 屏幕上;独立按键可控制门控端电磁锁开关;无线模块接收门控终端的信息,照明电路可通过软件和语音控制,也可以通过按键控制灯亮灭;扬声器可播放门铃音乐和全屋闹钟,并发出语音提示;舵机电路控制窗户开合2 硬件设计■2.1 电源电路本系统采用7.2V 电池供电,单片机及各元器件采用3.3V 电压供电,且考虑到射频模块(Zigbee 模块)工作电流较大,因此电源方案采用LM2596S 为主方案,并同时预备AMS1117 为备用方案以下介绍LM2596S 的设计思路:电源输入端接入7.2V 电池,输入端并联一个0.1μF 的滤波电容,将芯片的第5 脚接地使能输出,在输出端和GND 并联一个1N5824 钳位二极管,通过串联一个47μH 的电感,将3.3V 电压输入至单片机系统,为确保电压稳定,输出端电压要反馈至Feedback 脚,即芯片第4 脚。
最后在输出端与GND 之间接入一个0603 封装的LED 和1k 的电阻,指示灯亮表示电压正常输出为方便产品测试,将3.3V 电压和GND 等电源脚引出排针图3 大电流降压模块图4 RFID 射频模块图5 液晶屏接线图6 E18 模组■2.2 射频模块射频模块采用RC522,采用SPI 总线进行通信,SPI 总线为全双工通信,在SCK 引脚上升沿时,将数据写入芯片或者读出数据IC 卡靠近块后,RFID 模块将模写入数据到IC 卡,再从IC卡中将数据读出,然后将数据通过SPI总线发到单片机■2.3 OLED 显示屏本项目采用中景园公司的OLED 液晶屏,屏幕SSD1306 驱动芯片,可使用I2C 和SPI 接口连接单片机进行通信显示屏支持蓝,白,黄三种显示颜色本项目使用I2C 接口的屏幕,减少驱动代码移植的难度,I2C 通信速度较低,主要用于显示部分调试信息■2.4 Zigbee 模组Zigbee 模组采用深圳EBYTE 公司的CC2530 集成模组——E18-MS1模块可支持4dBm 的发射功率,通信距离200 米内该模块出厂默认带有自组网程序,支持上位机调试软件二次开发E18 多节点组成的Mesh 网络具备组织、治愈功能,其路由可自动建立和维护;网络覆盖范围大、吞吐率高、可靠性强是该产品独特的优点。
模块采用串口通信,连接到单片机USART3 进行开发■2.5 语音模块语音模块采用JR6001,该模块采用单片机串口控制模块1、2 脚为电源脚;3、4 脚分别连接单片机Tx 和Rx 引脚;第5 脚所接LED 为音频输出指示灯,当音频信号输出到6、7 脚时,指示灯会闪烁一次U1 为排针接口,连接扬声器■2.6 窗户舵机2 扇窗户采用舵机进行推拉开关,由于单片机引脚的电流不够,采用三极管构成共发射极放大电路进行电流放大R2 和R3 为限流电阻,防止当I/O 口为高电平时,电流过大击穿发射极,D_PWMx 引脚已通过外接排阻上拉为高电平当PWMx 引脚为高电平时,三极管发射极与集电极导通,D_PWMx 输出低电平;当PWMx 引脚为低电平时,三极管发射极与集电极截止,D_PWMx 输出高电平因此该电路可形成一个反相器,即PWMx 占空比为80%时,D_PWMx 为20%■2.7 指示灯电路(板载)指示灯采用排阻上拉连接单片机,减少元器件焊接难度3 个指示灯连接I/O 口,用于调试排阻的2、3 号脚连接舵机电路进行上拉,LED4 为电源指示灯,排阻9 号脚连接单片机复位引脚RESET,同时并联一颗104 电容滤波。
■2.8 照明电路(外接)照明电路用于为外接的USB 灯管提供足够的电流,本项目采用ULN2003 芯片,该芯片可提供每个输出口最高0.5A 的电流,可为系统照明灯电路提供足够的电流LEDx网络接入单片机的I/O 口,右侧的输出口连接到USB 插座的负极,USB 插座正极直连电源,当LEDx 为高电平时,对应输出端为低电平,此时LED 灯条会被点亮,反之熄灭图7 JR6001 语音播报模块图8 舵机驱动电路图9 排阻构成的指示灯电路图10 照明电路图11 门控板软件框架图12 网关板软件框架3 软件设计■3.1 软件结构框图门控板和网关板上层软件驱动软件主要分为以下部分:(1)GPIO 配置:主要控制LED 指示灯和检测按键电平;(2)RC522 射频卡:用模拟SPI 总线配置射频模块的各项参数,并实现寻卡,读卡识别卡号的功能;(3)OLED 显示屏:使用模拟I2C 协议驱动屏幕,用于显示一部调试信息4)电磁锁驱动:配置同普通I/O 口,但由于电磁锁通电时间不能过长,所以每次向锁芯通电的时间都设置为0.8 秒5) 语音模块:JR6001 采用串口通信,AT 指令控制,采用单片机一路USART,配置为发送模式,波特率115200,通过串口AT 指令,可实现语音播报功能;(6)舵机驱动:2 路舵机由单片机输出2 路低频率PWM驱动,初始化频率配置定时器工作频率,通过在循环函数中修改PWM 占空比可控制舵机打角。
7)Zigbee 模块:采用串口+AT 指令控制,使用一路USART 配置为收发模式,开启接收中断■3.2 主程序流程及中断流程3.2.1 门控板主程序门控板主要完成IC 卡识别,串口3(Zigbee)指令识别,继电器开关,卡号比对的功能,工作流程如下:(1)单片机上电后,对各模块进行初始化配置2)初始化模块配置后,测试各模块功能;(3)IC 卡寻卡,如果识别到IC 卡,则刷新RC522_ID_Buff 数组的卡号;(4)串口3 识别指令,并配置相应的标志位;(5)扫描按键状态,配置对应的标志位;(6)识别Door_flg 标志位,若为1,则继电器通电0.8 秒;否则执行下一个流程;(7)对当前IC 卡存储数组RC522_ID_Buff 中的卡号与存储在Card_One 数组中的卡号进行比对,卡号相通则将Success 写入显示屏;否则执行下一个流程;(8)使用ReFlash 函数刷新屏幕数据;(9)重复执行流程3-8图13 门控板主流程3.2.2 门控板中断门控板中断程序主要为串口中断,当串口收到数据时,自动触发中断处理流程如下:(1)进入中断后,首先识别接收中断标志位USART_IT_RXNE,是否为1,不为1 则,直接退出中断;(2)若为1 则清除接收中断标志位USART_IT_RXNE;(3) 将串口寄存器USARTx->DR 的数据进行读取;(4)结束流程,退出中断。
图14 串口中断流程3.2.3 网关板主程序网关板主要完成,串口指令发送,按键扫描,LED 灯显示,ULN2003 驱动(电器开关)和PWM 输出(窗户舵机)等功能,工作流程如下:(1)单片机上电后,对各模块进行初始化配置,时钟,定时器,GPIO,NVIC 中断,串口,OLED 显示屏;(2)在初始化完成后,对各个模块进行功能测试,GPIO 全部拉为高电平,串口和OLED 显示屏打印“Hello World”;图15 网关板工作流程(3)对8 个按键依次扫描识别,识别到I/O 口为低电平则更新存储按键号,并进行信号处理;(4)识别串口缓存数组的内容,识别出指令后,设置相应电器的标志位,随后清空缓存区;(5)根据标志位,对LED 灯的I/O 口进行电平输出;(6)根据舵机标志位,输出相应占空比的PWM 波形;(7)根据标志位,对ULN2003 进行电平输出;(8)刷新OLED 显示屏;(9)重复流程3—8■3.3 各模块子流程3.3.1 RC522 射频卡配置在RC522 初始化流程中,首先对SPI 的4 个重要I/O口进行输入输出配置;然后通过SPI 总线对模块进行软件复位,将CS引脚置于低电平作选通使能。
接下来二次复位之后,开始写入命令,配置模块在寻卡子流程中,首先调用PcdRequest 函数进行寻卡,寻卡结果返回到变量ucStatus 中若ucStatus 为1,则表示寻卡成功,将卡号输出到ID 指针变量中,否则结束寻卡,退出该流程;流程图如图16 所示图16 RC522 模块软件初始化流程和寻卡流程图17 OLED 初始化及显示流程示例图18 电磁锁控制流程图图19 舵机脉冲长度对应打角角度RC522 各参数配置如下:(1)工作方式:ISO14443-A;(2)工作模式:接收和发送;(3)内部定时器初值:303.3.2 OLED 显示屏中景园的OLED 显示屏,采用I2C 协议款,在初始化流程中,首先使能PB7 和PB8 所在的APB2 总线时钟;随后初始化2 个I/O 口为推挽输出模式;对OLED 进行软件复位之后,开始向显示屏芯片写入指令在主程序使用屏幕显示数据时,流程如下:首先调用OLED_ShowString 函 数, 指定字符串大小,坐标,字符串内容,将字符串数据写入OLED 的寄存器,在写入多个字符串之后,再刷新屏幕由于屏幕刷新的时间比字符串写入的时间稍长,因此不建议每写入一次字符串,就对屏幕进行刷新,这样会导致单片机运行效率低下,将所有字符串更新到寄存器中,最后再对屏幕进行刷新,不仅节省运算资源,而且不会造成屏幕卡顿。
经测试,该方案可行3.3.3 电磁锁驱动电磁锁的初始化和LED 灯相同,采用推挽输出模式即可,初始化默认配置RELAY 引脚为高电平,此处不过多赘述;在电磁锁通电时,由于工作电流(0.7A)较大,为提高设备可靠性,锁头不可长时间通电当RELAY 引脚为低电平时,继电器闭合,电磁锁通电,斜口舌收缩;反之亦然,因此控制单片机引脚高低电平,即可实现电磁锁开合本项目设置电磁锁的通电时间为0.8 秒,程序流程如下:(1)当判断到开门指令时,。