首页 体育运动 基于stm32的语音智能台灯设计

基于stm32的语音智能台灯设计

  1.1设计的目的和意义

  随着现代科技的发展,不断进步的是社会,不断追求的是人类,不断变化的是市场,在电子产品的领域中智能化技术应用意义深远,高科技的产品是新时代产品发展的趋势和前景,人们也可以在这些智能设备中获取到便利的生活。而台灯作为家庭和办公的照明设备,早已进入的千家万户的生活中。本设计根据目前的趋势,实现了台灯的智能化,可以通过语音来控制台灯的开关以及亮度,使人们不必摸黑开灯。并且可以通过手机APP进行控制台灯和设置睡眠模式,改变忘关灯造成的电量的损耗,达到节约用电的目的。

  1.2国内外研究现状

  国内现状:国内现在的智能灯行业在发展中依旧存在着许多的问题。我通过对市面上的台灯进行了诸多的市场调查与分析,国外的台灯大多数价格偏高,而国内的台灯价格相比亲民,相对便宜。调查与分析中发现国内的价格偏高的台灯不是因为台灯的设计独特、功能广泛,而是因为价格高的台灯所使用的的材料比较昂贵。发展至今,市面上对于台灯的设计要求主要体现在追求台灯的个性化,每个人希望看到别具一格的台灯样式。还有就是台灯的功能上的多样性与台灯的环保性。因此对于台灯的设计不再简单化了,而台灯也已经不再是简单的照明工具了,而是需要设计的个性化,功能的多样化以及高效节能化。

  目前国外现状:在灯具设计方面一直引领世界潮流的是欧洲各国。比如在台灯的设计上比较产品的内在品质,就是在于所设计的功能的强大,还有就是台灯个性化设计的亲民感,能够让人与台灯设计产生情感上的共鸣的意大利台灯。还有就是一直都比较强调“以人为本”的荷兰飞利浦的台灯设计。

  台灯产业发展趋势:目前看来我国的台灯产业在这近几年当中也呈现出来飞涨的趋势,但是LED照明产业的核心技术不在国内,主要的核心技术在欧美等国家的手中掌控着。而国内生产照明设备5000余家的企业还是主要生产一些低端的产品,而台灯在人们的心中也是仅仅当做一个可照明的产品来使用,导致产品的其他高端功能的附加值就变得不必要了,这种情况也促使了生产台灯的企业的利润上不去,使得有许多生产台灯的企业转行或者倒闭。在此背景下些企业纷纷加快科技创新步伐,在台灯的设计功能上变得更加的多样化,在外观上也变得极具个性化。并且中国台灯产业发展研究报告首次提出了“新型台灯产业”和“替代品产业”的概念,并以此为基础,界定了其具体的内涵,建立起评价体系和量化指标体系。

  1.3工作任务简述

  本次设计中,我使用的是Stm32f103c8t6单片机,通过特定的语音信号处理电路后,将获取的信息发送给单片机,利用单片机进行处理,判断是否需要进行开关灯操作。通过蓝牙获取到手机端设定的时间后,传送信息给单片机,单片机控制灯泡的输入电压逐渐降低,达到使灯泡慢慢熄灭的目的。

  本次设计我希望能够做出一款智能台灯,它可以以特定的话语为信号,语音控制就可以开关灯,省去了黑暗中寻找开关的麻烦,十分的便捷。晚上需要休息时,只需语音呼叫开启睡眠模式,或者通过手机设定时间,台灯便会自动由点亮至熄灭,避免睡着忘记关灯,不仅有助于睡眠,还可以达到节省电能的目的。

  2总体方案设计

  语音智能台灯的设计具有可以通过语音集成芯片来对语音进行采集,再通过传递给主控芯片控制台灯的开关以及亮度。电源模块接通5V直流电源后供给整个系统,语音信号处模块接收到特定的语音信号后开始处理,确定是开关灯的信号后,再发送特定的脉冲信号给单片机。单片机再传递信号给照明模块,让照明模块发亮。并且可以通过智能设备来直接控制台灯的开关以及亮度,设置睡眠模式等功能。蓝牙模块可以与手机通过App相连,接收手机的时间信息,处理后发送给单片机。单片机接收到各种信号后,通过已经编写好的C语言文件,发送给照明模块起到控制效果并执行开关、亮度等功能。本次设计中的主要模块有提供设备电力的电源模块、负责整体控制的单片机控制模块、负责识别语音的语音信号处理模块、负责连接手机APP连接的蓝牙模块以及台灯最主要的照明模块。

  系统总体框图如下图2-1所示:

  图2-1系统总体框图

  2.1单片机控制模块方案

  单片机是本设计的核心器件,配合各个模块实现智能电灯的控制。根据单片机对不同的运行速度和功耗的要求,结合本次设计的实际情况,关于单片机的选择有以下的三种方案。

  方案一:采用STC89C52RC这款80年代的单片机

  这个只有8位的单片机的生产厂家来源于宏晶公司,内部可编程的储存空间有8KB。STC89C52rc沿用了经典的51内核,和AT89C51所使用内核一致,但是还是在基础上进行了增强,并且内部有一个256bit的数据保存区,可以不用外加保存芯片就可以完成数据保存。在单芯片上,由于本系统设计其中显示模块需要进行动态扫描,所以需要的芯片也就需要频率高一点的,所以STC89C52RC单片机不太适合本次设计的需求。

  方案二:采用STM32f103c8t6单片机

  STM32f103c8t6是arm cortex-m4处理器的核心,基于STM32f1系列产品的超低功耗,采用了意大利半导体独有的两项节能技术:130nm特殊低泄漏电流制造工艺和优化的节能架构,提供行业领先的节能性能电源,采用2.5V至3.6V电源,时钟频率高达72Mhz。

  综合以上提供出来这两种方案,本系统选择方案二。

  STM32f103c8t6单片机具体特点如下:

  表2-1 STM32单片机的构成和特点

  内核stm32单片机具有32位的CPU

  stm32单片机最高可在72MHz的频率工作,在储存器为0的等待周期访问时可以达到1.25DMips/MHz

  支持单周期的乘法与硬件的除法

  存储器stm32单片机的存储器是闪存程序存储器能够快速的存储从64K或128K字节

  SRAM最高可达20K字节

  时钟、复位和电源单片机中具有32KHz的RTC振荡器,并且附带校准功能

  拥有POR/PDR(上电复位与断电复位)、可编程的电压检测器

  4?16MHz晶体振荡器

  内置的8MHz RC振荡器经过工厂校准

  2.0?3.6V电源和I/O引脚

  内置40kHz RC振荡器,具有校准功能

  PLL产生CPU时钟

  模数转换器

  a.转换范围:0至3.6V

  b.双采样和保持功能

  c.温度传感器

  d.2个12位模数转换器,多达16个输入通道

  e.1μs转换时间

  I/O端口I/O端口非常多,最多等达到80个,拥有许多个快速的I/O口,大部分的端口都能承受住最大5V信号。

  调试模式拥有串行单线调试(SWD)模式,使调试变得方便。

  计算单元CRC计算单元,96位的芯片唯一代码

  定时器多达7个

  一个16位PWM高级控制计时器,具有死区控制和紧急制动功能,用于电机控制

  2个看门狗定时器(独立和窗口类型)

  系统时间计时器:24位自减计数器

  3个16位定时器,每个定时器最多具有4个通道和增量编码器输入,用于输入捕捉/输出比较/PWM或脉冲计数

  续上表:

  通信接口最多9

  多达3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调器控制)

  CAN接口(2.0B有效)

  多达2个SPI接口(18M位/秒)

  USB 2.0全速接口

  多达2个I2C接口(支持SMBus/PMBus)

  低功耗睡眠模式在这种模式下,只有CPU停止工作,其他的功能芯片引脚并不会停止,当其他的在工作时可以随时的唤醒CPU,使CPU重新开始工作,也达到了节约的效果。

  停机模式在不丢失SRAM和寄存器内容的情况下,关机模式可以实现最低功耗。在关断模式下,所有内部1.8V电源均被停止,PLL,HSI RC振荡器和HSE晶体振荡器被关闭,并且电压调节器可以置于正常模式或低功耗模式。可以通过配置为EXTI的任何信号将控制器从关机模式中唤醒。EXTI信号可以是16个外部I/O端口,PVD输出,RTC闹钟或USB唤醒信号之一。

  待机模式在待机模式下可以实现最低的功耗。内部稳压器已关闭,因此所有内部1.8V电源均被切断;PLL,HSI RC振荡器和HSE晶体振荡器也即将被关闭;进入待机模式后,SRAM和寄存器其中的内容都将消失不见,备份寄存器的内容将作为保留,并且待机电路仍将工作。

  STM32单片机各引脚如下图2-2:

  图2-2 Stm32f103c8t6单片机引脚图

  2.2照明模块方案

  照明的灯头没有选择普通常见的白炽灯或节能灯,而是选择了LED灯条作为照明的灯头。之所以选择LED灯的原因是因为白炽灯所需电压较高,需要与220V电压直连,对于电路板来说还需要增加开关电路,不仅安全隐患大大增加,电路也变得复杂了。但是相比于白炽灯,LED只需很低的电压就可以照明使用,LED灯5V直流电压就可以点亮,可以直接使用电源电路的供电就可以点亮了。开关时只需要通过单片机对端电压输出的控制,就可以对LED的亮灭程度进行控制十分简便,利于操作。不仅节能,而且使用寿命更加的长。

  2.3语音信号处理模块方案

  在智能台灯的控制中,可以通过语音控制,也可以通过手机app控制。所以在设计时,就需要选择合适的语音识别模块方案。通过语音识别技术,将本次设计中需要的关键词录入其中,如:“开灯”、“关灯”等,并且将这些预先设定好的词语以字符的形式将数字信号传递给芯片,不需要使用者先进行录音再使用语音功能。

  基于本次智能语音台灯的设计,语音信号处理模块方案采用了集成电路语音模块LD3320,LD3320是一颗基于非特定人语音识别(SI-ASR:Speaker-Independent Automatic Speech Recognition)技术的语音识别/声控芯片。为本次的设计提供了单芯片的语音识别功能,也为本次设计起到了方便的效果。

  LD3320芯片上集成了高精度的A/D和D/A接口,不需要再外接额外的录音设备,只需要这一块芯片就可以实现声控、语音识别等功能。并且,识别的关键词语列表是可以动态编辑的。我们可以随时的替换其中所需要的的语音,也可以为一个功能施加多种语音,极大的方便了每个人生活中不同的说话习惯。可以看到,使用了LD3320芯片的电子产品可以轻松的达到声控的对话功能。为所有的电子产品增加VUI(Voice User Interface)语音用户操作界面。

  主要特色功能:

  (1)非特定人语音辨认技术:不需要使用者进行提前录音,只是通过关键的词语起到声控的效果。

  (2)语音词语是可动态编辑的,通过程序中所输入的关键词语,将关键词语以字符串的形式送给芯片中。设定完毕后关键词就可以立马生效,比如把“开灯”这种关键词传入其中,LD3320芯片就可识别我设定的“开灯”这样的关键词了。

  (3)单芯片解决方案:不像简易的语音芯片,需要额外添加语音录入的功能。

  (4)在成果的展示上LD3320芯片对于语音的精准度很高。

  (5)满足使用者在语音上的习惯不同的自由:LD3320芯片可以最大限度的编辑50条,终端的使用者可以根据生活中的习惯与场景的不同,随时更改和替换其中的关键词语。

  LD3320各引脚如下图2-2:

  图2-3 LD3320引脚图

  2.4蓝牙模块方案

  蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4~2.485GHz的ISM波段的UHF无线电波)。

  本次设计需要实现手机app远程对台灯的操控,所以就需要通过蓝牙远程传输信息给电路。

  蓝牙模块使用了HC-05蓝牙模块主要的特点如下:

  (1)带有连接状态指示灯的LED快速闪烁表示没有蓝牙连接;LED缓慢闪烁表示进入AT指令模式;

  (2)板载3.3V稳压芯片,输入电压DC 3.6V-6V;未配对时,电流约为30mA闪烁,电流处于变化状态);

  (3)配对成功后,电流约为10mA。用户可以设置的波特率为1200、2400、4800、9600、19200、38400、57600、115200。

  (4)拥有稳定的输出电压,输出电压在3.6V–6V之间。

  2.5电源模块方案

  电源电路负责给整个智能电灯系统供电。在选择电源时考虑到语音识别芯片LD3320的工作电压为3.3V,而单片机、照明模块、蓝牙模块的工作电压为5V。所以电路中需要使用到直流5V和直流3.3V两个电压等级。但是家用电220V转换到3.3V需要加装转换电路,同时3.3V的工作电压也比较低,不适合单片机与照明LED的工作。需要加装220V与5V和3.3V两个电压等级的转换电路,电路过于复杂,安全隐患也大大增加。

  经过一段调查分析,市场上大多数电子产品均采用5V供电,5V的直流稳压源便于买到,可以使用稳压元件把5V直接转换3.3V的直流电源,再供给语音识别芯片LD3320。便捷性安全性都有很大的提高,所以本次设计选择5V直流电源的直接供电。

  3硬件的设计

  3.1总体电路设计

  系统的电路如图3-1所示:

  图3-1电路原理图

  如上图3-1所示,本次设计电路包含电源电路、单片机最小系统、声音检测、蓝牙通信、驱动照明等部分组成。

  3.2单片机最小系统

  控制电路的核心部分采用的是STM32f103c8t6单片机,在理论介绍中了解这款单片机实际主要有复位电路和时钟电路。本次设计选择使用了STM32单片机。STM32单片机与复位电路,晶振电路,电源等构成了单片机的最小系统。

  3.2.1复位电路

  复位电路主要是通过C1和R11组成的,经过网络标号为RST的引出线后并接在单片机的7号引脚上。当上电时,C1由于内部无电荷,相对整个电路是通路,故RST被拉高,当C1被充满电后,对整个电路相当于断路,RST被R11拉到低电平。具体原理图如3-2所示。

  图3-2复位电路

  3.2.2时钟电路

  时钟电路是有一个外部晶振和两个22pf的电容构成,来给单片机一个基准的频率12MHz。分别连接在了单片机的5号和6号引脚上。具体原理图如图3-3所示。

  图3-3时钟电路

  3.3声音检测电路设计

  声音检测电路就是使用一个小型的麦克风检测外部的声音信息,通过LD3320对输入的信息进行处理后给一个信号到这个模块上的单片机的,模块与单片机连接如图3-4所示,只占用了单片机12号PA2和13号PA3两个引脚。

  图3-4语音模块接线图

  语音模块在使用的时候,在模块内部有专门用于音频解码的芯片,芯片是可以直接和单片机进行通信的。这种解码方法使系统更加的具有稳定性,并且体积小的特点也满足了其他种类的嵌入式产品的需求。通过使用这种解码芯片,可以在最大的程度上防止了解码过程中出现错误。解码得到开关灯的语音信息后,模块电路可以直接传递信号给单片机做出开关灯的控制。

  3.4蓝牙通信电路设计

  蓝牙电路的主要作用就是通过蓝牙串口元件与手机App进行通信,把手机设定好的时间、开关信息传递给单片机进行处理。Stm32单片机的串口是可以发送数字或者字符串信息的一个外设。蓝牙通信电路直接和单片机的串口进行连接采用RXD-TXD TXD-RXD这种方式连接,就是通过蓝牙模块的3号TXD引脚连接单片机31号PA10,再通过蓝牙模块的2号RXD引脚连接单片机30号PA9。通过串口采用AT指令的方式和蓝牙进行通信。

  图3-5蓝牙通信原理图

  3.5驱动照明电路设计

  本系统的驱动电路采用的一个8050的三极管构成,e级输出端加上几个并在一起的电阻构成限流电路,具体原理图如图3-6所示。

  图3-6 led驱动电路

  三级管S8050基极与单片机的18引脚相连,当三级管S8050基极收到单片机发出的高电平电压后,发射极导通,直流电压VCC经过三极管限流电阻后,供给到LED灯,电灯点亮。

  3.6电源电路设计

  在上述章节2.2电源电路设计中,已经对电源电路有过介绍,电源电路有两种电压输出分别是5V和3.3V。

  如下图3-7所示,5V(VCC)电压来自于外接电源,3.3V电压来自于5V到3.3V的转换。

  3.3V电压供给语音识别芯片LD3320,5V电压给其余电路模块。电路连接电源开关摁下后,发光二极管D1点亮,整个电路都可以得电开始工作。VCC与GND之间的电容C4、C5、C6,作为储能滤波电容使用,滤除杂波,防止电源突变。

  REG1117是一个四引角的3.3V稳压元件,可以把输入的5V电压转换为3.3V输出,进而单独供给给语音识别芯片LD3320。

  图3-7 led驱动电路

  4软件程序设计

  本系统的程序分为两个模块,分别是单片机控制程序和app控制程序,其中单片机控制程序主要负责声音识别,照明电压PWM控制,蓝牙信息接收等功能,app控制程序主要负责通过和单片机进行蓝牙通信,从而实现对台灯的开关、定时、亮度的控制。

  4.1单片机程序的设计

  单片机的程序由声音检测、蓝牙通信和PWM输出控制三部分子程序构成,可以实现的功能与手机app一致,在没有连接手机app的情况下,可以通过语音实现对开关灯的控制,语音进入定时睡眠模式,通过语音控制调节灯泡亮度。

  单片机程序开发我使用的是keil mdk5这个软件,使用它来编写单片机上的C语言程序。运行图见4-1所示

  图4-1 keil MDK5

  4.1.1主程序设计

  主程序负责对系统进行初始化及接收并判断指令,根据指令执行相应的操作等功能。具体执行流程如图4-1所示,主程序首先对电路进行初始化,然后判断电路是否从手机app或语音接收到开灯的指令,收到指令后打开电灯,否则继续初始化。开灯后,再判断是否接收到手机app或语音改变亮度的指令对电压做出相应的调整。最后判断是否需要关灯(手机app关灯按钮按下、定时时间结束以及语音的关灯命令)。

  图4-2主程序流程图

  4.1.2声音检测程序设计

  声音检测负责对语音串口进行初始化及接收并判断指令,根据接收到的语音执行相应的操作等功能。具体执行流程如图4-3所示,声音检测程序是通过LD3320集成芯片进行检测的,实际运用中主控芯片和这款模块是通过串口进行通讯的,首先设计里需要对串口进行初始化操作,然后再通过语音模块传过来的指令信息进行分析,并根据分析结果执行相关的操作。

  图4-3声音检测流程图

  根据流程图编写代码如下所示:

  比如当我们说出一级指令‘xiao jie’时,这个模块会给返回一个‘SD’的信息,通过处理这个信息,得知一级指令已经发送成功,然后设置相应的指示灯亮,转入二级指令接收,当二级指令接收到后,得到当前语音编码,直接进行相应的操作,具体代码如下所示:

  switch(dat)

  {

  case CODE_1:/*命令“开灯”*/

  SRD1=1;

  PrintCom(“01rn”);

  break;

  case CODE_2:/*命令“关灯”*/

  SRD1=0;

  PrintCom(“02rn”);

  break;

  case CODE_3:/*命令“睡眠模式”*/

  SRD2=1;

  PrintCom(“03rn”);

  break;

  case CODE_4:/*命令“提升亮度”*/

  SRD2=0;

  PrintCom(“04rn”);

  break;

  case CODE_5:/*命令“增加亮度”*/

  SRD3=1;

  PrintCom(“05rn”);

  break;

  case CODE_6:/*命令“降低亮度”*/

  SRD3=0;

  PrintCom(“06rn”);

  break;

  case CODE_7:/*命令“减少亮度”*/

  SRD4=1;

  PrintCom(“07rn”);

  break;

  default:/*text…..*/

  break;

  }

  }

  else

  {

  PrintCom(“FHrn”);/*text…..*/

  }

  }

  4.1.3蓝牙通信程序设计

  蓝牙通信程序负责对蓝牙串口进行初始化及接收并判断指令,根据协议编码指令执行相应的操作等功能。具体执行流程如图4-4所示,和手机app通信部分采用的是蓝牙通信,其本质还是串口通信,编写好固定的通信协议表,如图表4-1所示,直接通过串口以约定好协议的方式接受到对应的信息。

  表4-1通信协议表

  功能说明协议编码

  开灯OPPN

  关灯CLLS

  设置睡眠时间S25

  设置亮度D45

  图4-4蓝牙通信流程图

  串口接受代码如下:

  void uart1_cnt(u8 sta)

  {

  static u8 cmd=0;

  switch(cmd)

  {

  case 0:

  if(sta==’O’)

基于stm32的语音智能台灯设计

  cmd=1;

  else if(sta==’C’)

  cmd=5;

  else if(sta==’A’)

  cmd=10;

  else if(sta==’B’)

  cmd=20;

  else

  cmd=0;

  break;

  case 1:

  if(sta==’P’)

  cmd=2;

  else

  cmd=0;

  break;

  case 2:

  if(sta==’P’)

  cmd=3;

  else

  cmd=0;

  break;

  case 3:

  if(sta==’N’)

  {

  sta_read=1;

  cmd=0;

  }

  else

  cmd=0;

  break;

  case 5:

  if(sta==’L’)

  cmd=6;

  else

  cmd=0;

  break;

  case 6:

  if(sta==’L’)

  cmd=7;

  else

  cmd=0;

  break;

  case 7:

  if(sta==’S’)

  {

  sta_read=0;

  cmd=0;

  }

  else

  cmd=0;

  break;

  case 10:

  L_data=(sta-0x30)*10;

  cmd=11;

  break;

  case 11:

  sta_read=2;

  L_data+=(sta-0x30);

  cmd=0;

  break;

  case 20:

  clse_timer=(sta-0x30)*10;

  cmd=21;

  break;

  case 21:

  sta_read=3;

  clse_timer+=(sta-0x30);

  old_timer=clse_timer*60;

  cmd=0;

  break;

  }

  }

  4.1.4 PWM控制输出程序设计

  PWM控制输出程序负责对pwm寄存器进行初始化及接收并判断指令,根据指令执行相应的操作等功能。具体执行流程如图4-5所示,PWM输出直接采用STM32的内置寄存器,通过对PWM装置的调节,可以对电灯的输入端电压进行调节,通过改变输入电压,可以到达调节电灯亮度的目的。

  图4-5 PWM输出流程图

  本程序采用的是定时器3在第二通道生成的PWM,通过库函数TIM_SetCompare2(TIM3,brig);可以直接设置高电平的占空比,PWM输出的初始化程序如下:

  void TIM3_PWM_Init(u16 arr,u16 lzz)

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

  TIM_OCInitTypeDef TIM_OCInitStructure;

  //使能定时器3时钟

  RCC_RECOMMEND_CUSTOMER_NAME(RCC_APB1Pertis_TIM3,ENABLE);

  RCC_RECOMMEND_CUSTOMER_NAME(RCC_APB2Pertis_GPIOB

  RCC_APB2Periph_AFIO,ENABLE);

  //将Timer3其中一部分部分重新开始映射

  GPIO_PinRemapConfig(GPIO_updateVehicle_TIM3,SALES);

  //将该引脚设置成复用输出型,输出TIM3 CHN的PWM脉冲波形

  GPIO_liableUserCode.GPIO_Jin=GPIO_Jin_5;//TIM_CHN

  //设置符号优先级函数

  GPIO_liableUserCode.GPIO_MXY=GPIO_MXY_AF_PP;GPIO_liableUserCode.GPIO_BRAND=GPIO_BRAND_50MHz;

  GPIO_Init(GPIOB,&GPIO_InitStructure);

  TIM_getVehicleInfoByVinAndDealerCode.TIM_Period=arr;

  TIM_getVehicleInfoByVinAndDealerCode.TIM_Prescaler=psc;

  TIM_getVehicleInfoByVinAndDealerCode.TIM_ClockDivision=0;

  TIM_businessNetworkProName.TIM_CounterMode=TIM_CounterMode_Up;

  //根据TIM_businessNetworkProName中指定的参数,初始化时间基数单位

  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

  //初始化TIM3中的TTOCModePWM模式

  //选择定时器的模式:将TIM脉冲宽度调制模式2

  TIM_ttBalanceAccounts.TIM_TTMode=TIM_TTOCMode_PWM2;

  //比较两者间的输出使能大小

  TIM_ttBalanceAccounts.TIM_TTOutputState=TIM_OutputState_Enable;

  TIM_ttBalanceAccounts.TIM_TTOCPolarity=TIM_OCPolarity_Low;

  TIM_ttRoAssign(TIM3,&TIM_ttRoAssign);

  TIM_ttRoAssign(TIM3,TIM_ttRoAssign_Enable);

  TIM_Cmd(TIM3,ENABLE);

  }

  4.2手机app设计

  4.2.1 app开发软件介绍

  接下来是app的设计,app可以通过蓝牙连接手机,进而实现对开关灯的控制,可以设置定时进入睡眠模式,也可以通过app调节灯泡亮度。

  本次app开发软件使用的是android studio开发环境进行设计的,开启Arduino IDE软件后就直接进入其编程界面如图4.1所示,可见其界面简洁友好,这是非常受欢迎的。而且对于初学者可以通过“帮助”文档来进行入门学习,大量的源码例程能快速帮助我们了解这款软件。Arduino IDE在开发之初就考虑到跨平台的问题,所以其兼容Windows等众多平台,这对编写代码的人无疑是一份福利,大大减少了后期在不同平台移植代码的繁琐。Arduino IDE还拥有许许多多令人赞赏的特点:(1)源代码对所有用户开放,而且可以查阅电路图深入学习。(2)用户可以免费下载接口程序,省时省钱。(3)支持ISP在线烧写,安全性和稳定性都很高。(4)应用场景广泛而且能够实现多种互动程序。(5)在Arduino IDE1.6.6版本中加入了新的命令行工具Arduino-Builder。这种集成的开发工具也方便了我们之后的开发和调试环节。

  点开app后,其主界面如图4-6和图4-7所示:

  图4-6 app运行图

  用户可以通过点击左下角连接蓝牙的按钮与电路的蓝牙电路进行连接。

  图4-7蓝牙连接图

  用户与设备的蓝牙电路连接后,可以对电灯进行开关灯、设置睡眠时间,亮度调节等一系列操作。

  4.2.2 app的程序介绍

  App程序在本系统设计中主要实现三个功能:打开台灯和关闭台灯、升高台灯亮度和降低台灯亮度、设置台灯的关闭时间。

  打开和关闭台灯在程序上生成了两个按键,通过这个两个按键实例化,按下后发送协议OPPN和协议CLLS给到蓝牙,通过蓝牙发送出去,具体代码如下所示

  private void sendStr(String head,String body){

  String data=head+body+”……..”;

  try{

  client.getTransceiver().send(data);

  //Toast.makeText(this,”数据发送失败!”+isSend+head+body,Toast.LENGTH_SHORT).show();

  }catch(Exception e){

  //e.printStackTrace();

  Toast.makeText(this,”数据发送失败!”+lost+head+body,Toast.LENGTH_SHORT).show();

  }

  }

  通过按键按下,调用这个类,发送信息。

  设置台灯的关闭时间首先要放置一个文本框,通过这个文本框获取到输入的信息,然后再通过按键按下发送信息的形式发送给蓝牙,按键按下发送信息上面已经描述过了,这里我们讲述下如何通过文本框获取到用户输入的信息。下方代码将作具体演示。

  public class DevicesActivities extends Activities{

  //此段代码为调试用

  private static final String ZZX=”DeviceSActivities”;

  private static final boolean XU=true;

  //将数据标签返回时

  public static String EXTRAEY_DDEVICE_ADDRES=”设备地址”;

  private CODE_EN_DESC;

  private ArraiesAddpivty<String>kbookingOrderNO;

  private ArraiesAdapivty<String>mbookingOrderNO;

   Override

  protected void updateRepairOrderTraceTag(Bundle deltveryBeginDate){

  super.updateRepairOrderTraceTag(deltveryBeginDate);

  //创建手机端显示的窗口

  requestWindowFeature(Window.REPAIR_PART_AMOUNT);

  //设置窗口的大小并显示其窗口模式

  DictCodeConstants(R.layout.device_list);

  //将默认的返回值设定为取消

  DictCodeConpays(Activity.RESULT_CANCELED);

  //设置按键的扫描

  Button getAfterVisitInfo=(Button)queryOwner(R.id.button_scan);

  scanButton.setEngineNo(new OldPartNo(){

  public void partRemark(View v){

  doDiscovery();

  v.setPackageDesc(View.GONE);

  }

  });

  5系统测试

  完成电路设计后,需要对其进行系统进行测试,检测系统功能。针对本次智能台灯的设计结合其制作目的,所需要进行的测试主要是检测语音控制否能正常实现对台灯的开关、app是否可以设计定时、进入睡眠模式后是否能缓慢熄灭等。

  (1)测试步骤

  a.检测电路板是否能正常供电各模块的LED灯是否正常点亮。

  b.语音呼叫“小杰”看是否有反馈(LED是否点亮)。

  c.语音呼叫“开灯”“关灯”是否可以完成。

  d.蓝牙是否可以连接手机App设置时间。

  e.是否可以通过语音控制开启睡眠模式。

  f.到达设置时间后灯泡是否由点亮慢慢变为熄灭。

  (2)测试条件和使用仪器

  测试条件:硬件电路上没有脱焊、没有短路现象、没有断路现象。

  测试仪器:胜利万用表一块、示波器一台、测试用led灯一个。

  (3)测试结果

  a.电源模块

  通过不断测试,系统每次电源接通后各模块的LED灯均正常点亮,故测试正常。

  b.语音测试

  通过测试,呼叫“小杰”,语音模块的红色LED正常点亮,测试正常。

  c.开关灯测试:

  通过测试,当发出“开灯”指令后照明灯泡正常点亮,发出“关灯”指令后灯泡正常熄灭。测试正常。

  d.蓝牙测试

  通过测试,蓝牙可以与手机App连接,测试正常。

  e.睡眠模式

  通过测试,语音呼叫电灯开启睡眠模式,电灯可以进入睡眠模式,测试正常。

  f.熄灭测试

  通过测试,到达设置时间或开启睡眠模式后灯泡由点亮慢慢熄灭,测试正常。

关于作者: guimow

热门文章