基于Arduino的可移动抓取机械手设计_第1页
基于Arduino的可移动抓取机械手设计_第2页
基于Arduino的可移动抓取机械手设计_第3页
基于Arduino的可移动抓取机械手设计_第4页
基于Arduino的可移动抓取机械手设计_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科论文目录TOC\o"1-2"\h\z\u摘要 IAbstract II引言 11系统总体设计方案 31.1设计方案及流程 31.2舵机的选择 51.3遥控系统的选择 61.4移动系统的选择 81.5电源系统的选择 92系统的硬件设计 112.1整体的组成与安装 112.2可移动的抓取机械手设计 152.3Arduino开发平台 182.4Arduino扩展板模块介绍 203系统的软件设计 243.1Arduino开发环境 243.2软件设计流程 244系统调试 294.1系统硬件测试 294.2系统软件测试 32结论 33参考文献 34附录1源程序清单 36致谢 44本科论文摘要本设计是基于Arduino的可移动的抓取机械手设计,开发平台使用的是Arduino。随机时间的推移,机械手变得越来越智能和人性化,智能化的机械手减少了生产需要的时间和金钱,从而减轻工人们的劳动强度给工人们增加了许多休息时间。现在机械手发展的工作效率越来越高、工作准确度越来越高、操作越来越简单,变的越来越智能和易用。本设计的可移动机械手为四自由度,而且整体可以移动,机械手各个关节之间实现前后、上下、左右移动和钳子的打开和闭合,整体可以前后左右移动,从而实现对指定目标的抓取和运输到指定地点。硬件系统的核心部件是Arduino主板。使用PWM控制直流减速电机进行整体的移动的速度和方向,机械手部分的舵机连接在舵机控制板实现控制。软件在ArduinoIDE中编写可移动机械手的程序,PS2手柄发送命令,手柄接收器负责接受手柄发送来的命令,Arduino输出脉宽不相同的信号来控制整体机械手部分的转动。操作步骤是:PS2手柄发送控制命令信号,遥控接收模块接收到来自手柄的指令信号在通过串口把信号传给Arduino主板,Arduino主板判断应该实行什么操作后,将控制信号传给舵机驱动板驱动机械手部分的舵机转动,实现控制可移动机械手对指定一个物体的抓取。关键词:Arduino;舵机;机械手;遥控

AbstractBasedonthedesignoftheArduino-basedmanipulator,thepopularopensourceArduiuocontrolsystemisadoptedasthedevelopmentplatform.Themechanizationandautomationofthemanipulatorgreatlyimprovedtheefficiencyandstandardizationoftheindustry,andgreatlysavedtheproductioncostandreducedthelaborintensityoftheworkers.Atpresent,theperformanceofmanipulatorsisgraduallydevelopingtowardhighspeed,highprecision,highreliabilityandeaseofoperation.Thefocusisonhighrepeatabilityandhighaccuracy.Themanipulatorofthisdesignhasfourdegreesoffreedom,andthejointscanberotatedbackandforth,upanddown,leftandright,andtheclosingofthepliersbetweenthejointstoachievethegraspingofthespecifiedobject.ThehardwaredesignusestheArduinoUNOhardwareplatformasthecorecomponent.ItusesPWMtechnologytocontrolthestartandstop,speedanddirectionofthemanipulatorfortheDCmotor.Theservodriverboardsimulatesthemanipulatorcontrolsystemofthehumanarm.ThesoftwaredesigncompilesthemanipulatormotioncontrolprogramintheArduinoIDE.Theps2handleandthereceivingmodulesendcontrolcommandsandreturntothecommandstate.ThesteeringangleofthesteeringgeariscontrolledbytheArduiuocontrolboardtooutputsignalsofdifferentpulsewidths.Thespecificoperationstepsare:usetheps2handletosendthecontrolcommand,theremotecontrolreceivingmodulereceivesthecommandandtransmitsthesignaltotheArduinoUNOboardthroughtheserialport.AftertheArduinoUNOmakesthejudgmentoperation,ittransmitsthesignaltotheservodriveboardtodrivetheservotorotateThemanipulatorgrabsthespecifiedobject.Keywords:Arduino;steeringgear;manipulator;remotecontrol引言随着时间推移社会不断进步科学技术不断的高速发展,机械手在我们生产生活方面越来越重要,各种各样的机械手被制作出来用于我们的生产生活。机械手在复杂、枯燥单一操作和各种恶劣和特种环境下,人类的效率和准确性远远不如机械手。机械手在生活处于一个重要的地位。生产质量和生产效率也因为机器具有一致的表现性所以得到了很大的提升。具有一致表现性的自动化也被叫做“刚性自动化”。刚性自动化有一个致命的缺点就是只能执行一个任务,改变执行任务类型就不得不去更换相对应的零件。刚性自动化的这个缺点以及相对来说的高成本性导致了一个全新的机器诞生:机械手。美国机器人工业学会将机械手定义为可以通过预先编订不同的程序去处理各种各样的任务,可以执行如搬运材料、零件、工具或者特定的设备等任务,具有可重复编程、多功能的特点[2]。人类社会的经济和科技水平在不断的提高,机械手的开发成本也是在一直下降。国内人力劳动力成本一直再增加,在所有行业里,研发出代替人类的机械手也越来越成为提升行业竞争力的重要手段。本课题研究了可移动的抓取机械手设计,为了降低生产成本,提高生产效率并希望由此设计能更好地引导人们设计出符合各自行业应用方向的机械手。机械手提高了生产效率,机械手比人的工作效率高出太多,机械手可以全天二十四小时不间断工作,但是人需要吃饭休息机器不需要,原先需要好几个人甚至好几十个人干的工作,现在有了机械手只需要一个机械手就可以完成这些工作。机械手还可以代替人去一些危险性特别高的工作环境,比如在高温环境、高压环境、辐射环境等,用机械手代替人去这些环境工作,可以保护人类的安全。机械手的工作精度和工作强度也是人无法比拟的,机械手可以做到比人更精确的工作,比如一些电焊机械手,机械手也可以做到人无法做到的,比如搬运大件货物等。人们现在加大力度研究机械手就是因为它的这些特性,提高了生产的自动化水平,从而降低了生产时需要的成本。改善了工人们的工作条件,把危险的工作交给机械手来做,降低了工作人员的受伤几率,从而也是降低了生产需要的成本。三是减少了人力需求,不但生产效率变的比以前高而且降低了劳动人员开销,间接的降低了生产成本。现在机械手研究是国内外的热点项目,在国外机械手是在各个国家经历二战之后所有产业百废待兴,从而机械手大幅度高速的发展。机械手的前身是主从式机器人,经过不断地发展演变成现在的机械手。研究的现状和趋势如下:机械结构向模块化、可重构化发展,由关节模块、连杆模块用重组方式构造机器人整机。[1]大体是两个方向:其一是现在的机械手传感器数量、控制器数量和控制算法变得愈来愈多;其二是与生产加工相联系,满足相对具体的任务的工业机器人,主要采用性价比高的模块,在满足工作要求的基础上,追求系统的经济、简洁、可靠,大量采用工业控制器,市场化、模块化的元件[22]。本设计为基于Arduino的可移动机械手设计。Arduino为开发爱好者提供了更便利简洁的开发平台。整个平台由硬件和软件两个部分组成,其中硬件部分包含微控制器、电路板等,软件部分主要是在C/C++语言的基础上的IDE集成开发环境,开发人员可以快速适应从而开发自己需要的产品。Arduino的环境对开发人员比较友好,更便捷地完成项目的开发工作。因为Arduino的开源和简单降低了我们开发的时间。机械手的自由度是机械手设计的至关重要的参数的表现。控制系统是使用ArduinoUNO编程设计的,从而实现可移动机械手的运动和手部的抓取功能。第一章说明了系统的方案设计,主要阐述了系统的功能和设计目标,并根据设计目的选择合适的设备。第二章介绍了可移动抓取机械手的硬件设计,其中包含各个模块的设计原理。本章重点介绍了可移动机械手的电路设计,以及手柄与设备之间的控制方法。第三章讲述了系统的软件设计;简要介绍了系统的开发环境以及重要函数和系统流程图。第四章是可移动机械手的调试部分,包括了系统的硬件测试以及软件测试,并就本设计出现的问题,做了简单的论述以及解决办法。

1系统总体设计方案1.1设计方案及流程1.1.1设计方案机械手的抓取和机械臂移动是最主要的功能,对机械手的设计和实际应用非常重要。因为移动和抓取这两个功能实现的前提是基于机械结构的设计和伺服控制驱动的配合才能完成的。结构合理降低空间的使用,也减轻了机械手的重量,简化了机械手系统设计的复杂性使可靠性加强,所以模型构造对于机械手的性能是十分重要的。机械手的结构设计包括了关节自由度和关节的大小。本设计的机械手自由度数被设定为4个自由度。机械手有控制部分、驱动部分、执行部分。手腕、支架和底座是机械手的执行部分,用于调整机械手的位置和方向。底座是固定的,底座是承担这个设备的重量。控制部分使用Arduino,用于对机械手的整体运作控制,实现机械手抓取目标的功能。对可移动机械手建立平面模型,设计电路。机械手驱动部分是输出一个PWM波控制舵机的运动,从而控制每个关节的位置。如图1.1所示为机械手的关节运动图。图1.1机械手臂关节运动图移动部分是完成整体功能必不可少的一部分,移动系统需要能够承载机械手部分整体重量而且还等能自由移动,所以机械手的移动部分是十分重要的。所以移动部分使用双H桥电路驱动,能够同时驱动两个电机,使能ENAENB之后,能够分别从IN1、IN2信号驱动电机1的转速和方向,可以IN3、IN4输入PWM信号驱动电机2的转速和方向[7]。移动部分等效电路图如1.2所示。图1.2等效电路图1.1.2设计总流程机械手是自动化工业发展的产物。工业生产需要高机动和高灵活性的设备,它是机电设施产业的典范代表之一。机械结构和电气结构构成了机械手。机械系统是由连杆、旋转接头和其他单元串联连接形成的串联开链式结构。组成机械手的转动轴的连接点是相互平行或垂直的,轴与轴之间的连接是带动连杆相对运动。电气系统就是其功能运作的控制中心,它由一个单片微机系统,一个伺服控制板和一个舵机系统组成。微控制器系统包括主控制器、复位电路、晶体振荡电路、按键电路、电源模块等,是用来负责发出机械手的控制指令,驱动机械手准确的接受命令工作。舵机控制板是基于Arduino平台的开源硬件板。伺服控制板主要是响应微控制器系统发出的控制命令,并放大控制器发出的控制信号信号驱动各舵机做出相应动作。转向器系统包含了四个舵机:底座舵机、肩部舵机、肘部舵机、腕部舵机四个舵机,用于模仿人类手臂转动,肩部舵机,肘部舵机和腕部舵机四个舵机相互配合运动,确保了机械手的手臂四个自由的要求。移动系统由4个直流减速电机和驱动器组成,用于负责整体的加速、减速、转向功能实现。遥控系统是由手柄和接收器构成,控制整体的移动和机械手的动作。电源系统是由锂电池组成,负责整体的供电。本课题的软硬件实物的运作流程为:第一步,打开PS2手柄,发送控制命令。第二步,遥控接收模块收到指令经过串口把信号传给Arduino板。第三步,把要执行的程序传给舵机驱动板和电机驱动板,驱动舵机和电机转动,实现机械手的设计任务。1.2舵机的选择舵机是由一个小型直流电机,一个齿轮组一个可调电位器和一个控制板组成,通过闭环控制控制器机电机构的工作[3]。选用舵机需要看设计所需要的的尺寸大小、强度要求和速度要求,一般舵机的尺寸越小,舵机传速速度越大,有大的强度输出。如果舵机尺寸是不变的[4],一般由两个因素来衡量舵机的性能,旋转500转所需的强度和时间。舵机的速度大约是0.18s,即就是它的工作最基本的要求是至少0.18s来旋转500次。力矩输出大小和齿轮的材料是决定性能的主要因素。因为当舵机在运行时,失速会导致舵机损坏。把塑料齿轮放在损坏的位置,这样就会减小损失。小型舵机是比较容易出故障的,因为它的齿轮很小,所以使用者要结合自身使用环境来选取合适的舵机。选择和舵机的另一个条件是看舵机是否具有滚珠轴承。与其他轴承相比,有滚动轴承的舵机比没有滚珠轴承的舵机动力更强、更坚固耐磨、噪音小的优势比其他类型的舵机的适用性更强。方案一:使用SG5010舵机。SG5010尺寸为41×20×38mm、重量41g、转动速度0.20秒/60度、扭矩拉力5.2kg/cm、工作电压:4.8V。方案二:使用MG958舵机。MG958尺寸为40.7×19.7×42.9mm、重量55g、转动速度0.18秒/60度、扭矩拉力18kg/cm、工作电压:4.8V。方案三:使用MG90S舵机。MG90S尺寸为22.8×12.2×28.5mm、重量13.4g、转动速度0.10秒/60度、扭矩拉力1.8kg/cm、工作电压:4.8V。综上所述SG5010虽然整体参数和性能达到需求,但是体积太大了不满足本设计需求。MG958是这里所有参数性能最好的,但是价格太过高昂。所以本设计选取了满足需求而且价格低廉的MG90S舵机。本课题舵机部分的设计采用了MG90S型舵机,MG90S舵机的工作电压为5V,速度和扭矩都满足机械手部分的需求,转动角度小于180度,能够实现抓取物体和移动物体的要求。舵机实物图如图1.3所示图1.3MG90S舵机1.3遥控系统的选择遥控系统能对相隔一定距离的被测对象进行控制,并使其产生相应的控制效果的系统。由信号产生装置、传输设备、执行装置组成。方案一:使用蓝牙设备。蓝牙适用的设备多,而且工作频段广,抗干扰能力强,但是传输距离短,主要工作范围不超过5M,且价格也比较高。方案二:使用PS2手柄。手柄虽然适用设备单一,工作频段单一,但是抗干扰能力强,传输距离长最高可达25M,价格也很便宜。综上所述所以我选取PS2手柄。因为PS2手柄价格低廉,抗干扰能力强,最远距离可达25m完全满足本设计的要求。PS2手柄遥控由PS2手柄与PS2专用手柄接收器组成,PS2手柄发送遥控需要按下的按键信息;PS2手柄专用接收器与微控制器相连,用来接收PS2手柄发来的按键信息,然后把手柄的按键信息传递给微控制器,微控制器也可通过PS2手柄专用接收器,向PS2手柄发送信息,用来配置手柄的发送模式。接收器图片如1.4所示。图1.4接收器接收器引脚序号如图1.5所示。图1.5.接收器引脚序号通讯时序如图1.6所示。图1.6.通讯时序在通信过程中,一串数据通信完成后CS端口才会由低电平转为高电平。1.4移动系统的选择移动系统是由电机、电机驱动板和轮胎组成。负责让整体可以进行多角度的抓取,抓取后把物品运输到目标地点。方案一:选取直流电机和L298N驱动板。直流电机是能将直流电能转换成机械能的旋转电机。它是能实现直流电能和机械能转换的电机。L298N是一种双H桥电机驱动芯片[6]。方案二:选取直流减速电机和L293D驱动板。直流减速电机比直流电机转速更低力矩变大。L293D也是一种双H桥电机驱动芯片。综上所述我们选取直流减速电机,因为本设计不需要速度方面的需求,而是需要较大转矩。所以选取直流减速电机。电机实物图为1.7图1.7电机实物图电机驱动板的作用是控制直流减速电机,从而来实现对直流减速电机占空比的控制,来达到对直流减速电机怠速控制的方式。虽然L298N在输出电流性能指标比L293D好,但是L293D的性能也能满足设计需求,而且价格比L298N低特别多,所以选取L293D。图1.8为L293D的实物图图1.8.L293D实物图1.5电源系统的选择在电路中,电源是整个电路的基础没有电一切的设备都将无法运行,电源是将其他的能量转化成为电路所需的电能,电源是向电子设备提供功率的装置,也称电源供应器,它提供所有部件所需要的电能。电源功率的大小,电流和电压是否稳定,将直接影响部件的工作性能和使用寿命[8]。方案一:使用5号干电池来供电。5号电池直径15mm,高度45mm,电池电压1.5V,容量为1000mAh,不可充电。方案二:使用18650锂电池。常见的18650锂电池电压为4.2V,容量2000mAh。18650电池寿命理论为循环充电1000次以上。综上所述可以选择5号电池来组成电池组来给设备供电,但是这样不但续航时间短,而且使用大量的一次性电池也不环保会造成环境污染。所以我选择18650锂电池。图1.9为18650锂电池实物图图1.918650锂电池实物图2系统的硬件设计2.1整体的组成与安装可移动机械手的主体结构是由一套亚克力外壳、4个MG90S舵机驱动机械手、4个DC3V-6V130直流减速电机驱动整体、ArduinoUNO、Arduino扩展板、遥控模块、电源模块组成。机械手部分是由4个MG90S舵机和亚克力外壳组成。机械手1号舵机位于机械手的底座上,控制底座旋转。2号舵机位于机械手的左侧,并控制机械手上下移动功能。3号舵机位于机械手的右侧,控制机械手的前后移动功能。4号舵机位于机械手的钳子部位,用于控制抓住物体时机械手的钳口的打开和关闭功能。关节的动作是依靠舵机的运动,所以本设计的机械手共有4个舵机,其中每一个舵机为一个活动枢纽关节。图2.1所示为机械手部分的实物图。图2.1.机械手部分移动部分4个DC3V-6V130直流减速电机、亚克力底盘和4个轮子组成。每一个直流减速电机对应一个轮子,同时正反转动实现整体的前后移动,通过差速使一侧两个电机转动来实现转弯。图2.2所示为移动部分的实物图。图2.2.移动部分ArduinoUNO、Arduino扩展板、遥控模块电源模块组成依次组装在底盘上然后接线。图2.3为ArduinoUNO,图2.4为Arduino扩展板,图2.5为遥控模块,图2.6为整体实物图。图2.3.ArduinoUNO部分图2.4.Arduino扩展板部分图2.5.遥控模块图2.6.整体图

2.2可移动的抓取机械手设计2.2.1机械手模型设计本设计的可移动机械手的机械手部分是由四个舵机控制的机械手。舵机1控制底座部分负责机械手的旋转功能,舵机2控制机械手左部分机械手上下移动,舵机3控制机械手右部分的前后移动,舵机4控制机械手的爪子负责开合抓取物体。2.2.2移动部分设计本设计的移动部分是由两个L293D驱动芯片驱动四个DC3V-6V130直流减速电机。电机1控制左前轮,电机2左后轮,电机3右前轮,电机4右后轮。电机部分电路图如下图所示。图2.7.电机电路图2.2.3控制系统设计本设计的可移动机械手的控制系统使用Arduino。可移动的抓取机械手有四个关节和四个轮子,每个关节能够自由转动相应的角度,每个轮子负责整体的移动。手臂转动由四个转向齿轮驱动,实现对指定物体的抓取动作。轮子转动由四个直流减速电机驱动,实现各个方向的移动。利用Arduino微控制器的PWM端口发生波形,编写和控制可移动的抓取机械手的运动和抓取程序和移动程序,完成对舵机和直流减速电机的控制调用。可移动的抓取机械手采取点控制的控制方式,简化了电路和构造复杂度。舵机不同时控制,从而降低了舵机执行命令时的影响,提高了整体的稳定性。电路图如图2.8所示图2.8.电路图

2.3Arduino开发平台2.3.1Arduino硬件平台Arduino体系由硬件和软件两个部分,硬件为Arduino主板,软件是ArduinoIDE。ATmage微处理器和电路板组成Arduino主板。使用ArduinoIDE来编译程序,在使用专用数据线把程序下载到Arduino主板。Arduino主板就会执行预先编写好的程序。Arduino主板是一个简单开源的平台,微处理器是Arduino主板的核心部件,扩展接口多且可以重复编写程序。Arduino微控制器的特点是:I/O性能强大,可以用直流电源和USB供电,可外接红外探测、蓝牙、WiFi、马达驱动、LED、温度探测等模块。蓝牙和WiFi的可扩展性完成了与外部设备的无线通信[9]。如图2.9所示为Arduino控制器。Arduino的主要特点有:(1)软硬件开源,资料都可以在网上找到,根据需求进行编写程序;(2)核心部件微处理器价格低廉;(3)扩展性强,Arduino提供了丰富的接口[10]。图2.9Arduino控制器2.3.2Arduino最小系统介绍ATmega328p是ArduinoUNO的微控制器。它是由14个数字I/O引脚、6个模拟量输入、1个16MHz的陶瓷晶振、1个USB接口、1个电源模块、1个ICSP头和1个复位按键构成[11]。用USB数据线就可以传输数据。另外,ArduinoUNO有一个复位保险丝,复位保险丝能保护电路不被烧毁。不可否认的是,随着技术的发展,大多数电脑都会有自身的内部保护系统,但保险丝提供了额外的保护层,双重防护让开发者可以在开发过程中万一遇到意外可以将损失降到最小。另外,当USB端口的电流大于500mA,这时将会触发保险丝,它就会强行断开电路。如下为Arduino最小系统的结构的详细介绍:(1)9V直流电源输出,让Arduino控制板驱动舵机正常运作;(2)一个USB端口,可以在端口下载程序或者为整体供电驱动一些低功耗设备;(3)14个数字I/O,端口0、1分别接到Atmage328p的串行引脚,用于TTL串行数据的传输,端口2、3收取外部信号实现外部中断,端口3、5、6、9、10、11用于电机PWM调速,端口10、11、12和13可进行SPI通信,端口13接了一个LED灯,用于检测电平的变动[12];(4)6个模拟I/O,端口4、5用于I2C通信[12];(5)1个5V直流输出和1个3.3V直流输出,作为电路的直流电源;(6)1个复位接口。2.4Arduino扩展板模块介绍2.4.1L293D驱动电路介绍L293D四倍高电H桥驱动程序。L293D的驱动电流是0.8A,电压范围5V~25V。L293D兼容一切的TTL输入。每个输出都是推拉式驱动电路,启用1,2EN驱动器和3,4EN驱动器。1,2EN为1和2的使能端(高电平使能);3,4EN同理用适当的数据输入端,每对驱动程序的模式一个完整的H桥可逆驱动器适用于电磁阀或电机应用。L293D外部输出为高速钳位二极管,应用电感的瞬态抑。VCC1和VCC2分开,提供逻辑输入,以尽量减少设备功耗[13]。L293D的工作温度是从5℃至65℃引脚图如图2.11所示图2.11引脚图2.4.2舵机的工作原理及控制方式舵机,英文名Servo。直流电机、齿轮或齿轮组、电位器、控制电路是舵机的组成部分。舵机的控制原理是检测旋转轴输出角度发送到控制器,然后接收控制器发送来的脉冲信号从而来控制舵机。随着舵机转向轴的偏转,舵机内部的电阻发生变化,控制电路通过分析电阻的变化来驱动舵机。舵机里的齿轮把输出的转矩放大数倍。齿轮组末端连接电位计用于测量旋转轴的角度,舵机根据控制器发出的命令达到一个特定的角度。齿轮组和直流电机就是一个舵机。在增加一个电位器和控制器,控制器控制舵机转动角度,电位器实时检测舵机防止发生过载,这样可以精确地传输控制舵机的转动位置。这种直流电机控制称为电机闭环控制。外部脉冲信号以脉宽为1~2ms之间的变化给舵机,正好舵机内部信号源的脉冲信号宽度也是1~2ms,极性和输入的脉冲信号是相反的这样的方式就可以计算出正、负的值,从而确定舵机的方向[4]。如图2.12为舵机内部实物图。图2.12舵机实物图舵机的三条电线分别是电源线、地线和信号线。电源线是负责整体的供电,供电电压为5V。信号线用于传输脉冲信号,高频信号需要传输1~2ms,低频信号需要传输5~20ms,舵机为了保持自己位置,则必需每20ms接收一次高率信号。随着信号脉宽的改变,控制转向轴改变位置。输入脉冲信号的宽度通过舵机转向轴的旋转角度线性修改[4]。如图2.13为舵机信号图。图2.13舵机信号图Arduino扩展板可以同时操控4个舵机,自动识别波特率,存储多种动态程序等功能。Arduino驱动板与舵机系统相连[14],分别是舵机地线、舵机电源线和舵机信号线,扩展版上的电源接口用来给舵机供电。如图2.14为扩展板实物图。图2.14扩展板实物图本设计的可移动机械手需要四个舵机。舵机原理图的设计有4个接插件,每个有三个接口分别为,电源、地、信号端。如图2.15为舵机电路图。图2.15舵机电路图2.4.3遥控模块设计遥控模块连接到Arduino扩展板上,而后打开手柄,接着手柄与接收器进行配对。连接方式为:遥控模块的电源接口接到Arduino扩展板的3.3V,GND接Arduino的GND,CLK接Arduino扩展板的P34,CS接Arduino扩展板的P35,CMD接Arduino扩展板的P37,DAT接Arduino扩展板的P36。ArduinoIDE实现程序代码的编写,手柄与接收模块之间发送和返回字符指令来完成信息传输。DAT为数据线data引脚,CMD为命令command引脚,VCC为电源模块引脚,GND为地线引脚,CS为注意attention引脚,CLK为时钟clock引脚。接收模块如图2.16所示。接线图如图2.17所示。图2.16接收模块图2.17接线图

3系统的软件设计3.1Arduino开发环境ArduinoIDE跨平台而且兼容性高。Arduino的软件和硬件都是开源的,用户可以随意的进行二次开发,而且上手十分简单,特别容易编写自己需要的程序。ArduinoIDE的界面十分简洁,界面右上角的是串行监视按钮,可实时监测硬件和计算机之间的传输数据。界面底部的窗口会显示程序状态和错误信息。如图3.1为ArduinoIDE的编程界面。图3.1ArduinoIDE的编程界面3.2软件设计流程Arduino控制板首先要进行初始化操作,定义引脚、函数,然后对串口进行判断处理,是否有数据传来[15]。控制端的软件流程图如图3.2所示。图3.2控制端软件流程图基于Ardunio的程序都可以被分解为三个部分:结构、值和函数。Arduino语言包含但是不包括main主函数,有“setup()”和“loop()”两个函数。“Setup()”函数的功能就如同他的英文意思是主体程序初始化,“Setup()”函数用于系统上电、系统复位、设置波特率和获取时间等。“loop()”函数则是在“setup()”函数执行结束后,然后是程序的主体部分,“Setup()”函数初始化结束后开始运行循环程序就这样一直循环执行下去。本程序中Setup()函数的流程图如图3.3所示,InitServoPort()函数的流程图如图3.4所示。图3.3Setup()函数流程图图3.4初始化舵机控制端口流程图本设计使用了4个舵机,定义了4个舵机对象我们这里只说明了一个舵机的程序控制流程,完整的程序见后面附录1。第一我们要定义舵机对象:Servoservo1;然后把舵机与和他主板上对应的引脚相连接:myservol.attach(1);连接的是1号舵机,给舵机设置一个初始角度,舵机上电就会转到设置的初始角度这里给的初始角度是85度:myservol.write(85);本设计采用4个舵机分别用来控制机械手的前后、上下、左右以及钳子部分的动作。软件的设计构思与流程如图3.5所示。图3.5舵机软件设计流程图整体能完整的工作是必须得和遥控手柄之间相互通信配合来完成的。本设计中,手柄的作用是用来发送命令,接收器则是接收从手柄端发送过来的命令,进行双方的信息传输。所以在ArduinoIDE中编译好整个代码,代码没有问题后,下载到微控制器中,并连接好接收所有设备。手柄时钟频率260KHz(4us)。在通信中,手柄的一组数据传输通信完毕后CS端口才会由低电平转为高电平,在通讯期间,CS端口是处于低电平状态。在时钟下降沿时,接收器完成通讯数据的发送和接收,发送数据和接收接收是同时完成的。当微控制器读取命令时,将会拉低CS端口电平,拉低电平之后发送一个0x01的命令;手柄接收到来着接收器的0x01命令会回复手柄处于的ID模式“0x41=绿灯模式,0x73=红灯模式”;在手柄发送自己的ID模式的同时,微控制器将传送0x42,请求数据;随后手柄发送出0x5A,告诉微控制器“数据来了”。idle:数据线空闲,该数据线无数据传送。一个通讯周期有9个字节(8位),这些数据是依次按位传送[16]。当有按键按下,对应位为“0”,其他位为“1”,例如当键“SELEC被按下时,Data[3]=11111110B。表3.1为数据意义对照表表3.1数据意义对照表顺序DODIBit0、Bit1、Bit2、Bit3、Bit4、Bit5、Bit6、Bit700x01idel10x42ID2idel0x5A3WWdataSELECT、L3、R3、START、UP、RIGHT、DOWN、LEFT4YYdataL2、R2、L1、R1、Δ、○、×、□5ideldataPSS_RX(0x00=left、0xFF=right)6ideldataPSS_RY(0x00=up、0xFF=down)7ideldataPSS_LX(0x00=left、0xFF=right)8ideldataPSS_LY(0x00=up、0xFF=down)

4系统调试4.1系统硬件测试在系统中,对于硬件电路的检测主要是看焊接时是否有毛刺、无光泽,电路是否有短路、开路、一些具有方向的元件是否方向弄错、电路设计错误等情况。照着原理图检查是否有原件漏焊、器件是否出现在实物中和原件方向是否错误。如果发现没有或者对不上的情况下需及时的重新对照确定漏焊时及时的补焊。对于短路、断路、虚焊这些情况,使用万用表来检测。将数字万用表的挡位旋转到蜂鸣档,如果电路短路,万用表会发出声音。这样我们就可以检测电路问题。在检测部位使用万用表,如果万用表响了,则线路正常,如果万用表不响,则说明电路有问题。电路没问题之后开始整体组装调试,调试过程如下。机械手抬起如图4.1图4.1机械手抬起图机械手落下如图4.2图4.2机械手落下图机械手开启如图4.3图4.3机械手开启图机械手闭合如图4.4图4.4机械手闭合图机械手右转如图4.5图4.5机械手右转图机械手左转如图4.6图4.6机械手左转图整体移动如图4.8图4.1整体移动图可移动机械手经过全方位移动和抓取测试,实物电路板与原理图一致,所有元器件的插接、方向均正确,本系统最终实现了所有硬件功能。

4.2系统软件测试系统的软件方面由ArduinoIDE软件创建,由C、JAVA语言编号的程序,在该软件中生成.ino文件,并通过下载器将其下载到Arduino电路板观察整个系统的状态,然后重复修改调试代码,以得到更完美的程序。图4.9为调试成功系统软件调试主要遇到以下问题:(1)无法写入程序。解决方法:发现主板型号设置错误修改主板型号为R3就解决了该问题。(2)向Arduino内部写入程序发现无法遥控主体。解决方法:通过使用ArduinoIDE进行观察发现手柄的默认接收频率设置错误,然后在ArduinoIDE修改了默认频率,并解决了该问题。图4.9软件调试成功图

结论本设计为基于Arduino的可移动的抓取机械手设计,具体设计步骤为:第一步确定所选的课题并且确定要研究的内容,第二步查询相关资料,制定相应的方案。第三步按任务书确定硬件配置,设计系统结构。第四步是设计电气原理图,按要求编写程序,并且软硬件联调实现机械手的设计功能。对于本设计的模块分为:亚克力板搭建的模型、ArduinoUNO控制板、扩展板、舵机和电机以及接收模块构成。而最终的功能实现便是通过联调各个模块,实现功能设计,实现机械手的抓取。本设计因为前期设计方案的不完整性出现了很多问题,舵机不能正常控制机械臂转动到设定的位置及方向、舵机的抖动、手柄不能识别信号不能进行配对连接等问题。最后反复查阅大量资料后这些设计上的问题都得以解决。最终完成的可移动的抓取机械手设计,实现了移动到指定位置对物体的抓取功能,本设计的机械手可能实际的应用范围比较窄,也有很多不足,只能单一的实现对小型物体的抓取。所以后续还有更多改进的地方,机械手也还可以更加智能化,与声音、光、图像等传感器组合在一起。

参考文献[1]邓巍.教学工业机器人计算机控制系统的设计[D].华北电力大学,2002.73-79[2]张涛,王炎.基于微控制器和Arduino平台的六自由度可控机械手臂[J].电气自动化,2016,38(6):97-99[3]伯秀秀.小型混合式无人机动力系统研究[D].安徽:安徽大学,2018.91-94[4]王俊杰.基于Arduino和数字识别的机械臂书写数字技术研究[D].北京工业大学,2016.:85-89[5]刘颖,李晓龙.单片机与PC手柄的通信[J].电子世界,2003(01):38-39.[6]李秀玲,魏保立.机械手电机驱动模块设计[J].装备制造技术,2013(09):25-27+34.[7]韩韶清.路面平整度快速检测车的研究与设计[D].长安大学,2015.1-10[8]江宁聪,郭迪,周鑫宇,赖志耀,李慧霖.新型电力抗干扰电源的设计[J].数字通信世界,2018(11):174-175[9]蔡睿妍.基于Arduino的舵机控制系统设计[J].计算机工程应用技术,2012,8(15):3719-3721[10]汪婉君.基于Android/Arduino平台的智能蓝牙引路系统的设计与实现[D].西安电子科技大学,2014.53-56[11]贺娅莉,谢娟娟.微信控制开关在卷闸门中的应用设计[J].科技风,2018(10):1.[12]马明.基于可佩带传感器的人员自主定位技术研究[D].国防科学技术大学,2013.45-56[13]唐勇,黄荣博,藏俊.牙科综合治疗机痰盂自动避让控制系统设计[J].数字技术与应用,2015(10):14.[14]王洪斌,李程,王跃灵,刘鹏飞.基于Arduino和蓝牙技术的六足机器人控制系统设计[J].黑龙江大学自然科学学报,2015,32(04):533-537[15]刘峰.基于飞行摇杆无线控制的机器人手臂系统的设计与实现[D].云南大学,2016.15-16[16]李传达.移动侦察机器人设计与实现[D].云南大学,2017.[17]杨新.电子设计从零开始[M].北京:北京清华大学出版社,2005.6:155-262[18]杨宝清.实用电路手册[M].北京:机械工业出版社,2003.7:621-627[19]姚福安.电子电路设计与实践[M].山东:山东科学技术出版社,2002.1:105-118[20]张庆双.电子元器件的选用与检测[M].北京:机械工业出版社,2002.10:1-110[21]康华光.电子技术基础数字部分[M].北京:高等教育出版社,2008.2:17-33[22]冯毅.摆动式机械手机构运动与PLC控制的研究[D].沈阳:沈阳工业大学,2011.15-23

附录1源程序清单#include"PS2X_lib.h"//forv1.6#include<Wire.h>#include<Servo.h>/*******************************************************************setpinsconnectedtoPS2controller:*-1ecolumn:original*-2ecolmun:Stef?*replacepinnumbersbytheonesyouuse******************************************************************/#definePS2_DAT6#definePS2_CMD5#definePS2_SEL4#definePS2_CLK3/*******************************************************************selectmodesofPS2controller:*-pressures=analogreadingofpush-butttons*-rumble=motorrumbling*uncomment1ofthelinesforeachmodeselection******************************************************************/#definepressurestrue#definerumbletruePS2Xps2x;//createPS2ControllerClass//rightnow,thelibrarydoesNOTsupporthotpluggablecontrollers,meaning//youmustalwayseitherrestartyourArduinoafteryouconnectthecontroller,//orcallconfig_gamepad(pins)againafterconnectingtheerror=0;bytetype=0;bytevibrate=0;intlx=0;intly=0;intL_Speed=0;intR_Speed=0;Servomyservo1,myservo2,myservo3,myservo4;//createservoobjecttocontrolaservoconstintSERVOS=4;//舵机数4个constintACC=10;//theaccurancyofthepotentiometervaluebeforeidlestartscountingintvalue[SERVOS],idle[SERVOS],currentAngle[SERVOS],MIN[SERVOS],MAX[SERVOS],INITANGLE[SERVOS],previousAngle[SERVOS],ANA[SERVOS];intLeft_motor=8;//左电机(IN3)输出0前进输出1后退intLeft_motor_pwm=9;//左电机PWM调速intRight_motor_pwm=10;//右电机PWM调速intRight_motor=11;//右电机后退(IN1)输出0前进输出1后退voidsetup(){Serial.begin(57600);myservo1.attach(2);//手爪电机myservo2.attach(7);//上臂电机myservo3.attach(12);//下臂电机myservo4.attach(13);//底座电机//电机IO口定-pinMode(8,OUTPUT);pinMode(9,OUTPUT);pinMode(10,OUTPUT);pinMode(11,OUTPUT);stop();//手爪ServoMIN[0]=10;MAX[0]=100;INITANGLE[0]=90;//上臂电机MIN[1]=10;//Thisshouldbringthelevertojustbelow90degtogroundMAX[1]=140;INITANGLE[1]=90;//Thisshouldbringtheleverparallelwiththeground//下臂电机MIN[2]=40;MAX[2]=170;INITANGLE[2]=90;//底座电机MIN[3]=0;MAX[3]=170;INITANGLE[3]=90;//初始化电机myservo1.write(INITANGLE[0]);myservo2.write(INITANGLE[1]);myservo3.write(INITANGLE[2]);myservo4.write(INITANGLE[3]);currentAngle[0]=INITANGLE[0];currentAngle[1]=INITANGLE[1];currentAngle[2]=INITANGLE[2];currentAngle[3]=INITANGLE[3];delay(2000);//addeddelaytogivewirelessps2modulesometimetostartup,beforeconfiguringitSerial.print("SearchController..");//CHANGESforv1.6HERE!!!**************PAYATTENTION*************do{//setuppinsandsettings:GamePad(clock,command,attention,data,Pressures?,Rumble?)checkforerrorerror=ps2x.config_gamepad(PS2_CLK,PS2_CMD,PS2_SEL,PS2_DAT,pressures,rumble);if(error==0){Serial.println("\nConfiguredsuccessful");break;}else{Serial.print(".");delay(100);}}while(1);type=ps2x.readType();switch(type){case0:Serial.println("UnknownControllertypefound");break;case1:Serial.println("DualShockControllerfound");break;case2:Serial.println("GuitarHeroControllerfound");break;case3:Serial.println("WirelessSonyDualShockControllerfound");break;}//震动一,说明连接ps2x.read_gamepad(true,200);//开启震动delay(500);ps2x.read_gamepad(false,200);//开启震动delay(300);ps2x.read_gamepad(true,200);//开启震动delay(500);}voidloop(){/*YoumustReadGamepadtogetnewvaluesandsetvibrationvaluesps2x.read_gamepad(smallmotoron/off,largermotorstrenghtfrom0-255)ifyoudon'tenabletherumble,useps2x.read_gamepad();withnovaluesYoushouldcallthisatleastonceasecond*/ps2x.read_gamepad(false,vibrate);//开启震动if(ps2x.Button(PSB_START)){//开始按键Serial.println("Startisbeingheld");ps2x.read_gamepad(true,200);}if(ps2x.Button(PSB_SELECT))Serial.println("Selectisbeingheld");if(ps2x.Button(PSB_PAD_UP))//方向按键向上按下{Serial.print("Upheldthishard:");Serial.println(ps2x.Analog(PSAB_PAD_UP),DEC);forward();}elseif(ps2x.ButtonReleased(PSB_PAD_UP)){//方向按键向上释放stop();}if(ps2x.Button(PSB_PAD_DOWN))//方向按键向下按下{Serial.print("DOWNheldthishard:");Serial.println(ps2x.Analog(PSAB_PAD_DOWN),DEC);back();}elseif(ps2x.ButtonReleased(PSB_PAD_DOWN))//方向按键向下释放{stop();}if(ps2x.Button(PSB_R1)){//侧面开关右R1R_Speed=0;}if(ps2x.Button(PSB_L1)){//侧面开关左L1L_Speed=0;}if(ps2x.Button(PSB_PAD_LEFT))//方向按键左侧按下{left();}elseif(ps2x.ButtonReleased(PSB_PAD_LEFT))//方向按键左侧释放{stop();}if(ps2x.Button(PSB_PAD_RIGHT))//方向按键右侧按下{Serial.println(ps2x.Analog(PSB_PAD_RIGHT));right();}elseif(ps2x.ButtonReleased(PSB_PAD_RIGHT))//方向按键右侧释放{//Serial.println("*****PSB_PAD_RIGHT*****");stop();}vibrate=ps2x.Analog(PSAB_CROSS);//thiswillsetthelargemotorvibratespeedbasedonhowhardyoupresstheblue(X)button{}if(ps2x.NewButtonState()){//willbeTRUEifanybuttonchangesstate(ontooff,orofftoon)if(ps2x.Button(PSB_L3))//左侧L3Serial.println("L3pressed");if(ps2x.Button(PSB_R3))//右侧L3Serial.println("R3pressed");if(ps2x.Button(PSB_L2))//左侧L2Serial.println("L2pressed");if(ps2x.Button(PSB_R2))//右侧R2Serial.println("R2pressed");if(ps2x.Button(PSB_TRIANGLE))Serial.println("Trianglepressed");//三角形按键按下}if(ps2x.ButtonPressed(PSB_CIRCLE)){//willbeTRUEifbuttonwasJUSTpressedSerial.println("Circlejustpressed");openGripper();}if(ps2x.NewButtonState(PSB_CROSS)){//×键新键改变Serial.println("Xjustchanged");ps2x.read_gamepad(true,vibrate);//获取震动值}if(ps2x.ButtonPressed(PSB_SQUARE)){//willbeTRUEifbuttonwasJUSTreleasedSerial.println("Squarejustreleased");closeGripper();}if(ps2x.Button(PSB_L1)||ps2x.Button(PSB_R1)){//printstickvaluesifeitherisTRUESerial.print("StickValues:");Serial.print(ps2x.Analog(PSS_LY),DEC);//Leftstick,Yaxis.Otheroptions:LX,RY,RXSerial.print(",");Serial.print(ps2x.Analog(PSS_LX),DEC);Serial.print(",");Serial.print(ps2x.Analog(PSS_RY),DEC);Serial.print(",");Serial.println(ps2x.Analog(PSS_RX),DEC);}value[0]=ps2x.Analog(PSS_LX);value[1]=ps2x.Analog(PSS_RY);value[2]=ps2x.Analog(PSS_LY);value[3]=ps2x.Analog(PSS_RX);for(inti=0;i<SERVOS;i++){if(value[i]>130){if(currentAngle[i]<MAX[i])currentAngle[i]+=1;//Serial.print("value");//Serial.print(i);//Serial.print(":");//Serial.println(value[i]);switch(i){case0:myservo1.write(currentAngle[i]);break;case1:myservo2.write(currentAngle[i]);break;case2:myservo3.write(currentAngle[i]);break;case3:myservo4.write(currentAngle[i]);break;}}elseif(value[i]<120){if(currentAngle[i]>MIN[i])currentAngle[i]-=1;//Serial.print("value");//Serial.print(i);//Serial.print(":");//Serial.println(value[i]);switch(i){case0:myservo1.write(currentAngle[i]);break;case1:myservo2.write(currentAngle[i]);break;case2:myservo3.write(currentAngle[i]);break;case3:myservo4.write(currentAngle[i]);break;}}}delay(10);}//GrabsomethingvoidopenGripper(){myservo1.write(MIN[0]);delay(300);}//LetgoofsomethingvoidcloseGripper(){myservo1.write(MAX[0]);delay(300);}voidforward(){digitalWrite(8,LOW);digitalWrite(9,HIGH);digitalWrite(11,LOW);digitalWrite(10,HIGH);}voidright(){digitalWrite(8,LOW);digitalWrite(9,HIGH);digitalWrite(11,LOW);digitalWrite(10,LOW);}voidback(){digitalWrite(8,HIGH);digitalWrite(9,HIGH);digitalWrite(11,HIGH);digitalWrite(10,HIGH);}voidleft(){digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(11,LOW);digitalWrite(10,HIGH);}voidstop(){digitalWrite(8,LOW);digitalWrite(9,LOW);digitalWrite(11,LOW);digitalWrite(10,LOW);}附录2总体电路图

致谢这次设计不但锻炼了我的动手能力和独立思考能力,更让我学会了遇到问题时如何去冷静的思考和处理。现在社会的进步、工业的发展都离不开自动化。而可移动的抓取机械手的设计这个课题让我也时时在在的参与到了其中,为人类的工业自动化做出一点帮助,所以我相信可移动的抓取机械手的研制在未来会越来越完善,解放人类双手的机械化时代已经到来,人类工业的自动化也将越来越卓越。从踏入大学校园的那一刻起,到现在已经过了四个年头了,虽然我即将要离开这个承载了美好回忆与梦想的地方,回首这四年的学习生涯,我很庆幸在这里我与这些来自天南海北的同学一起留下了青春的影子,我也遇到了很多可爱的老师,你们教会了我的不仅仅是学习上的知识,更是教会了我做人的道理。其中我感谢的恩师是沈洪洋和台闯老师,我在心里一直都很敬佩你们,您一直都以身作则、治学严谨待人以宽并且设身处地为学生着想的高尚品格一直触动着我,引领着我,坚定了我学习与生活中的目标。四年的陪伴与教导将是我一生中最宝贵的财富。在学习上,您总是细微、耐心的给我指导,使在我学习的同时掌握了多项技能。本篇论文的选题、研究及论文编写,您总是不辞劳苦地细心讲解与分析。无论学习还是生活,沈老师和台老师都愿意与学生分享他们的经验与感受,再次感谢恩师的栽培与教导。感谢一直关心我、支持我的同学和朋友们。明天的我将更加自信的扬帆起航。

ExcelXP的八则快速输入技巧如果我们在用ExcelXP处理庞大的数据信息时,不注意讲究技巧和方法的话,很可能会花费很大的精力。因此如何巧用ExcelXP,来快速输入信息就成为各个ExcelXP用户非常关心的话题,笔者向大家介绍几则这方面的小技巧。1、快速输入大量含小数点的数字如果我们需要在ExcelXP工作表中输入大量的带有小数位的数字时,按照普通的输入方法,我们可能按照数字原样大小直接输入,例如现在要在单元格中输入0.05这个数字时,我们会把“0.05”原样输入到表格中。不过如果需要输入若干个带有小数点的数字时,我们再按照上面的方法输入的话,每次输入数字时都需要重复输入小数点,这样工作量会变大,输入效率会降低。其实,我们可以使用ExcelXP中的小数点自动定位功能,让所有数字的小数点自动定位,从而快速提高输入速度。在使用小数点自动定位功能时,我们可以先在ExcelXP的编辑界面中,用鼠标依次单击“工具”/“选项”/“编辑”标签,在弹出的对话框中选中“自动设置小数点”复选框,然后在“位数”微调编辑框中键入需要显示在小数点右面的位数就可以了。以后我们再输入带有小数点的数字时,直接输入数字,而小数点将在回车键后自动进行定位。例如,我们要在某单元格中键入0.06的话,可以在上面的设置中,让“位数”选项为2,然后直接在指定单元格中输入6,回车以后,该单元格的数字自动变为“0.06”,怎么样简单吧?2、快速录入文本文件中的内容现在您手边假如有一些以纯文本格式储存的文件,如果此时您需要将这些数据制作成ExcelXP的工作表,那该怎么办呢?重新输入一遍,大概只有头脑有毛病的人才会这样做;将菜单上的数据一个个复制/粘贴到工作表中,也需花很多时间。没关系!您只要在ExcelXP中巧妙使用其中的文本文件导入功能,就可以大大减轻需要重新输入或者需要不断复制、粘贴的巨大工作量了。使用该功能时,您只要在ExcelXP编辑区中,依次用鼠标单击菜单栏中的“数据/获取外部数据/导入文本文件”命令,然后在导入文本会话窗口选择要导入的文本文件,再按下“导入”钮以后,程序会弹出一个文本导入向导对话框,您只要按照向导的提示进行操作,就可以把以文本格式的数据转换成工作表的格式了。3、快速输入大量相同数据如果你希望在不同的单元格中输入大量相同的数据信息,那么你不必逐个单元格一个一个地输入,那样需要花费好长时间,而且还比较容易出错。你可以通过下面的操作方法在多个相邻或不相邻的单元格中快速填充同一个数据,具体方法为:首先同时选中需要填充数据的单元格。若某些单元格不相邻,可在按住Ctrl键的同时,点击鼠标左键,逐个选中;其次输入要填充的某个数据。按住Ctrl键的同时,按回车键,则刚才选中的所有单元格同时填入该数据。4、快速进行中英文输入法切换一张工作表常常会既包含有数字信息,又包含有文字信息,要录入这样一种工作表就需要我们不断地在中英文之间反复切换输入法,非常麻烦,为了方便操作,我们可以用以下方法实现自动切换:首先用鼠标选中需要输入中文的单元格区域,然后在输入法菜单中选择一个合适的中文输入法;接着打开“有效数据”对话框,选中“IME模式”标签,在“模式”框中选择打开,单击“确定”按钮;然后再选中输入数字的单元格区域,在“有效数据”对话框中,单击“IME模式”选项卡,在“模式”框中选择关闭(英文模式);最后单击“确定”按钮,这样用鼠标分别在刚才设定的两列中选中单元格,五笔和英文输入方式就可以相互切换了。5、快速删除工作表中空行删除ExcelXP工作表中的空行,一般的方法是需要将空行都找出来,然后逐行删除,但这样做操作量非常大,很不方便。那么如何才能减轻删除工作表中空行的工作量呢?您可以使用下面的操作方法来进行删除:首先打开要删除空行的工作表,在打开的工作表中用鼠标单击菜单栏中的“插入”菜单项,并从下拉菜单中选择“列”,从而插入一新的列X,在X列中顺序填入整数;然后根据其他任何一列将表中的行排序,使所有空行都集中到表的底部。删去所有空行中X列的数据,以X列重新排序,然后删去X列。按照这样的删除方法,无论工作表中包含多少空行,您就可以很快地删除了。6、快速对不同单元格中字号进行调整在使用ExcelXP编辑文件时,常常需要将某一列的宽度固定,但由于该列各单元格中的字符数目不等,致使有的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论