西北农林科技大学智能小车实习总结(完整版) - 图文

发布时间 : 星期三 文章西北农林科技大学智能小车实习总结(完整版) - 图文更新完毕开始阅读

物体。测速模块的槽型不要有障碍物,模块接上电源后,OUT输出端电压接近电源电压,D1指示灯不亮,当用大于2MM的不透明物体通过槽型光电(码盘的隔断),OUT输出端电压为高电平,D1指示不亮(表示已经检测到物体)。当槽型没有遮挡有透明物体通过(码盘的删格),OUT输出端电压为低电平,D1指示亮(表示无物体)。

砝码盘上有均匀分布的20删格,把360度平均分为18度/格的20小格。单片机控制测速模块发出一定频率的光,当删格的空档有光线通过时,接收装置检测到固定频率的光线,单片机检测到的输出信号为0,当删格的边框遮挡光线时,接收装置检测不到光线,单片机检测到的输出信号为1,单片机通过对测速信号高电平计数,从而计算出码盘速度与行走距离。

单片机的定时器中断,不断产生脉冲,根据一个脉冲的高电平信号,可知在一定的脉冲频率f下,获取1s内轮子转过的栅格数n,由于轮子直径d 已知,则1s内轮子走过的距离是S=ndfπ/20,则轮子的速度可用数码管显示出来。

2.2.3直流电机小车四路寻迹控制原理

发射管发射出红外线,如果探头不在黑线上,则反射回来的光被接收端接收,接收端导通,则10k电阻R2的输出端OUT接地,电压为0;发射管发射出红外线,如果探头在黑线上,则反射光被黑带吸收,接收端没有收到信号,不导通,则10K电阻R2的输出端OUT电压为Vcc。寻迹流程图如图2-2所示。

未检测到黑线 左侧检测到黑右侧检测到黑直走左转 右转

图2-2 直流小车四路寻迹流程图

2.2.4直流电机小车避障控制原理

避障功能是小车在进行的过程中自动躲避障碍并前进的功能,实现避障功能的传感器主要是红外传感器。

红外反射式传感器是集发射与接收于一体的光电传感器,具有探测距离远(最远可达到80cm)、受可见光干扰小、体积小、功耗低、应用方便等特点。而且它检测障碍物的距离,可以根据实际要求,通过尾部的电位器旋钮,进行调节,

- 14 -

非常适用于小车避障。

三个红外传感器,分别放置在车身的正前方、左前方和右前方,水平互成60°角。当三个中的一个或多个(障碍物较大)接收部分的传感器,就能根据反射回来的红外线进行自动调整,从而使小车的运行轨迹达到自动避障的目的。 以一个红外开关传感器为例,光电开关信号输出接口连接单片机的P0.0口,当检测到障碍物时,光电开关输出低电平,信号为0,没有障碍物时,光电开关输出高电平,信号为1,小车的运行逻辑参考表2-2,得到小车基本运行逻辑如图2-3。

表2-2 单个红外传感器避障的基本运行逻辑 P0.0信号 检测状态 1 0 有障碍 无障碍 左电机控制 P1.3 0 1 1 0 P1.2 1 0 1 1

右电机控制 P1.1 0 1 0 1 P1.0 1 0 1 小车运行状态 前进 后退 左转弯 右转弯 无障碍物 左侧检测到障碍物 右侧检测到障碍物 右侧检测到障碍物 直走 右转 左转 后退

图2-3 小车避障流程图

2.2.5直流电机小车红外遥控控制原理

在主控板上插上红外一体化接收头1838,规定小车的前进、后退、左转、右转控制键,分别为遥控器的HT6221按键的前、后、左、右按键。当按键按下之后,遥控器的红外发光二极管,就会发射调制的指令信号,与主控芯片连接的红外一体接收头,接收到该信号后,转为相应的电信号,再送后置放大器,单片机就会收到中断请求,然后进行解码。接着,利用switch-case语句进行控制,从而使小车进行不同的运动。流程图如图2-4所示。

- 15 -

按左键 按右键 前进键 后退键 暂停键 左转 右转 前进 后退 停止

图2-4小车遥控基本流程图

2.3 直流电机小车具体完成任务与改进

2.3.1直流电机小车的硬件组装任务实现 ①安装小车底盘,引出电机线

②安装并固定四个寻迹探头,安装避障探头

③用铜柱固定四路红外寻迹模块,并把线引出,固定好四路直流电机驱动 ④把上层板往下固定,并把线穿过底板与探头相连,然后连接电机线连接好的实物图如图2-5所示

- 16 -

图2-5 直流电机小车实物图

2.3.2直流电机小车基本运动任务实现 ①直流电机小车基本运动任务实现程序: #include #define Left_1_led P3_4 #define Left_2_led P3_5 #define Right_1_led P3_6 #define Right_2_led P3_7 #define #define #define #define #define #define //延时

void delay(unsigned int k) { }

//全速前进 void run(void) { }

//全速后退

void backrun(void)

{ } //左转

void leftrun(void) { } //右转

void rightrun(void) { } //停转

void stoprun(void) {

Left_moto_Stop; Right_moto_Stop; }

/*--主函数--*/ void main(void) {

动状态

- 17 -

Left_moto_back Right_moto_back

Left_moto_go Left_moto_back Left_moto_Stop Right_moto_go Right_moto_back Right_moto_Stop {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} {P1_0=0,P1_1=0,P1_2=0,P1_3=1;} {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}

Left_moto_back; Right_moto_go;

Left_moto_go; Right_moto_back;

unsigned int x,y; for(x=0;x

for(y=0;y<125;y++);

delay(100); run(); while(1) {

run();//将run()改成

Left_moto_go; Right_moto_go;

其他三种运动状态即可实现其他三种运

联系合同范文客服:xxxxx#qq.com(#替换为@)