图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 前进子程序流程图
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于Arduino的机器人写字系统的设计与实现毕业论文 - 图文(3)在线全文阅读。
相关推荐: