Arduino寻线小车Word格式文档下载.docx
- 文档编号:7203267
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:10
- 大小:240.13KB
Arduino寻线小车Word格式文档下载.docx
《Arduino寻线小车Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Arduino寻线小车Word格式文档下载.docx(10页珍藏版)》请在冰点文库上搜索。
flashprocessingMax/MSPVVVV或其他互动软件…
Arduino是最经典的开源硬件项目,诞生于意大利的一间设计学校。
2005年冬天,MassimoBanzi跟DavidCuartielles设计自己的电路板,并引入了Banzi的学生DavidMellis为电路板设计编程语言。
这块电路板被命名为Arduino。
下图是Arduino2009的电路图:
Arduino控制器的特色是:
1、开放源代码的电路图设计,程序开发接口免费下载,也可依需求自己修改;
2、可以采用USB接口供电,也可以外部供电,双向选择;
3、Arduino支持ISP在线烧写,可以将新的“bootloader”固件烧入ATmega168或ATmega328芯片。
有了bootloader之后,可以通过USB更新程序;
4、可依据官方提供的Eagel格式PCB和SCH电路图,简化Arduino模组,完成独立运作的微处理控制。
可简单地与传感器,各式各样的电子元件连接(红外线、超音波、热敏电阻、光敏电阻、伺服舵机…等);
5、支持多种互动程序,如:
Flash、Max/Msp、VVVV、C、Processing....等;
6、应用方面,利用Arduino,突破以往只能使用鼠标、键盘,CCD等输入的装置的互动内容,可以更简单地达成单人或多人游戏互动。
2、山地探测机器人结构
根据传感器与单片机连接,加上电机驱动和电源模块等构成山地探测机器人,下图是山地探测机器人各个部分结构图:
寻址模块是山地探测机器人的关键技术,具体功能为:
按照一定的路线行走。
在行进的过程当中地面上有纵横交错的白线做引导,并通过白线来判断是否达到指定位置。
如图1所示。
图一:
山地探测机器人寻线路径和关键电路红外光电检测电路
寻线方法如下:
机器人必须对自身进行准确定位。
场上纵横交错的白线就是用于辅助机器人定位的,在行进的过程当中,如果偏离了预定的轨道,则无法到达指定的位置,这就需要随时检测路面信息,并反馈给单片机,由单片机发出指令来矫正偏差;
机器人不可能以直线行走,如果检测到转向信号,单片机就向电机发出指令,进行转向。
这里的关键部件就是检测设备,我们采用的红外光电检测管为单光束反射式光电传感器ST188,结构如图1所示。
图1中比较器LM311的同相输入端在没有检测到反射信号(不在白线区)时为高电平,而反相输入端提供电压(一般1.5V左右)。
当在白线区的时候,反射的红外线导致光敏三极管导通,同相端输入低电平,比较的结果是输出为低电平,发光二极管发亮;
当不在白线区的时候,光敏三极管截止,同相端输入底电平,比较的结果为输出为高电平,发光二极管灭。
检测器采用了10个传感器构成的检测阵列,如图2所示:
图二光电传感器结构
由于机器人按照一定的路线行走,可将其分为若干个步骤,将每个步骤对应与任务数据组中的数据,当要修改路径的时候只需要修改数组的数据。
将机器人的基本动作如行走、后退、转弯、加速、减速等做成函数供调用即可。
为了使机器人平稳的行走、准确的到达指定位置进行电机调速和寻线。
在整个软件系统中,以执行任务数组为主程序,电机调速以及寻线以中断方式进行。
每隔一定的采样时间对传感器进行采样处理。
3、山地探测机器人主函数
山地探测机器人是是由Atmega328单片机作为其主芯片,在程序编程方面有类似于C、C++和Java编程语言,叫做Arduino语言。
由于Arduino被列为开源硬件项目,Arduino是不需要付版税,甚至不用取得Arduino团队的许可。
Arduino电路板也一样的自由和开放。
下图是单片机程序示意图:
//山地探测机器人主函数:
int
IN1=8;
IN2=9;
ENA=10;
ENB=11;
IN3=12;
IN4=13;
red0=A0;
red1=A1;
red2=A2;
red3=A3;
char
PreviousStatus=0;
//定义一个变量PreviousStatus用来记录传感器之前的状态
ZeroValue=0;
//电机速度为0
SpeedValue1=50;
//低速
SpeedValue2=120;
//中速
SpeedValue3=150;
//高速
void
setup()
{
pinMode(IN1,OUTPUT);
//设置D8为输出端口
pinMode(IN2,OUTPUT);
//设置D9为输出端口
pinMode(IN3,OUTPUT);
//设置D12为输出端口
pinMode(IN4,OUTPUT);
//设置D13为输出端口
pinMode(red0,INPUT);
//设置A0为输入端口
pinMode(red1,INPUT);
//设置A1为输入端口
pinMode(red2,INPUT);
//设置A2为输入端口
pinMode(red3,INPUT);
//设置A3为输入端口
}
read()
//读取四个巡线传感器的状态
ReadDirectionStatus=
0;
ReadDirectionStatus=ReadDirectionStatus|digitalRead(red0);
//读取A0引脚的值,并将读取的值放在变量ReadDirectionStatus的第四位
ReadDirectionStatus=ReadDirectionStatus<
<
1;
ReadDirectionStatus=ReadDirectionStatus|digitalRead(red1);
//读取A1引脚的值,并将读取的值放在变量ReadDirectionStatus的第三位
ReadDirectionStatus=ReadDirectionStatus|digitalRead(red2);
//读取A2引脚的值,并将读取的值放在变量ReadDirectionStatus的第二位
ReadDirectionStatus=ReadDirectionStatus|digitalRead(red3);
//读取A3引脚的值,并将读取的值放在变量ReadDirectionStatus的最低位
return
(ReadDirectionStatus);
forward(int
value1,int
value2)
//小车向前行驶
//当IN1为高电平,IN2为低电平时,小车左边的电机正转
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
//当IN3为高电平,IN4为低电平时,小车右边的电机正转
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENA,value1);
//使能ENA,驱动左边的电机
analogWrite(ENB,value2);
//使能ENB,驱动右边的电机
turnleft(int
//小车向左转
//当IN1为低电平,IN2为高电平时,小车左边的电机反转
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
//使能ENA,驱动左边的电机
turnright(int
//小车向右转
//当IN3为低电平,IN4为高电平时,小车右边的电机反转
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
backward(int
//小车向后退
stop()
//使小车停止行驶
delay(10);
DirectionRun(char
DirectionStatus)//根据读取的传感器的状态来改变小车行驶的方向
left=
right=
ZeroSpeed=
//读取左边两个传感器的状态
left=(DirectionStatus>
>
2)&
0x03;
//读取右边两个传感器的状态
right=DirectionStatus&
//如果读取的左边和右边传感器的值都为高电平,则小车以中速向前行驶
if((left==
0x03)&
&
(right==0x03))
forward(SpeedValue2,SpeedValue2);
//如果左边两个传感器的值不都为高电平,则说明左边的传感器检测到黑线,小车左转
else
if((left<
0x03)&
//由于惯性小车在转弯的时候可能会停止,所以小车需要后退一点点,才能保证小车一直
//沿着黑线行驶
if(left==
0x01)
backward(SpeedValue3,ZeroSpeed);
delay(100);
}
else
turnleft(SpeedValue3,SpeedValue3);
//如果右边两个传感器的值不都为高电平,则说明右边的传感器检测到黑线,小车右转
(right<
0x03))
if(right==
0x02)
backward(ZeroSpeed,SpeedValue3);
else
turnright(SpeedValue3,SpeedValue3);
//如果读取的四个传感器的值都为低,则使小车停止行驶
stop();
loop()
//读取传感器当前的状态
NowStatus=
char(read());
delay
(1);
//如果传感器上一个状态和当前的状态不一致,就需要根据具体的情况改变小车行驶的方向
if(PreviousStatus!
=NowStatus)
PreviousStatus=NowStatus;
DirectionRun(PreviousStatus);
4.拓展功能介绍
Arduino控制器内带Bootloader程序,是系统上电后运行的第一段代码,就好比PC机BIOS中的程序,启动就进行自检,配置端口等等,当然单片机就是靠烧写熔丝位来设定上电从boot区启动的,使用这个程序就可以直接把从串口发来的程序存放到flash区中。
在使用Arduino编译环境下载程序时,先使单片机复位,启动Bootloader程序引导串口发过来的程序顺利写入flash区中,flash可以重复烧写,因此更新软件就变得方便。
编译软件Arduino0018是专门针对Arduino开发的一款与PC端进行程序考录的软件,通过在Arduino0018上编程可执行程序,考录到Arduino控制板中,从而使Arduino控制板执行各种命令。
1.DigitalI/O数字输入/输出端共0~13;
2.AnalogI/O模拟输入/输出端共0~5;
3.支持USB接口协议及供电(不需外接电源);
4.支持ISP下载功能;
5.支持单片机TX/RX端子;
6.支持USBTX/RX端子;
7.支持AREF端子;
8.支持六組PWM端子(Pin11,Pin10,Pin9,Pin6,Pin5,Pin3);
9.输入电压:
接上USB时无须外部供电或外部5V~9VDC输入;
10.输出电压:
5VDC输出和3.3VDC输出和外部电源输入;
11.采用AtmelAtmega168V-10PI单片机;
12.DFRduino。
Arduino不但有14个数字接口和6个模拟接口外,还有1个更为常用的串口接口。
在实际应用中串口以只需要少量的几根线就能和其他串口设备通讯的优势被广应用。
串行接口按标准被分为RS-232、RS-422、RS-485。
RS-232是在1962年发布的,也是目前PC机与通信工业中应用最广泛的一种串行接口,RS-232采取不平衡传输方式,即所谓单端通讯。
典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V电平。
我们的单片机使用的是TTL电平的串行协议,因此单片机与pc通讯时需要进行RS-232电平和TTL电平的转换,最常用的电平转换芯片是MAX232,单片机与单片机通讯时则可以直接连接。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Arduino 小车
![提示](https://static.bingdoc.com/images/bang_tan.gif)