基于Android的可联网LED照明灯的设计

2020-06-06 06:56刘仁贵樊英杰党建林苏智华
计算机测量与控制 2020年5期
关键词:照明灯亮度调节

刘仁贵,樊英杰,党建林,苏智华

(西北工业大学明德学院,西安 710124)

0 引言

智能家居是指通过物联网技术将家庭中的音视频设备、照明系统、数字影院系统、网络家电等各种设备通过无线的方式连接到一起,提供家用电器的远程智能控制。与普通家居相比,智能家居不仅具有传统的居住功能,还兼备网络通信、信息家电、设备自动化,提供全方位的信息交互功能。

当前,高效、节能、环保和使用寿命长的LED照明灯已大范围替代效率低、对环境污染大以及使用寿命短的白炽灯和荧光灯。LED照明灯主要采用大功率LED灯珠作为发光光源,大功率LED灯珠属于电流型半导体器件,具有二极管的特性,通过调节其流经的电流即可调节其发光亮度,因此,通过微控制器和带亮度调节功能的专用的LED驱动芯片,即可方便的调节灯光的亮度。另外,基于Android系统的智能电子设备,如智能手机、PAD等随处可见,成为人们生活中必不可少的一部分。因此,将基于Android系统的智能电子设备和带无线通信功能的可调光LED照明灯结合,将会打开产生一个新的应用空间。

本文阐述了一种带微处理器和WIFI通信功能的可调光、可组网的LED照明灯,并提出了将多个该LED照明灯组成一个分布式的可调光的智能照明控制系统的方案。

1 系统结构及原理

本系统由Android终端以及分布在家居空间的LED照明灯组成,如图1所示。

图1 系统结构方案

图1中,AP为无线接入点,是网络的中心节点,在智能家居中,可以采用家庭或办公室常用的无线路由器[1]作为AP。Android终端和其他LED照明灯为STA站点,所有的STA都以AP作为无线网络的中心,STA 之间的相互通信都通过 AP 转发完成。AP通过WLAN与外网连接,外网的服务终端可以通过AP访问到内部各个STA站点。

Android终端作为TCP Server,其余的LED照明灯作为TCP Client[2], 作为TCP Client的LED照明灯上电后,其内部的WIFI模块会主动连接指定IP地址和端口的Android终端,连接成功后,Android终端和LED照明灯之间就可以进行通信了。LED照明灯内部的处理器就会定时发送LED照明灯的状态信息[3],如开、关状态以及亮度比例等。安装在Android终端的APP[4]运行后,会通过WIFI网络接收到各个LED灯上传的数据,并显示各个照明灯的状态。同时用户通过APP的操作,通过socket通信的方式,按照自定的通信协议来控制各个灯的开、关以及调节各个照明灯的亮度。

LED照明灯是照明系统中的功能个体,主要由WIFI通信模块、MCU和LED驱动电路组成,如图2所示。

图2 LED照明灯原理

在LED照明灯的电路组成中,WIFI电路构成MCU与Android终端的通信桥梁,MCU是单个LED照明的控制中心,负责解析并执行Android终端发出的控制指令,MCU选用带有PWM控制器的微处理器,这样很方便与带PWM调光功能接口的LED驱动芯片无缝对接。

2 硬件电路设计

2.1 LED驱动电路

TPS92515 系列器件是内部集成了290 mΩ低电阻 N沟道金属氧化物半导体场效应晶体管 (MOSFET) 的紧凑型单片开关稳压器,该系列开关稳压器利用恒定关断时间和峰值电流控制功能来运行,工作原理简单可靠。该系列器件输出高达 2A 的恒定平均电流,具有多种调光方法,适用于注重高效率、高带宽、PWM模拟调光以及小尺寸的高亮度 LED 照明应用场景,例如汽车照明、工业照明、农业、航海和重工业照明等领域。TPS92515 系列器件具有很宽的输入电压范围,其中TPS92515x的输入电压范围为5.5 V至42 V,TPS92515HVx的输入电压范围为5.5 V至65 V[5]。

在LED照明灯中,采用 TPS92515作为大功率LED的驱动电路,具体设计原理图如图3所示。

图3中,EN信号用于控制P型MOS管U1(IRF6216)的导通与截止,从而控制TPS92515的电源输入,达到通过EN信号控制LED照明灯的开和关的目的。TPS92515的第9引脚为PWM调光信号输入引脚,标准的PWM信号的频率范围为100 Hz至2 kHz,该引脚与微处理器可输出PWM信号[6]的特殊引脚连接,通过固件程序改变输出PWM信号的占空比,来调节LED照明灯的亮度。

2.2 WIFI电路

WIFI电路作为LED照明灯与Android终端通信的桥梁,WIFI电路采用济南有人物联网技术有限公司的TTL转WIFI模块USR-WIFI232-B2,USR-WIFI232-B2模组是一款一体化的802.11 b/g/n模组,通过该模组,传统的串口设备或MCU控制的设备可以很方便的接入WIFI无线网络,从而实现物联网络控制与管理。由于模块内部完成协议转换,因此,对于用户来说,无需关心内部具体细节,通过简单设置即可实现串口与WIFI之间数据的双向透传,其功能结构图如图4所示。

图3 LED驱动电路

图4 WIFI电路功能结构图

USR-WIFI232-B2有5中数据传输模式,分别为透明传输模式、串口指令模式、GPIO模式、Httpd client模式和AT命令模式。本设计中,USR-WIFI232-B2采用透明传输模式,在此模式下,所有需要收发的数据在串口与WIFI之间不做任何解析,降低用户使用的复杂度。透传传输模式可以完全兼容用户原有的软件平台,用户设备基本不用做软件改动就可以实现此功能[7]。USR-WIFI232-B2的电路接口如图5所示。

图5 WIFI接口电路

2.3 微处理器

智能家居调光系统的LED照明灯的微处理器采用STM32F030F4P6[8],STM32F030F4P6是STM32F系列微控制器中,成本很低的一种32位ARM处理器,主频48 MHz,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M0,传承了STM32系列的重要特性,特别适合成本敏感型应用,该芯片集成定时器Timer,UART等多种外设功能,这些外设功能的存在,非常有利于简化电路的设计工作和降低产品的成本。

STM32F030F4P6处理器内部有1个高级定时器TIM1,通用定时器TIM3、TIM14、TIM15、TIM16、TIM17和基本定时器TIM6、TIM7,一共8个定时器,除了TIM6和TIM7以外,其他的定时器都可以用来配置产生PWM信号,其中高级定时器TIM1可以同时产生6通道的 PWM 输出,而通用时器也能同时产生多达 4路的 PWM 输出。PWM (脉冲宽度调制)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。在本设计中,我们将STM32F030F4P6的第18引脚PA10与LED驱动电路的PWM控制引脚相连接,通过底层软件配置,将TIM1的 CH3产生一路1 kHz的 PWM 输出,用于调节LED的亮度。STM32F030F4P6的第17引脚PA9与LED驱动电路的EN信号相连接,用于控制驱动电路的供电。STM32F030F4P6的第8引脚PA2(USART1_TX)和第9引脚PA3(USART1_RX)分别与USR-WIFI232-B2的第4和第3引脚连接,用于与WIFI模块进行串行通信。微处理器电路如图6所示。

图6 微处理器电路

3 系统软件设计

3.1 Android软件设计

ToggleButton[9]是Android中一个具有选中和未选中两种状态的按钮,并可为不同的状态设置不同的显示文本,常用于表示开、关场景中。在Android终端的APP软件设计中,LED照明灯的开和关用ToggleButton来实现。在xml布局文件中设置ToggleButton,然后在Activity文件中初始化用于控制照明灯开关的ToggleBuuton控件,并设置控件的OnCheckedChangeListener监听器和重写监听器的onCheckedChanged()方法,通过该方法的传入参数isChecked,判断控件的状态。如果控件压下,则发送开灯指令,如果控件弹起,则发送关灯指令。具体实现代码如下。

LED_Lightting.setOnCheckedChangeListener(new OnCheckedChangeListener()

{

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)

{

if(!buttonView.isPressed())

{

return;

}

else

{

if(isChecked)

{

//发送开灯指令

printWriter.print("$$o##");

printWriter.flush();

}

else

{

printWriter.print("$$p##");

printWriter.flush();

}

}

}

});

在Android系统中,SeekBar继承于ProgressBar,是增加了滑动块的扩展 ProgressBar。SeekBar的目的是让用户可以自主拖动,用来调节进度,比如通过拖动进度条来改变音乐和视频的播放进度,这里我们也用SeekBar来调节LED照明灯的亮度。其具体实现代码如下。

private SeekBar mseekBarBrightness;

mseekBarBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener()

{

@Override

public void onStopTrackingTouch(SeekBar seekBar)

{

//移动后放开事件

}

@Override

public void onStartTrackingTouch(SeekBar seekBar)

{

// TODO Auto-generated method stub

}

@Override

public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser)

{

// TODO Auto-generated method stub

// 取得当前亮度

int Brightness= seekBar.getProgress();

// 当进度小于5时,设置成0,关闭LED照明灯

if (Brightness< 5)

{

Brightness= 0;

}

// 根据当前进度改变亮度String orderStr = "";

orderStr = String.valueOf(Brightness);

try

{

printWriter.print(orderStr);

printWriter.flush();

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

});

Android终端的APP中,通过ToggleButton来打开和关闭LED照明灯,通过SeekBar来调节LED照明灯的亮度是外在的,处于应用层,而内在的通信,即Android终端与LED照明灯之间通信指令的传输则是通过Socket来实现的。Socket即为套接字,用于描述IP地址和端口,是支持TCP/IP协议的网络通信的基本操作单元,也是应用层与TCP/IP协议族通信的中间软件抽象层,表现为一个封装了TCP/IP协议族的编程接口(API),主要解决数据如何在网络中传输。对我们用户来说,在Andorid平台上进行TCP/IP协议开发,只需调用Socket按照指定的协议,向网络发出请求或者应答网络请求,即可实现通信,内部具体实现则无需关心。

在本设计中,采用基于TCP的Socket实现客户端与服务器间的双向可靠连接的实时通信,是一种C/S 模型的通信方式。Android终端为服务端,LED照明灯为客户端,由于LED照明灯采用的是具有透明传输功能的WIFI模块,内部集成了Socket通信功能,在使用时,只要对模块进行配置成客户端,并绑定服务器的IP地址和端口号即可,而服务器端的程序则要另行开发。基于TCP的Socket通信模型如图7所示。

图7 Socket通信模型

图7中,服务器与客户端通信前,需要创建服务器端的Socket,绑定端口号并开始监听端口,等待建立基于TCP面向连接的端对端的传输。具体实现代码如下。

public class LightServer

{

public static ArrayList socketList= new ArrayList();

public static void main(String[] args)

throws IOException

{

//创建8899端口的服务端

ServerSocket socket = new ServerSocket(8899);

while(true)

{

//等待连接

Socket new_socket = socket.accept();

socketList.add(new_socket);

//为新加入的连接创建线程

new Thread(new ServerThread(new_socket)).start();

}

}

}

服务器与客户端一旦创建连接后,就可以通过getInputStream和getOutputStream来接收和发送数据。getInputStream 用于获得读Socket的输入流,getOutputStream 用于获得写Socket的输出流。通过getInputStream和getOutputStream,实现LED照明灯亮度调节指令的发送和LED照明灯状态的收集,特别是APP软件中途退出重新启动时,APP根据收集LED照明灯状态调整显示信息,确保APP显示的状态与实际的状态一致。

3.2 固件程序设计

固件程序运行于STM32F030F4P6,主要有两个功能,一是用于从串口1接收Android终端通过WIFI模块发送的控制指令,打开和关闭LED照明灯和调节亮度,二是将照明灯的状态信息,例如当时的实际亮度比和开、关状态等信息,通过WIFI模块定时上传到Android终端,使Android终端的显示状态与实际的一致。固件程序的流程图如图8所示。

图8 固件程序流程图

固件程序中,STM32F030F4P6的USART1的收发数据均采用DMA的方式来完成,其中数据发送采用DMA1的通道4,数据接收采用DMA1的通道5,并通过空闲中断的方式来响应接收到的指令,这样可以大大提高CPU对外设的响应速度。通用定时器TIM3用来设置上传信息的2秒时间间隔,每隔 2秒,LED照明灯上传当前的状态信息,APP如果超时未收到照明灯发送的信息,则认为LED照明灯故障或者失联,并给出提示信息。用于调光的PWM信号是通过配置STM32F030F4P6的TIM1来产生1 kHz的PWM信号,并通过库函数TIM_SetCompare3(TIM1, Duty)或者通过修改寄存器的值TIM1->CCR3=Duty来修改PWM信号的占空比,达到调节亮度的目的。Duty为占空比,取值范围为0~100。

为了解决普通照明灯开灯和关灯时,照明灯瞬间点亮和瞬间熄灭,对人眼的冲击,固件程序在接收到开灯指令时,并不会将亮度直接调节到指定值,而是先将LED驱动电路的电源关闭,将输出的PWM信号的占空比调节到最小,然后打开LED驱动电路的电源,再将输出PWM信号的占空比逐步增大,使亮度慢慢增加。在接收到关灯的指令时,先将PWM信号的占空比逐步减小,使亮度慢慢降低,达到最小值后再关闭LED驱动电路的电源。

4 实验结果与分析

根据设计,制作了原理样机,并在功能和指标上做了测试。

在功能上,各个LED照明灯上电后,默认均处于关灯状态,并每隔2秒发送状态信息,用于连接Android终端。打开运行在Android手机上的APP后,LED照明灯与Android终端能很快建立连接。建立连接前,APP上LED照明灯的状态是灰色,建立连接后,状态变为绿色,表示连接成功。连接成功后,通过APP上的控件可以对LED照明灯进行开灯和关灯操作,通过拖动进度条可以很灵敏地调节对应照明灯的亮度,并且在开、关灯的时候,亮度有明显的变化,对人眼没有明显的刺激。另外,对样机进行了高温环境下的老化测试,样机能连续较长时间稳定工作。

在指标上,主要测试了实际输出电流与PWM信号占空比的关系。通过对PWM信号的占空比与输出电流的监测,得出LED驱动电路的输出电流与PWM信号占空比的关系如图9所示。

图9 电流与占空比关系图

从实验结果来看,在功能上,样机能很好地满足设计的要求,达到了预期的目的,另外,由于采用市面成熟的WIFI模块、性价比非常高的微处理器和专用LED驱动电路,简化了电路和软件的设计,提高了照明灯的可靠性。在指标上,专用LED驱动芯片的引入,输出电流能很好地线性跟随PWM信号的占空,达到良好的调光效果。

另外还测试了样机LED驱动的效率,其最高效率高达92%。效率高的原因是由于TPS92515内部开关管的内阻很低,仅为290 mΩ,而外部电路则采用了高品质的电感和低ESR的滤波电容,而这些因素恰恰是影响BUCK电路效率的因素。

5 结束语

本文介绍了一种基于Android系统的可联网LED照明灯的设计,给出了关键部分的硬件电路和软件实现方法,并对样机进行了测试,测试的结果表明样机很好地满足设计的要求,达到了预计的目的。由于照明灯的控制是采用无线控制[10],通过组网,可以形成一个物联网照明系统,不仅在局域网[11]范围内,还可以通过广域网,对部署的照明灯进行控制。该系统具有部署简单、实用性强的特点,具有较好的推广价值和市场前景。

猜你喜欢
照明灯亮度调节
用于遥感影像亮度均衡的亮度补偿方法
基于代谢调节的抗血管衰老新策略
2019款奔驰E300车仪表台上的环境照明灯会熄灭
远不止DCI色域,轻量级机身中更蕴含强悍的亮度表现 光峰(Appptronics)C800
2016年奔驰E260L主驾驶座椅不能调节
本本亮度巧调节,工作护眼两不误
亮度一样吗?
随心所欲的照明灯
超薄书签照明灯
平均税率、标准税率与收入分布对个人所得税累进性的影响