当前位置:首页 > 西北农林科技大学智能小车实习总结(完整版) - 图文
物体。测速模块的槽型不要有障碍物,模块接上电源后,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
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; 其他三种运动状态即可实现其他三种运
共分享92篇相关文档