摘 要: 设计了一种便携式智能存取设备。它包括以STC12C单片机为控制中心的下位机和Android终端。其中Android终端实现数据检索、借物系统、语音识别搜索等;下位机实现规格检测和位置提示。Android终端与下位机之间通过蓝牙进行数据交互。经过测试,该设备使用便捷,查找效率高。
关键词: Android ;蓝牙;存取设备;STC12C单片机
日常生活中有许多物品(如电子元器件、机械零件、家庭小药品等)具有种类多、体积小的特点。这些特点使它们不易存储,管理不便,并且当需要时如果没有存放好,则需要大量的时间去查找。针对上述情况,苏州艾隆有限公司针对药物存取的问题,制造了IRON-240智能存储机,极大地提高了药物急诊窗口的使用效率[1]。一些IC生产车间通过采取一种基于嵌入式系统开发的存取系统[2]来提高IC电子部件的管理。但是现有阶段的存取设备都是大型设备,不易携带,存储物品具有专一性并且制作成本昂贵,操作较为繁琐。对此,本文设计了一种便携式存取设备,它具有成本低、使用方便等优点。并且随着手持移动设备的发展,以智能手机为代表的Android设备更是迅猛发展[3],因此采用Android机作为终端设备,而下位机则采用STC12C单片机作为控制中心。该系统通过蓝牙模块进行数据交互,利用Google语音识别库进行语音输入,并且设备里创新性地加入了借物模块,它可以在急需某物品而发现用完时,在附近发现谁有相同的物品,并提出借物请求。经过测试,该存储设备非常适合家庭、DIY爱好者管理小型物品。
1 系统框架
系统的结构框架如图1所示,本系统采用Android手机终端控制,用户利用手机进行语音输入或者手动输入想要存取的物品,终端就会对数据库进行索引或者新增,并获得位置信息。然后位置信息通过蓝牙模块发送给以STC12C单片机作为主控中心的下位机。接着下位机将接收到的信息进行解码,获得位置信息,然后通过位置提示模块对相应的位置进行提示。与此同时,Android终端会定期对数据库里的数据进行统计分析,得知用户的使用物品频率来弹出相应的广告。利用互联网,可以搜索附近是否有人拥有相同物品,并利用开发的借物系统来发送请求借用信息。
2 下位机设计
下位机的主控芯片选择STC12C5A60S2,原因主要有两点:
(1)由于下位机作为存取物体的主体,必须要实现位置提示的功能。这里利用LED点阵来实现位置的提示,这就需要单片机具有较快的速度并且I/O口具有较大的驱动电流。而STC12C5A60S2作为一款增强型51单片机可以设置为1T模式,具有比通常的51单片机更快的运行速度;另外它的每个I/O口都具有20 mA的驱动电流,满足此系统设计的需要。
(2)便携式的容物箱采取每层分格的样式,为了可以存放大部分物体,每层的格子可以通过抽掉两格之间的挡板将格子进行相应的合并扩大。为了实现准确定位,下位机需要知道格子的大小和相应的位置。为了达到此目的同时又最大限度地的降低成本,采取了A/D采样的方式,达到了一个A/D可以同时检测多路格子是否合并的目的。这样STC12C5A60S2自带的8路10位精度ADC又一次满足了系统的需要。
除了以上两点之外,STC12C5A60S2还具有许多扩展功能,并且除了这些扩展功能,单片机本身的使用与通常的51单片机完全一样,操作十分便捷。
2.1 位置提示功能的实现
为了提示相应存储位置,需要明确指出格子的位置和编号。这里采用的方式是在格子底部的四周装上LED灯,在用户寻找相应物体时,相应格子底部的LED灯将会亮起,以此来提示物体的存储位置。同时由于这需要大量的I/O口来控制大量的LED亮灭,为了解决I/O口不足的问题,本方案采取了点阵屏的思想,构成了N×M的LED点阵屏,本方案中设计为6×8的LED点阵屏。同时为了便于以后多层扩展和提高驱动能力,进一步减少I/O口的使用,采用了串转并芯片74hc595的级联电路来分别控制点阵屏的行和列,如图2所示。
格子的编号是在下位机软件编程时按照一定的顺序进行编码的。这里需要转成相应的串口数据,然后串行输入到74hc595,并驱动它并行输出控制信号,从而具体控制一个或多个LED格子灯亮起,提示相应的位置。
2.2 规格检测功能的实现
规格检测的主要目的是检测格子间的隔板是否被抽掉,并判断被抽掉的隔板分别是哪几列。将跳帽和隔板进行粘合,当跳帽安插时就有部分电路被短路。进而设计了利用A/D采样来获得规格数据的方案。经检验该方案在容纳盒不是很大的情况下,下位机检查结果十分稳定、精确,并具有成本低廉、实现简单的优点。
该方案的数学原理如下:依据数学集合的知识可知,假设有一个无穷集合2n(n为非负整数),任取集合里面的任意个数进行相加得到的和是唯一的。也就是说对于任意一个正整数,此集合中都有且只有唯一一组不重复的元素相加的和与其相等。
根据以上数学原理及电阻分压原理,分别取电阻值为X、2X、4X、 8X...2nX 的电阻串联,串联的阻值记为R',然后再与一个已知电阻值为R的电阻串联分压并测量此电阻两端的电压。跳帽按下则R'中就有一个电阻被短路。此时R'电阻发生唯一性变化,那么根据分压公式电阻R两端电压为:V=R/(R+R'),由于R'被唯一确定,因此V也被唯一确定,进而测量V就可以唯一确定哪几列的隔板被抽出,也就知道了此时抽屉格子的规格。
3 Android终端应用程序开发
目前Android设备普遍流行,Android是一种基于Linux的自由及开放源码的操作系统,最常见的Android设备就是大家使用的Android手机,通过开发一个APP来管理自己的物品,方便日常生活,并且还提供了简单的借物交友功能。此APP的主要内容是实现终端手持设备与STC12C单片机通过蓝牙进行数据交互,得到数据之后分析处理并且保存到数据库,还可以通过接入互联网进行附近用户的搜索并向其发起聊天和借物请求。
3.1 蓝牙通信
Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。STC12C单片机作为服务端,通过串口来控制蓝牙模块,Android端则是以客户端方式连接。Android端使用BlueToothAdapter(本地蓝牙适配器)来搜索远程的服务端设备,当服务端和客户端在同一个RFCOMM信道上都有一个BluetoothSocket时,就可以认为它们建立了一个连接,并可以获得一个InputStream和OutputStream来开始数据传输。蓝牙连接成功后就开辟一个线程一直监听下位机是否有数据传过来并进行相应的处理,防止UI线程阻塞并进行异步处理以提高程序的效率[4],通过Handle机制与主UI线程通信。
3.2 数据库与广告推送
Google为Android的数据保存提供了SQLite,它可以使数据存储、管理、维护具有轻量级、独立性、安全性等优点。SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。本系统具有多层抽屉,每层抽屉需要存放各种物品,因此每一层都建立一张表来保存。主要字段有:物品名称、存储位置、存储时间、数量、类别、使用频率等。程序运行时则是通过链表作为cache,将数据库的表导入链表里,然后对链表做一些相应的操作(如增、删、改、查等),同时也会及时将链表的数据保存到SQLite里。定期统计数据库的数据(如物品使用频率),对各类物品的剩余数量进行有针对性的广告推送,提醒用户哪些物品需要购买。
3.3 规格UI设计
该系统的存储设备的规格可以根据用户需求进行变更,可以将格子的大小任意合并,Android端则需要时时反映出规格的变化以方便用户存取物品。因此UI设计就是通过建立一个Canvas在Bitmap上用Paint来画每一个格子。STC12C传过来的规格是一个0与1的数组,每一个数据都代表格子的边,0代表已经合并了,1代表有隔板,解析这些数组并画出变化的规格格子。
3.4 语音查找
通过语音输入来代替手动输入可以提高效率。语音识别是采用Google提供的API来实现的,将用户的声音转变成声谱图,传送到Google云服务器上进行处理后返回一个String List,然后遍历这个List与本地的SQLite数据内的词条目进行匹配查找,当找到后就获取存储位置并通过蓝牙发送给STC12C单片机,向用户提供相应物品的声光提示。
3.5 借物聊天系统开发
当用户急需某个物品时,就可以通过搜索附近来发起请求,用户通过互联网登录服务器,并搜索附近使用同款软件的用户,对其发起聊天和借物请求。
3.5.1 简易服务器的搭建
服务器通过JAVA进行编写,功能比较简单。通过socket套接字在TCP协议的基础上进行通信,采用accept等待连接,每当有客服端连接时就返回一个socket对象实例并开辟一个线程与其通信。可以实现用户登录验证、注册、保存用户地理位置信息、广播通信等功能。
3.5.2 客户端描述
当用户查找附近时会先向服务器上传自己的地理位置信息(经纬度),服务器则会返回附近其他用户的地理信息,然后将这些数据在地图上标注出来,用户可以点击来发起聊天与借物请求。
本文设计了一个基于STC12C单片机主控板及Android手持终端的智能存取设备,可以帮助管理那些多而小的DIY器件或者是家里的一些小药物,设备有自带的规格检测模块和位置提示功能,可以任意合并规格,同时还带有借物聊天系统,可与附近的其他用户进行互动以借物。较现有的大型存储设备而言,本设计中的存储设备成本低廉,容易上手,具有较高的实用性与推广价值。
参考文献
[1] 华祎铭,徐慧欣,马多玲.智能存取系统对急诊药房工作效率的影响[J].药学服务与研究,2013,13(5):390-392.
[2] 黄娇清.IC生产车间部件存取系统的硬件系统设计[J].海峡科学,2012(8):56-64.
[3] 张华,刘铁英. Android应用软件发展趋势与关键技术探索[J].商场现代化,2012(28):7.
[4] 纪晓阳.线程在Android开发中的应用[J].软件,2013(8):