APP下载

基于Arduino和App Inventor的智能共享鼠标柜设计与实现

2020-01-03

计算机测量与控制 2019年12期
关键词:挡板舵机鼠标

(浙江大学城市学院 信息与电气工程学院,杭州 310015)

0 引言

物联网技术是实现人与人、人与物、物与物交互和连接的M2M新型技术体系[1]。它在互联网、射频等无线通信等技术的基础上,实现无处不在的物体感知、通讯和计算和在线服务等。物联网体系结构从功能角度可以分为感知器、网络层和应用层三部分[2]。当前物联网技术能为各行各业提供智能物联服务[3-5],利用射频技术实现物品跟踪、利用无线通信技术进行数据传输、实时在线监测、现场的远程控制等功能。

共享经济是源于实践的全新经济模式。共享的理念一经获得共识,就迅速在美国、欧洲等信息技术发达的国家演变成了声势浩大的社会实践[6]。在中国共享概念爆发于2016年,最为显著的便是如今满大街的共享单车,当然也有投资者涉水于共享汽车行业,再者如共享充电器、雨伞等行业。

网络竞技游戏的快速发展,使得玩家对鼠标需求也越来越高。好的鼠标不仅仅能够提升游戏体验,还可以帮助玩家在游戏中取得胜利。首先实际使用决定鼠标是否是好鼠标的标准之一是鼠标的外形尺寸,它对玩家的使用体验至关重要的影响。很多游戏玩家在使用网吧鼠标时候,常常会发现鼠标的大小,与个人的手掌大小不符合,这在竞技比赛或游戏使用过程中无法获得舒适的使用感受,甚至会影响到胜利的获取。为保证玩家在网吧中能够选择适合手掌尺寸的鼠标,在网吧中每台电脑旁配备匹配玩家手掌大小的鼠标对游戏玩家来说非常有必要。因此,受到共享单车、共享充电器等共享概念的启发,提出了物联网技术下基于Arduino的共享鼠标柜设计。目前已有的鼠标网络共享与现在的共享鼠标概念不同,传统的共享鼠标是指共享使用一套鼠标实现同时对多台客户端系统进行操作和控制[7-9]。这一类共享鼠标是不适合于竞技游戏中鼠标选择需求的。

本文在共享经济概念火爆以及市场空缺的背景下提出,共享鼠标柜在服务方面,可以解决网吧老板在购买(租赁)外设上面的售后问题;共享鼠标柜的出现,使得网吧投资成本减少了50%,让资源得到有效整合,也让鼠标共享成为一种新的共享潮流,成功实现网吧业主、网吧游戏玩家和厂家三方共赢的共享模式。

1 系统结构及原理

智能共享鼠标柜结构如图1所示。该鼠标柜柜体分三层,每层放置一个有线鼠标,共可放置3个有线鼠标。每次只允许取出一个款鼠标使用,如需要换另外一个鼠标则需要将取出鼠标放进去才能置换;利用距离传感器判断鼠标是否已经取出,如果鼠标取出,与其对应的该层的可移动挡板上移,用户可以拿出该鼠标;鼠标放回后,移动挡板下移将鼠标线压住。图中所示三组绿色/红色发光二极管分别表示鼠标归位或取出状态。图中所示一组红色/绿色/红色的发光二极管分别表示开门方向及门开状态和门关闭状态。可移动挡板和门对应的角度都为120°。用户利用所设计手机APP扫码开柜门,从挡板上移开始计时,鼠标放回、挡板下移且柜门关闭计时结束,这段时间即为收费时间段。门可设置左开或有开模式,以方便左手使用鼠标的用户。

图1 智能共享鼠标柜结构示意图

用户使用鼠标柜时首先需要下载所设计的APP,APP通过无线通信模块与后台服务器相连接,把相关的数据和信息发送给后台管理系统,同时后台管理系统能获取到鼠标柜的定位,从而实现找鼠标柜的功能。当进行扫码开门时,会将唯一的标识符等信息上传至服务器管理系统,后台管理系统进过验证后发送给鼠标柜智能锁的Arduino WIFI模块,然后Arduino WIFI模块向Arduino2560发送解锁指令,Arduino2560收到后通过数字信号控制电机来进行开门。当用户使用完时,关门时会触发电子控制模块的关门控制开关,然后中心控制单元通过数字信号控制模块通过WIFI无线通信模块通知后台管理系统鼠标柜门为关闭状态。

2 智能共享鼠标柜硬件设计

智能共享鼠标柜是以Arduino2560单片机为控制为核心。外围模块包括:ESP8266-12F WIFI通信模块、电源模块、4个步进电机、两个舵机、4个绿色发光二极管、5个红色发光二极管,硬件系统结构示意框图如图2所示。

图2 硬件系统结构框图

电源模块给鼠标柜供电;ESP8266-12FWIFI模块实现数据在单片机和手机用户APP之间的传输;3个距离传感器用来检测鼠标是否放置好,没有放置鼠标的距离是柜体格子的高度;4个步进电机分别控制3个挡板的上下移动和柜门向外的短距离移动,可移动挡板用来挤压鼠标线控制每次只取一个鼠标;两个舵机控制弧形门的左开和右开;前三组绿色/红色发光二极管分别表示鼠标放置完好和鼠标被取出;第四组和第5个发光二极管用来表示开门状态及开门方向,绿色表示门关闭。

2.1 ESP8266-12F模块设计

ESP8266-12F的flash闪存比较大,另外ESP8266-12F支持机智云的MCU运行。与增加的功能相适应,12F增加了很多I/O口,一般是16个。但是12F有一个缺点就是需要自己搭建一些简单的外围电路。此处电路接线如图3所示。

图3 ESP8266-12F电路接线示意图

2.2 红外线距离传感器设计

本设计采用GP2D12红外线测距传感器。该红外传感器连接使用简单,可以精确测量1米以内的距离;数据测量值稳定,测量结果波动小;数据传输稳定,程序读取简单不会出现卡死现象,错误信号较少[10]。

该模块电压输出与距离成反比,而且是非线性关系。通过查阅文档资料可知10 cm距离时有2.55 V输出,80 cm输出时有0.42 V输出。可以根据实际的测量值和输出值拟合出电压值与距离值之间的数学关系式,但是这个关系式里的距离值是参考距离值,而实际距离值为参考距离值与0.42 cm的差值。

Arduino单片机的模拟量采样函数为analogRead(),采样得而数据范围为0到1 023,相对应的电压范围是0 V至5 V,因此每格数据代表0.004 9 V。而读取的采样有效数据是86~520,电压为0.42~2.548 V,根据以上数据可以得到最终的实际距离与采样数据之间的关系表达式为:

LR=2 547.8/((float)S*0.49-10.41)-0.42

其中:LR为实际距离,S是采样数据。

将GP2D12红外传感器的VCC、GND、OUTPUT分别接至Arduino控制板上+5 V、GND、模拟端口A0。最好在VCC与GND之间并联100 μ电解电容,以稳定GP2D12供电电压,从而使输出电压更加稳定。硬件连接如图4所示。

图4 GP2D12红外传感器实物连接示意图

2.3 步进电机的控制

步进电机使用反馈来确定轴的位置,我们可以非常精确地控制该位置。因此本设计用4个步进电机分别控制3个挡板的上下移动和柜门的小距离移动。步进电机经常用于控制物体的位置、旋转物体等。步进电机体积小,并且由于它们内置电路控制其自身的运动,因此可以直接连接到Arduino开发板。

本设计将电源和地引脚直接连接到Arduino开发板的5 V和GND引脚。 PWM输入连接到Arduino的一个数字输出引脚。

2.4 舵机的控制

舵机是一种基于角度的位置伺服驱动器,主要由外壳、控制电路板、小型直流电机、变速齿轮组与可调电位器组成。其工作原理是由外接的单片机发出控制信号给舵机,其内部自有一个基准电路,产生周期为20 ms,宽度为1.5 ms的基准信号,将获得的直流偏置电压与可调电位器的电压进行比较,获得电压差值输出。经由电路板上的集成电路判断转动方向,再驱动小型直流电机开始转动,透过变速齿轮组将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达指定位置。舵机广泛应用于需要角度不断变化并可以保持的控制系统。当电机转速一定时,可以通过级联减速齿轮带动电位器实现旋转,使得电压差为0 V,电机停止转动。舵机旋转角度的范围为0~180°。

用Arduino单片机实现控制舵机的方法有两种:一种是利用Arduino 单片机的普通数字传感器接口产生不同占空比的方波,模拟产生PWM信号从而实现舵机定位;另一种是直接利用Arduino单片机 自带的函数Servo()来进行舵机的控制,这种控制方法优势在于程序编写,其不足为因Arduino自带函数只能利用数字9、10接口,所以其只能控制两路舵机,另外,Arduino单片机的驱动能力有限,所以当需要控制一个以上的舵机时则需要外接电源。本设计采用第2个方式来实现舵机的控制。

3 智能共享鼠标柜软件设计

这里主要指下位机软件设计。下位机软件系统主要包括系统初始化、鼠标取放控制、开门关门控制、鼠标使用状态和门状态控制、无线传输等模块,软件设计流程图如图5所示。

3.1 距离信号获取程序

Inti; //模拟量读取

intval; //模拟量转换实际距离值存储

intanalog=0; //模拟量接线引脚号

voidsetup()

{

pinMode(redpin,OUTPUT);

}

voidloop()

{

i=analogRead(analog);

val=(6762/(i-9))-4;

}

3.2 单片机与WIFI模块通信

因为逻辑处理几乎全在云端进行,所以单片机与WIFI模块之间的通信的信息比较单一简单,为了加强稳定性,不采用串口通信和I2C,而是采用了TTL通信。通过单片机处理后,发送给WIFI模块的仅有所有模块是否就绪信息。WIFI模块在接收到服务器开门指令后,也采用TTL方式传递给单片机。这种方法稳定性高,不会有串口通信偶尔字节丢失的情况。

3.3 WIFI模块与服务器交流

WIFI模块与服务器采用单向访问,WIFI模块通过密钥访问到服务器的指定位置。服务器对WIFI模块不进行任何直接控制,这样降低了服务器的负担,也保证了一定的安全性。

WIFI模块在访问数据库对门的控制符时,无论是否接到开门信号,都主动让门的控制符回归关门状态,类似于LED灯下拉电阻的原理,大大增加的程序与通信的稳定性。

3.4 步进电机控制程序

#define vcc 2

#define pls 3

#define dir 4

#define ena 5

void setup() {

Serial.begin(9600);

pinMode(vcc,OUTPUT);

pinMode(pls,OUTPUT);

pinMode(dir,OUTPUT);

pinMode(ena,OUTPUT);

}

void loop() {

digitalWrite(vcc,HIGH);

digitalWrite(pls,HIGH);

digitalWrite(dir,HIGH);

digitalWrite(ena,HIGH);

tone(pls,200);

}

最开始几个define是定义引脚,VCC是给驱动器提供电源引脚,pls是给步进电机提供脉冲引脚,dir决定电机正转还是反转,ena相当于步进电机驱动器的开关,控制电路给ena引脚高电压那么就相当于让驱动器能够接受控制信号,如果ena给的是低电压,那么不论你怎么给脉冲信号电机都不会动。

图5 软件设计流程图

4 智能共享鼠标柜APP设计

4.1 开发平台

以App Inventor 2.0为开发平台。它是一款可视化图形化的APP开发环境,用户能够以拖曳积木的形式开发Android平台的应用程序[11-12]。App Inventor的开发过程简单、易操作;开发人员不需要太多的编程知识就能开发创造自己的应用程序。本文编程界面如图6所示。

图6 App Inventor 2.0开发环境示意图

4.2 APP界面设计

智能共享鼠标主要界面有6个,分别为注册界面、登陆界面、操作界面、扫描使用后界面、归还界面及服务器管理界面,分别如图7所示。

图7 APP主要界面示意图

5 服务器的搭设

设计使用个人电脑进行内网穿透后作为服务器使用,使用Wampserver集成环境,对Apache+PHP+Mysql进行调控。

5.1 PHP设计

PHP程序如图8所示。对从APP端发送的信息进行处理,并且与数据库进行沟通,最终并生成log_file.txt来记录用户使用情况,如图9所示。

图8 PHP程序设计示意图

图9 用户使用记录示意图

5.2 数据库设计

数据库中设有用户表和鼠标柜表两种。用户表用来保存并记录用户信息与状态;鼠标柜表用以登记鼠标柜与其使用状态。

用户表如图10所示,记录了id、用户名、密码、余额、zhan;记录1、0,用来确定是否有租用未完成,之后三项分别是租用开始时间、结束时间,还有所租借的机器号,后三项写入日志后自动清除。

图10 用户表示意图

鼠标柜表如图11所示,记录了鼠标柜id、机器名、使用状态、门口开关状态、开门指令。

图11 鼠标表示意图

6 实验数据与分析

6.1 高度测试

鼠标柜每层设计高度为15 cm,对本设计所用的距离传感器进行距离测试,测试结果如图12所示。

图12 距离传感器距离测试

平均相对误差为0.235 cm,而鼠标的高度大约在3~4.02 cm之间,测量平均误差与鼠标高度的绝对误差为7.8%~5.8%之间,这个误差不影响判断鼠标是否存在。

6.2 开关门测试

开门测试主要是对舵机控制的测试。舵机是用欧鹏公司的舵机。我们应用该舵机连续参加四届的机器人竞赛,并每年都在运输机器人对抗赛和超市机器人挑战赛中获奖[13],该舵机性能优良,运行稳定。

7 结束语

设计了一款基于Arduino和App Inventor的智能共享鼠标柜。该鼠标柜用来存放3个不同型号的鼠标,以供不同需求的人进行选择。硬件部分通过Arduino控制相应外围模块实现;手机用户APP的利用App Inventor2完成,用户可以通过APP扫码租用鼠标并通过服务器端查看用户租用和鼠标使用情况。该鼠标柜用于有线鼠标,对于无线鼠标来说,该鼠标柜无法实现每次只能取用一个的功能。下一步将着重解决能够实现无线鼠标租用的智能鼠标柜设计。

猜你喜欢

挡板舵机鼠标
直升机某型舵机自动测试系统设计分析
发明来自生活
基于速度观测的双余度电液舵机系统容错同步控制
折叠加热挡板
超音速舵机保护器
菜鸟看模型
拆凳子
鼠标折叠笔
45岁的鼠标
超能力鼠标