您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页基于蓝牙的路况信息提示系统

基于蓝牙的路况信息提示系统

来源:好走旅游网


第四届“博创杯”全国大学生嵌入式设计大赛

烹饪数字助理

Cooking Digital Assistant

杨 平 赵月江 张成虎 指导老师 甄 洁

2008年9月

《烹饪数字助理》设计报告

摘要

随着我国经济的飞速发展,人们逐步进入了数字化社会,追求生活的方便快捷已成为现代人的生活理念。但同时快捷的生活又使得人们很少花时间去关注家庭烹饪,使得富有悠久历史的饮食文化在家庭生活中被淡化。

本文介绍了一款新颖的厨房数字系统——烹饪数字助理,该系统基于UP-NETARM2410-S嵌入式开发平台,融合了嵌入式技术、语音合成、语音识别技术和多媒体等技术对烹饪过程进行指导,提供与烹饪相关的实用功能,让烹饪变得简单有趣。

本文首先介绍了系统背景和研究意义,然后简单介绍系统相关的技术,再次提出本系统的总体设计思想,最后分模块来介绍本系统的设计和实现过程。

本文中实现的系统模型为烹饪数字助理系统提供了一套可行的解决方案,随着系统功能的不断完善和扩展,该系统具有良好的应用前景。

关键词:嵌入式;语音处理;数字助理;烹饪

I

《烹饪数字助理》设计报告

Abstract

With the swift development of our country’s economy, people march into the digital society. Pursuing for convenience and shortcuts has become modern people's life idea. For the swift life, many people don’t have enough time to spend on the family cooking, which makes the cooking with long history ignored.

A new kitchen digital system is introduced in this paper- the cooking digital assistant system. This system which bases on the UP-NETARM2410-S Embeded empoldering platform contains embedded technology, speech technology and multimedia technology to instruct people to cook, and it also provides other useful functions for cooking. Because of it, cooking becomes easy and interesting.

The main work is summarized as follow:

1. The background and its application value are introduced in detail. 2. The technology related to the system is reviewed. 3. The thought of design is introduced again.

4. The design of the system and implementation process is introduced by modular.

This model system used for the cooking digital assistant provided a viable solution. With the system’s improving and expanding, the System will be widely applied.

Keywords: Embedded, Speech technology, Digital assistant, Cooking

II

《烹饪数字助理》设计报告

目 录

第一章 绪论 .......................................................................................... 1

1.1背景分析 ......................................................................................................1

1.2课题意义 ......................................................................................................1 1.3技术现状 ......................................................................................................1

第二章 相关技术 .................................................................................. 3

2.1 嵌入式系统 .................................................................................................3

2.1.1嵌入式数据库系统Berkeley DB ...................................................................... 3

2.1.2 MiniGUI技术 .................................................................................................... 4 2.1.3 SD卡技术 .......................................................................................................... 4

2.2 蓝牙技术 .....................................................................................................4 2.3 语音识别及语音合成技术 .........................................................................5

第三章 系统总体设计 .......................................................................... 6

3.1 系统功能及配置 .........................................................................................6

3.1.1 系统功能 ........................................................................................................... 6

3.1.2 系统配置 ........................................................................................................... 6

3.2 系统结构 .....................................................................................................7

3.2.1硬件结构 ............................................................................................................ 7 3.2.2软件结构 ............................................................................................................ 8

第四章 模块设计与实现 ...................................................................... 9

4.1 数据处理的设计与实现 .............................................................................9

4.1.1 简单介绍 ........................................................................................................... 9

4.1.2 前期准备 ........................................................................................................... 9 4.1.3 打开数据库 ..................................................................................................... 10 4.1.4 导入及添加数据 ............................................................................................. 11 4.1.5 检索数据 ......................................................................................................... 11 4.1.6 删除数据 ......................................................................................................... 12 4.1.7 关闭数据库 ..................................................................................................... 13 4.1.8 出错处理 ......................................................................................................... 13 4.1.9 结论 ................................................................................................................. 13

4.2 界面的设计与实现 ...................................................................................13

4.2.1开机界面的设计 .............................................................................................. 14 4.2.2 界面总体设计与实现 ..................................................................................... 14 4.2.3 菜谱界面的总体设计与实现 ......................................................................... 17 4.2.4 定时界面的设计与实现 ................................................................................. 18 4.2.5 快速检索界面的设计与实现 ......................................................................... 19 4.2.6 与嵌入式数据库联调设计与实现 ................................................................. 20 4.2.7 与语音模块联调设计与实现 ......................................................................... 23

4.3 语音模块的设计与实现 ...........................................................................23

4.3.1 语音识别模块 ................................................................................................. 23

III

《烹饪数字助理》设计报告

4.3.2 语音合成模块 ................................................................................................. 23

4.4 蓝牙模块的设计与实现 ...........................................................................24

第五章 系统测试与应用 .................................................................... 25

5.1 系统测试及性能分析 ...............................................................................25

5.1.1 系统测试 ......................................................................................................... 25

5.1.2 性能分析 ......................................................................................................... 26

5.2系统特点及优势 ........................................................................................27 5.3 系统应用 ...................................................................................................27

参考文献 .............................................................................................. 28

IV

《烹饪数字助理》设计报告

第一章 绪论

1.1背景分析

我国的饮食文化历史悠久,民间有句俗语“民以食为天”,足以看出饮食在人们生活中的重要性。但是随着社会的发展,人们对饮食尤其是家庭烹饪似乎越来越不重视了,出现了以下一些现象:

现代化的生活让人们的脚步越来越快,人们往往由于赶时间而去吃一些既没有营养又不健康的速食食品。

由于中国国情所致,现在几乎每个家庭都是独生子女家庭,父母对子女都很宠爱,很少让子女做家务,所以一般子女都不会烹饪,这一点在“80后一代”体现的很明显。对于“80后一代”的新白领而言,“做饭太烦、下馆太贵、小摊太脏,从小娇生惯养”的他们为省事省时省力地吃好一日三餐费尽了心思。

在烹饪的过程中,常常会发生忘记加入某味作料的情况,使得原本香味可口的菜肴变了味道;更甚者,有的人在煮粥、煲汤等一些较长时间的烹饪过程中因事忘记关火而造成焦锅,或者把器皿烧坏,甚至引起火灾等。

中国是一个好客的国家,每个家庭都会经常的接待客人,这时主人就要准备一顿丰盛又特别的饭菜了。普通的家常菜拿不出手,而一些非家常菜由于不经常做,所以做起来既费力气又会使人手忙脚乱。

为了解决上述种种问题,我们基于嵌入式技术平台,提出并设计了一种既方便又实用的烹饪数字助理(CAD,Cooking Digital Assistant)系统。

1.2课题意义

该系统综合运用嵌入式系统及其相关技术,实现了基于语音提示的菜肴烹饪助理。系统提供包含各菜系的、适合不同年龄段的健康饮食类、疾病调理类等菜谱。菜谱信息由嵌入式数据库系统存储,便于编辑和处理;通过友好的显示界面,用户可以点击触摸屏来操作菜单,并且系统会自动将菜单的内容显示于LCD上,同时还能语音输出菜单内容。系统提供计时、语音提示、音频报警等功能,以方便地引导用户按步骤完成烹饪过程。另外,本系统还具有通过蓝牙来实现家电的无线遥控等拓展功能。

本系统解决了一个现今社会普遍存在的吃饭难的问题,为忙碌的人们提供了方便,相信随着系统性能的不断优化和功能的不断扩展,该系统定会有非常广泛的应用前景。

1.3技术现状

本系统融入了嵌入式技术数据库、MiniGUI技术、语音识别及合成技术等完成该系统的基本功能。嵌入式数据库在国外已经有30年的历史,应用领域也非常广泛,例如在医疗领域、军事设备和系统、地理信息系统、工业控制、网络通讯、消费类电子等方面都有广泛应用;MiniGUI作为“嵌入式图形中间件”软件产品,是针对嵌入式设备,跨操作系统的图形界面支持系统。通过

1

《烹饪数字助理》设计报告

十多年的努力,MiniGUI已经成功应用在手持终端、机顶盒、工控、医疗及军工等行业。被各大厂商认可并广泛采用,逐渐成为嵌入式图形中间件领域的工业事实标准;从目前语音技术的研究现状来讲,技术已经有了很大发展。语音识别和语音合成技术是实现人机语音通信及建立一个有听和讲能力的口语系统所必需的两项关键技术。使电脑具有类似于人一样的说话和听懂人说话的能力。

2

《烹饪数字助理》设计报告

第二章 相关技术

本章介绍系统采用的主要相关技术。首先介绍嵌入式系统技术,包括嵌入式数据库技术、MiniGUI技术、SD卡技术;接着介绍蓝牙系统的基本结构;最后介绍了语音识别及合成方面的相关技术。

2.1 嵌入式系统

嵌入式系统(Embedded System)是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统[1]。它包括硬件和软件两部分。硬件包括微处理器、存储器及外设器件和I/O端口、图形控制器等;软件部分包括操作系统和应用程序,有时设计人员会把这两种软件组合在一起。操作系统控制着应用程序与硬件的交互作用;而应用程序控制着系统的运作和行为。本系统使用的嵌入式微处理器是S3C2410,操作系统是嵌入式Linux操作系统。

2.1.1嵌入式数据库系统Berkeley DB

Berkeley DB是由Berkeley(美国加州大学伯克利分校)开发的,DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了DB1.85版。基本上认为这是DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对DB的商业支持[2]。在这以后,DB得到了广泛的应用,本系统使用的版本为4.7.25。

DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等。DB的应用十分广泛,在很多知名的软件中都能看到其身影。

LINUX下的软件包管理器RPM也使用DB管理软件包相关数据,可以使用命令file查看RPM数据目目/var/lib/rpm下的文件,则有形式如图2.1输出:

Dirnames: Berkeley DB (Btree, version 9, native byte-order) Filemd5s: Berkeley DB (Hash, version 8, native byte-order) 图2.1 DB在Linux中的体现

值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。

嵌入式数据库系统Berkeley DB特点是微小内核,便于实现嵌入式功能;可靠性、可管理性和安全性;可移植性和平台无关性;资源利用率高;运行速度快;简化开发环境[3]。

3

《烹饪数字助理》设计报告

2.1.2 MiniGUI技术

MiniGUI 是一种面向嵌入式系统和实时系统的图形用户界面支持系统。它主要运行于Linux 控制台,实际可以运行在任何一种具有线程支持的POSIX 兼容系统上。

MiniGUI 是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。它的主要特色有[4]:

(1) 遵循LGPL条款的纯自由软件;

(2) 提供了完备的多窗口机制。这包括:

① 多个单独线程中运行的多窗口; ② 单个线程中主窗口的附属;

(3) 对话框和预定义的控件类(按钮、单行和多行编辑框、列表框、进度条、工具栏等); (4) 消息传递机制;

(5) 多字符集和多字体支持,目前支持ISO8859-1、GB2312、Big5等字符集,并且支持各种光栅字体和 TrueType、Type 1等矢量字体; (6) 全拼、五笔等汉字输入法支持;

(7) BMP、GIF、JPEG、PCX、TGA等常见图像文件的支持; (8) Windows的资源文件支持,如位图、图标、光标等; (9) 插入符、定时器、加速键等; (10) 其他(Beep、ETC/INI 文件操作等); (11) 小巧,包含全部功能的库文件大小为300KB左右; (12) 可配置,可根据项目需求进行定制配置和编译; (13) 高稳定性和高性能,MiniGUI 已经在Linux发行版安装程序、CNC系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用; (14) 可移植性好。

基于以上考虑,本系统的界面的设计都是由MiniGUI设计完成的。

2.1.3 SD卡技术

SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。SD卡在24mm×32mm×2.1mm的体积内结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。并不是多大的SD卡都能安在数码摄像机上使用。现在的SD卡容量由8MB到4GB不等。

2.2 蓝牙技术

蓝牙(Bluetooth)是一种低功耗的无线技术,工作在全球通用的2.4GHz

4

《烹饪数字助理》设计报告

ISM频段,数据传输速率为1Mb/s,目的是取代现有的PC、打印机、传真机和移动电话等设备上的有线接口。主要优点是:可以随时随地用无线接口来代替有线电缆连接;具有很强的移植性,可以用于多种场合,如WAP、GSM、DECT等,引入身份识别后可以灵活的实现漫游;功耗低,对人体危害较小;蓝牙的集成电路应用简单、成本低廉、实现容易、易于推广[5]。蓝牙技术提供低成本、近距离的无线通信,构成固定与移动设备通信环境中的个人网络,使得近距离内各种设备能够实现无缝资源共享。鉴于以上优点,本系统采用蓝牙作为无线遥控的方式。

2.3 语音识别及语音合成技术

语音合成和语音识别技术是实现人机语音通信,建立一个有听和讲能力的口语系统所必需的两项关键技术。使电脑具有类似于人一样的说话能力,是当今时代信息产业的重要竞争市场。和语音识别相比,语音合成的技术相对说来要成熟一些,并已开始向产业化方向成功迈进,大规模应用指日可待。

语音合成,又称文语转换(Text to Speech)技术,它涉及声学、语言学、数字信号处理、计算机科学等多个学科技术,是中文信息处理领域的一项前沿技术,解决的主要问题就是如何将文字信息转化为可听的声音信息,也即让机器像人一样开口说话。我们所说的“让机器像人一样开口说话”与传统的声音回放设备(系统)有着本质的区别。传统的声音回放设备(系统),如磁带录音机,是通过预先录制声音然后回放来实现“让机器说话”的。这种方式无论是在内容、存储、传输或者方便性、及时性等方面都存在很大的限制。而通过计算机语音合成则可以在任何时候将任意文本转换成具有高自然度的语音,从而真正实现让机器“像人一样开口说话”。

语音识别目的是研究出一种具有人类听觉功能的机器,能够听懂人的讲话,理解人的意图并做出相应的反应。语音识别系统本质上是一种多维模式识别系统,包括特征提取、语音模式、模式匹配3个基本单元。语音识别按不同的分法有不同的类型。以识别单位分有孤立词识别、音素识别、音节识别、孤立句识别、连接词识别、连续语音识别等;按识别规模分有小词汇量(10~50个)、中词汇量(50~200个)和大词汇量(200个以上)等;以服务对象分,有特定人讲话、多讲话人和非特定人3种;按识别方法分,有模板匹配法、随机模型法和概率语法分析法。本系统使用的是特定人的、孤立词、中小词汇量的语音识别技术。

5

《烹饪数字助理》设计报告

第三章 系统总体设计

本章主要介绍系统的总体设计。首先介绍系统的功能及配置;然后介绍系统硬件的结构(硬件总体规划);最后介绍系统工作的软件结构。

3.1 系统功能及配置

3.1.1 系统功能

系统的功能主要分为两个部分:系统的基本功能和系统的扩展功能,本系统设计主要实现基本功能,扩展功能可以进一步的开发。

(1)系统基本功能

① 提供丰富的菜谱,包括各大菜系的、适合不同年龄段的、健康饮食类、疾病调理类等,让用户有充分的选择空间;

② 提供三种查找菜谱的方式,一是按菜名首字母查找,二是按种类查找,三是语音查找。用户可以根据菜名、主料类别、口味类别等快速锁定选择菜谱,语音查找指另可利用语音报菜名迅速查找菜谱;

③ 系统有语音功能,显示的菜肴信息能以语音方式读出,同时用户可设定一些简单的语音命令,方便烹饪时操作;

④ 提供定时器功能,对于烹饪时间较长的菜肴,用户可设定定时时间,无需看管,定时时间到,定时器自动提醒用户;

⑤ 提供娱乐功能,能播放烹饪视频,也可听音乐;

⑥ 电器遥控功能,系统利用蓝牙装置可遥控有蓝牙功能的家电。 (2)系统扩展功能

烹饪数字助理作为厨房的一个管理中心,它可以对油烟、煤气进行检测,控制厨房的家电自动做饭等。将来它还可以成为未来厨房数字化的一个信息终端,管理厨房的家电,支持用户的远程控制,具有良好的开发前景

3.1.2 系统配置

根据系统功能以及设计嵌入式系统的要求,开发此系统需要以下主要配置:

(1)开发环境:REDHAT LINUX 9.0 + MINICOM + ARM LINUX,Windows

系统,嵌入式Berkeley DB数据库; (2)开发语言:C /C++语言

(3)硬件:ARM920T 结构芯片三星S3c2410X;

64M NAND FLASH; 64M SDRAM; TFT液晶LCD; 触摸屏; 蓝牙模块; 锂电池; 音频设备;

6

《烹饪数字助理》设计报告

SD卡(256M)。

开发板是由北京博创公司提供的UP-NETARM2410-S,如图3.1所示。

图3.1 2410-S平台实物图

3.2 系统结构

3.2.1硬件结构

系统主要用到的硬件有[6]: ① LCD模块,显示功能;

② 触摸屏模块,用来实现对系统的控制和操作; ③ 存储器模块,用来存储数据;

④ 语音模块,实现语音合成与语音识别; ⑤ 音频模块,用来播放烹饪视频;

⑥ 蓝牙模块,控制家电;

⑦ 电源管理模块,用来给处理器和各模块供电。硬件结构如图3.2所示。

语音触摸屏蓝牙S3C2410X存储器LCD 音频电源管理 图3.2 烹饪数字系统硬件结构图

7

《烹饪数字助理》设计报告

3.2.2软件结构

本系统的主要软件包括菜谱管理系统、界面系统和实用功能。菜谱管理系统包括菜肴数据库和烹饪指导,方便查找、制作菜肴;界面系统是人机交互的平台,通过良好的界面,用户可以方便的进行烹饪;实用功能包括音乐播放、视频播放和控制功能,其中控制功能包括语音技术、菜肴的添加和删除、红外遥控。软件结构如图3.3所示。

烹饪数字助理菜谱管理系统界面系统实用功能烹饪菜肴指导数据音乐视频控制库播放播放功能图3.3 烹饪数字系统软件结构图

8

《烹饪数字助理》设计报告

第四章 模块设计与实现

本章主要介绍了系统设计与实现的过程和方法。对本系统的设计与实现分模块介绍,首先介绍数据处理模块的设计与实现,接着介绍显示模块的设计与实现,然后介绍语音模块的设计与实现,最后介绍蓝牙控制模块的设计与实现。

4.1 数据处理的设计与实现

4.1.1 简单介绍

菜谱管理系统是系统的主要部分,包括菜肴数据库和烹饪指导两部分。菜肴数据库包含各个菜肴的详细信息,同时也包含为方便查找而设置的一些表项。

本系统使用的是嵌入式Berkeley DB数据库,Berkeley DB具有良好的嵌入性能,它本质上它是一个函数库,它把数据库直接连接到应用程序中。

BDB对需要管理的数据看法很简单,BDB数据库包含若干条记录,每一个记录由关键字和数据(Key/Data)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。BDB对数据类型不做任何解释, 完全由程序员自行处理,典型的C语言指针的\"自由\"风格。如果把记录看成一个有n个字段的表,那么第1个字段为表的主键,第2--n个字段对应了其它数据。BDB应用程序通常使用多个BDB数据库,从某种意义上看,也就是关系数据库中的多个表。关键字(Key)和数据(Data)是Berkeley DB用来进行数据库管理的基础,由这两者构成的Key/Data对(见表1)组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所构成的。

Key sport Fruit Drink

Data football orange beer

表1 Key/Data对

由于我们每道菜肴都有许多属性,如菜名、菜系、烹调类别以及口味等,所以不能由Key和Data同时分别表示这些属性。我们以菜名作为关键字(Key),而将菜肴的其他信息存储在一个名为“my_menu”的结构体作为数据(data),然后利用put函数将这些信息存入数据库。在数据倒入数据库以后我们可以利用BDB专用的API来对数据库进行检索、删除等基本操作,如利用get函数提取数据,可以按关键字或关键字和数据来检索所需要的记录;利用del函数可以删除指定的记录。

4.1.2 前期准备

我们将数据存入数据库时将信息先存入my_men的结构体中(结构体定

9

《烹饪数字助理》设计报告

义如下所示),然后以my_menu.name为关键字,以my_menu整体为data将信息导入数据库。

/* Define cookmenu structure */ typedef struct cookmenu {

char name[26]; char firstch[10]; char class[15]; char taste[15]; char objects[15]; char mainmater[15]; char envs[30]; char health[30]; char infor[2000]; }MENU;

MENU my_menu;

4.1.3 打开数据库

打开数据库通常要分两步进行:首先调用db_create()函数来创建DB的一个句柄,然后再调用DB->open()函数来完成真正的打开操作。Berkeley DB将所有对数据库的操作都封装在名为DB的结构中。db_create()函数的作用就是创建一个该结构,我们创建数据库句柄如下所示:

/* Initiallize the DB structure. */ db_create(&menu_dbp, NULL, 0); db_create(&class_sdbp, NULL, 0);

将磁盘上保存的文件作为数据库打开是由DB->open()函数来完成的,其实现如下所示:

/* Open the primary database and secondary database. */

menu_dbp->open(menu_dbp, /* DB structure pointer */ NULL, /* Transcation pointer */ menu_db_name, /* File that holds the database. */ NULL, /* Optional logical database name */ DB_BTREE, /* Database access method */ DB_CREATE, /* Open flags */ 0); /* File mode. Using default */

class_sdbp->open(class_sdbp, NULL, class_db_name, NULL, DB_BTREE, DB_CREATE, 0);

其中,menu_dbp为一级数据库的句柄,class_sdbp为二级库的句柄。当一个库被该函数声明为另一个库的二级库时,对一级库的操作将反映到二级库上,而对二级库记录的读操作返回的将是一级库相关记录的信息。因此,一级库的key值对于二级库来说应该是唯一的,所以不可以支持duplicate key;而二级库中的key值对于一级库中的某个属性来说并非是唯一的,所以此时需要将二级库的Flag置为DB_DUPSORT,如下所示:

/* Configure the secondary databases for sorted duplicates. */ class_sdbp->set_flags(class_sdbp, DB_DUPSORT);

10

《烹饪数字助理》设计报告

4.1.4 导入及添加数据

在创建了句柄及打开数据库以后我们便可以对数据库进行各种基本的操作,首先我们将记录从文本中导入到数据库,将信息导入到数据库如下所示:

/* Put the data into database */ menu_dbp->put(menu_dbp, /* DB structure pointer */

NULL, /* Transcation pointer */ &key, /* Record’s key */ &data, /* Record’s data */ DB_NOOVERWRITE); /* Put flags */

由于我们在系统开机前已经将数据导入数据库,所以这部分不在数据库的初始化中,但当用户需要自己添加菜谱时同样可以调用此函数。

在向数据库中添加数据时,如果给定的关键字已经存在,大多数应用会对于已经存在的数据采用覆盖原则。但我们在导入时为了避免信息被改变采用禁止覆盖的方法。一旦给出“DB_NOOVERWRITE”标记,如果DB->put()函数在执行过程中发现给出的关键字在数据库中已经存在了,就无法成功地把该Key/Data对添加到数据库中,于是将返回错误代号“DB_KEYEXIST”。

4.1.5 检索数据

(一) 从一级库检索数据

数据库最重要的功能之一就是能够按不同的要求检索到所需要的数据,从Berkeley DB数据库中检索数据可以通过调用DB->get( )或者cursorp->get( )函数来完成,我们主要是用cursorp->get()函数遍历数据库将符合要求的记录检索出来,其具体实现如下所示:

/* Get a cursor to the menu db */

ret = addmenu_dbp->cursor(addmenu_dbp, NULL, &cursorp, 0); /* Position the cursor.*/

if(ret = cursorp->get(cursorp, &key, &data, DB_SET) == 0) {

strncpy(addmenu[i], (char *)(data.data), 20); i = i + 1,num = num + 1; }

/* Iterate over the database, retrieving each record in turn. */

while( (ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0) {

strncpy(addmenu[i], (char *)(data.data), 20); i = i + 1,num = num + 1; }

我们首先创建一个游标,供遍历数据库检索菜肴使用,然后通过cursorp->get函数按照要求检索单个菜谱还是符合要求的所有菜谱。

(二) 多库联合检索数据

由于我们的一级数据库(menu DB)内的数据是按照菜名为关键字来存储的,所以当按菜名来检索记录时仅需调用DB->get()从一级库中检索即可。但

11

《烹饪数字助理》设计报告

当我们按菜系、菜名拼音的首字母、菜的口味以及烹调类别等属性来检索菜肴时,就要用到二级数据库。前面已经讲到在初始化时创建二级库句柄和二级库的方法跟一级一样。同时,我们要调用DB->associate()将二级库与一级库联系起来,如下所示:

/* Associate the secondary databases to the primary db. */

menu_dbp->associate (menu_dbp, /* Primary database */ NULL, /* TXN id */ class_sdbp, /* Secondary database */

get_class_key, /* Call back used for key creation */ 0); /* Flags */

menu_dbp ->associate (menu_dbp, NULL, firstch_sdbp, get_firstch_key, 0);

其中,参数四为用来定义二级key值与一级key、data值关系的回调函数,它的定义如下所示:

/* Used to extract a menu's classfication from a menu database record. */ int get_class_key (DB *sdbp, /* secondary db handle */ const DBT *pkey, /* primary db record's key */ const DBT *pdata, /* primary db record's data */ DBT *skey) /* secondary db record's key */ {

MENU *my_menu;

my_menu = (MENU *)(pdata->data); memset(skey, 0, sizeof(DBT)); skey->data = my_menu->class;

skey->size = strlen(my_menu->class)+1; return 0; }

其四个参数分别为二级库句柄、一级库的key\\data值、被创造的二级库key值。当两级库都是用DB_READONLY打开时,该参数可以设为空。

在二级库与一级库建立联系以后,我们便可以按菜肴的菜系、菜名拼音的首字母、菜的口味以及烹调类别等属性来检索所需要的菜肴。

4.1.6 删除数据

Berkeley DB为删除数据记录提供了专门的DB->del()或者cursorp->del()函数,当已知某道菜肴的菜名,需要将其删除时只需调用DB->del()函数即可,如下所示:

addmenu_dbp->del(addmenu_dbp, NULL, &key, 0)) == 0

但当需要删除满足某种属性的菜肴时,可以先用cursorp->get()获得满足要求的菜肴,然后调用cursorp->del(),如下所示:

/* Position the cursor */

while (cursorp->get(cursorp, &key, &data, DB_SET) == 0) cursorp->del(cursorp, 0);

虽然利用二级库删除的是某道菜名但却将一级库中这道菜的所有信息全部删除掉,所以在用此函数时要小心。

12

《烹饪数字助理》设计报告

4.1.7 关闭数据库

对于一次完整的数据库操作过程来说,关闭数据库是不可或缺的一个环节。这是因为Berkeley DB需要依赖于系统底层的缓冲机制,也就是说只有在数据库正常关闭的时候,修改后的数据才有可能全部写到磁盘上,同时它所占用的资源也才能真正被全部释放。关闭数据库的操作是通过调用DB->close()函数来完成的,如下所示:

/* Close the cursor */

class _cur->close class _cur); menu_cur->close(menu_cur);

/* Close database. Close the secondary before the primary */ class_sdbp->close(class_sdbp, 0); menu_dbp->close(menu_dbp, 0);

从上面我们可以看出,在关闭数据库之前必须先关闭游标,同时值得注意的是一级库必须在二级库之前关闭。

4.1.8 出错处理

对于任何一个函数库来说,如何对错误进行统一的处理都是需要考虑的问题。Berkeley DB提供的所有函数都遵循同样的错误处理原则,即函数成功执行后返回零,否则的话则返回非零值。

对于系统错误(如磁盘空间不足和访问权限不够等),返回的是一个标准的值;而对于非系统错误,返回的则是一个特定的错误编码。例如,如果在数据库中没有与某个特定关键字所对应的数据,那么在通过该关键字检索数据时就会出现“No matching key/data pair foun”的错误,此时函数的返回值将是DB_NOTFOUND,表示所请求的关键字并没有在数据库中出现。所有标准的errno值都是大于零的,而由Berkeley DB定义的特殊错误编码则都是小于零的。

在Berkeley DB 中提供了专门的函数来捕获错误代码并将之转变成具体的错误描述。当有错误发生时, 首先由函数db-> st rerror 返回指向错误消息的指针, 该函数对于系统错误和Berkeley DB自身的错误都可以处理; 然后再由Db-> err 或Db-> errx 这两个函数来格式化输出错误信息。

4.1.9 结论

Berkeley DB这个嵌入式数据库系统使用非常简单。它没有数据库服务器的概念,也不需要复杂的SQL语句,所有对数据的操作和管理都可以通过函数调用来完成,非常适合于那些需要对数据进行简单管理的应用场合。

4.2 界面的设计与实现

该系统是一款基于语音提示的菜肴烹饪助理。系统提供包含各菜系的、适合不同年龄段的、健康饮食类、疾病调理类等菜谱;与嵌入式数据库系统相结合,从嵌入式数据库系统提取数据并显示出来;又基于语音技术,可以提供语音播放,暂停、继续等命令;

所以在界面显示上本系统从以下几个方面设计并实现:

13

《烹饪数字助理》设计报告

4.2.1开机界面的设计

为了使开机界面尽量简单明了,又可以让用户第一时间使用帮助说明,故只添加两个按钮,一是跳转到主功能界面的按钮,另外是帮助按钮;

界面实现如下图4.1所示:

开开开开开开开开开开

图4.1 开机界面

4.2.2 界面总体设计与实现

(1)设计

本系统分成九大模块,为用户提供不同的功能,分别是五湖四海、情景环境、适宜人群、健康调理、主料类别、口味类别、我的菜谱、娱乐功能,快速检索。如图4.2所示。

图4.2 主界面

五湖四海模块是针对菜系而设计的,本系统精选了五大菜系为其提供丰富的菜谱,分别为:川菜、淮扬菜、东北菜、鲁菜、湘菜,适合不同地方的饮食习惯,所以称职为五湖四海。又在每种菜系内添加了普通炒菜、红烧、油炸、煲汤、凉菜五种烹调类别,使客户的选择更加细腻。体现出该系统的丰

14

《烹饪数字助理》设计报告

富性;

情景环境模块是针对一些特殊情况而设立的,分别有:宴请宾客、生日PARTY、异国风味、节日特色、快餐饮食;宴请宾客提供了一些非家常类的菜谱,可以提供在宴请客人时大显身手的菜谱;生日PARTY则为客户提供制作生日糕点等特殊菜谱;异国风味的设立又为想烹饪国外大餐的客户提供了丰富参考;在快速的生活模式下,便利而又营养丰富的菜谱就备受欢迎了,快餐饮食的设立正好提供了这种功能;

适宜人群模块针对了五种特殊人群:幼儿、青少年、孕妇、老年人、大众,使得家庭每个成员都有适宜的菜谱可选,体现出该系统人性化的设计;

主料类别模块主要设有:肉类、蔬菜、豆制品、海鲜、瓜果类五大主要材料,使得客户可根据所买的主料而去选择菜谱,摒弃了普通菜谱那种根据菜谱选择主料的固定模式,特别适合家庭的普通烹饪,本系统这一模块真正去以用户的角度去设计,做到以用户为本。

口味类别模块依照:清淡、香辣、酸甜、香鲜四种口味设计,满足客户对口味的不同需求;

我的菜谱模块的建立是为用户提供了一片自己的天地,用户可以随心所欲的把自己喜欢的菜谱和常吃的菜肴添加进来,也可以把添加进来的菜谱删除掉。为用户提供了方便的点菜方式;

娱乐模块提供了播放音乐、播放视频的功能,使得用户烹饪闲暇之余听听音乐、观看视频来放松心情享受生活;另外,还提供了用蓝牙遥控功能,可以遥控一些简单家电,使生活更加方便;

另设快速检索功能,可使用户快速锁定菜谱。共设立了三种检索方式,第一种是针对已知道检索菜谱的名称的用户设定的,称为按菜谱首字母检索方式,检索速度即快又准确;第二种是针对无目的检索方式,称为按类别检索方式,使用户既可以选择主料又可以确定其口味;第三种是语音检索方式,本系统设定了五种家庭烹饪的高频菜谱,客户只要报出菜谱的菜名便会立刻检索出该菜谱;

(2)实现

针对以上几种特殊功能,为每个功能块制定相应的界面。

对话框编程是一种快速构建用户界面的技术。通常,我们编写简单的图形用户界面时,可以通过调用CreateWindow函数直接创建所有需要的子窗口,即控件。但在图形用户界面比较复杂的情况下,每建立一个控件就调用一次CreateWindow函数,并传递许多复杂参数的方法很不可取。主要原因之一,就是程序代码和用来建立控件的数据混在一起,不利于维护。为此,一般的GUI系统都会提供一种机制,利用这种机制,通过指定一个模板,GUI系统就可以根据此模板建立相应的主窗口和控件。MiniGUI也提供这种方法,就是建立对话框模板[7]。

在MiniGUI中,用两个结构来表示对话框模板(minigui/window.h),如下所示:

typedef struct {

char*class_name; //control class DWORD dwStyle; //control style

int x,y,w,h; //control position in dialog

15

《烹饪数字助理》设计报告

int id; //control identifier const char*caption; //control caption

DWORD dwAddData; //additional data

DWORD dwExStyle; //control extended style }CTRLDATA;

typedef CTRLDATA*PCTRLDATA; typedef struct {

DWORD dwStyle; //dialog box style

DWORD dwExStyle; //dialog box extended style int x,y,w,h; //dialog box position const char*caption; //dialog box caption HICON hIcon; //dialog box icon HMENU hMenu; //dialog box menu int controlnr; //number of controls

PCTRLDATA controls; //poiter to control array

DWORD dwAddData; //addtional data,must be zero }DLGTEMPLATE;

typedef DLGTEMPLATE*PDLGTEMPLATE;

首先利用CTRLDATA定义对话框中所有的控件,并用数组表示。控件在该数组中的顺序,也就是对话框中用户按TAB键时的控件切换顺序。然后定义对话框,指定对话框中的控件数目,并指定DLGTEMPLATE结构中的controls指针指向定义控件的数组。

在定义了对话框模板数据之后,需要定义对话框的回调函数,并调用DialogBoxIndirectParam函数建立对话框.

实现清单:开始界面对话框的定义:

static DLGTEMPLATE DlgBoxInputLen_Start = {

WS_VISIBLE, WS_EX_NONE, 0, 0, 900, 760, \"\ 0, 0,

2, NULL, 0 };

static CTRLDATA CtrlInputLen_Start [] = { {

(…) };

static int InputLenDialogBoxProc_Start (HWND hDlg, int message, WPARAM wParam,

16

《烹饪数字助理》设计报告

LPARAM lParam) { {

(…) }

return DefaultDialogProc (hDlg, message, wParam, lParam); }

static void InputLenDialogBox_Start (HWND hWnd) {

DlgBoxInputLen_Start.controls=CtrlInputLen_Start;

DialogBoxIndirectParam(&DlgBoxInputLen_Start,hWnd, InputLenDialogBoxProc_Start, 0L); }

4.2.3 菜谱界面的总体设计与实现

(1)设计

当用户选择菜谱时,首先应看到的是菜谱清单,然后进入的是菜谱的具体做法,,所以在菜谱界面设计时,要做两种界面,一是在每个模块中贴加多个菜谱,而是菜谱的具体做法。

1菜谱清单的界面设计:由于本系统做的是烹饪数字系统的简单模型,○

故决定每个模块添加四个菜谱,又由于添加的每个菜谱的内容均不同,所以在每个菜名的后面设置了一个“点菜”按键,以保证界面间快速跳转;

2菜谱具体做法的界面设计:考虑到本系统是基于语音识别及合成技○

术,具有语音提示功能,可以暂停、继续,甚至每个步骤都可以自由控制重读功能,所以在界面的按钮设置方面要有“语音”、“重读”、“暂停”、“继续”等按钮;每道菜谱都有自己的主料,考虑到显示到界面上会不整齐而又占用部分界面,会影响菜谱步骤的显示,故又制作了一个“材料必备” 按钮,使得点击后会专门跳转出一个小窗口来显示主料;本系统可以使每一个菜谱均可产生定时功能,故要添加一个“定时”按钮;在有,向我的菜谱模块添加菜谱时,在每个菜谱内还要添加一个“添加到我的菜谱”按钮;

(2)实现

编写简单的图形用户界面时,可以通过调用CreateWindow函数直接创建所有需要的子窗口,即控件。由于以上设计的两个界面比较简单,故采用CreateWindow函数直接创建。

由于要考虑每一烹饪步骤都可以重放的功能,所以再贴重读按钮的时候要与步骤的数目相对应,设置每一道菜最少两步,最多六步,在第一步前放置“语音”按钮,表示从第一步开始进行语音提示,在第二步之后的步骤前放“重读”按钮,表示从本步骤开始重放直至结束。

实现清单:菜谱清单的界面函数及菜谱具体做法的界面函数:

/********菜谱具体做法的界面部分函数************/

static int LoadMenuWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM

17

《烹饪数字助理》设计报告

lParam) {

switch(message){

case MSG_CREATE:

CreateWindow (CTRL_BUTTON, \"语音\

WS_VISIBLE | BS_BITMAP | WS_CHILD, IDC_STEP1, 120,110,65,35,hWnd,&sound); CreateWindow (CTRL_BUTTON, \"重读\

WS_VISIBLE | BS_BITMAP | WS_CHILD, IDC_STEP2, 120,155,65,35,hWnd,&repid); switch(disp.step) { case 3: (…) case 6: break;

deflault : printf(\"%s\两步\"); } (…) return 0; (…) } return DefaultMainWinProc(hWnd, message, wParam, lParam); }

4.2.4 定时界面的设计与实现

(1)设计

为了做到使得每个菜谱都可以定时,且用户可以自主选择定时时间,使用户使用更加灵活,本系统在定时方面制作两个界面,一是可自由选择定时时间界面,二是定时时间到提醒界面。

1定时时间界面的设计:通常一道菜无需看管的时间短则五分钟,长则○

一个小时甚至两个小时之久,所以在该界面内设置了五个时间选择按钮,分别为“五分钟”、“十分钟”、“二十分钟”、“半小时”、“一个小时”这五个按钮;

2提醒界面:当选择定时时间后,会跳转出此提醒界面,首先在界面中○

央显示“开始定时”的字样,当定时时间到后,会转变成“定时时间到请按返回继续操作”的字样; (2)实现

1由于界面比较简单,故采用CreateWindow函数直接创建。前面界面○

已经介绍,这里就不贴定时时间界面的设计函数了;

18

《烹饪数字助理》设计报告

2在MiniGUI-Threads模式中,每一个线程最多可以拥有8个定时器。○ 定时器需要使用SetTimer函数来创建,创建时需要指定定时器标识以及定时时间;当定时时间到达时,定时器将会产生MSG_TIMER消息,参数wParam保存了产生消息的定时器标识号;然后定时器再次重新运行,定时器时间到达时产生MSG_TIMER消息„;当不需要使用定时器时,调用KillTimer函数删除定时器。 定时器部分流程如图4.3所示:

开开开开开开开开开开开开开开开开开开开开开Y开开N 图4.3 定时器流程

实现部分清单:定时提醒函数

case MSG_PAINT:

sprintf(disp_buf, \"start定时\"); hdc = BeginPaint(hWnd);

TextOut(hdc,360,200,disp_buf); EndPaint(hWnd,hdc); break; case MSG_TIMER:

if(wParam == TIMER0)

sprintf(disp_buf, \"定时时间到请按返回继续操作\"); hdc = GetClientDC(hWnd); TextOut(hdc,360,200,disp_buf);

system(\"./mp3/wavplayer ./mp3/baojing.wav\") ; KillTimer(hWnd,TIMER0); ReleaseDC(hdc); break;

4.2.5 快速检索界面的设计与实现

1.设计

快速检索共设立了三种检索方式,第一种是针对已知道检索菜谱的名称的用户设定的,称为按菜谱首字母检索方式,由于二十六个英文字母中“A、

19

《烹饪数字助理》设计报告

E、I、N、O、V”六个首字母几乎无菜谱可检索,所以设立了二十个英文字母,检索速度即快又准确;第二种是针对无目的客户设计的,称为按类别检索方式,因为平时烹饪注重材料及口味,所以该检索提供了主料及口味两种单选框,使用户既可以选择主料的同时又可以确定其口味而检索菜谱;第三种是语音检索方式,本系统设定了道种家庭烹饪的高频菜谱,客户只要报出菜谱的菜名便会立刻检索出该菜谱;

2.实现 (1)按首字母检索方式:该界面设计只需提供二十个大写英文字母按钮,由于按钮较多,用CreateWindow函数直接创建显得有些繁琐,所以采用对话框编程,以上界面以采用过了该方式,故这里不再做介绍。

(2)按类别检索方式:该界面要提供两个单选框,一个是主料的,一个是口味的,两个框内的按钮并非以往的按钮风格BS_PUSHBUTTON,而是BS_AUTORADIOBUTTON单选钮风格,以便同时选中主料和口味两种类别,本界面依然可采用对话框编程;

实现单选框度分清单清单:

static CTRLDATA CtrlInputLen_Retrieval_Common[] = { {

\"static\

WS_VISIBLE | SS_GROUPBOX, 80, 60, 230, 320, IDC_STATIC, \"主料\ 0 },

(…) {

\"button\

WS_VISIBLE | BS_BITMAP |BS_AUTORADIOBUTTON, 100, 320, 150, 45, IDC_FRUIT, 0,

&fruit

} }

4.2.6 与嵌入式数据库联调设计与实现

(1) 设计

本系统的菜谱数据都是由嵌入式数据库存储并提供的,数据库提供给

MINIGUI显示的信息有两种,一种是菜名信息,在MINIGUI的菜谱清单界面上会用到;另一种是菜肴的具体做法信息,在显示单个菜谱信息的界面上会用到。

① 菜谱清单分了两种设计方式,第一种是针对几大主模块的菜谱显示,

20

《烹饪数字助理》设计报告

这几种模块每个模块只添加四个菜谱,故只添加四个点菜按钮即可;第二种是针对快速检索后的菜谱清单界面,由于检索完毕后不仅仅只有四个菜谱而已故要添加翻页按钮完成翻页功能;

② 菜谱信息显示的界面要从数据库中提取菜名,烹饪所需时间烹饪步骤等信息,为了给用户更好的烹饪指导,本系统将简化版的烹饪步骤显示在界面上,每步骤控制在十五个字之内,让用户看后简单易懂,而我们的语音播放出的步骤较显示步骤详细细腻,为用户提供丰富的指导。 (2)实现

数据库提供的数据与MINIGUI提取的数据要匹配才能很好的连接在一起,在两者联调实现上,队友间的相互沟通是很重要的。

① 针对每个模块只添加四个菜谱的菜谱清单很简单,只需数据库提供一个字符串数组,MINIGUI直接拿来显示就可以了,添加菜名可以用TextOutLen函数在给定位置上输出指定长度的字符串;

数据库提供六大模块接口有:search_class_records(\"川炒\");

search_envs_records(\"宴请宾客\"); search_objects_records(\"幼儿\"); search_health_records(\"药膳\"); search_mainmater_records(\"肉类\"); search_taste_records(\"清淡\");

实现此功能的部分清单为:

case MSG_PAINT:

hdc = BeginPaint (hWnd);

TextOut (hdc, 225, 140, menuname[0]); TextOut (hdc, 225, 200, menuname[1]); TextOut (hdc, 225, 260, menuname[2]); TextOut (hdc, 225, 320, menuname[3]); EndPaint (hWnd, hdc); return 0;

② 检索后的菜谱清单相对上面界面设计有些复杂,由于翻页完毕后有四种情况:无菜谱了、一个菜谱、两个菜谱、三个菜谱;所以在界面的实现上就要考虑到进一个菜名的显示到三到三个菜名的显示问题。

实现该界面的清单:

int MenuWinProc_Next(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) {HDC hdc;

switch(message){

case MSG_CREATE: switch(last){

case 0:hdc = BeginPaint (hWnd);

TextOut (hdc, 320, 240, \"没有啦!!!!\"); EndPaint (hWnd, hdc); break;

case 1:

21

《烹饪数字助理》设计报告

(…)

} (…) return 0; } return DefaultMainWinProc(hWnd, message, wParam, lParam); }

③ 菜谱信息显示界面的实现:由于MINIGUI从数据库提取的信息是例如“菜名:回锅肉

材料:带皮猪腿肉400克、青蒜苗100克、郫县豆瓣25克、甜面酱约10克
2<0001>第一步:肉洗净煮熟捞出切片<0002>第二步:豆瓣上色并放甜面酱炒<1001>第一步:请您先将肉洗净,煮至肉熟皮软捞出,凉后切片待用,青蒜切段。[p3000]<1002>第二步:请您再将肉片在6成热油锅中炒至翻卷成耳状时,下剁茸的郫县豆瓣炒上色,再放甜面酱炒出香味,调味后放青蒜段翻勺装盘即成。[p3000]”的字符串,所以在显示到界面之前,要解析该字符串,然后才可方便的把烹饪步骤显示到界面上,而对应的语音提示步骤传递给语音识别模块。

从数据库中提取菜谱信息接口为:search_records(menuname[i]); 实现字符串解析函数如下:

void pickup(char *menu ,char *pid,char *lid,char *result)

{ int i ,j,num; char *l=pid; char *m=lid;

i=(strstr(menu,l)-strstr(menu,\"<\")); j=(strstr(menu,m)-strstr(menu,\"<\")); for( num=0;numdispmenu(char *s) { char *l=\"\"; char *m=\"\"; char step[100]=\"\\0\";

pickup(s,l,m,disp.name); printf(\"%s\\n\ (…)

strcat(disp.read5,disp.read6); (…) }

完成解析函数后就可调用菜谱显示函数,完成菜谱信息的界面了。

22

《烹饪数字助理》设计报告

4.2.7 与语音模块联调设计与实现

语音模块与MINIGUI的联结很方便,只需MINIGUI 从数据库提取数据,传送到语音模块,在调用接口函数即可。

上面已经介绍了提取数据并解析的方法,直接运用解析后数据即可; 语音识别接口函数:read(fd,&get_data,1); 语音合成接口函数:T2S_t2s(disp.read1);

4.3 语音模块的设计与实现

4.3.1 语音识别模块

本系统使用的是SPCE061A语音处理芯片。SPCE061A有配套的IDE集成开发环境,支持多种编程语言,通过专用的在线仿真器可将可执行文件下载到芯片上。SPCE061A提供特定人语音识别库和调用的API接口,在进行语音识别之前需要进行训练,让系统能记住操作人的语音特征。

语音识别模块主要提供语音菜单功能。由于识别库每次只能识别5条命令,所以需要按组来进行语音识别,每组有5条命令,每组命令存放在不同的内存空间中。使用时需要通过串口发送给SPCE061A一个组号,SPCE061A调用该组的5条命令供使用者识别,识别正确后SPCE061A再通过串口返回一个数据,通过speech函数实现。

例如本系统的第一组语音命令为电话、短信、上网、探路狗和其他,系统默认开始自动运行speech(0x01)。盲人通过语音命令可调用相应的功能。语音识别流程如图4.4所示。

4.3.2 语音合成模块

语音合成模块使用的是XF-S4240语音合成模块。XF-S4240 中文语音合成模块,基于嵌入式中文语音合成领域的最新研究成果――InterSound4.0 中文语音合成系统而设计的一款中文语音合成模块。它能够支持GB2312、GBK、BIG5、UNICODE 四种内码格式的文本,支持合成、停止、暂停、继续等控制命令。XF-S4240通过IIC与ARM9通信。

IIC驱动的写函数是IIC_XF_S4240_write,主要内容是

if(copy_from_user(my_dev.buffer,buf,count)) //从用户区得到数据 return -EFAULT;

Set_IIC_mode(XF_S4240_IICCON, &oldiiccon);

IIC_WriteSerial(XF_S4240_ADDR,X_ADDR,my_dev.buffer,count); Set_IIC_mode(oldiiccon, NULL);

IIC驱动的读函数是IIC_XF_S4240_read

Set_IIC_mode(XF_S4240_IICCON, &oldiiccon); IIC_ReadSerial(XF_S4240_ADDR,X_ADDR,my_dev.buffer,count); Set_IIC_mode(oldiiccon, NULL); if(copy_to_user(buf,my_dev.buffer,count)) //从内核区读取数据

return -EFAULT;

语音合成先将合成的内容转换为Unicode码(一种通用的国际编码方式),

23

《烹饪数字助理》设计报告

再将转换后的码封装为特定的帧结构,通过IIC总线传给语音合成模块,合成模块会自动识别帧结构,提取合成内容,语音输出,其流程如图4.2所示。

开始初始化语音识别系统N是否收到组号Y接收组号开始调用语音合成函数发送内容封装为帧调用该组命令并识别N识别正确Y返回命令号IIC总线传输数据帧语音合成

图4.4 语音识别流程图

图4.5 语音合成流程图

结束4.4 蓝牙模块的设计与实现

该模块是本系统的一个拓展功能,用来模拟智能家电的无线控制。本系统在蓝牙链路层实现了一个简单客户端,而服务端就是一个模拟的智能家电,它启动一个服务进程,当本系统发出控制命令时,服务端响应请求对家电做出相应的控制。原理图如图4.6所示。

烹饪数字助理 控制命令智能家电蓝牙客户端

蓝牙服务端

图4.6 蓝牙遥控原理图

24

《烹饪数字助理》设计报告

第五章 系统测试与应用

本章主要介绍系统在实验室内的测试过程与结果、系统特点与优势以及系统的应用前景。

5.1 系统测试及性能分析

5.1.1 系统测试

本系统目前通过了实验室内ARM开发板上的测试,一台ARM开发板作为烹饪数字系统,一台ARM开发板作为蓝牙接受系统,用其模拟家用电器。在测试前建立好工作环境。

测试内容:

(1)任选一道菜,完成烹饪过程;

(2)按三种检索方式检索同一到菜,例:鱼香肉丝; (3)添加和删除菜谱; (4)播放音乐,视频; (5)蓝牙控制家电; 测试步骤:

1. 选取“鱼香肉丝”,完成烹饪;

(1)选择菜谱:点击一系列按钮找到鱼香肉丝:开始点菜——五湖四海——川菜——普通炒菜——鱼香肉丝。

(2)开始烹饪:点击“材料必备”按钮查看烹饪材料;“语音” 、“暂停” 、“继续” 、“重读”等按钮测试语音模块;如果有定时提示信息,点击“定时”按钮选择定时时间,定时时间到测试报警效果; 2. 按三种检索方式检索同一到菜,例:鱼香肉丝;

(1)按菜名首字母检索菜谱:点击:快速检索——按菜名检索,选择鱼香肉丝首字母“D”按钮,查找该菜谱,若第一页没有找到,点击下一页继续查找;

(2)按类别查找菜谱:点击:快速检索——按类别查找,同时选中“猪肉”“香辣”,点击“确定”按钮,查找该菜谱;

(3)按语音检索菜谱:点击“快速检索”按钮来到检索界面,点击“语音检索”按钮,报出“鱼香肉丝”的菜名,等待自动跳出鱼香肉丝的菜谱;

3. (1)向我的菜谱内添加菜谱:打开几道菜,点击每道菜内的“添加

到我的菜谱”例:鱼香肉丝,宫爆鸡丁,水煮肉等;点击主界面内“我的菜谱”,查看添加情况;

(2)从我的菜谱内删除菜谱:打开“我的菜谱”,点击鱼香肉丝后

的“点菜”按钮打开该菜谱,点击“删除”按钮后,返回查看是否成功删除了该菜谱。

4. 播放音乐:点击:娱乐功能——播放音乐,选择一首歌曲进行播放测试例:北京欢迎你;

25

《烹饪数字助理》设计报告

5.播放视频:点击:娱乐功能——视频播放,选择一个视频进行播放测

试例:烹饪视频一;

6.蓝牙遥控:

(1)将两台开发板分开10米左右距离;

(2)点击:娱乐功能——蓝牙控制,点击“遥控开启”按钮,启动蓝牙

设备;

(3)打开模拟家电系统,启动蓝牙设备,测试接受效果; 测试结果: 1.(1)系统开机正常,开机时间在10秒左右;

(2)按钮反应灵敏,可按步骤迅速查找到“鱼香肉丝”菜谱; (3)语音模块工作正常,可实现语音播放、暂停、继续、重读等功

能;

(4)定时模块工作正常,可正常选择定时时间,时间到实现报警效

果;

2.(1)按菜名首字母检索菜谱功能正常,从数据库检索菜谱时间在1~3

秒内;

(2)按类别查找菜谱功能正常,从数据库检索菜谱时间在1~3秒内; (3)语音检索菜谱功能正能,能够迅速锁定菜谱;

3.(1)添加菜谱功能正常,可实现将选中的菜谱添加到我的菜谱中; (2)删除菜谱功能正常,可实现从我的菜谱中删除想去除的菜谱; 4. 播放音乐功能正常,可正常播放mp3格式的歌曲; 5. 播放视频功能正常,可正常播放avi格式的视屏; 6. 蓝牙遥控功能正常,可实现发送、接收控制命令功能;

5.1.2 性能分析

本系统主要是根据测试结果分析该系统嵌入式数据库存储、MINIGUI、语音模块、蓝牙模块等性能。

1.嵌入式数据库性能分析

(1)嵌入式数据库可在嵌入式设备中独立运行,可以处理大量的、时效

性强且有严格时序的数据。具有可靠性、高实时性和高信息吞吐量;

(2)数据提取速度在1~3内,提取准确快捷;

2.MNINIGUI性能分析

(1)系统支持BMP、GIF、JPEG、PCX、TGA等常见图像文件,显示效

果清晰;

(2)按钮、复选框等控件反应灵敏,且大小位置方便可调;

(3)利用MINIGUI技术制作定时器方便快捷,定时时间准确效果良好; (4)界面间转换方便灵敏; 3.语音识别及合成性能分析

(1)该系统可识别特定人的声音,识别效果较好;

(2)该系统可流畅读出文字信息,基本达到了语音提示的效果; 4.蓝牙模块性能分析

该系统蓝牙模块建立在链路层之上,在有效距离内可迅速建立连接,虽

然连接并不是特别可靠,传送大量数据时可能会出错,但在发送简单的控制命令时完全可满足用户要求。因此,针对该系统而言,该蓝牙模块的性能基

26

《烹饪数字助理》设计报告

本达到要求。

5.2系统特点及优势

本系统主要特点及优势如下:

(1) 融合多种先进技术,如嵌入式数据库技术、MINIGUI技术和语音技术等;

(2) 符合人性化设计,提供的菜谱种类丰富,老少皆宜; (3) 利用语音技术,方便用户操作; (4) 蓝牙功能实现对家电的控制;

(5) 采用模块化设计,通过软件实现mp3、视频播放等功能; (6) 制作成本低,布置简单,维护方便。

5.3 系统应用

烹饪数字助理提供多种不同菜谱的制作方法,不仅可以让现代年轻人体会烹饪的乐趣,而且可以让人们更多的了解健康饮食的重要性,还能弘扬中华美食的文化。烹饪数字助理可进一步开发为厨房数字助理,作为未来厨房数字化的一个信息终端,控制管理厨房的各种电器,监控厨房的环境指数,探测厨房的油烟煤气,遇到危险及时报警等,可成为人们厨房管理的好帮手。

27

《烹饪数字助理》设计报告

参考文献

[1] 马忠梅, 李善平等. ARM&Linux嵌入式系统教程. 北京:北京航空航天大

学出版社, 2004.9

[2] 康一梅等. 嵌入式软件设计.北京:机械工业出版社,2007.6

[3] 沈连丰. 嵌入式系统及其开发应用. 北京:电子工业出版社, 2005.7 [4] 周立功等. ARM嵌入式MiniGUI初步与应用开发范例. 北京:北京航空航

天大学出版社, 2006.6

[5] 金纯. 蓝牙技术. 北京:电子工业出版社, 2001

[6] 沈文斌. 嵌入式硬件系统设计与开发实例详解. 北京:电子工业出版社 [7]Datasheet for MiniGUI V2.0.3/1.6.9. http://www.minigui.com

28

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务