查看: 3653|回复: 4

[原创] 【LPC54114】-基于LPC54114的智能语音药盒(结题)

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
    发表于 2017-5-15 01:13:12 | 显示全部楼层 |阅读模式
    本帖最后由 jinglixixi 于 2017-5-15 18:45 编辑

    开发背景:
           伴随老龄化的逐步到来,老人独自在家十分需要有人照顾,而儿女们却需要为生活而奔忙。像老人服药这类的小事,也是需要有人去关注和提示的。为此制作一个多功能的智能型语音药盒是一件有意义的事情。
    就开发平台的选择来讲,LPC54114开发板是一款与设计目标十分贴和的开发工具,它所配置的SPH0641LM4H数字麦克风、WolfsonWM8904codec芯片等即语音类处理。通过配置OLED屏,耳机或小音箱等就可达到基本的设计要求。
    此外,板载的温度传感器及内置的RTCA/D转换器,还能语音药盒的功能上附加一些智能家居控制的功能,因此极具实用价值。
           那该语音药盒又有何功能呢?
        首先该语音药盒的核心是RTC计时器,它无需MCU的干预接口自行运转,从而使MCU能腾出宝贵的时间去处理其它工作。通过设置多个提示时段,即可在相应的时刻发出的提示信息,这些会以3种形式来输出,他们分别是:
    1)语音方式,该提示最有穿透力,因为它不管你在做什么,也不管你是否在关注它,只有在它作用的范围内都会通知到你。
    2)中文信息方式,该提示最具审核性,它可供你仔细的查看与核对。通过OLED屏可查看的信息有:服药时间、药品名称、用量等。起初是将它也归入到语音中,但在没有语音文件系统的支持下,语音的播放内容是会受到极大限制的。
    3)LED指示方式,该方式可在药盒中指示出是否药物的正确位置,以便于取出。受时间的限制原本打算以步进电机使药盒转动到出口位置以供获取,只能以后在添加了。
            除语音药盒功能外,为充分发挥开发板的资源,还以OLED屏实时地显示出环境的温度和A/D转换口的电压值。在添加控制限值的情况下,即可实现温度控制及安放报警等,因为大多数的传感器都是通过模拟信号输出的,接入A/D转换口,即可对其进行判别处理和控制,从而易于实现家居控制等。
    1.主要构成
        该语音药盒主要由LPC54114开发板、OLED屏、耳机或音箱所构成,如图1所示。在设计与调试阶段可以耳机来进行,在实际使用时,则需要扬声器来播放,采用的方法有2种。一是直接接上一个小音箱,这种方法最简单,但相对比较耗电也不像个独立的作品;另一个是为它配功放,只需一个运放和一些阻容元件即可,相对比较经济,也便于作品的一体化。
        在供电方面,建议采用USB电源转换器,它体积小,也比用电池环保。
    图片1.png
    1 基本构成

           该语音药盒可实现多个时段的提示处理,如图2至图5所示。在测试时为节省时间,仅以分钟为单位设置了4个时段加以验证,情况完全正常。设置时间一到,3种输出信息准时到达。
    图片2.png
    2 时段1提示界面

    图片3.png
    3 时段2提示界面

    图片4.png
    4 时段3提示界面

    图片5.png
    5 时段4提示界面

    2.字库制作
        为便于使用,特利用PCtoLCD2002字模提取软件构建了小字库,其界面如图6所示。通过小字库的构建,可将常用的药名字模提取出来,构建一个专用的字库。
        相对来讲如果构建一个完整的字库,并存放在SD卡中以供调用会更理想。它有利于采用文本方式来设置提示条件,这也是后续完善的提升方向之一。
    图片6.png
    6 构建字库


    3.功能
        该作品的功能包括:RTC计时、温度检测、模拟传感器检测及显示等,并通过多时段语音提示功能。
    4.各级界面
        各级界面是信息显示的窗口,主界面如图7所示。
    图片7.png
    7 主界面

        该设计共有两种显示模式,即语音药盒模式(多时段语音提示)、家居测控模式(温度检测、模拟传感器测控),其界面分别如图1、图2所示。通过K2键可切换显示模式,在解决测控模式下,日期显示信息会覆盖语音药盒的提示信息。

    5.处理流程
        该作品的处理流程如图8所示。
    图片8.png
    8程序流程


    6.程序设计

          多时段提示处理程序:
    1. if((f!=0)&&(cp<3))
    2.    {
    3.                         if(ch==p)           //  时段判别
    4.                         {
    5.                              m1();         //  中文信息提示(时间、药名、数量)
    6.                                  led_on(4);     //  药盒位置指示
    7.                                  o=1;          //  语音提示启动标识
    8.                         }
    9.                         if(ch==(p+1))
    10.       {
    11.                                  m2();
    12.                            led_on(5);
    13.                                  o=1;
    14.                         }
    15.                         if(ch==(p+2))
    16.                         {
    17.                                  m3();
    18.                                  led_on(6);
    19.                                  o=1;
    20.                         }
    21.                         if(ch==(p+3))
    22.                         {
    23.                                  m4();
    24.                                  led_on(7);
    25.                                  o=1;
    26.                         }
    27.                         if(ch==(p+4))
    28.                         {
    29.                                  OLED_ShowString(20,2,"     ",16);
    30.                                  led_off(4);led_off(5);led_off(6);led_off(7);
    31.                         }
    32.                 }
    复制代码
    温度检测程序:
    1. if(fPCTValue>=0)
    2.                   {
    3.                         //PRINTF("Temperature Value is +%d.%d oC.\r", (int)(fPCTValue*100)/100, (int)(fPCTValue*100)%100);
    4.                         OLED_ShowString(0,4,"Temp: ",16);
    5.                         OLED_ShowNum(40,4,(int)(fPCTValue*100)/100,3,16);
    6.                         OLED_ShowString(64,4,".",16);
    7.                         OLED_ShowNum(72,4,(int)(fPCTValue*100)%100,2,16);
    8.                  }
    9.            else
    10.                  {
    11.                         //PRINTF("Temperature Value is -%d.%d oC.\r", (int)((0-fPCTValue)*100)/100, (int)((0-fPCTValue)*100)%100);
    12.                         OLED_ShowString(0,4,"Temp:-",16);
    13.                         OLED_ShowNum(40,4,(int)((0-fPCTValue)*100)/100,3,16);
    14.       OLED_ShowString(64,4,".",16);                        
    15.                         OLED_ShowNum(72,4,(int)((0-fPCTValue)*100)%100,2,16);
    16.                  }
    17.                  OLED_ShowString(80,4,"oC",16);
    复制代码
    模拟信号电压采集程序:
    1. wADCValue = adc_read(ADC_CHANNEL_NUM);
    2.                  if(wADCValue != 0xFFFF)
    3.                  {
    4.                         dwLedTime = (wADCValue*2000)/0xFFFF; // ajust the led blinky freqency
    5.                         //wADCValue = 0xFFFF;  3.3v
    6.                  }
    7.                         
    8.                  OLED_ShowString(0,6,"ADC:",16);
    9.                  OLED_ShowNum(40,6,(int)((wADCValue*3.3)/0xFFF*100)/100,1,16);
    10.                  OLED_ShowString(48,6,".",16);
    11.                  OLED_ShowNum(56,6,(int)((wADCValue*3.3)/0xFFF*100)%100,2,16);
    12.                  OLED_ShowString(72,6,"V",16);
    复制代码

    7.语音的录制与播放
        在该作品的设计中,语音的处理是一个关键。为了有效地缩减程序的规模和复杂度,语音的录制处理放到外部的其它程序来处理,由于录制的结果是存放在板载的Flash中,因此不怕断电丢失。在该作品中只需按地址适时地对其读取播放即可。
        尽管板载的Flash相对于需要来讲不是很大,但在语音较短的情况下,还是可以考虑对Flash进行分段录制,并依地址分段存储与播放。
        其实按原来的设想是探索以数字录音芯片录制,然后转存到SD卡的文件中进行存储和管理。当使用时再按文件名来读取需要的语音文件以实现语音的再现。然而花费的时间和精力太多,难以短期解决,只能退而求其次,单用Flash来进行语音录放达到功能上的效果演示。

    8.改进方向
           未来的改进方向是使用文件来管理语音的录放,从而构建一个语音库来扩展语音的播放内容。此外,将录音数据存入文件可增强语音的实时记录与编辑管理等。
           此外,以文件来管理各时段的条件设置,能增强管理及编辑的灵活性。在添加功放模块的条件下,取代用音箱来输出语音提示信息。

    最后,感谢NXP社区及活动的组织者,LPC54114开发板是一款十分有特色的开发板,与先前较中意的KL26Z开发板有异曲同工之妙值得不断地探索和利用,并将其打造成一个小型的多媒体平台以开发语音型智能作品。

    程序代码:

    znyyyh.zip

    3.88 KB, 下载次数: 35, 下载积分: 威望 1

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-12-31 18:01
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    8

    主题

    140

    帖子

    0

    高级会员

    Rank: 4

    积分
    791
    最后登录
    2019-11-10
    发表于 2017-6-23 09:55:59 | 显示全部楼层
    多谢!OLED屏哪里要的啊?给个链接。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
     楼主| 发表于 2017-6-23 13:14:46 | 显示全部楼层
    jllj2899 发表于 2017-6-23 09:55
    多谢!OLED屏哪里要的啊?给个链接。

    哈哈,自己买的!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-4-19 13:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    120
    最后登录
    2017-10-8
    发表于 2017-10-8 09:34:27 | 显示全部楼层
    OLED 老是点不亮,不知道是什么原因
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7090
    最后登录
    2023-4-20
     楼主| 发表于 2017-10-8 19:11:17 | 显示全部楼层
    dvd1478 发表于 2017-10-8 09:34
    OLED 老是点不亮,不知道是什么原因

    是I2C接口的?除了引脚定义和初始化之外,利用卖方通过的例程很容易实现的,是不是屏出现了问题。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 17:49 , Processed in 0.134498 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表