基于AT89C52的机器人在复杂路线下的自主寻迹系统
言编程。其思路为:第1步,系统初始化后,读取单片机P2口的值,然后对其P2.0、P2.1、P2.2按位取与,得到传感器模块的组合值。第2步,将得到的组合值与预定的值比较,若相等则执行相应的动作,否则继续比较,直到获得正确的动作。比较完全部动作后,转到第1步重新扫描传感器的状态值。
为了进一步提高系统的安全性和可靠性,还需增加异常处理算法。可能出现的异常情况有:过小弯道或小角度折道时,机器人还来不及转过弯来,就已经完全偏离黑线。这种情况下,3个传感器都输出“1”,检测不到黑线,若不及时处理,机器人将无法继续寻迹。针对该情况,设计了原地旋转动作来找回预定路线,不过原地旋转有顺、逆时针之分,因此还得区分开来。改进后编程的思路为:每次读取P2口值之前,将其上一次的传感器组合值存入某个寄存器,当出现组合值为 “111”的情况时,立即查询上一次的值,根据该值,可以判断出机器人是从哪一侧偏离黑线的,从而进行顺或逆时针原地旋转。其主要程序如下:
……;系统初始化
SENSOR: MOVA,P2
ANLA,#07H;读P2口值,对P2.0、P2.1、P2.2按位取与
CJNEA,#07H,NEXT;如组合值为111,直接转到动作判断程序,否则转到NEXT
LJMPDATA_PROCESS
NEXT:MOVR5,A;将本次传感器组合值赋给R5
LJMPDATA_PROCESS
DATA_PROCESS: CJNE A,#07H,D1;对组合值判断,确认为常规动作还是旋转动作
LJMP ROTATE
D1:……;继续常规动作判断
……
ROTATE: MOV A,R7 ;旋转判断,将上一次传感器组合值赋给A
CJNE A,#06H,R1;对上一次传感器组合值判断,决定顺逆旋转
LJMPCLOCKWISE
R1:……;继续顺逆判断
……
CLOCKWISE:……;顺时针旋转动作
LJMP DELAYS
DELAYS:MOV A,R5
MOV R7,A;将本次传感器组合值赋给R7
LCALL DELAY;调用DELAYS子程序进行延时
LJMP SENSOR ;重新扫描传感器状态
END;程序结束
结语
根据上述设计思路,我们制作出寻迹机器人并进行了测试。测试场地如图4所示,黑色导引线宽度为3 cm,黑线周围区域均为白纸覆盖。测试结果表明:该寻迹机器人能在此复杂路线下平稳、顺利地沿着黑线走完全程,并在终点沿原路返回,达到了预期的目标。这为进一步研究复杂环境下的自动行走机器人提供了参考。
本文的创新点为:使用3个自制的红外光电传感器,以简单的设计和较少的硬件实现了复杂路线下机器人的寻迹。而基于该机器人双级转弯的设计思想,可以增加传感器数量、组成传感器阵列来实现多级转弯,从而对机器人的自主寻迹有着更为精确的控制。
参考文献
[1] 韩毅,张雪峰.一种低成本寻迹机器人的实现[J].微计算机信息,2008,52:233235.
[2] 朱益斌,胡学龙,朱亚锋,等.自主式寻迹机器人小车的设计[J].国外电子测量技术,2006,25(7):4042.
[3] 何立民.MCS51系列单片机应用系统设计[M].北京:北京航空航天大学出版社,2003.
- 基于AT89C52的非分散红外测油仪的研制(11-28)
- AT89C52单片机+AT24C02+1602构成的密码锁(11-25)
- 基于AT89C52单片机的交通灯C语言程序(11-22)
- 基于USB总线的式LCD图文显示系统设计(05-30)
- 基于AT89C52与ARINC429航空总线接口设计(05-28)
- 一款基于Proteus的自动取款机设计与仿真(03-19)