基于Arduino平台多传感器融合的智能抽柜设计
2023-10-12马树文梁语涵
潘 丽,马树文,梁语涵
(1.兰州职业技术学院 电子信息工程系,兰州 730050;2.兰州市第一中学,兰州 730050)
0 引言
电子信息技术的飞速发展推动了家居智能化的进程,越来越多的智能家居不断在市场上涌现。抽柜作为常见的一种家具,对其进行智能化的设计研究必不可少。传统抽屉设计用手推拉进行开合,未考虑到残疾人士或行动受限人士的使用不便。本文介绍的这款智能抽柜应用电子信息技术,融合多种传感器对普通抽屉进行了智能优化设计,可以方便目标人群日常使用。
截至2022年,中国各类残疾人总数已达8500万[1],语盲障碍人数量约为830万人,每年新增语盲障碍人数量已经达到40万以上,此外还有大量老年人、孕妇、儿童等行动受限的社会成员。因此,为残障人士及行动受限人群服务,设计智能家居已经是刻不容缓的事情。
本文研究不同类型残障人士的需求,设计了一种基于多传感器融合的无接触智能抽柜,其可通过手势、红外传感以及语音三种开合方式进行操作,同时可通过手机APP控制蓝牙上锁。
1 设计方案
文中的抽柜设计以方便残障人士生活为主旨。考虑到不同残障类型人群的需求,设计与残障类型相对应的开柜形式,对应关系见表1。
表1 不同开柜设计与不同残障类型对应关系
本设计由Arduino UNO R3主控板融合LD3320语音模块、红外传感器、蓝牙模块、手势识别传感器构成。整体设计及指令、数据流向见图1。
在机械方面,本产品以万向轮和普通滑轮为承重轮,金属铝片作为滑动轨道来实现抽柜的开合功能,舵机通过识别蓝牙信号将柜子上锁。不同开柜方式通过不同传感器来实现,传感器收到命令后由电机驱动滑轮带动柜子抽出或关闭。在外观设计上,本产品采用透明的外壳设计以彰显机械美感,机械结构设计如图2所示。
图2 机械结构三维设计图
2 硬件设计
本设计所采用的Arduino UNO R3是一款基于Atmega328的单片机开发板,其包含硬件(Arduino板)和软件(Arduino IDE)[2],板载14个数字IO端口,其中6个端口可以作为PWM信号输出功能使用;6个模拟输入、输出端口(A0-A5)可做数字信号输入和输出功能使用。在此设计中,将2号、3号作为语音模块接口,4号作为手势模块接口,5号、6号作为直流电机模块接口,7号、8号作为红外检测模块接口,11号作为舵机接口,蓝牙模块接在arduino专用接口。
蓝牙模块用于实现上位机APP远程遥控上锁功能。该功能通过蓝牙传输协议与自研APP的方式实现,蓝牙模块自研APP界面如图3所示。
图3 自研APP界面图
本设计采用电机驱动板和脉宽调速(PWM调速)来控制直流减速电机,以此来带动抽柜的运行。当使能端处于高电平时,可通过改变输入引脚的电平来控制电机的运动状态。脉宽调速是通过改变PWM脉冲高电平的占空比来使抽柜运行速度发生改变的,占空比越大,运行速度越快,反之越慢。抽柜采用PWM来控制电机运行速度,因此选择高效、可靠、可控的驱动电路及方式至关重要[3]。在ARDUINO UNO R3板上,具有脉宽调速(PWM调速)功能的端口分别为3、5、6、9、10、11口,本设计使用5、6口。ARDUINO UNO R3占空比100%用逻辑值255表示,占空比0%用逻辑值0表示。本研究通过调试将逻辑值设为190,抽柜速度运行适宜。
语音开柜模式采用LD3320语音模块来实现。通过设置唤醒词与命令词来实现语音开柜功能,该模块供电电压为5 V,可识别50句词条,该模块通过特定的语音编程平台进行程序设计。本设计采用语音录制,将指令语句录入语音模块后,当开合模式切换至语音模式并检测到录制好的指令语句时,抽柜按指令完成抽柜开合。
人体感应开柜模式采用两个红外模块来实现,红外模块安装在抽柜正面与侧面,红外模块功能见表2,其中“1”表示检测到人体,“0”表示未检测到人体。两个红外模块配合检测,完成人体红外感应开合抽柜功能。
表2 红外模块设计功能表
手势识别开柜模式采用PAJ7620U2传感器模块来实现。该模块内部自带 LED 驱动器(可发射红外线信号),内置有传感器感应阵列、目标信息提取阵列和手势识别阵列。另外,PAJ7620U2作为一种光学数组式传感器,其内置LED驱动器集成了环境光和光源抑制滤波器,模块基本不受环境光干扰。
3 软件设计
主控程序负责系统流程执行,主要包括以下四个并行程序执行模块,分别为语音判断、红外判断、蓝牙信号判断、手势信号判断模块。语音控制模块先判断语音输入是否合法,如果合法再与语音库中存储的信息进行比对,符合条件即驱动舵机模块,完成开锁或关锁的功能。红外判断、蓝牙信号判断、手势信号判断模块分别对串口接收到的数据进行判断,并根据判断结果执行抽柜抽出或关闭的动作。程序流程图见图4。
图4 程序流程图
Arduino主控板与各模块采用串口通信,串口通信[4]以位(bit)为单位发送和接收字节。尽管比以字节(byte)为单位的并行通信慢,但它具有同线异输的特点,且支持远距离数据输送,最大传输距离可达1000 m左右,符合智能抽柜家居环境下通信传输的距离要求。
手势识别功能的实现基于手势识别算法,Ojala等[5]人在原始局部二值模式(LBP)手势识别算法的基础上采用了圆形区域改进算法,并通过改变该区域的半径决定区域范围的大小,以获得适宜的圆形邻域。若LBP(P,R)表示半径为R的圆形区域内有P个像素点,则常见的LBP有 LBP(4,1.0)、LBP(8,1.0)、LBP(12,1.5),如图5所示:
图5 LBP圆形区域算法
定义中心像素点gc所在圆周上分布的P个邻域像素的灰度值为:
T=t(gc,g0…gP-1)
(1)
其中,gc为中心像素的灰度值,gp为半径为R的圆形对称领域P等分的像素灰度。若以gc为圆心,则gp的坐标为:
gp=(-Rsin(2πp/P),-Rcos(2πp/P))
(2)
此圆形区域上的LBP计算公式为(3)和(4),且未在圆心点位置的区域像素灰度值采用双线性差值,公式如下:
其中s(x)为符号函数[6]。
改进算法实现了对原始的LBP模式进行信息降维,像素由原来的2P种减少为 P ( P-1)+2种,在数据量减少的前提下,保证了效果最优的图像信息。
本产品选用的PAJ7620U2传感器模块采用了LBP改进算法,在Auduino UNO R3的算力范围内,实现了手势识别开柜功能。其中手势识别开柜功能相关代码如下:
/*******************
手势识别模块
*******************/
uint8_t error = 0;
Serial.begin(9600);
Serial.println(" Gesture TEST DEMO:Recognize 9 gestures.");
error = GestureInit();
while (error &&(temp_error<10)){
error = GestureInit();
Serial.print("INIT ERROR,CODE:");
Serial.println(error);
temp_error++;
delay(100);
}
temp_error = 0;
Serial.println("INIT OK");
Serial.println("Please input your gestures: ");
}
/******************
手势识别开柜
******************/
uint8_t data = 0,data1 = 0,error;
error = GestureReadReg(0x43,1,&data); //Read Bank_0_Reg_0x43/0x44 for gesture result.
if (!error){
if(data == GES_CLOCKWISE_FLAG)
{
analogWrite(5,190);
analogWrite(6,0);
delay(1300);
analogWrite(5,0);
analogWrite(6,0);
}
if(data ==GES_COUNT_CLOCKWISE_FLAG)
{
analogWrite(5,0);
analogWrite(6,190);
delay(1600);
analogWrite(5,0);
analogWrite(6,0);
}
}
delay(100);
4 设计结果
在调试阶段,除了测试各功能模块外,还要测试各功能模块的协同工作情况。本设计中将16个数字数据端口及6个模拟端口合理分配,并把各传感器驱动模块程序分别定义为子程序,在主程序中按照图4流程图所示,协同调用子程序,完成主程序功能。
程序通过数据线烧录至Arduino主控板,进入软硬件联调阶段。通过主程序融合各个传感器模块,调用子程序,驱动硬件工作。调试者发出不同指令驱动不同传感器,智能抽柜协调运行,所有模块功能均正常,机械结构平稳工作,达到设计预期效果,设计成品的抽柜正视图如图6所示。
图6 智能抽柜成品图
5 总结
本设计在传统抽屉的基础上,采用Arduino作为主控模块,用APP蓝牙控制开关锁,创新地融合使用多种传感器相关技术,轮式省力开合取代传统人力开合抽柜,为残障人士提供了便利的家居环境,具备一定的实用性,符合设计要求,实现设计预期。该抽柜的设计,最大限度的方便了残障人士的使用,对于特殊需求的智能家居设计有重要的启发意义。