轻松DIY击鼓机器人,提供详细软硬件设计参数和系统 解决方案
1. 基本组成部分概述
1.1 机械结构部分
【机械臂主体结构】
机械臂主体全手工制作,由15种零件,合共25件零件构成,其中包括3根规格不同的轴,2种规格不同的轴承合计5个,支架1种合共2件,支座1种合共1件,第一级机械臂1种合共2件,第二级机械臂1种合共2件,第三级机械臂1种合计2件,机械臂间连接件3种共4件,轴固定件2种合计4件,另有用于各个零件间固定的角铁合计8件。其中除轴承外均为铝合金制件,机械臂手臂部分由平行铝合金板构成双立式结构,第三级机械臂共有两边,分别可自由活动,其由单块铝合金板组成,一端直接与舵机相连,另一端固定鼓棒。轴分为竖直轴与水平轴,竖直轴与步进电机相套,水平轴由轴固定件与轴承分别连接各级机械臂。
整体呈现单支双臂式结构,合共有5个自由度,其中3个自由度有电机驱动,其中位于底座下方的步进电机用于转动,而位于第二级与第三级机械臂之间连接的舵机用于带动第三级机械臂转动。铝合金板零件之间使用自制淬火角铁进行固定,避免对铝合金制件进行钣金工作,以减低成本和制作时间;轴与铝合金工件之间采用轴连接件与轴承混合固定的方式进行配合与固定。整体机械臂合共使用了将近200g的螺丝与螺母,主要用于角铁与铝合金板件的紧固处理,另外也有使用少量紧固螺钉进行轴与固定件或者电机之间的固定。舵机上面也装有四个带有齿孔的固定件,用于夹持第三级机械臂。(详见图1.1)
图1.1 机械臂主体结构实物图
【底座结构】
机器人底座由2块平行有机玻璃构成,其中由4根螺柱连接2块玻璃板。面板装有轴承,通过轴承自带的小孔与有机玻璃地板进行螺丝固定。底板通过角铁夹住步进电机,使步进电机自身不能转动,竖直轴穿过轴承与步进电机相连,竖直轴底部为空心处理,并且使电机轴套入竖直轴中,并使用紧固螺钉进行两者的固定。面板同时有9根固定螺钉,用于支撑鼓。2块底板之间的空间用于放置主控制电路电路板PIC,步进电机驱动及其中一个电源。(详见图1.2及1.3)
图1.2 底座部分内部实物示意图
图1.3 底座部分整体实物图
1.2 电子电路部分
【整体电路系统】
整个机器人的电路系统由3个主要部分组成分别为由PIC组成的主控制电路,由声音传感器与触碰开关组成的子控制电路,以及由单片机控制的电机及其配套电路,其中电机及其配套电路又细分为舵机的直接控制与使用步进电机驱动电路进行对步进电机的控制。
【主控制电路】
机器人主控制电路由开发板和最小系统板组成,开发板主要构造包括有PIC单片机,时钟电路系统,蜂鸣器电路,复位电路系统,配套的LED灯显示系统,数字显示系统,外接数据线系统等组成(见图1.4),外有与PIC匹配5V电压电源系统相连,向主控制电路提供稳定的电压。利用主控制电路上的排针设备,可以使用电路连接线连接各个子控制电路、舵机与步进电机驱动器的相关接口,通过主控制电路接收子控制电路的反馈信息,通过对应的判断向舵机、步进电机输出相应的脉冲,控制电机运动。其控制流程如下:
图1.4 主控制电路控制流程示意图
【子控制电路】
机器人子控制电路由手工制作的电路板组成,其中子控制电路又分为声控子电路与触控子电路;其中声控电路部分主要由声音传感器及指示灯系统构成,能够接收环境变量中的声音分量,通过调节可变电阻可以使声音传感器接收合适范围的声强,并通过整波电路与放大电路将相关的信息传递到单片机中;触控电路主要部分由触碰开关构成,触碰开关将在设计中外接,通过击打触碰开关,使开关通过电流,通过电流后整体经过各类比较器、放大器、整波元件实现向PIC单片机输出有高电平经过的信息功能。其控制流程如下所示:
图1.5 子控制电路整体示意图
【步进电机驱动电路】
步进电机驱动电路为现成集成模块,外部与15V电压相连,逻辑电源接单片机VCC,通过单片机输出脉冲实现一定角速度转动,同时由DIR(方向)接口决定步进电机转动方向,FREE(使能)接口决定步进电机的启动与停止速度。
2. 基本功能概述
【击鼓功能】
机器人通过第三级机械臂及其连接的鼓棒实现击鼓的功能,其中第三级机械臂由舵机带动,调节舵机的高低电平延时时间实现对舵机的转速、击打力度的控制,通过高低电平输出的循环实现转角的控制,同时调用相关的程序,使机器人可以按照一定的节奏或者现场示教人员的指示进行有规律的击鼓动作。
如下图所示,机器人当给予舵机延时2400us的高电平以及20ms低电平的脉冲信号(详见图3.5)并且将该程序循环40次,舵机会从图1.9所示位置A移动到图1.10位置B,同时通过第三级机械臂、舵机自身、鼓棒形成一个三级结构,击打鼓,使鼓发出一定的响声;而当给予舵机延时600us的高电平以及20ms低电平的脉冲信号(详见图3.7)并且将该程序循环40次,舵机会从图1.6所示位置回复到图1.5所示位置,并且通过其自身的机械零点进行回复。
通过单片机预先编写的程序或者示教的模式,机器人按照一定的规律进行击鼓,其击鼓的频率约为0.7-1.0秒/次,其中下行时间约为0.3-0.5秒,上行时间约为0.4-0.6秒,通过调节左右舵机输出不同的脉冲信号,可以实现交替击打(见图1.7,图1.8),交替极大能够实现整体机器人平均击鼓频率在0.3-0.5秒/次,而通过双臂仅能同时使整体机器人的击鼓频率在0.8-1.0秒/次左右。
而步进电机能够使机器人通过自身的转动,击打到不同位置的鼓,通过对步进电机的输出脉冲的个数进行控制,根据步矩角理论则能够使步进电机转动一定的角度,经过计算可以测出击打左侧两个鼓与击打右侧两个鼓需要转动的角度,即循环的次数,使步进电机转动要求的角度,并且实现击打的鼓的机械转换。
图1.6 击鼓功能控制流程图
图1.7 机器人同步击打A位置实物示意图
图1.8 机器人同步击打B位置实物示意图
图1.9 机器人异步击打实物示意图A
图1.10 机器人异步击打实物示意图B
【离线编程功能】
通过在预先在PIC单片机中离线编写好的程序,程序中进行对舵机与步进电机的脉冲信号输出,其中包括有舵机的异步控制方法、同步控制方法以及步进电机的控制;异步控制方法为单片机对两个舵机中的一个输出脉宽为2.4ms的高电平和20ms低电平而对另外一个电机输出脉宽为0.6ms的高电平和20ms(详见图1,13),循环一定次数之后交换两个电机的输出脉冲(详见图1.14),这样两个舵机将会出现一个左侧机械臂下行同时右侧机械臂上行,然后左侧机械臂上行右侧机械臂下行的交替击打;同步控制方法为PIC单片机对两个舵机同时输出脉宽为2.4ms的高电平和20ms的低电平(详见图1.15)循环一定次数之后同时再输出脉宽为0.6ms的高电平和20ms的低电平,这样两个舵机将会出现同时击打同时复位的情况。步进电机使用占空比为50%的高低电平调控,能够实现一定的步矩角的转动。
离线编程系统通过多次重复地不同地调用舵机异步控制、舵机同步控制、步进电机控制的子程序,能够实现机器人在步进电机一边转动一边舵机同步击打、步进电机一边转动一边舵机异步击打,步进电机停动同时舵机同步击打、步进电机停动同时舵机异步击打四种主要情况,通过交替、多次、重复、并排使用这些子程序和情况,能够使机器人整体在围绕三个鼓之间进行多次的来回往复击打,同时能够进行左右臂同时击打(见图1.7,图1.8)和左右臂交替击打的控制(见图1.9,图1.10)。
图1.11 两舵机异步控制脉冲信号示意图A
图1.12 两舵机异步控制脉冲信号示意图B
图1.13 两舵机同步控制脉冲信号示意图
【示教功能】
通过在声音传感子控制电路,通过可变电阻调整声音传感器的接收范围,可以识别现场的声音,机器人通过从子控制系统反馈的声音信息,能够实时输出相应的舵机同步控制脉冲信号,舵机同时击鼓,机器人跟随声音进行运动;通过触感子控制电路,可以识别人是否对示教的模拟鼓进行击打,如果是则输出相应的脉冲信号使一侧舵机进行跟随运动。
二、目的与意义
1. 创作意图与灵感来源
【创作意图】
大白菜作为一个击鼓机器人,其主要功能并不局限与击鼓。我们创作这个机器人的意图是作为后续项目的前期制作,对后续项目中使用到的机械手进行理论的论证,以及对其进行部分制作,大白菜是后续项目中机械手的简化版本,我们也在大白菜上预留足够的空间以及增加电机的空间,用于日后在项目中对其进行改装与增加自由度。
【灵感来源】
大白菜的灵感来源于多个方面:
(1)、基本结构:为了适应后续项目中的仿人式机械手而采用的单支双臂式结构,第一级机械臂与第二级机械臂也采用与人相似的设计;
(2)、基本功能:由于在比赛中强调可展示性,强调能够调动现场气氛的能力,因此简化了原有纪录位姿的功能,单纯采用单片机的控制而取消对电机转角、转速的测量,从而萌生使机械手进行击鼓动作的设计;
(3)、附加功能:包括声音控制与触感控制,则源于在最近结束的上海世博会中在上海企业联合馆中的等待区节目,第一个为由观众现场的拍掌,使场馆的LED灯根据现场拍掌的节奏而闪亮,第二个为由现场观众喊出相应的字母,机器人捡起对应的箱子,仿照这2个节目我们设计出通过现场观众拍掌的声音控制机器人以及通过现场击鼓的展示使机器人纪录示教人的击打信息并重现的附加功能。
2. 项目目的
(1)、作为一款参加机器人比赛展示类的机器人,该机械臂能够进行基本的击鼓动作;而在附加功能上,则通过不同的传感系统,记录示教人员的击鼓节奏,并在示教完成之后机器人能够重现该击鼓的动作以及节奏。
(2)、作为一种单支双臂式的机器人(机械臂),其仿人的设计用于作者对该理论的一种验证,通过对仿人的设计,使机械手能够模仿人的运动,而大白菜仅是作为对后期仿人机器人的设计与制作的一个前期步骤进行相关的研究与制作。
(3)、作为一个预留了大量改进空间的机器人,该机器人可以在多个方面进行不同的改进,包括预留增加自由度的位置,增加电机的位置,增加编码盘测量电机转角转速,缩减底座面积等多个改进方向,通过不同方面改进能够为日后研究机器人(机械臂)的运动、仿真、测量、多机器人协作等扩展功能提供了大量的现实数据、机器人实体和空间。
3.项目意义
(1)作为大赛的参赛作品,本机器人的最大功能与意义在于能够实现最基本的击鼓功能。并在击鼓功能的基础上增加附加功能,实现以离线编程模式与示教模式控制机器人的功能。能够为观众带来对机器人的一种新的感受,一种新的乐趣,并且让更多观众参与到机器人当中。
(2)作为一种单支双臂式的机器人(机械臂),本机器人的意义在于能够通过舵机对其控制,实现击鼓的功能;同时,也是作为对该类机械臂的结构的一种新思考的实践与验证。
(3)作为一个预留大量改进空间的机器人,本机器人的意义在于为后续的设计与制作提供大量的现实数据与机器人实体,并且为日后的各个探究方面的选择提供了更多的参考数据资料,能够使日后项目组成员的后续探究设计更为完善与周详。
4. 可行性总结
【技术可行性】
表1 探究过程中应用的技术及使用范围
应用领域 | 技术名称 | 技术功能 |
机械设计 | CAD制图 | 交付制造机械臂主体 |
三维建模软件 | 基本示意及大致分析 | |
一般力学分析 | 测算自由度受力 | |
机械制造 | 机械加工 | 制造机械臂主体 |
一般钳工 | 组装及固定整体机器人 | |
自动控制 | 单片机控制 | 整体机器人控制 |
电机伺服控制 | 控制电机以期望速率、幅度运动 | |
电子电路 | 传感器 | 接收环境变量信息 |
电路处理 | 放大、优化、整理电路信息 |
上述各种技术已经全部成熟及成型,只需要在掌握这些技术的基础上使用它们,并不需要通过自行设计技术来实现;同时并且通过使用这些技术,实现机器人的每个部分细节的处理,就能够最终完成机器人的整体制作与调试,整个机器人的制作中使用的技术都是可行的。
【应用可行性】
本机器人作为一款基本参加大赛的作品,在参赛的应用方面由于其拥有良好的展示性与娱乐性,该方面应用是可行的;另外,由于预留了大量的改进空间,即便是在比赛之后,需要进行多方面的改进,在未来,仍然能够使用这个机器人现有的本体作后续的研究,该方面应用同时可行。
三、技术参数
1. 机械部分
【整体质量与尺寸参数】
(1)、整体质量:2.5Kg
(2)、整体尺寸:40cm X 30cm X 40cm (长X宽X高)
【机械工作参数】
(1)、整体工作最大宽度:49cm
(2)、整体工作最大高度:53cm
(3)、整体工作最高温度:45℃
(4)、整体工作最低温度:-10℃
(5)、舵机工作最大转角幅度:90°
(6)、步进电机工作最大转角幅度:30°
【电机参数】
表2 步进电机的物理参数
步进电机型号 | 57H46403(带减速) |
步矩角 | 1.8° |
最大转动角 | 360° |
相数 | 2 |
相电流 | 2.4A |
静力矩 | 7 |
定位力矩 | 2.8 |
表3 舵机的物理参数
舵机型号 | TOWER PRO MG945 (辉盛) |
静力矩 | 1.2 |
最大转速 | 0.25sec/60°(4.8V) |
最大转角 | 185° |
工作电压 | 4.8-7.2V |
【机械臂主体力矩参数】
(1)、自由度计算
将支架和臂简化为杆件,由于结构对称性,将两舵机旋转副、每个轴的旋转副和两三级臂各只作一个,另外由于有两个旋转副(两个轴所在的旋转副)被限制,因此简化结果如图3.1:
图3.1 机械臂全自由度简化示意图
活动组件n=2高副P =0,低副P =2,自由度为:
(1)
两个自由度分别由舵机和步进电机控制,满足机构稳定要求。
(2)、舵机静力矩校核
取铝合金密度为:
(2)
将三级臂上孔去掉,简化为一实体长方体块,则三级臂体积为:
(3)
由(2)、(3)式数据可得三级臂质量为:
(4)
三级臂重心在其几何中心,距离舵机旋转轴距离为:
(5)
敲击棒质量取 ,其重心距舵机旋转轴距离为:
(6)
当三级臂和敲击棒处于图示水平时,舵机旋转轴所需静扭矩最大,其简化结构图见图3.2
图3.2 第三级机械臂长度简化示意图
可以得第三级机械臂的静力矩为:
(7)
(8)
(3)、整体稳定性校核
计算施加在轴2上扭矩
取该部分臂前端角铁和螺钉、舵机总质量m =120g,二三级连接板尺寸:
(9)
其质量为:
kg (10)
同样当三级臂水平时,如图3.3,所施加的静力矩为最大
图3.3 第二级、第三级机械臂静力矩简化示意图
此时重心距轴为L =100mm,将前端角铁和螺钉、舵机总重心距轴2距离也取L =100mm
(11)
(12)
取 =0.25
底座圆盘半径R=66mm,厚t=8mm,质量为:
(13)
kg (14)
假设整体受轴2上扭矩而倾斜,角度很小,则底盘边缘一点与地接触,此时,校验要使整体不倒条件 ,设所需整体部分结构(底盘至轴2间部件)质量为m,其重心在整体中心轴上,如图3.4所示
图3.4 假定结构倾斜受力简化示意图
当倾角a很小时,底座重心、部分结构重心距倾角原点处距离均为R,列平衡条件:
(15)
k为动载荷扭矩时相对于静载荷比值 ,k取大越稳定,取2
(16)
由(16)式可得m>0.45kg
利用UG计算得实际m约0.70kg,这样在底座、底座至轴部分结构重力力矩作用下,系统会有摆正趋势,即a变小,可以保证要求,而且在中心轴作用下,整体会更稳定不倒
2. 电子电路部分
【声音传感器】
表4 声音传感器模块主要技术参数
尺寸 | |
主要芯片 | LM393,驻极体话筒 |
工作电压 | 4V-6V |
【步进电机驱动器】
表5 步进电机驱动器技术参数与接口
步进电机驱动型号 | QDQ241 |
驱动最大电流 | 2.1A |
驱动最大相数 | 2 |
可选细分数 | 1/2,1/4,1/10,1/15 |
工作电压 | 0-32V |
(1)、+COM 接单片机VCC5V,如果接24V,则CP,DIR各串接一个2K电阻 | |
(2)、CP 接脉冲频率输入,决定快慢 | |
(3)、DIR 方向控制,0V反转,空正转,决定方向 | |
(4)、FREE 使能接口,接0V停转,电机自由状态 | |
(5)、A+ A相正输入 | |
(6)、A- A相负输入 | |
(7)、B+ B相正输入 | |
(8)、B- B相负输入 | |
(9)、+DC 接外接驱动电源,9-32V | |
(10)、 接0V |
【电源】
(1)、逻辑电源电压:5V
(2)、步进电机驱动外加电压:15V
3. 控制部分
【舵机输入脉冲信号】
图3.5 舵机正转脉冲信号示意图
图3.6 舵机反转脉冲信号示意图
【步进电机输入脉冲信号】
图3.7 步进电机脉冲信号控制
四、使用说明
1. 常用控制与使用说明
【常见按钮与连接】
图4.1 步进电机驱动与电源连接方式实物示意图
【使用注意事项】
(1)、避免使机器人在倾斜面上工作,以免从高处跌落造成损坏;
(2)、机械臂运动时请勿用手触摸工作部分;
(3)、出现电机在通电状态却不工作的情况,请立刻切断电源,以免电机损坏;
(4)、声控开关和触控开关为易损部件,请勿暴力操作;
2. 模式使用说明
声控模式合适所有用户使用,使用时将机器人摆在平台上,平台面积应足够大,以确保机器人击鼓时产生的震动不会使机器人跌落平台。检查电路连接是否有断线、短路。确保无误后接通电源,人站在附近1m处,双手合拍,观察机器人是否出现敲鼓动作,如果机器人没有反应,则掌声可以拍大一点,直至观察到机器人执行敲鼓动作。若此时让机器人击鼓所需掌声还比较小,人可以离机器人动作远一点拍掌观察机器人是否敲鼓。这样即可调节好人使用该机器人的掌声大小和距离范围。每次拍掌机器人会敲鼓一次,也可连续拍掌,但连续拍掌时速度不可过快,以留机器人反应时间。拍掌频率掌握好后,人可以改变拍掌频率,机器人则会以相同频率做出击鼓动作。如果人根据一首歌曲节奏连续拍掌,机器人将记忆该节奏并在人拍掌后击鼓重现该节奏,从而实现娱乐功能。使用完毕后应及时关闭电源,以免电路元件发热影响机器人使用寿命。
【触感模式开启与使用】
触控模式可以合适所有用户使用,使用时将机器人摆在平台上,平台面积应足够大,以确保机器人击鼓时产生的震动不会使机器人跌落平台。检查电路连接是否有断线、短路。确保无误后接通电源,单手触摸一下左臂上任一个触摸开关,观察机器人左击鼓手是否执行击鼓动作。同样方式检查右手击鼓功能是否正常。若左右击鼓手均正常,则可以每次触摸机器人任一击鼓手上的触摸开关,使机器人执行击鼓动作。也可同时双手触摸两击鼓手触摸开关,左右击鼓手同步执行击鼓动作。人可以通过调整触摸频率、触摸位置来使机器人打出富有旋律和动感的击鼓声。使用完毕后应及时关闭电源,以免电路元件发热影响机器人使用寿命。
【再离线编程功能使用】
再离线编程功能主要由高级用户使用。使用时请将电路的主要连接线全部移开,使PIC单片机所在的主控制电路板独立出来使用,并同时打开您的电脑,调试您电脑的串口线或者其它烧录PIC单片机的设备处于正常工作状态。在确保您能够向单片机烧入程序的情况之下,您可以开始编写程序,我们建议使用常见的KEIL软件进行单片机程序的编写和项目的建立和调试。程序由主要几个部分组成,我们建议您尽量不要对我们附上的程序的主要结构、系统、头文件、舵机和步进电机的延时时间等方面进行更改,否则会导致机器人的某些部分或者整体无法工作;请您对如各个舵机、步进电机的子程序进行某些次序的变化,或者对舵机的循环次数进行修改,这样可以根据您的喜好,调节机械臂的包括击鼓的转动角度范围、步进电机的转动范围以及舵机交替击鼓与同步击鼓的次序进行调整,使机器人的表演更加具备您个人的特色。使用该功能的时候请您特别注意PIC单片机的数位与存储范围。完成烧录之后将电路重新接回,开启离线编程模式之后机器人就能够按您的设定进行运动。
3. 常见问题与解决
【常见问题及解决QA】
(1)Q:为何通电之后PIC单片机指示灯不亮,同时驱动器指示灯微亮?
A:请您确定您已经给两个电路接入正确的电压,PIC单片机接的是5V的逻辑电压,电机驱动器接的是15V的外加电压,如果二者弄反了,可能会导致逻辑电路烧坏的情况。而驱动器在低于9V的电压条件下不能拖动步进电机工作,因此请保证您已经为机器人接入正确的电源。
(2)Q:我已经接入正确的电源,为何舵机不能工作?
A:请您确定您现在使用的模式是什么,如果您使用的是离线编程模式,可能是由于PIC单片机内没有预设的程序,或者是您在本机器人再离线编程系统使用中给舵机输出的脉冲信号不正确,本舵机使用的是伺服控制技术,高电平延时2.4ms,低电平延时20ms为舵机正转,高电平延时0.6ms,低电平延时20ms时为舵机反转,一但延时时间不足,可能导致舵机不能工作;如果您使用的是声控模式或者触控模式,请确定您已经正确开启这些模式,通过声控系统指示灯和触控系统指示灯可以判断系统是否接收到您所击打的信号。
(3) Q:我已经接入正确的电源,为何步进电机不能工作?
A:请您确定你给步进电机输出的脉冲是正确的,如果您使用再离线编程系统给步进电机输出的脉冲信号不正确,脉冲频率过低会使步进电机转动不明显或者不转动,脉冲频率过高会使步进电机发生跳动并产生刺耳的高频声音。本步进电机的工作频率幅度比较大,为了保证足够的观赏性和安全性能,建议您使用高低电平交替的方波信号,两者延时时间均为1.2±0.5ms
(4)Q:为何我的舵机挥动手臂但打不到鼓?
A:如果您使用了再离线编程模式,请您确定您对舵机输出的脉冲的循环次数,如果输出的脉冲循环次数过低,会导致舵机的转动角度大幅减少,这样机器人就无法击鼓了。
(5)Q:我明明已经给机器人声音信号,为何机器人仍然没有反应?
A:请您首先确定您使用的声控模式,如果不是,请将其调至声控模式再给予声控信号;若您确定已使用声控模式,请您首先观察声控模式的指示灯在您击打鼓的时候有亮,如果没有亮的话则可能是您给予的声音信号不够强,此时可以通过调节声音传感器一侧的可变电阻以调节其灵敏度;如果灯在您击打的时候有亮,但电机仍然不转动,则表示PIC单片机在接收到信号的条件下无法带动电机,此时请检查您是否曾使用过再离线编程功能,是否对舵机的驱动子程序进行过修改,如是则请按后面提供的源程序列表恢复;如果您不曾使用过在离线编程功能,则可能是由于电路方面连接出现问题导致。
五、探究过程
1. 设计思路
大白菜的灵感来源与我们对机械臂方面研究的兴趣,整个探究过程的设计采取以一个中心点出发进行扩展的设计思路,其思路表达如下:
图5.1 设计思路流程图
2. 探究过程简述
首周作为确定题目和参赛的一周,主要工作在于对确定参赛的类型,项目组成员进行相关的构思与设计,尽管已经拥有一个确定的方向,但是仍然需要确定设计的整体思路与方案,以及进行接下来工作的一些物资与资料准备。
次周作为机器人制作的开始,主要工作在于机械设计方面,尤其是以机械臂的主体结构进行CAD及UG等软件方面的设计为重,同时对机器人进行相应的受力分析以及对应的细节处理,并将初稿提交给指导老师进行审定与修改;电路方面进行初期的购买物资,确定元器件类型与数量,对开发板与最小系统板进行对应的初步调试。
机械机构部分 | 电路与控制部分 |
CAD与UG软件制图 受力分析 细节处理 指导老师修改机械设计方案 | 确定元器件类型与数量 购买物资 调试PIC单片机开发板 |
第三周工作进入全面开展的状态,由于机械设计方面出现不少的问题,需要多次修改机械设计部分,如轴、各级机械臂、连接件等方面都出现了如孔径不均、钣金件尺寸不规范、轴没有分级等多种问题,需要多次与指导老师沟通并作出修改;另外,购买轴承、螺钉等紧固件与连接件,确定需要机械零件的参数与一般选定条件;电路与控制方面则开始进行相关子控制电路的制作,声音控制系统与触感控制系统的设计以及一般算法的编写与设计。
机械机构部分 | 电路与控制部分 |
机械设计修改 购买紧固件、轴承等 确定零件参数规格 | 子控制电路设计与制作 一般算法设计与编写 |
第四周工作比较繁重,主要集中在机械设计方面继续定稿与制作,并提交到加工方进行受理与制作,而同时根据之前测得的机械臂的主体结构受力数据等方面进行电机参数的选择,购买舵机与步进电机;电路与控制方面开始对新购买的舵机、步进电机、步进电机驱动器进行相应的调试,由于供货商方面提供的资料并不完整,因此在电机的调试上出现很多的问题,如占空比的掌握、步进电机脉冲的频率调整等未能使电机转动。
机械机构部分 | 电路与控制部分 |
机械设计定稿 交付加工 确定电机参数并购买电机 | 对电机进行运动测试 |
第五周由于等待机械加工的原因,在机械方面并没有太多的工作,只是一些购买简单组装工具的工作;而工作重心则主要都集中在整个团队对于新的电机的调试方面,分别向《机器人设计与制作》任课老师、电工电子实验中心老师、机电学院研究生等多方面进行相应的请教,终于使舵机能够转动,而步进电机则出现发出尖叫声的问题。
机械机构部分 | 电路与控制部分 |
购买组装工具 | 对电机进行运动测试 |
第六周机械加工完成,机械机构方面进行相应的组装工作,主要集中在对机械臂主体的组装、电机的装入与固定、底座的制作等配套工作;而控制方面则对已经调整好的舵机进行相应的控制测试,同时再对步进电机进行调试,终于在使用高频信号发生器之下使步进电机转动,并且基本掌握步进电机的工作频率与工作电压,以及步进电机驱动的控制技巧。
机械机构部分 | 电路与控制部分 |
机械零件组装 配套系统制作 | 舵机进行控制测试 步进电机运动测试 |
第七周需要加快工作进度,机械方面已经成型,结构已经得到确定,并且各个自由度运动在工作条件下运动正常;而工作都集中在电路与控制方面,主要是整体程序的编写与各个子电路的测试,以及各个示教系统对电机的控制调试。
机械机构部分 | 电路与控制部分 |
自由度微调 | 整体与子程序编写 各个子系统对电机调试 |
第八周主要工作在于整机调试以及编写项目报告;整机调试工作主要集中在对机械臂的主体结构进行PIC单片机控制,模拟现场情况进行各个子控制系统的调试,模拟各种可能出现的问题进行相关的准备与设计。
整体工作 |
整体机械臂调试 编写总结报告 模拟及设想问题及准备解决方案 |
3. 探究过程出现的问题与采取的解决方法
3.1
【问题】机械设计不规范,如轴、各级机械臂、连接件等方面都出现了如孔径不均、钣金件尺寸不规范、轴没有分级等多种问题。
【解决方法】通过与指导教师的沟通与多次交流,并将机械设计图交给老师审阅与修改,由指导教师提供改进的意见,我们通过4次的大型修改,最终确定了现在的机械结构:使用角铁连接机械臂、多级轴结构、法兰与轴承分边固定等机械结构,并在11月中下旬终于将机械设计图最终定稿并交付加工方进行相应的机械加工与制造。
3.2
【问题】整个机械臂主体加工精度过低,导致机械臂多个地方的连接出现问题,轴与轴承的配合过盈太多,主体结构的通孔间隙过大,平行机械臂结构的通孔没有对准等多种机械加工精度问题。
【解决方法】由于本机器人是交付到外面的加工方进行相应的机械加工和机械制造,而为了节省成本,选择了精度比较低的手控机床来进行加工,因此机械加工的精度存在相当的问题。为了解决上述的问题,我们在设计的时候已经相应增加了一定的过盈量以防加工失误导致间隙过大等无法弥补的问题;同时,我们在获得零件的时候已经进行相关的检查,保证了一定的精度,但是仍然存在过盈或者间隙过大等一系列的问题,最终解决方法是采用我们自己进行后期再加工,如对轴、机械臂结构等进行打磨,同时对过盈量过大的工件进行锉刀慢锉以减低过盈量等,最终顺利将所以工件组装起来并完成机械臂的整体结构。
3.3
【问题】由于没有完整的技术资料,舵机在给予一定脉冲的时候不转动,或者出现跳动等现象。
【解决方法】出于没有相关技术资料的原因,我们首先是在网上寻找MG945这款舵机的相关控制资料,但是没有完整的占空比的信息,因此我们又找到了电工电子实验中心的同学、《机器人设计与制作》的任课老师咨询,最终综合网上的论坛资料与老师提供的信息,最后利用单片机进行脉宽调节,最终确定了低电平延时20ms,高电平在1.5±1ms的伺服信号,并且增加循环等程序的控制下使电机能够按照一定的周期摆动,并且在装上机械臂后能够使机械臂按照一定的角度进行上下的摆动。
3.4
【问题】由于没有完整的技术资料,步进电机在使用单片机控制下不转动、或者跳动并发出尖锐声音
【解决方法】同样由于技术资料不完整以及供货方方面提供的信息有误,步进电机不能正常转动,其主要现象是前者在步进电机驱动上电的情况之下步进电机对信号完全没有反应;后则则是在给予的脉冲有反映,但发出声音。我们在面对着两种情况的时候分别寻找了机电学院的研究生与电工电子技术的老师进行相关的咨询和调试,最后根据相关的资料,得出了步进电机的控制方法是通过一个高低电平的变化使步进电机发生一个步矩角的转动的相关信息,可以确定是由于我们在连接的时候,给予步进电机的脉冲频率过高,达到了10000Hz,远超过步进电机的反应速度,因此后来将频率调至350-700Hz左右的时候,步进电机就能够正常工作。
3.5
【问题】步进电机运动与其步矩角参数等理论值不对应,如给定50个高低变化的脉冲,但是步进电机转动的角度大于90度。
【解决方法】我们最终选择忽略这个问题,尽管无法量化地控制电机,但是通过多次的调试,最终能够将电机的转角调到一个合适的范围;另外,根据供货方提供的信息,本问题的成因很可能是由于步进电机的驱动器有个细分数可选,而这个细分数可以将步矩角细分到一定的范围,因此可能导致给定的高低电平变化使步进电机的输出角度变小,从而是角度与其原来的理论值不相符。
3.6
【问题】步进电机与其电机驱动需要较高电压电源,而且电机需要一个独立电源,单片机需要一个独立逻辑电源。
【解决方法】按照原来的计划,我们是打算利用7805芯片进行相应的电压调整,使整个机器人只需要一个电源系统,但是后来根据指导老师的建议,认为逻辑电源与外接电源不宜一致,因此,应该使用两个独立电源;同时,由于步进电机的转动最低要求9V的电压,而最好是有15V的电压,因此在参加比赛的时候,则需要使用到外加的学生电源进行相关的驱动。
3.7
【问题】两个舵机使用程序无法进行调平
【解决方法】出现这个问题的根本原因是由于选用的舵机有个机械零点,它具有上电自动复位的功能,因此在使用的时候就会由于每次单片机上电是舵机复位而导致无法进行调平,无论我们的程序怎样编写都没有办法使其合适击鼓的需要。为了解决这个问题,我们只能采用机械调平的方法处理,通过调整机械臂与舵机的不同角度的连接,从而改变其初始的角度,以及将两个机械臂调成平行的,使其合适击鼓的状态。
3.8
【问题】击鼓的时候击打的声音并不明显
【解决方法】这个问题的主要成因是由于舵机属于高扭矩的舵机,而其代价则是其转速比较慢,仅为0.25sec/60°,同时在电机的伺服控制当中为了保证其有足够的转角,其速度也不能调得过快,否则会导致第三级机械臂与舵机之间的连接出现较大的问题。为了解决这个问题,我们只能够在转速、转角、击打力度之间取得一个平衡,我们也多次改变舵机的伺服控制程序,包括对高低电平的脉宽进行相关调节,以及对循环的次数进行调节,只能得出现在的这个情况,即便是在以后进行改进的时候,也只能在硬件方面,如增加鼓棒重量,改变鼓的结构或者使用架子鼓的发声比较强的鼓进行展示。
3.9
【问题】声音传感器过灵敏,以致超过了舵机的反应速度
【解决方法】这个问题的主要成因是由于声音传感器本身的精度问题引起的,因此解决的方法有多种,一个是调节声音传感器本身,而另外一种则是在声音传感器与单片机的相连的电路系统中增加可变电阻系统,我们选择了后者;在电路中增加可调的可变电阻,然后通过现场对可变电阻的调节,能够满足对声音传感器在其工作范围内的声音探测能力的调制,进而能够是机器人拥有更为广泛的适应性与适用性。
3.10
【问题】部分电路不稳定,使在声控模式下舵机运动并不规律,如在一次声音信号输入之下,舵机重复运动。
【解决方法】这个问题的主要成因比较复杂,可能是由于电路的原因造成的,也可能是由于程序的编写失误或者是调用失误导致的,因此至今我们也没能明确这个问题的主要成因是什么。但是我们采用了多种手段,包括调整程序的结构、重新编写子程序与调用的结构、重新设计电路与重新布局排版、增加施密特触发器进行整波等手段,最终使声控电路能够正常工作。
六、评价与改进方案
1. 自我总结与评价
【自我总结】
经过2个月的设计与制作,终于将机器人完整地完成 ,可以说着2个月过得痛并快乐着。毕竟这个机器人是整个项目组成员已经经过了近半年的理论论证最终得到的实体,虽然其功能与原来的设想并不完全一致,但是至少给了我们一个参加比赛的机会,同时给了一个制作一台真正机器人实体的机会,因此我们要感谢这次大赛,也感谢每一个支持与帮助过我们的老师、同学。
机器人的设计与制作总是伴随着那几个不可缺少的基本点,之所以我们参加比赛一来是为了更加贴近现实的机器人学,二来是为了对项目的后续发展带来更大的帮助。因此我们选择了制造一直机械臂,虽然参加比赛的功能目前还只是击鼓,但是相信在更长远的未来,它会走得更远。
正如之前所说的,我们已经经过将近半年的理论验证,从很多地方已经省下了不少时间,包括我们已经收集了足够多的资料,也已经对机械臂的实体进行过相关的简易建模研究,因此在参加本次比赛的时候能够得心应手。而在这次比赛当中,我们的确学到了更多,虽然在之前理论验证阶段已经有了一定的数据与相关资料,但是仍然缺乏实际操作的空间。而在这次制作大白菜的过程中,首先学到的是机械设计方面的知识,在设计机械臂的时候无可避免地要与机械设计打交道,尽管之前有过相关的经验,但是仍然不足以应对十几样零件的设计,因此我们在很多地方也做得不足,也在很多细节上存在很多漏洞;然后学到的就是加工方面的一些知识,虽然我们不是亲自去加工这些零件,但是怎样才能更加快更加省钱的完成这些零件的制造,是我们需要考虑的问题,因此我们省略了很多不必要的设计,也减去了一些在本次比赛不需要的自由度和相关零件;还有学到了电机的控制方面的知识,包括舵机、步进电机、直流电机的控制方法,是如何进行PWM脉冲调节,或者是如果控制步进电机的这些知识有了初步的了解;最后就是电路与程序方面的调试,尽管电路并不复杂,但是整体由于机构比较大、功能复杂,因此各个组合的配合需要花很多心思去完成。
总结这次参加比赛,我们得到了一个能够击鼓的机器人,收获了包括机械、电子、控制方面的知识,也认识到自己很多地方的不足与改进之处。
【自我评价】
尽管每个人的参与程度与参与范围不同,但是整个项目组都处于一种合一的状态。同时,每个人根据自己的能力所在进行相应方面的研究,由于我们设计与制作的不是一架普通的小车,而是一个机械臂,我们也需要在受力分析、三维建模、CAD制图、机械加工与制造方面投入更多的时间,因此项目组成员主要都是偏机械方向,而在电路设计、程序控制、电机调测等方面也有相应的投入。由于工作组的不懈努力,无论是前期的准备,中期的制作与装配,还是后期的调试都进行得有条不紊,成员各司所职,将自己本分做好,也去帮助遇到困难的同伴,大家将自己所知道的,所掌握的知识投入到本次比赛中,再从中收获更多的知识。
2. 自我改进方案
【改进方案】
由于参加本次比赛是已经经过相当多理论的验证,因此在比赛之后,我们可以根据原来设定的方案继续进行机器人方面的探究。
根据原来的计划,机械臂部分拥有大概9个自由度,其中第三级机械臂处会增加4个自由度,同时会为所有自由度配上舵机或者步进电机,同时也会在轴部分增加编码盘或者其它能够测量电机转动角速度的器件,而在控制方面则着重与对机械臂转速与转动角度的量化测量,并且纪录机械臂的对应时刻的位姿与速度,能够完成测量臂的功能,并且能够同时利用控制系统将其原来的示教过程中机械臂的位姿与速度重现,达到一种能够记忆机械臂示教运动并重现的最终功能。
拥有这种功能的机器人的应用方面广泛,而针对特定的情况以及我们的制作水平与机器人的规模大小,最终预计会确定用于医疗方面,例如针对中风病人进行按摩,在医护人员进行相关的示教之后,机器人能够自动重现示教的动作,对病人自动进行按摩。
附件:
1. 机械设计零件图及装配图
1.1 机械零件CAD图
【轴1】 1件
【轴2】 1件
【轴3】 1件
【底盘】 1件
【支架】 2件
【第一级机械臂】 2件
【第二级机械臂】 2件
【第三级机械臂】 2件
【二级臂连接件】 1件
【二三级连接件】 1件
【舵机固定件】 2件
【连接件1】 2件
【连接件2】 2件
1.2 机械零件UG图
【轴1】 1件
【轴2】 1件
【轴3】 1件
【底盘】 1件
【支架】 2件
【第一级机械臂】 2件
【第二级机械臂】 2件
【第三级机械臂】 2件
【二级臂连接件】 1件
【二三级连接件】 1件
【舵机固定件】 2件
【连接件1】 2件
【连接件2】 2件
【轴承】5件
1.3 机械设计装配总图
【装配图-主视】
【装配图-俯视】
【装配图-任意角度1】
【装配图-任意角度2】
【装配图-任意角度3】
2. 电路原理图
【声控电路原理图】
【触控电路原理图】
3. 全程序
#define uchar unsigned char
#define uint unsigned int
sbit P0_0=P0^0;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
sbit P3_7=P3^7;
/***********************************/
void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿
}
/**********************************/
void init(void) //声控程序,中断初始化
{
EA=1;
EX0=1;
IT0=0;
}
void int0 () interrupt 0
{
P2_0=0;
delay_nms(200);
P2_0=1;
}
/***********************************/
void main(void) //主程序
{
int a,b,c;
P3_0=0;
while(1)
{
a=P3_4; //KEY4
if(a==0)
{
delay_nms(10);
if(a==0)
{
P2_3=0; //输给自由表演的部分来检测
while(1)
{
P1_5=0;
delay_nms(2000);
P2_3=1;
}
}
}
a=P3_5; //KEY5
if(a==0)
{
delay_nms(10);
if(a==0)
{
while(1)
{
b=P1_0;
c=P1_1;
if((b==0)(c==0))
{
P2_0=0;
delay_nms(200);
}
if((b==0)(c!=0))
{
P2_1=0;
delay_nms(200);
}
if((b!=0)(c==0))
{
P2_2=0;
delay_nms(200);
}
P1_6=0;
}
}
}
a=P3_6; //KEY6
if(a==0)
{
delay_nms(10);
if(a==0)
{
while(1)
{
init();
P1_7=0;
}}}
}}
#define uchar unsigned char
#define uint unsigned int
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;
sbit P2_0=P2^0;
sbit P2_2=P2^2;
sbit P2_4=P2^4;
sbit P2_6=P2^6;
/***************************************/
void delay_nus(unsigned int i) //延时:i>=12 ,i最小延时12us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿
}
void SMotorL(void) //步进电机左转
{
int i;
P1_4=1;
P1_3=1;
for(i=0;i1550;i++)
{
P1_2=1;
delay_nus(800);
P1_2=0;
delay_nus(800);
}
delay_nus(5000);
}
void SMotorR(void) //步进电机右转
{
int i;
P1_4=1;
P1_3=0;
for(i=0;i1550;i++)
{
P1_2=1;
delay_nus(800);
P1_2=0;
delay_nus(800);
}
delay_nus(5000);
}
void DMotor_Dou(int n) //舵机双手一起动,n表示次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i18;i++)
{
P1_0=1;
P1_1=1;
delay_nus(2400);
P1_0=0;
P1_1=0;
delay_nms(20);
}
for(i=0;i18;i++)
{
P1_0=1;
P1_1=1;
delay_nus(1000);
P1_0=0;
P1_1=0;
delay_nms(20);
}
}
delay_nms(10);
}
void DMotor_Dou1(int n) //舵机双手一起动,n表示次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i30;i++)
{
P1_0=1;
P1_1=1;
delay_nus(2400);
P1_0=0;
P1_1=0;
delay_nms(20);
}
for(i=0;i30;i++)
{
P1_0=1;
P1_1=1;
delay_nus(600);
P1_0=0;
P1_1=0;
delay_nms(20);
}
}
delay_nms(10);
}
void DMotor_Dou2(int n) //舵机双手一起动,n表示次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i25;i++)
{
P1_0=1;
P1_1=1;
delay_nus(2400);
P1_0=0;
P1_1=0;
delay_nms(20);
}
for(i=0;i25;i++)
{
P1_0=1;
P1_1=1;
delay_nus(800);
P1_0=0;
P1_1=0;
delay_nms(20);
}
}
delay_nms(10);
}
void DMotor_Sig(int n) //左右手交替,n代表次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i15;i++)
{
P1_1=1;
delay_nus(2400);
P1_1=0;
delay_nms(20);
}
for(i=0;i15;i++)
{
P1_1=1;
delay_nus(1000);
P1_1=0;
delay_nms(20);
}
for(i=0;i15;i++)
{
P1_0=1;
delay_nus(2400);
P1_0=0;
delay_nms(20);
}
for(i=0;i15;i++)
{
P1_0=1;
delay_nus(1000);
P1_0=0;
delay_nms(20);
}
}
delay_nms(10);
}
void DMotorL(int n) //舵机左手,n代表次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i18;i++)
{
P1_0=1;
delay_nus(2400);
P1_0=0;
delay_nms(20);
}
for(i=0;i18;i++)
{
P1_0=1;
delay_nus(900);
P1_0=0;
delay_nms(20);
}
}
delay_nms(10);
}
void DMotorR(int n) //舵机右手,n代表次数
{
int i,j;
for(j=0;jn;j++)
{
for(i=0;i18;i++)
{
P1_1=1;
delay_nus(2400);
P1_1=0;
delay_nms(20);
}
for(i=0;i18;i++)
{
P1_1=1;
delay_nus(900);
P1_1=0;
delay_nms(20);
}
}
delay_nms(10);
}
void main(void)
{
int a,b;
while(1)
{
a=P1_0;
if(a==0)
{
DMotor_Dou(1);
delay_nms(10);}
a=P1_1;
if(a==0)
{
DMotorL(1);
delay_nms(10);
}
a=P1_2;
if(a==0)
{
DMotorR(1);
delay_nms(10);}
a=P1_3;
if(a==0)
{
DMotor_Dou1(1);
DMotor_Dou2(1);
DMotor_Dou(3);
delay_nms(200);
DMotor_Dou(2);
SMotorR();
DMotor_Dou(2);
SMotorL();
DMotor_Dou(2);
SMotorR();
DMotor_Dou(2);
SMotorL();
DMotor_Dou(1);
delay_nms(30);
DMotor_Sig(2);
SMotorR();
DMotor_Sig(2);
SMotorL();
DMotorL(1);
DMotorR(1);
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
SMotorR();
DMotor_Sig(1);
DMotorL(1);
DMotorR(1);
DMotor_Dou(2);
delay_nms(100);
DMotorR(2);
DMotorL(2);
SMotorL();
DMotor_Sig(1);
DMotor_Sig(1);
delay_nms(100);
DMotorL(2);
SMotorR();
DMotorR(1);
DMotorL(2);
SMotorL();
DMotorR(1);
DMotorL(2);
SMotorR();
DMotorR(1);
DMotorL(2);
SMotorL();
DMotorR(1);
DMotor_Sig(1);
SMotorR();
DMotor_Sig(1);
DMotorL(2);
DMotor_Sig(1);
DMotorL(2);
DMotorR(2);
delay_nms(400);
DMotor_Sig(1);
SMotorL();
DMotorL(1);
DMotorR(1);
SMotorR();
DMotorL(1);
DMotorR(1);
SMotorL();
DMotorL(1);
DMotorR(1);
SMotorR();
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
DMotor_Sig(1);
SMotorL();
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
SMotorR();
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
SMotorL();
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
SMotorR();
DMotorL(1);
DMotorR(1);
DMotor_Sig(1);
delay_nms(100);
DMotorL(1); SMotorL();
DMotorR(1); SMotorR();
DMotorL(1); SMotorL();
DMotorR(1); SMotorR();
delay_nms(200);
DMotor_Dou(2);
DMotor_Dou1(1);
DMotor_Dou2(1);}
}
}
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码