资源描述
前 言
---------------------------------------------------
随着生产自动化的发展需要,机器人已经越来越广泛地应用到生产自动化上,随着科学技术的发展,机器人的传感器种类也越来越多,其中红外传感器已经成为自动行走和驾驶的重要部件。
红外的典型应用领域为自主式智能导航系统,机器人要实现自动避障功能就必须要感知障碍物,感知障碍物相当给机器人一个视觉功能。智能避障是基于红外传感系统,采用红外传感器实现前方障碍物检测,并判断障碍物远近。
本设计通过小车这个载体再结合以AVR系列的Mage16单片机为核心的控制板可以达到其基本功能,再辅加由漫反射式光电开关组成的避障电路、遥控模块、电源电路、差分驱动电路和显示电路就可以完善整个设计。
目录
一、摘要: 4
二、功能介绍: 4
三、 硬件设计: 4
3.1 避障电路: 5
3.2 单片机电路: 8
3.3 显示电路: 8
3.4 电源电路: 9
3.5 电机驱动电路 10
3.6 无线遥控电路: 11
四 、程序设计 12
4.1 主程序流程图 13
4.2 主程序 13
五、系统调试 18
六、小结 19
七、参考文献 19
附录 20
系统实物图 20
一.【摘 要】: 本文提出一种智能循迹,自动运水小车的设计方法,利用红外技术检测障碍物信息,采用Mage16单片机进行实时控制,实现智能循迹,智能小车采用后轮驱动,两轮各用一个直流电机控制,避障用的传感器采用红外漫反射式传感器。
【关键词】: 避障 光电开关 差分控制 LCD
二. 功能概述
本小车可通过2262无线模块进行模式的切换,在手动模式下,通过遥控器按键的不同实现不同动作;在自动模式下,机器人通过RPR220光电管实现对线路的自动识别,智能小车采用两轮驱动,左右两边各用一个电机驱动,分别控制两个轮子的转动从而达到转向的目的。将三个红外线光电传感器分别装在车体的前方和后方,当红外传感器检测到小车左边出黑线时,主控芯片控制右轮电机停止左轮转动,车向右方转向,当传感器检测到小车右边出黑线时,主控芯片控制左轮电机停止转动,车向左方转向,当运行到终点时,主控芯片控制另一个电机将水箱翻起,降水倒出。同时通过NOKIA5510液晶显示运水时间,运水量。
三.硬件设计
如下图所示,是本次设计智能小车的电路框图。以Mage16为电路的中央处理器,来处理传感器采集来的数据,处理完毕之后以便去控制电机驱动电路来驱动电机。电源部分是为整个电路模块提供电源,以便能正常工作。
5110
实时显示
CPU
电源模块5V
L298
电机驱动
红外避障
无线接收
模块
2个直流
减速电机
ATmega16L
无线发射
模块
电源
3.1. 避障电路
(1) 障碍物探测方案的选择
方案一:脉冲调制的反射式红外线发射接受器。由于采用该有交流分量的调制信号,则可大幅度减少外界干扰;另外红外线接受官的最大工作电流取决于平均电流。如果采用占空比小的调制信号,再品均电流不变的情况下,顺势电流很大(50—100mA),则大大提高了信噪比。并且其反应灵敏,外围电路也很简单。它的优点是消除了外界光线的干扰提高了灵敏度。
方案二:采用超声波传感器,如果传感器接收到反射的超声波,则通知单片机前方有障碍物,如则通知单片机可以向前行驶。市场上很多红外光电探头也都是基于这个原理。这样不但能准确完成测量,而且能避免电路的复杂性
由以上两种方案比较可知。方案二要比方案一优势大,市场上很多红外观点探头也都基于这个原理。其电路简单,工作可靠,性能比较稳定。从而避免了电路的复杂性,因此我先用方案二作为小车的监测系统。
避障电路采用漫反射式光电开关进行避障。光电开关是集发射头和接收头于一体的检测开关,其工作原理是根据发射头发出的光束,被障碍物反射,接收头据此做出判断是否有障碍物。当有光线反射回来时,输出低电平;当没有光线反射回来时,输出高电平。单片机根据接收头电平的高低做出相应控制,避免小车碰到障碍物,由于接收管输出TTL电平,有利于单片机对信号的处理。
(2)光电开关工作原理:
光电开关是通过把光强度的变化转换成电信号的变化来实现控制的。
光电开关在一般情况下,有三部分构成,它们分为:发送器、接收器和检 测电路。
避障电路如下:
避障电路功能表:
传感器
避障电路输出(上升沿动作)
待执行命令
左
中
右
左转信号(P2.1)
右转信号(P2.0)
0
0
0
√
右转
0
0
1
√
右转
0
1
0
√
右转
0
1
1
√
右转
1
0
0
√
左转
1
0
1
√
右转
1
1
0
√
左转
1
1
1
前进
注解(“0”表示有障碍物; “1”表示无障碍物)
3.2 单片机电路
本设计的主控芯片选择Mage16,负责检测传感器的状态并向电机驱动电路发出动作命令。复位电路采用手动复位。
单片机电路如下:
3.3显示电路:
显示电路由NOKIA5110组成,它可进行字母,汉字,图片的显示,功能强大,使用方便,所以本系统选用NOKIA5110作为显示模块,其电路如图所示。
NOKIA 5110
3.4 电源电路
本系统所有芯片都需要+5V的工作电压,而干电池只能提供的电压为1.5V的倍数的电压,并且随着使用时间的延长,其电压会逐渐下降,则需要LM7805稳压芯片。L7805能提供300至500mA的电流,足以满足芯片供电的要求。虽然微处理器和微控制器不需要支持电路,功耗也很低,但必须要加以考虑。
电源电路拟定为:
3.5电机驱动电路
市场上用很多种类的小电压直流电动机,很方便的选择到。主要有普通电动机、和步进电动机。
方案一:采用步进电机,步进电动机的一个显著的特点就是具有快速启动和停止能力,能够达到我们所要求的标准。如果负荷不超过步进电机所能提供的动态转矩值,就能够立即是步进电机启动或反转。其转换灵敏度比较高。正转、反转控制灵活。但是步进电机的价格比较昂贵,对于我们的现状相差太远。
方案二:采用普通的直流电机。直流电机具有优良的调速特性,调速平滑、方便。调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动、制动和反转。能满足各种不容的特殊运行要求。
由于普通直流电机价格适宜,更易于购买,并且电路相对简单,因此采用直流电机作为动力源
本设计采用L298电机驱动芯片为直流电机驱动,由L298芯片组装直流电机驱动模块,同时利用光耦隔离模块,实现电路保护,构成的电路结构简单,方便,可靠!
驱动电路原路框图如下:
驱动电路原路框图
LM298应用电路图:
电机驱动连接电路图
3.6无线模块:
为了能对小车进行手动控制,我们选用了简易的基于HS2272和HS2262的无线收发模块。利用2272和2262分别实现接收模块和发射模块电路设计。
无线收发模块
四. 程序设计:
本系统利用外部中断来接受遥控信号,通过接受信号的不同来改变运水模式,主程序在不断检测模式是否改变,通过不同模式实现不同动作!系统中还利用了定时器来计算运水时间,当小车到达终点时,把水倒出,同时显示运水时间!
4.1 主程序流程图:
开始
初始化设置
自动模式
自动循迹运水模式
手动控制模式
N
Y
主程序流程图
4.2源程序:
#include <ioM16v.h>
#include <macros.h>
#include "5110.h"
#include "motor.h"
#include "wireless.h"
#include "init.h"
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uchar potemp1=0,potemp2=0,potemp3=0,potemp4=0,potemp5=0,potemp6=0,pox=1,poy=0;
uint x_1,x_2;
uint ms_conter=0,s_conter=0,m_conter=0,h_conter=0;
uint receive=0,key=0,flot=0;
uint shuiliang=0;
uint x_220=255,y_220=0,z_220=0;
void main(void)
{
init_devices();
motor_1(2);
motor_2(2);
motor_3(2);
motor_4(2);
DDRB = 0x00;
PORTB = 0xFF;
key=PINB&0xF0;
delay_ms(15);
//在这继续添加你的代码
//LCD_clear();
delay(100);
while(1)
{
DDRB = 0x0F;
//PORTB = 0xFF;
key=PINB&0xF0;
delay_ms(15);
if(key==0B00010000)
{
////前进
motor_1(2);
motor_2(2);
motor_3(0);
motor_4(0);
}
else if(key==0B00100000)
{
//后退
motor_1(2);
motor_2(2);
motor_3(1);
motor_4(1);
}
else
if(key==0B01000000)
{
//右转
motor_1(2);
motor_2(2);
motor_3(1);
motor_4(0);
}
else
if(key==0B10000000)
{
//左转
motor_1(2);
motor_2(2);
motor_3(0);
motor_4(1);
}
else
if(key==0B00110000)
{
//左转
motor_1(0);
motor_2(2);
motor_3(2);
motor_4(2);
}
else
if(key==0B01010000)
{
//左转
motor_1(1);
motor_2(2);
motor_3(2);
motor_4(2);
}
else
if(key==0B01100000)
{
//左转
motor_2(0);
motor_1(2);
motor_3(2);
motor_4(2);
}
else
if(key==0B10100000)
{
//左转
motor_2(1);
motor_1(2);
motor_3(2);
motor_4(2);
}
else if(key==0B10010000)
{
motor_1(2);
motor_2(2);
motor_3(2);
motor_4(2);
//break;
}
else if(key==0B01110000)
{
DDRA=0X00;
PORTA=0XFF;
x_1=0XF0|PINA;
x_2=0X0f|PINA;
while(x_1!=0xf0)
{
front_220();
x_1=0XF0|PINA;
}
motor_1(2);
motor_2(2);
motor_3(2);
motor_4(2);
delay(20);
motor_1(0);//转盘转向,水箱在前
delay(280);
//motor_1(1);
motor_2(1);//倒水
delay(200);
motor_2(0);//水箱放平
//delay(100);
motor_1(1);//转盘转向,水箱在后
delay(300);
x_2=0X0f|PINA;
while(x_2!=0x0f)
{
back_220();
x_2=0X0f|PINA;
}
motor_1(2);
motor_2(2);
motor_3(2);
motor_4(2);
//LCD_clear();
LCD_write_chinese_string1(19,0,12,4,0,2);//欢迎使用
LCD_write_chinese_string0(0,2,12,5,0,1);//运水时间:
// LCD_write_english_string(53,2,":");
LCD_write_char2(1,4,48+h_conter/10);
LCD_write_char2(7,4,48+h_conter%10);
LCD_write_english_string(15,4,"H");
LCD_write_char2(25,4,48+m_conter/10);
LCD_write_char2(31,4,48+m_conter%10);
LCD_write_english_string(39,4,"M");
//LCD_write_char2(23,4,'.');
LCD_write_char2(49,4,48+s_conter/10);
LCD_write_char2(55,4,48+s_conter%10);
LCD_write_english_string(64,4,"S");
/*
///PA0电压采集
receive=mega16_ad(0);
receive=receive/20.1;//修正系数
LCD_write_char2(12,5,48+receive%100/10);
LCD_write_char2(18,5,'.');
LCD_write_char2(24,5,48+receive%10);
LCD_write_char2(32,5,'V');
///PA1电压采集
receive=mega16_ad(1);
receive=receive/20.1;//修正系数
LCD_write_char2(42,5,48+receive%100/10);
LCD_write_char2(48,5,'.');
LCD_write_char2(54,5,48+receive%10);
LCD_write_char2(62,5,'V');
*/
// NOP();
//motor_2(0);
//front_220();
delay(300);
}
else
{
motor_1(2);
motor_2(2);
motor_3(2);
motor_4(2);
}
}
}
五、系统调试:
我们在调试阶段遇到很多的问题,首先是光电管的调试很复杂,由于外界光线的影响,调节光电管的灵敏度是个很重要的问题;其次就是系统不稳定的问题,由于本系统总共使用了4个电机,并且在很多时候都同时运行,经常出现系统电压波动很大,对系统的稳定性带来了很大的影响,我们通过很多方法才得以解决!还有就是对电机速度的控制,速度过快容易冲出跑道,过慢则浪费时间,我们通过不断的调试才找到一个合适的速度!
六、小结:
本系统虽说不是很大,但是也涉及到了好多常用的模块,例如:无线遥控、电机控制、液晶显示、光电管循迹等;通过这一次的制作,我们都有了很大的提高,不管是硬件电路的设计还是软件程序的编写,总之一句话,以前从来没有感觉过单片机的引脚会如此紧张,这次制作我们把单片机的硬件资源都充分利用了,可见对其又得到了进一步的学习与认识,对他的掌握得到了进一步的提升!反正就是,好多东西只有自己动手做了才知道!
七、参考文献
【1】 李朝青.单片微机原理及接口技术(第三版)。 [M]北京航空航天大学出版社
【2】 阎 石. 数字电子技术基础(清华大学电子学教研组编 第五版) 高等教育出版社
【3】 康华光. 电子技术基础(第五版) 高等教育出版社
【4】 《无线电》2009年第2期 宋泽清 关于灵活避障 快速循迹
【5】 杨加国 单片机原理与应用及C51程序设计 清华大学出版社
附录:
实物图:
18
展开阅读全文