本帖最后由 cirno 于 2017-9-23 12:14 编辑
白块机器人
2017年9月8日 摘 要
--------------------------------------------------------------------------------------
舵机是一种位置(角度)伺服的驱动器,属于伺服电机的一种,广泛应用于模型,玩具中。在机器人,机械臂中,舵机控制着各个部分的运动,控制舵机是在机器人控制中重要的,不可缺少的基础部分。
本设计使用线性CCD实现了简单的图像识别功能,设计了基于两个舵机的机械笔结构,在此基础上控制舵机以触碰屏幕上某点,实现了对“别踩白块”游戏的自动操作。
关键字:舵机、机械臂、线性CCD、踩白块。
一、系统硬件介绍--------------------------------------------------------------------------------------
1.机械部分
舵机是一种位置(角度)伺服的驱动器,主要由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机发出讯号给舵机,经电路板上的 IC驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,检测电阻值便可知转动的角度。对于本系统而言,两个舵机已足够满足旋转加触碰的需求。
触屏笔在手握操作时可以正常使用,但是实际测试时发现未与人体接触的触屏笔灵敏度非常低。因此,在触屏笔的末端贴上锡纸,并用杜邦线连接锡纸与人体。就可以较好地解决了触控的问题。机械结构如图1-1。
2.检测装置的选择与论证
对与别踩白块游戏中下落黑块的检测,有了三种方案。
方案一:红外对管。红外对管广泛使用于黑线的检测,其检测灵敏,处理简单,但此方案在进行前期测试时发现无法正常使用。猜想是因为测试所用的手机屏幕为TFT屏幕,TFT屏幕在显示黑色像素时依然会发光,而另一种AMOLED屏幕则在显示黑色像素时几乎不发光,但由于条件限制,未能使用AMOLED屏幕进行测试。
方案二: 光敏电阻。使用光敏电阻配合运放对黑块下落的四个轨道进行检测,其反应灵敏,处理简单,且实际测试可行。但使用光敏电阻与红外对管均有两个致命缺点:不美观、影响触碰。原理图如图1-2所示。
图1-2 光敏电阻检测原理图
方案三:线性CCD。使用线性CCD进行检测,线性CCD非常适合黑线检测,在智能车中广泛使用。在本设计中使用可以使其更美观,且不影响触屏笔的操作,缺点是数据量较上述两种方案大,处理耗时较长。
综上所述,我们决定采用线性CCD来检测下落的黑块。
3.其他部件
为实现手机的操控,对系统添加了ESP8266模块来实现TCP通信。
本系统外接5V直流电源,STM32和WIFI模块ESP8266的工作电压均为3.3V,因此使用AMS1117-3.3芯片满足电源要求。电路如图1-3。
图1-3 电源模块原理图
本系统所使用的手机为红米Note 4X 标准版。组装完成后的系统见图1-4。
图1-4 组装完成后的系统
二、系统软件设计
--------------------------------------------------------------------------------------
1.线性CCD的使用
本设计采用蓝宙TSL1401线性CCD,其时序图较简单,如图2-1:
图2-1 TSL1401 线性传感器时序图
TSL1401返回的128个像素值为电压值,因此需要使用STM32的ADC功能。为了区分黑块和白块,首先划分出4个下落区域,程序中对这四个下落区域的灰度值求平均值,比较出最黑的一个区域,即黑块。
2.舵机的使用
两个舵机使用STM32的定时器TIM3的两个PWM通道控制。通过改变周期20ms的PWM的占空比,可以很容易的控制舵机到自己想要的角度。
检测出黑块的位置之后,STM32给两个舵机输入合适的PWM值i,j,达到触碰黑块的目的。
- TIM_SetCompare1(TIM3,i);//上舵机
- TIM_SetCompare1(TIM3,j);//下舵机
复制代码
为了方便,事先直接测得机械臂各个动作所对应的PWM值,如图2-2和表2-1。
下舵机 | 位置1 | 位置2 | 位置3 | 位置4 | PWM值i | 890 | 840 | 800 | 750 | 上舵机 | 上移 | 下移 | PWM值j | 900 | 970 |
表2-1 舵机角度表
图2-2 别踩白块游戏界面。
3.手机控制
为了达到使用手机控制此机械臂的目的,我们使用了ESP8266模块,它是一款性价比极高的WIFI串口模块。很容易就能实现TCP或UDP的通信。这里将其配置为TCP服务端,安卓手机配置为TCP客户端。使用AndroidStudio编写安卓端,如图2-3。
图2-3 安卓端界面
其中,中间的拨动开关可以切换自动/手动模式,在手动模式下,摇杆和右边的四个按钮才可用,摇杆可以轻易控制机械臂运动,而四个按钮可以完成四个预置动作(即四个黑块位置的点击)。
三、系统测试
--------------------------------------------------------------------------------------
1.测试方法
取游戏中的“经典”模式,设置黑块数量为50,,计时点击50个方块,测试所耗时间,总点击次数,未点击到的次数和错误次数。
测试器材与软件:红米Note4X,别踩白块儿 v4.0.3 ,白块机器人。
2.测试结果
结果如表3-1:
测试次数 | 总点击次数 | 未点到 | 错误 | 成功点击 | 耗时/s | 1 | 57 | 7 | 0 | 50 | 26.754 | 2 | 61 | 11 | 0 | 50 | 29.231 | 3 | 28 | 0 | 1 | 27 | --- |
表3-1 测试结果
从测试结果中可以看出,本系统的准确度尚可,但是灵敏度一般。猜想错误发生是因为环境光照的影响,使系统对黑块位置判断错误。
四、附录
--------------------------------------------------------------------------------------
视频链接 :https://www.bilibili.com/video/av14545580/
下位机项目源代码:https://github.com/kuzen/PianoBot
上位机项目源代码:https://github.com/kuzen/AndroidPianoBot
|