北京工业大学电子信息工程课程设计结题报告(含有代码)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五、开发平台 Arduino 对各个部分的控制 第一阶段预期可以实现控制小车前进,停止 第二阶段在安装舵机后,实现控制舵机转动 第三阶段完成超声模块的调试
六、系统整体调试 基础功能是通过车体上的红外接收头进行普通的循迹,最后课题目标是在舵机控制超声模块转动的前提
下,小车可以扫描周围障碍搜索前进。
一、主要部分设计 (1)、电机驱动部分 电机驱动原理图如下所示
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍 物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见, 超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中 L 为测量的距离长度;C 为超声波在空气中的传播速度;T 为测量距离传播的时间差 (T 为发射到接收时间数值的一半)。
真值表为 输入
输出
电机转动方
向
A1
EN1
A2
EN2
Y1
Y2
*****
1
1
0
1
1
0
正转
0
1
1
1
0
1
反转
1
1
1
1
1
1
停
0
1
0
1
0
0
停
X
0
X
0
Z
Z
停
注:EN1,EN2 出现低电平无论 A1,A2 是什么电平都是高阻 (2)红外循迹模块的设计 红外循迹需要分成两部分设计,一部分是红外检测,一部分是发送接收。 首先应由红外发送接收部分把是否检测到前方有物体转换成模拟信号,再送给红外检测部分判断出是否前方 有物体 红外发送接收部分原理图:
const int SensorRight = 3; const int SensorLeft = 4; const int HongLeft=5; const int HongRight=6;
//右循迹红外传感器(P3.2 OUT1) //左循迹红外传感器(P3.3 OUT2)
int SL; int SR; int SL1; int SR1;
二、电路搭接 由于是网上购买的套件,采用的是面包板杜邦线插接,所以不需要焊接。基本接线结果如下
面包板上是一个按键开关和蜂鸣器,按键是放置程序烧录完小车自主运动,蜂鸣器是用于检测程序是不是已 经启动,比较简单不再赘述其设计。 三、程序设计 附录中有完全的程序代码。编译环境使用的是基于 JAVA 开发环境的 IDE,语言逻辑和 C 语言基本一样。程序 设计流程图因为开始设计的太简易所以我重新设计了一下。 流程解释:因为自己加了一个按键启动,所以首先要按键扫描判断是否有按键按下,启动后会听到蜂鸣器的 启动音。之后小车自主前进,首先第一级避障是红外避障。之所以把红外避障选为第一级是因为红外避障反 应速度快,收到信号以后直接就能反应。而超声需要获取左右两边的距离然后比较。但是红外避障死角比较 多,而且由于小车有一定的速度红外经常来不及反应,最重要的一点就是红外避障受外界光线,地面的反光 灯影响准确性不可靠。红外避障的下移级判断就是超声避障:
for(i=0;i<80;i++)//输出一个频率的声音
{ digitalWrite(beep,HIGH);//发声音 delay(1);//延时 1ms digitalWrite(beep,LOW);//不发声音 delay(1);//延时 ms
} for(i=0;i<100;i++)//输出另一个频率的声音 {
int Left_motor_go=9; //左电机前进(IN2)
int Right_motor_go=10; // 右电机前进(IN3) int Right_motor_back=11; // 右电机后退(IN4)
int key=12;//定义按键 A2 接口 int beep=13;//定义蜂鸣器 A3 接口
北京工业大学
专业课程设计 研发课题结题报告
院、系(所) 电子信息与控制工程学院
专 业 名 称 电子信息工程
姓名(学号)
吕祎 12021027
同组参与者
周鸿宇 12021031
指导教师
徐小平
北京工业大学通信电路实验室 二 0 一五年九月
论文题目 基于超声波测距技术的智能避障小车设计
课题的目的,国内外研究现状和发展趋势:
刚才上面已经说过超声波避障其实就是测量物体到小车的距离。人为的给它一个距离值,小于这个值就 回避。至于如何回避,像哪里回避就需要舵机带着它转动,分别测量左、右、中三个距离数值然后作比较, 车头转向距离较大的一侧。如果左右距离都小于规定值,则后退。
实验结果:实验结果小车完整达成目标。(见展示视频)
附完整程序代码: // 智能小车超声波避障实验 //============================================================================= //#include <Servo.h>
//左循迹红外传感器状态 //右循迹红外传感器状态
int servopin=2;//设置舵机驱动脚到数字口 2 int myangle;//定义角度变量 int pulsewidth;//定义脉宽变量 int val;
void setup() {
Serial.begin(9600); // 初始化串口 //初始化电机驱动 IO 为输出方式 pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM) pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM) pinMode(key,INPUT);//定义按键接口为输入接口 pinMode(beep,OUTPUT); pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入 pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入 pinMode(HongLeft,INPUT); pinMode(HongRight,INPUT); //初始化超声波引脚 pinMode(Echo, INPUT); // 定义超声波输入脚 pinMode(Trig, OUTPUT); // 定义超声波输出脚 pinMode(servopin,OUTPUT);//设定舵机接口为输出接口 } //=======================智能小车的基本动作========================= void start() { int i;
初步设计的原理图如下:
初步设计的系统流程图如下:
三、开发平台的调试,基础循迹模块可以对车前目标作出反应 开发平台使用 Arduino IDE。循迹模块是开发平台订购好的,测试即可。但是需要调试循迹距离
四、完成系统的硬件电路连接图的设计和电路实物的连接 硬件包括车体组装,AVR 单片机的安装,两个减速电机的安装,舵机安装
本课题的目的是研究超声波测距技术的应用,研究该技术的原理,应用范围,利用超 声波测距时的优缺点。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离ห้องสมุดไป่ตู้远,因而 超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波 检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实 用的要求,因此在移动机器人研制上也得到了广泛的应用。
其输出关闭,在高阻抗状态。【PS:1,2EN 为 1 和 2 的使能端(高电平使能);3,4EN 同理】用适当的数据 输入端,每对驱动程序的形式一个完整的 H 桥可逆驱动器适用于电磁阀或电机应用。 L293,外部输出为高速钳位二极管,应使用电感的瞬态抑制。VCC1 和 VCC2 分开,提供逻辑输入,以尽量 减少设备功耗。L293 和 L293D 的工作温度是从 0°C 至 70°C 由此设计的电机驱动电路如下:
实验内容
L293D 根据网上查到的芯片手册有如下的功能
L293 和 L293D 四倍高电流 H 桥驱动程序。 L293 是提供双向驱动电流高达 1 A,电压 是从 4.5 V 至 36 V 的;L293D 提供双向驱动电流高达 600 毫安,电压是从 4.5 V 至 36 V 的。两个设备是专为 驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。 兼容所有的 TTL 输入。每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源。启用 1,2 EN 驱动器和 3,4 EN 驱动器。当使能输入为高电平时,相关联的驱动器被启用和他们的 输出处于活动状态,并在其输入端的同相。当使能输入为低,这些驱动器被禁用
图中的 RPR220 是反光型光电探测器:
其中发射器是一个红外二极管,接收器是一个硅平面光电三极管。内部电路图如下:
当得到上一个模块的电平信号后,需要到红外检测模块检测,原理图如下、
其中 LM324 芯片是一个电压比较器,由于比较简单,不再附加芯片资料。原理图中还应注意 OUT1、2、3、4 除了接到 LED 灯还接到了单片机的 8、9、10、11 数字管脚。 (3)超声波避障模块设计 超声波避障模块采用的是 HC-SR04 超声波传感器它的工作原理是:
研究现状:目前为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体 上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生 超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋 笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较 为常用的是压电式超声波发生器。
发展趋势:超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目 前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。
篇幅不够可加页
研究设计方案、预期结果: 一、选择合适的超声波发生模块,和其他硬件如舵机、电机等,开发平台采用 Arduino.超声波模块使用 HC-SRO4 二、设计系统原理图和流程图
digitalWrite(beep,HIGH);//发声音 delay(2);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(2);//延时 2ms } for(i=0;i<100;i++)//输出另一个频率的声音 { digitalWrite(beep,HIGH);//发声音 delay(3);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(3);//延时 2ms }
int Echo = A1; // Echo 回声脚(P2.0) int Trig =A0; // Trig 触发脚(P2.1)
int Front_Distance = 0;// int Left_Distance = 0; int Right_Distance = 0;
int Left_motor_back=8; //左电机后退(IN1)
for(i=0;i<100;i++)//输出另一个频率的声音 {
digitalWrite(beep,HIGH);//发声音 delay(4);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(4);//延时 2ms } }
void run() // 前进 {
digitalWrite(Right_motor_go,HIGH); // 右电机前进 digitalWrite(Right_motor_back,LOW); analogWrite(Right_motor_go,100);//PWM 比例 0~255 调速,左右轮差异略增减 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,HIGH); // 左电机前进 digitalWrite(Left_motor_back,LOW); analogWrite(Left_motor_go,97);//PWM 比例 0~255 调速,左右轮差异略增减 analogWrite(Left_motor_back,0); //delay(time * 100); //执行时间,可以调整 }
六、系统整体调试 基础功能是通过车体上的红外接收头进行普通的循迹,最后课题目标是在舵机控制超声模块转动的前提
下,小车可以扫描周围障碍搜索前进。
一、主要部分设计 (1)、电机驱动部分 电机驱动原理图如下所示
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍 物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见, 超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中 L 为测量的距离长度;C 为超声波在空气中的传播速度;T 为测量距离传播的时间差 (T 为发射到接收时间数值的一半)。
真值表为 输入
输出
电机转动方
向
A1
EN1
A2
EN2
Y1
Y2
*****
1
1
0
1
1
0
正转
0
1
1
1
0
1
反转
1
1
1
1
1
1
停
0
1
0
1
0
0
停
X
0
X
0
Z
Z
停
注:EN1,EN2 出现低电平无论 A1,A2 是什么电平都是高阻 (2)红外循迹模块的设计 红外循迹需要分成两部分设计,一部分是红外检测,一部分是发送接收。 首先应由红外发送接收部分把是否检测到前方有物体转换成模拟信号,再送给红外检测部分判断出是否前方 有物体 红外发送接收部分原理图:
const int SensorRight = 3; const int SensorLeft = 4; const int HongLeft=5; const int HongRight=6;
//右循迹红外传感器(P3.2 OUT1) //左循迹红外传感器(P3.3 OUT2)
int SL; int SR; int SL1; int SR1;
二、电路搭接 由于是网上购买的套件,采用的是面包板杜邦线插接,所以不需要焊接。基本接线结果如下
面包板上是一个按键开关和蜂鸣器,按键是放置程序烧录完小车自主运动,蜂鸣器是用于检测程序是不是已 经启动,比较简单不再赘述其设计。 三、程序设计 附录中有完全的程序代码。编译环境使用的是基于 JAVA 开发环境的 IDE,语言逻辑和 C 语言基本一样。程序 设计流程图因为开始设计的太简易所以我重新设计了一下。 流程解释:因为自己加了一个按键启动,所以首先要按键扫描判断是否有按键按下,启动后会听到蜂鸣器的 启动音。之后小车自主前进,首先第一级避障是红外避障。之所以把红外避障选为第一级是因为红外避障反 应速度快,收到信号以后直接就能反应。而超声需要获取左右两边的距离然后比较。但是红外避障死角比较 多,而且由于小车有一定的速度红外经常来不及反应,最重要的一点就是红外避障受外界光线,地面的反光 灯影响准确性不可靠。红外避障的下移级判断就是超声避障:
for(i=0;i<80;i++)//输出一个频率的声音
{ digitalWrite(beep,HIGH);//发声音 delay(1);//延时 1ms digitalWrite(beep,LOW);//不发声音 delay(1);//延时 ms
} for(i=0;i<100;i++)//输出另一个频率的声音 {
int Left_motor_go=9; //左电机前进(IN2)
int Right_motor_go=10; // 右电机前进(IN3) int Right_motor_back=11; // 右电机后退(IN4)
int key=12;//定义按键 A2 接口 int beep=13;//定义蜂鸣器 A3 接口
北京工业大学
专业课程设计 研发课题结题报告
院、系(所) 电子信息与控制工程学院
专 业 名 称 电子信息工程
姓名(学号)
吕祎 12021027
同组参与者
周鸿宇 12021031
指导教师
徐小平
北京工业大学通信电路实验室 二 0 一五年九月
论文题目 基于超声波测距技术的智能避障小车设计
课题的目的,国内外研究现状和发展趋势:
刚才上面已经说过超声波避障其实就是测量物体到小车的距离。人为的给它一个距离值,小于这个值就 回避。至于如何回避,像哪里回避就需要舵机带着它转动,分别测量左、右、中三个距离数值然后作比较, 车头转向距离较大的一侧。如果左右距离都小于规定值,则后退。
实验结果:实验结果小车完整达成目标。(见展示视频)
附完整程序代码: // 智能小车超声波避障实验 //============================================================================= //#include <Servo.h>
//左循迹红外传感器状态 //右循迹红外传感器状态
int servopin=2;//设置舵机驱动脚到数字口 2 int myangle;//定义角度变量 int pulsewidth;//定义脉宽变量 int val;
void setup() {
Serial.begin(9600); // 初始化串口 //初始化电机驱动 IO 为输出方式 pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM) pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM) pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM) pinMode(key,INPUT);//定义按键接口为输入接口 pinMode(beep,OUTPUT); pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入 pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入 pinMode(HongLeft,INPUT); pinMode(HongRight,INPUT); //初始化超声波引脚 pinMode(Echo, INPUT); // 定义超声波输入脚 pinMode(Trig, OUTPUT); // 定义超声波输出脚 pinMode(servopin,OUTPUT);//设定舵机接口为输出接口 } //=======================智能小车的基本动作========================= void start() { int i;
初步设计的原理图如下:
初步设计的系统流程图如下:
三、开发平台的调试,基础循迹模块可以对车前目标作出反应 开发平台使用 Arduino IDE。循迹模块是开发平台订购好的,测试即可。但是需要调试循迹距离
四、完成系统的硬件电路连接图的设计和电路实物的连接 硬件包括车体组装,AVR 单片机的安装,两个减速电机的安装,舵机安装
本课题的目的是研究超声波测距技术的应用,研究该技术的原理,应用范围,利用超 声波测距时的优缺点。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离ห้องสมุดไป่ตู้远,因而 超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波 检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实 用的要求,因此在移动机器人研制上也得到了广泛的应用。
其输出关闭,在高阻抗状态。【PS:1,2EN 为 1 和 2 的使能端(高电平使能);3,4EN 同理】用适当的数据 输入端,每对驱动程序的形式一个完整的 H 桥可逆驱动器适用于电磁阀或电机应用。 L293,外部输出为高速钳位二极管,应使用电感的瞬态抑制。VCC1 和 VCC2 分开,提供逻辑输入,以尽量 减少设备功耗。L293 和 L293D 的工作温度是从 0°C 至 70°C 由此设计的电机驱动电路如下:
实验内容
L293D 根据网上查到的芯片手册有如下的功能
L293 和 L293D 四倍高电流 H 桥驱动程序。 L293 是提供双向驱动电流高达 1 A,电压 是从 4.5 V 至 36 V 的;L293D 提供双向驱动电流高达 600 毫安,电压是从 4.5 V 至 36 V 的。两个设备是专为 驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。 兼容所有的 TTL 输入。每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源。启用 1,2 EN 驱动器和 3,4 EN 驱动器。当使能输入为高电平时,相关联的驱动器被启用和他们的 输出处于活动状态,并在其输入端的同相。当使能输入为低,这些驱动器被禁用
图中的 RPR220 是反光型光电探测器:
其中发射器是一个红外二极管,接收器是一个硅平面光电三极管。内部电路图如下:
当得到上一个模块的电平信号后,需要到红外检测模块检测,原理图如下、
其中 LM324 芯片是一个电压比较器,由于比较简单,不再附加芯片资料。原理图中还应注意 OUT1、2、3、4 除了接到 LED 灯还接到了单片机的 8、9、10、11 数字管脚。 (3)超声波避障模块设计 超声波避障模块采用的是 HC-SR04 超声波传感器它的工作原理是:
研究现状:目前为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体 上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生 超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋 笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较 为常用的是压电式超声波发生器。
发展趋势:超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目 前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。
篇幅不够可加页
研究设计方案、预期结果: 一、选择合适的超声波发生模块,和其他硬件如舵机、电机等,开发平台采用 Arduino.超声波模块使用 HC-SRO4 二、设计系统原理图和流程图
digitalWrite(beep,HIGH);//发声音 delay(2);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(2);//延时 2ms } for(i=0;i<100;i++)//输出另一个频率的声音 { digitalWrite(beep,HIGH);//发声音 delay(3);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(3);//延时 2ms }
int Echo = A1; // Echo 回声脚(P2.0) int Trig =A0; // Trig 触发脚(P2.1)
int Front_Distance = 0;// int Left_Distance = 0; int Right_Distance = 0;
int Left_motor_back=8; //左电机后退(IN1)
for(i=0;i<100;i++)//输出另一个频率的声音 {
digitalWrite(beep,HIGH);//发声音 delay(4);//延时 2ms digitalWrite(beep,LOW);//不发声音 delay(4);//延时 2ms } }
void run() // 前进 {
digitalWrite(Right_motor_go,HIGH); // 右电机前进 digitalWrite(Right_motor_back,LOW); analogWrite(Right_motor_go,100);//PWM 比例 0~255 调速,左右轮差异略增减 analogWrite(Right_motor_back,0); digitalWrite(Left_motor_go,HIGH); // 左电机前进 digitalWrite(Left_motor_back,LOW); analogWrite(Left_motor_go,97);//PWM 比例 0~255 调速,左右轮差异略增减 analogWrite(Left_motor_back,0); //delay(time * 100); //执行时间,可以调整 }