完整版基于Arduino的机器人写字系统的设计与实现毕业论文Word文件下载.docx
- 文档编号:7520368
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:25
- 大小:967.87KB
完整版基于Arduino的机器人写字系统的设计与实现毕业论文Word文件下载.docx
《完整版基于Arduino的机器人写字系统的设计与实现毕业论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整版基于Arduino的机器人写字系统的设计与实现毕业论文Word文件下载.docx(25页珍藏版)》请在冰点文库上搜索。
3.2.4电机驱动子程序功能实现11
3.2.5前进、停止子程序功能实现12
3.2.6转弯子程序功能实现13
3.2.7轮子行程计数子程序功能实现17
第四章软硬件调试21
4.1硬件调试21
4.1.1调试方法21
4.1.2调试结果21
4.2软件调试22
4.2.1调试方法22
4.2.2调试结果22
第五章系统测试24
5.1测试方法24
5.2测试与结果24
结论26
参考文献27
致谢28
附录29
基于Arduino的机器人写字系统的设计与实现
本文以DOODLEBOT为基础,通过控制小车的运行轨迹,实现写字算法,掌握舵机、霍尔传感器的的原理和控制方法。
硬件系统由控制板、舵机、霍尔传感器、电池组组成。
各个模块协作完成系统的功能。
确定机器人落笔的位置,将要书写的字体的路线规划好,当机器人沿着这些路线行进,就会留下痕迹,从而完成书写功能。
程序的书写在电脑上进行,检测无误后下载到板子上运行。
计算机和控制板通过串口进行通信。
通过设计、调试,系统最后能够实现所有英文字母、阿拉伯数字的书写。
通过对字母的不同组合,可以完成单词的书写,进而实现对英文句子的书写。
数字是0~9,其余数字通过组合实现。
也可以实现对指定汉子的书写。
字体的精确度,不仅跟程序中的设计算法有关,在很大程度上取决于硬件器材的精确度。
为了提高写字机器人的精确性,需要更精确的硬件器材做支撑。
写字机器人可以用在科研、教学上。
关键词:
舵机;
霍尔传感器;
写字算法;
第一章绪论
1.1课题的研究背景
写字机器人的“始祖”,早在240年前就出现了。
只是当时制造出的写字机器人,采用凸轮和发条实现,没有用到计算机、单片机等。
通过凸轮间的运动实现写字动作,改变凸轮的组合,就会实现不同字体的书写[1]。
这种书写方式可以看做是这个古老“写字机器人”的写字算法,只是这种算法,在改变字体的时候比较麻烦。
2003年11月,重庆大学申请了写字机器人的专利[2],主要是通过采用复杂的Denavit-Hartenberg方法对运动参数进行运算,实现写字算法[3]。
其他典型的研究是关于自由度的研究,思想是确定始点和终点,采用插值算法,对机器人的轨迹进行规划[4]。
1.2课题研究的目的和意义
对于业余研究者来说,并不需要严密的写字算法实现简单的写字功能,只要能实现简单的写字算法,一定的误差都是可以允许的,至于写字算法,也就越简单越好。
本次设计就是要寻找一种简单的写字算法,在设计和探索过程中,对掌握的知识进行总结,提高自身的综合能力。
这种简单的写字算法,不需要学习复杂的计算方法和公式,对写字机器人可以起到一定的推广作用,可以让更多的机器人爱好者去研究写字机器人,算法的实现也增加了写字机器人算法的多样性。
对个人而言也是一次提升能力的机会。
通过不断的学习,扩展自己的知识面,同时将已存储的知识与新的知识点进行结合,实时更新自己的知识库。
1.3国内(外)研究现状
我国的写字机器人研究主要在矢量化算法和自由度算法,将字轨迹通过运算,转换成机器人要运动的路径。
国外机器人的发展,目的性很强,主要用于军事和家务,对写字机器人的研究资料很少。
1.4论文的主要内容
第一章:
绪论。
主讲课题的研究背景、目的和意义。
第二章:
系统分析。
包括分析系统的需求、是否可行。
第三章:
系统设计与实现。
详细介绍整个系统的设计思路。
第四章:
软硬件调试。
介绍编程前的硬件准备情况,如何进行软件调试,软硬件调试结果,以及调试过程出现的问题与解决方法。
第五章:
系统测试。
介绍最终的测试情况,包括结果和分析。
第二章系统分析
2.1需求分析
本设计要求实现机器人的写字功能,由要求可知在写字过程中需要实现以下功能:
提笔和落笔,前进,倒退,转弯。
另外,还要能够实现计算机与主控板的通信。
2.2可行性分析
基于上述对系统的需求分析,用180度旋转的舵机控制起笔和落笔,当舵机臂转到一定的角度后,实现支撑功能,笔尖会离开地面,这样就能实现提笔功能。
落笔刚好相反,显然能够实现。
用两个360度旋转的舵机控制车轮,给一个参数,通过PWM(Pulse-widthmodulation)转换、H桥控制,就可以实现舵机的转动,即可以实现前进功能。
因为H桥除的防反接电路,可以直接实现舵机的倒转,这样机器人的的倒退也就很容易实现了。
转弯功能只需让一个轮子前进,另一个轮子倒退,就可以实现。
综上,本设计是完全可行的。
第三章系统设计与实现
3.1硬件设计与实现
整个系统由舵机驱动,霍尔传感器感应,mini-drive控制板,电池组四部分组成。
图3-1开发板结构图
控制板模块接收程序的命令,通过H桥对舵机模块进行控制,完成小车的行进动作。
起笔和落笔的舵机模块是由主控板直接控制的,没有通过H桥。
传感器模块是由霍尔传感器完成的,当小车运动的时候,霍尔元件就会在磁场中发生变化,从而记录小车的行程。
电池组模块驱动舵机,为控制板提供电源。
另外系统还有一些指示灯的模块。
比如电池组指示灯,串口指示灯等。
图3-2基础系统结构图
3.1.1主控板模块
(1)电源
电源采用稳压器L4941LDO,使得输入输出的电压差仅为0.45V。
但是,如果输入的电压小于5.4V,就没有稳压效果。
原则上输入的电压可以在3.5V~9V之间。
用四节1.5V的电池就可以工作。
电源端有防反接电路,这样,即使反接也不会烧坏电路。
起到了安全保护的措施。
图3-3电源原理图
(2)串口
板子上的串口是必不可少的,最起码的功能就是要实现与电脑的通信,比如下载程序到处理器。
还有些预留串口,可以外接串口设备,方便实现其他的功能,比如项目中有时会用到的蓝牙模块。
在进行电脑与板子通信之前,要下载相应的驱动程序,在电脑上安装好后,便可以与板子进行通信。
(3)主控芯片
板子的核心,也就是主控芯片是Atmega8A芯片。
(4)双电机驱动
小车的两个轮子,各有一个独立的电机进行驱动。
电机的驱动部分采用MOSFET,阻抗低,工作效率高,还能有效的减少发热。
电机的控制部分采用的是H桥,三极管导通,驱动电机转动。
3.1.2舵机驱动模块
1、舵机介绍
(1)简介
舵机也是电机的一种。
当给它一个角度指令时,它就会转到指定的角度,好多机器人的关节部位用到的都是这种马达。
比如有些大型机器人的手臂、膝盖等处会用到,这种电机通过简单的操控就可以实现转动,对于机器人的控制相对来说比较简单[5]。
图3-4舵机实物图
(2)内部结构
在这个伺服马达的内部有一个小型的直流马达,为伺服马达提供动力。
还有一个变速的齿轮组,齿轮组来带动舵机臂的转动。
舵机内部还有一个反馈电位器,“报告”转动情况。
(3)工作原理
直流马达驱动齿轮组转动,电位器将检测结果反馈给控制系统,控制系统把反馈结果与参数进行比较,然后进行调整,直到转动到指定位置。
这种反馈的机理可以大大提高舵机的精确度[6]。
(4)控制方法
a、控制线:
控制车轮的两个伺服马达有两条线,是电源线和地线。
其中红色的是电源线,黑色的是地线。
这两个电机的转动是通过H桥,并且在霍尔传感器的“配合”下完成的,因此不需要控制线。
给控制线一定的脉冲波,舵机就会转到指定的位置。
b、控制信号:
输入一个周期性的正向脉冲信号,就可以驱动马达,脉冲的高电平时间一般是1~2毫秒之间,低电平的时间是5~20毫秒之间。
高电平维持的时间不同,转到的角度就会不同[7]。
下表是脉冲与角度位置的关系:
表3-1舵机脉冲驱动
输入的正脉冲
私服马达的角度位置
T=0.6ms
-90
T=0.89ms
-45
T=1.44ms
T=2.05ms
+45
T=2.32ms
+90
2、舵机驱动算法
脉冲宽度调制的基本思想就是:
用数字脉冲来代替正弦波,或者是其他波形[8]。
具体的来说,就好像是高等数学里的微积分学。
比如将正弦波的半个周期的波形进行M等分,半周期的波形就变成了M个彼此相连的、宽度相等且幅值不等的脉冲,并且幅值不是平行于水平坐标轴的,而是倾斜的直线,如果加两条垂直于坐标轴的直线,就是直角梯形,而不是矩形。
把这些直角梯形近似的转换为矩形,得到的矩形是等宽的,但是高度是不一样的。
然后把每个矩形的高度转变成相等的,每个矩形的面积依旧和原来一样,即要改变它们各自的宽度。
这样就会得到一序列等高不等宽的波形,称之为PWM波形。
通过转换以后,幅值不再遵循正弦规律,相对的波形的宽度却遵循了正弦规律。
图3-5PWM的占空比
3.1.3霍尔传感器模块
霍尔传感器采用的是一种磁电效应原理。
原理如下图所示,在磁场中放置一个霍尔半导体片,磁场的方向垂直于导体面从上到下。
有电流从A到B流通时,电流会偏向一侧,在CD方向上产生电位差U,U就是所谓的霍尔电压[9]。
本次设计,霍尔传感器是用来记录小车行驶的行程的。
因为在写字的时候需要控制小车行驶的距离,这个距离就是靠霍尔传感器记录,然后反馈给处理器,处理器采取“多退少补”的原则,对小车进行控制。
在两个车轮上分别有两个圆形的金属片,这两个金属片是有磁性的,而且是断断续续的,当车轮转动时,霍尔元件就会在这个变化的磁场中产生变化的电压,每变化一次就记录一次。
图3-6霍尔效应原理图
图3-7霍尔元件实物图
3.2软件设计与实现
软件设计主要包括起笔和落笔,车轮的转动,霍尔传感器的反馈等。
先书写相应的程序块,以函数的形式体现,然后在主程序中调用这些函数。
程序部分主要有,起笔和落笔,书写时要驱动舵机旋转,将笔放下。
书写结束时或者不进行书写时要将笔抬起来;
记录车子的行程,在两个轮子旁边的传感器,会以产生中断的方式对行程进行计数;
写字部分,这部分是重点,涉及到小车的前进、转弯等。
将要书写的字进行分析,然后规划小车的轨迹,进行编程。
3.2.1系统软件模块划分
根据上述思想,将程序划分如下。
引脚的宏定义部分,起笔函数,落笔函数,前进、停止函数,转弯函数,电机驱动函数,空格函数,主函数,所有的字母函数规划好,放在一个文件里,这样也可以在主函数中直接调用。
这样如果想进行书写字体的更改,只需改动相应的函数即可,无需改动其他不相关程序。
也可以通过改变在主函数中的调用次序,来改变书写字母的先后顺序,这样就可以拼写出不同的单词。
也可以将单词所用的字母函数封装起来,直接在主函数进行调用。
写字的思想是将大写的英文字母放在一个的表格中,表格形式可以多样化,例如下面的4×
6表格。
通过Go()函数和Turn()函数的不同组合,来对字母进行书写。
放在表格中,能够使所有的字母字形大小不致差别太大,另外,每个方格可以代表轮子“一步”的距离,这样,根据格子数就可以知道车需要形式的距离,方便编写程序。
图3-8字母规划表
3.2.2主程序的设计实现
图3-9主程序流程图
定义变量是定义的全局变量,这些变量包括左右轮子的速度、模拟量、传感器产生的中断中的计数变量等。
在初始化设置中,设置中断引脚(中断函数将在下面进行介绍),设置串口的波特率,打开串口,设置引脚为输出模式等。
循环体模块,主要是调用子函数,完成想写的单词或者是句子。
3.2.3起笔、落笔子程序功能实现
起笔和落笔是通过驱动舵机旋转实现的,根据舵机旋转的原理,给舵机一个参数值,使它转到指定的位置。
抬笔就是让舵机的臂作为支撑,设置为90度角,信号脉冲中的高电平的时间是1.44毫秒,落笔的时候,舵机臂不再有支撑作用,转到零度角。
因为每个脉冲会使舵机转到一定的角度,所以要有多个脉冲才能达到指定的位置。
一旦达到了指定的位置,舵机就不会再继续转动了。
落笔的程序Down()和起笔很是相似,只是转动的角度不一样。
即用到的信号脉冲中的高电平的时间是2.0毫秒。
控制笔的子程序流程图如下所示:
图3-10控制笔的子程序流程图
3.2.4电机驱动子程序功能实现
在主程序中定义的全局变量,即左右轮子的速度,在这里就要用到。
给左右轮子的速度变量一个值,要在0~255之间,硬件部分已介绍到,这里的驱动用到的是PWM算法,因此值应该在0~255之间。
在赋值的时候,默认是正值代表正向旋转,负值代表反向旋转,可是在H桥中,方向和速度的定义是分开的,因此在写入模拟量的时候要取绝对值,方向则另外根据值的正负来定。
3.2.5前进、停止子程序功能实现
停止的子程序相对于前进而言非常简单,首先介绍一下停止的子程序。
这个程序非常的简单,只是将速度设置为0,然后调用了上面讲到的电机驱动程序。
下面介绍一下前进子程序。
在这个子程序中,会有一个参数,这个参数是要前进的距离,在进行函数调用的时候,要加上参数值。
行驶的过程中会有霍尔传感器进行计数,计数的值如果达到了事先输入的参数值,小车就会停止运行,进行下一次循环。
参数值是要行驶的距离,这里只能是整数,使之能够与传感器的计数进行比较。
这里的参数值可以是正也可以是负,正数是前进,负数是后退。
同样左右速度的设置,要取绝对值。
小车的两个轮子是由两个电机控制的,在行驶的时候要分别进行调制,为了保证两个轮子尽量同步,实时比较两个轮子形式的速度,快的那个就先停止一次,这样仔细的看时,两个车轮就像人的两条腿那样一前一后的在走。
这里判断谁运行的快是通过在相同的时间里比较他们行驶的路程实现的,上面已经介绍,记录行驶的行程是靠霍尔传感器实现的。
为了保证两个轮子“公平竞争”,程序开始,要将记录行程的两个变量清零。
程序流程如下:
图3-11前进子程序流程图
3.2.6转弯子程序功能实现
在转弯时两个轮子都转动,只是一个轮子向前转,另一个轮子向后转。
小车在转动的时候两个轮子和笔的位置都是变化的,为了确认下次落笔的位置,必须找到一个不变的量,在转的过程中唯一一个不变的量就是连接两个轮子直径的中点。
下面把小车简化,进行分析。
黑色的字体“A”是要进行书写的字,红色的部分是简化的小车形状,图中“O”是小车转弯时的不动点,可以称它为小车的中心,L是笔尖到中心的长度。
如下图所示,小车从字母的左下角开始书写,当写到字母的1处时,需要转弯,这时,笔尖的位置在1处,如果直接转个45度角,笔尖并不能落到指定的线路上。
首先把笔抬起来,继续走L个长度,这时,小车的中心点就会落在1处,然后旋转45度。
但是,这时候的笔尖并不在1处,不能接着上次起笔的地方书写。
从图中可以清楚的看到只需在这个基础上倒退L的长度即可。
3-12小车转弯示意图一
图3-13小车转弯示意图二
如上图3-13,小车若要转动45度角,轮子所走的路程如图虚线部分。
两个轮子间的距离是已知的,虚线的长度是整个圆周的八分之一,通过计算可以算出其长度。
直径大约为7.7厘米,再者小车每一“步”的距离是1.57厘米,算出整个圆周需要约15.6步,转45度角需要八分之一的总的步数,因此需要1.95步,即为2步。
在程序的初始部分,设置每个角度所对应的“步数”,这个步数,可以与霍尔传感器的计数直接进行比较,判断是否达到参数要求。
小车转过45度角所要行驶的步数计算过程如下:
n=3.14×
7.7×
(45÷
360)÷
1.57(3.1)
如下图,转动的角度和需要转动的步数之间的关系[10]。
图3-14转动角度和步数关系示意图
图3-15转弯子程序流程图
3.2.7轮子行程计数子程序功能实现
上面多次提到霍尔传感器的计数部分,这里详细的进行介绍。
霍尔传感器的计数,是通过中断实现的,将左、右两个传感器分别接在2、3引脚上,中断的方式设置为CHANGE型。
在轮子上的圆形金属片,里面的磁场是不连续的,这样就会产生电流引起中断,每次中断都计数一次。
轮子行驶一周的时候,传感器的状态会改变八次,即为四次高电平和四次低电平。
第四章软硬件调试
4.1硬件调试
4.1.1调试方法
对于写字功能而言,所要测试的就是,看看电路连接是否正确,能否正常通电,串口能否正常进行工作。
所以,调试方法就是,组装好后,打开电源,看看指示灯是否亮;
通过USB线与电脑进行连接,查看串口指示灯,并查看电脑的驱动模块。
输入简单的运动程序后,小车能够正常的行驶。
4.1.2调试结果
通过调试,看到小车能够正常的工作,并能够通过串口与电脑进行信息交流。
输入简单的运动模块程序后,小车能够行驶一段距离,说明霍尔传感器部分工作都是正常的,同时,电路连接是没有问题的。
调试初期,下载程序到小车的处理器后,小车是倒着走的,这就说明了电源的正负极反了,这里有H桥,反向的电压不会损害线路,只是改变轮子的转动方向。
左右轮子的电源线、地线反接并不会出现故障,只是轮子的转向会改变。
两个轮子的电源线交换时,会引起一个轮子转,而另一个不转的情况。
出现这种结果并不奇怪,当电源线交换时,左轮的速度参数就会输给右边的轮子。
前进的子程序设计,是“时间上同步,时刻上异步”的,右边轮子的计数会多于左轮,右边轮子的速度被设置为零,但这时速度却输给了左边的轮子,这样就会造成“恶性循环”,就会出现原地转圈的现象。
交换两个霍尔传感器,也会出现同样的情况。
交换后,左边轮子的计数会反馈给右边的轮子,如果左边的计数多于右边的计数,那么左边轮子的速度应该为零,但是速度却反馈给了右边的轮子,右边的轮子计数依旧小于左边轮子计数,同样会转圈。
4.2软件调试
4.2.1调试方法
程序分为了多个子程序,调试起来比较方便,只需在主程序中调用需要调试的子函数即可。
程序的运行分为两个步骤,第一步就是要在电脑进行编译,这时候能够查出程序中的语法错误;
第二步就是将程序下载到板子上进行运行,通过小车的动作,来判断逻辑性错误,纠正思路、方法。
比如起笔和落笔,将程序下载好后,打开小车的电源,看控制笔的舵机的选装情况,也可以把笔放上去,看看笔的动作。
4.2.2调试结果
控制笔的舵机会根据参数转到指定的位置,每个角度对应的位置都是固定的。
抬起和落下只是将舵机臂进行旋转,Down()是将笔放下,这里设置的是舵机转向零度位置,UP()就是将笔抬起,这里将其转向90度位置。
舵机的控制要有一定时间周期的数字信号,每个周期的脉冲信号,会使舵机转动一定的角度。
对于旋转的情况,有两种。
两个轮子都转的时候,45度的对应值是34,一个倒转,一个正转,负数是顺时针旋转;
正数是逆时针方向旋转。
通过运行一段的距离,可以发现两个轮子并不是同步的,这里有点像操作系统中讲到的“时间是同步的,时刻是异步的”。
特别是在书写平面不平的时候,画出来的直线简直就是波浪线,而且是大波浪的。
设置的速度对于小车写出的字的规整性特别重要,速度不适合,写出的字出现的误差就会越大,通过多次尝试,选择比较合适的速度。
如图4-1所示,左边的不是理想的速度,可以看出存在很多的误差,右边的是经过调试后的理想速度,误差就比较小了。
图4-1测试结果比较示意图
程序设计时,因为两个轮子不是同步的,所以会将两个轮子的计数进行比较,如果不进行比较,就会出现较大的误差,如下图4-2所示,虽然在转弯的时候还是进行两个轮子的计数比较,但是可以看出误差依然很明显,如果在转弯的时候也没有比较的过程,字就不成形了。
图4-2测试结果比较示意图
第五章系统测试
5.1测试方法
系统的测试方法就如同上面所讲的软件测试方法。
根据表格中字母的笔画顺序及所占的格子数书写字母,组成一个字母库,方便以后写成单词,甚至句子。
在主程序中直接调用字母函数,写到开发板。
准备书写用的纸,打开电源,让小车的头朝向右手边,小车就会自动进行书写。
细心观察小车的运动情况,通过写出的字体对程序进行修改、完善。
采用不同的笔画顺序,查看字的精确度,确认最佳书写路径。
5.2测试与结果
在不断的调试中,我发现前进比倒退精确,逆时针比顺时针精确,所以在我对程序完善的时候尽量的采用前进方式去书写,转弯的时候也尽量采取逆时针。
小车写出来的字体并不是完全的精确,有的字母甚至看起来有点不像。
设计的字体如果越小,就是每个字所在的表格数越少,字体的精确度就越低。
图5-1英文字母调试结果示意图
结论
通过这次设计,我学到了不少新的知识。
未知的东西并不可怕,关键是要去学习。
不能看到不会的东西就放任不管。
在设计的中期,因为初期看的资料和后来小车所用的硬件资料有些不同,一下子就很茫然,没有一点头绪,思路也很乱,就把工作进程放在一边了。
中期的检查,又逼着自己重新把那些所谓陌生的知识捡起来,一点一点的硬着头皮看,到处去查资料,询问老师、同学。
功夫不负有心人,只要肯学还是能学会的。
虽然与其他同学相比,落后了很多,可是,掌握了关键的知识点,其他的就迎刃而解了,落下的东西,也会补回来。
因为需要学习的东西很多,因此下了好多的资料。
总想着把所有的资料都看了,觉得这样就会掌握的比较好一点,可以了解更多的知识。
看了一些才发现有好多资料都是重的,还有的都是一个意思,就是换了一些说法。
通过后来的设计才知道,有些知识并不是很重要,知道就行了,而有些重要的知识,却没有及时的去看。
陆游有句诗“射人先射马,擒贼先擒王”,抓住重点,可以节省时间,还掌握的更多,达到事半功倍的效果。
看了不少的资料,就学着去模仿别人的,好多也不知道是什么意思,看不懂为什么那样去做。
以为是一种固有的模式,模仿来的东西似乎成了不可或缺的东西,虽然去掉那些内容,程序也会正常的运行,但心里总是没底,觉得别人的就是对的,改了以后可能会存在或多或少的隐患。
在对这个设计掌握的越来越多的时候,我抛弃了那些引用过来的东西,我想用我了解的东西,去完成我的任务。
也许会存在这样或那样的不足,但是最起码我有自己的思想,学习的路上肯定是会犯错误的,总结教训、总结经验就会进步。
参考文献
[l]240年前机器人曝光:
精密程度惊人[R].现代快报
[2]重庆大学.写字机器人[P].CN.3.专利之家
[3]王光建,廖志勇,陈雪华.机器人写字技术及其运动参数[J].重庆大学学报2003,(12)
[4]马晓花,孔庆忠,马卫民等.四自由度写字机器人轨迹规划研究[J].机械工程与自动化第5期
[5]MichaelMcroberts【美】著,杨继志、郭敬译.Arduino从基础到实践[M].电子工业出版社
[6]雷永锋.基于AVR微控制器的仿生六足机器人研究[D].西北农林科技大学学报
[7]常赛,王宜怀.可自主编程的智能玩具的开发[J].微型电脑应用,2008年11期
[8]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 基于 Arduino 机器人 写字 系统 设计 实现 毕业论文