智能小车的自动寻迹实验(精选2篇)
【实验目的】 熟悉光敏电阻的性质 熟悉ICCAVR 编译环境
进一步熟悉单片机各端口的特性和作用 能够编写程序,利用光敏电阻的性质对小车进行控制
【实验器材】
小车一辆 导线五根 下载线一根
【实验原理】
(一)光敏电阻
当光照射在物体上,物体内部的原子释放出电子并不逸出物体表面,而仍留在内部,使 物体的电阻率1/R 发生变化的效应称为光电导效应。光敏电阻是一种光电导效应半导体器 件。由于光敏电阻没有极性,工作是可加直流偏压或交流电压。当无光照时,光敏电阻的阻 值(暗电阻)很大,电路中电流很小。当它受到一定波长范围的光照射时,其阻值(亮电阻)
急剧减小,电路中电流迅速增加,用电流表可以测量出电流。
本实验所采用的光敏电阻是硫化镉光敏电阻,下图是硫化镉光敏电阻的光照特
光敏电阻的检测
1. 用黑纸片将光敏电阻的透光窗口遮住,此时万用表的指针基本保持不动,阻值接近无穷 大。此值越大说明光敏电阻性能越好。若此值很小或接近为零,说明光敏电阻已烧穿损
坏,不能再继续使用。
2. 用一光源对准光敏电阻的透光窗口,此时万用表的指针应有较大幅度的摆动,阻值明显 减小。此值越小说明光敏电阻性能越好。若此值很大甚至无穷大,表明光敏电阻内部开
路损坏,也不能再继续使用。
3. 将光敏电阻透光窗口对准入射光线,用小黑纸片在光敏电阻的遮光窗上部晃动,使其间 断受光,此时万用表指针应随黑纸片的晃动而左右摆动。如果万用表指针始终停在某一
位置不随纸片晃动而摆动,说明光敏电阻的光敏材料已经损坏。
(二)Atmega8515的端口特性
由于本实验主要用到I/O输入输出的PA端口,因此主要介绍PA端口的特性。端口 A(PA7..PA0)端口A为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称 的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外 部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。这意味着用 SBI或CBI指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改 变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。输出缓冲器具有对称的驱动能 力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。
并有保护二极管与VCC和地相连。
每个端口都有三个I/O存储器地址:数据寄存器–PORTx、数据方向寄存器–DDRx和端 口输入引脚–PINx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读 寄存器。当寄存器SFIOR 的上拉禁止位PUD置位时所有端口的全部引脚的上拉电阻都被禁 止。不论如何配置DDxn,都可以通过读取PINxn寄存器来获得引脚电平。PINxn寄存器的各 个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短
时间范围内由于引脚电平变化而造成的信号不稳定。
本实验主要应用PA端口的输入引脚PINA。因此当我们把与光敏电阻的输出电压相连的 五个数据线连接到PA端口时可以通过读取寄存器PINAx来获得光探测装置输出的电平,在 AVR中PA端口的反转电压是2.1V为高电平。即当外部输入电压高于2.1V时,PINAx读取的输 入逻辑电平值为“1”,当外部输入电压低于2.1V时,PINAx读取的输入逻辑电平值为“0”。
根据PINA寄存器放置的五个数据来判断小车的走向。
(三)本实验实现原理
当电路接通电源时,由小车主板的稳压电源电路稳定输出5 伏电压为小车下部的光探测 电路提供电源使二极管发光,当路面是白色时,二极管发出的光大部分被反射,光敏电阻就 接收到比较强的光照射,阻值变小,流过光敏电阻的电流变大。由于电阻的分压作用,使得 光敏电阻的输出电压较小,约为1.5V 左右。当路面是黑色时,由于黑色对光有吸收作用,使得二极管发出的光大部分被吸收,只有小部分被反射,光敏电阻接收到的光照就比较小,阻值变大,流过光敏电阻的电流变小,光敏电阻的输出电压变大,约为2.5V 左右。共有五个 光敏电阻也就是有五个数据输出。这五个信号通过数据线与单片机的PA 口相连,最左边的
电阻连接PA 口的最低位PA0,依次类推,一直连到PA4 口。
【实验步骤】
(1)连接好电路,把导线,下载线连接好,打开电源
(2)进入ICCAVR 编译环境,编写并调试程序直至没有错误,编译环境简介请参见
附录一
(3)下载,烧录进单片机,看实验结果(4)反复修改调试程序,逐渐增强其功能(5)写好实验报告,实验心得体会
【实验电路】 小车的硬件连接图
小车轮子的驱动详见实验一
【程序示例】
由于在实验中黑线的宽度不同,寻迹中所用到的光敏电阻的部位也不同。下面程序的
例子是黑线的宽度只能覆盖一个光敏电阻时对小车的驱动程序
#include
#include
unsigned char t;//******************系统自动生成的初始化程序**********************
void port_init(void)
{
PORTA = 0x00;DDRA = 0x00;PORTB = 0x00;DDRB = 0x00;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0xFF;PORTE = 0x00;DDRE = 0x04;
} //call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI();//disable all interrupts
port_init();MCUCR = 0x00;EMCUCR = 0x00;GICR = 0x00;TIMSK = 0x00;
SEI();//re-enable interrupts //all peripherals are now initialized
} //****************小车前进的子程序*********************
void runforth(void)
{
PORTE=0x04;PORTD=0x70;
} //*****************小车左转的子程序*********************
void zuozhuan(void)
{
PORTE=0x00;PORTD=0X70;
} //****************小车右转的子程序*********************
void youzhuan(void)
{
PORTE=0x04;PORTD=0x50;
} //***************小车停止不动的子程序****************
void stop(void)
{
PORTE=0x00;PORTD=0x00;
} //****************主程序***************************
void main(void)
{ while(1)//设置一个死循环,不断读取PA口的输入逻辑电平
{
init_devices();//调用初始化函数
t=PINA&0x1f;//屏蔽掉PA口的高三位数据位
if(t==0x00){stop();} else { switch(t)
{ case 0x01:zuozhuan();break;case 0x07:zuozhuan();break;case 0x02:zuozhuan();break;case 0x03:zuozhuan();break;case 0x04:runforth();break;case 0x0e:runforth();break;case 0x06:zuozhuan();break;case 0x08:youzhuan();break;case 0x10:youzhuan();break;case 0x0c:youzhuan();break;case 0x18:youzhuan();break;case 0x1c:youzhuan();break;
本文的研究背景针对小车在白色赛道沿着黑色引导线快速行驶。系统通过光电传感器采集路面信息, 测量当前位置与目标位置之间的误差, 通过PID环路控制, 达到小车按照预定位置行驶的功能。
1 智能车系统硬件设计
智能车系统从传感器接收、单片机判断到执行机构执行的整个过程, 如图1所示。系统主要包括:MCU主控模块、光电传感器模块、速度检测模块、舵机控制模块及电机驱动模块。MCU是系统的核心部分, 负责接收光电传感器信号、小车速度等反馈信息, 并对这些信息进行处理, 执行PID控制算法对舵机和驱动电机进行控制;路径识别模块由A/D转换模块、相应电路以及光电传感器组成, 其功能是获取前方路况的信息。
1.1 光电传感器模块
路径检测电路由红外发射管和红外接收管组成。红外发射管用场效应管IRF120驱动, 由MCU控制场效应管的通断。场效应管导通时, 电源加在红外发射管上, 发射管发射红外线;场效应管截至时, 发射管停止发射红外线。
通过红外接收管和电阻串联, 组成分压电路来测量路面信息, 电路如图2所示。光电管的布局采用“一”字等间距式排列, 传感器前面加有弹性的塑性的保护条, 保护光电管, 以及调试过程中, 防止智能车跑出轨道后与其他物体发生碰撞损坏, 重要的是可以减少太阳光照对传感器的影响。
红外传感器的原理是:路径轨迹由黑线指示, 落在黑线区域内的光电二极管接收到的反射光线强度与白色区域的不同。在白色区域内, 光电接收管导通, OUT为低电平。在黑色区域内, 光电接收管截止, OUT为高电平。根据检测到的高低电平可以判断行小车的位置偏差量。为了增加判断时间, 采用脉冲发射红外线的方法, 以提高发射管的电流, 让发射管照射更远的距离。
1.2 车速检测模块
采用霍尔传感器作为速度传感器。在后轮输出齿轮轴上附近固定一个霍尔传感器633, 如图3所示。633有3个引脚, 其中2个电源和地, 第3个是输出信号。只要通过一个上拉电阻接至5V电压, 就可以形成开关脉冲信号, 然后通过对应的算式可以将脉冲信号转化为速度信号。
1.3 舵机控制模块
舵机是一种位置伺服驱动器, 采用PWM控制方式。为提高舵机控制精度, 本系统采用单片机的PWM0、PWM1两路8位PWM通道组成一路16位的PWM。如果只使用单个PWM通道, 精度只有1/255, 舵机的转向角细分精度不能满足转向需要。将两个8位的PWM通道合并为16位, 提供的精度就可以达到1/65536, 大大提高了控制精度。通过测量目标位置与实际位置误差, 并执行PID控制算法得到舵机转向控制量, 实现小车位置的控制。
PID控制中, 积分环节消除稳态误差, 但会使系统稳定性下降, 动态响应变慢。智能车控制器由于对动态特性要求较高, 因此在实际设计系统的时候, 可以适当地减小积分环节的作用, 增大比例、微分环节的作用, 控制流程如图4所示。
舵机控制量公式:
yk=22yk-1+5xk-4xk-1 (1)
其中:xk为第k次偏差, xk-1为第k-1次的偏差, yk为第k次输出, yk-1为第k-1次输出。
1.4 电机驱动模块
电机驱动芯片采用MC33886, 单片MC33886在工作时过载较严重, 为了减小温升过高, 采用2片并联驱动方式, 如图5所示。
2 智能车的软件设计
智能车的控制是根据路径识别和车速检测所获得的当前路径和车速信息, 控制舵机和驱动电机动作, 从而调整智能车的行驶方向和速度, 程序流程如图6所示。
3 结论
本文提出了一自主寻迹的智能车控制系统。以单片机做主控制器, 直流电机作执行元件, 完成了智能车的硬件及软件设计。实验结果表明该智能车能平稳地按照任意给定的路径引导线行驶, 具有控制响应速度快、稳定性好, 并具有较强的抗干扰能力。
参考文献
[1]卓晴, 黄开胜, 邵贝贝.学做智能车-挑战“飞思卡尔杯”[M].北京:北京航空航天大学出版社, 2007.
[2]杨明, 程磊, 黄卫华, 等.基于光电寻迹的智能车舵机控制[J].光电技术应用, 2007.
[3]高月华.基于红外光电传感器的智能车自动寻迹系统设计[J].半导体光电, 2009.
【智能小车的自动寻迹实验】推荐阅读:
智能寻迹小车实习报告09-20
小车班制度05-29
无碳小车设计报告07-04
小车租赁合同版09-19
人工智能实验系统09-22
小车班班长工作总结11-30
小车驾驶员岗位责任制06-14
幼儿园大班体育教案:推小车09-12
三年级科学上册玩小车第二课时教案07-24
智能城市论文国外智能城市建设的启发论文06-05