Arduino智能小车实验报告解读.docx

上传人:b****2 文档编号:17613920 上传时间:2023-07-27 格式:DOCX 页数:23 大小:1,015.52KB
下载 相关 举报
Arduino智能小车实验报告解读.docx_第1页
第1页 / 共23页
Arduino智能小车实验报告解读.docx_第2页
第2页 / 共23页
Arduino智能小车实验报告解读.docx_第3页
第3页 / 共23页
Arduino智能小车实验报告解读.docx_第4页
第4页 / 共23页
Arduino智能小车实验报告解读.docx_第5页
第5页 / 共23页
Arduino智能小车实验报告解读.docx_第6页
第6页 / 共23页
Arduino智能小车实验报告解读.docx_第7页
第7页 / 共23页
Arduino智能小车实验报告解读.docx_第8页
第8页 / 共23页
Arduino智能小车实验报告解读.docx_第9页
第9页 / 共23页
Arduino智能小车实验报告解读.docx_第10页
第10页 / 共23页
Arduino智能小车实验报告解读.docx_第11页
第11页 / 共23页
Arduino智能小车实验报告解读.docx_第12页
第12页 / 共23页
Arduino智能小车实验报告解读.docx_第13页
第13页 / 共23页
Arduino智能小车实验报告解读.docx_第14页
第14页 / 共23页
Arduino智能小车实验报告解读.docx_第15页
第15页 / 共23页
Arduino智能小车实验报告解读.docx_第16页
第16页 / 共23页
Arduino智能小车实验报告解读.docx_第17页
第17页 / 共23页
Arduino智能小车实验报告解读.docx_第18页
第18页 / 共23页
Arduino智能小车实验报告解读.docx_第19页
第19页 / 共23页
Arduino智能小车实验报告解读.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Arduino智能小车实验报告解读.docx

《Arduino智能小车实验报告解读.docx》由会员分享,可在线阅读,更多相关《Arduino智能小车实验报告解读.docx(23页珍藏版)》请在冰点文库上搜索。

Arduino智能小车实验报告解读.docx

Arduino智能小车实验报告解读

“蓝牙手柄避障小车”设计

设计者:

严梓桓(34%),汤楷宸(33%),梁德棋(33%)

1.项目背景

本作品为基于Arduino控制的智能小车。

智能小车在技术上和移动机器人有着密切相关的联系,有着关于自动控制、传感器技术、电子电路上的重要实践意义。

通过对基本功能进行不同方向,多种多样的扩展,可以为我们的生活提供各种各样的便利。

这类设备可以应用于复杂多样的工作环境,在民用和军用上都可以有各种各样颇有意义的用途。

一般来说,红外避障实现方便、技术要求相对简单、易于做到实时控制。

并且,一般的红外避障装置在测量精度方面能达到实用的要求,因此成为常用的避障方法。

利用红外传感器来实现小车的智能避障时,通过测量小车与障碍物的距离,实现小车多角度检测障碍物,从而加以判断转向、后退和前进,使小车能成功的躲避障碍物,并按照控制者的意愿前进。

受到现有的产品和技术的启发,我们小组制作简易的智能小车。

这款简易的智能小车,可以通过操作人的遥控进行操控,进行各种运动,当遇到障碍物时,可以灵活地进行自动避障。

而小车的舵机转向,更加的贴合我们的现实汽车的模型,对实现智能无人汽车的出现有一定的借鉴优势。

我们还计划为它加装通过Wi-Fi连接的摄像头模块,将拍到的图像数据传输到电脑上。

除此之外,我们还希望将来可以通过手机App来对小车进行操控,让小车使用更为方便,功能更加强大。

2.创意描述

这款简易的智能小车,可以通过操作手柄进行遥控操控,进行各种前进、后退、转弯、变速等运动。

切换模式后,当遇到障碍物时,它可以通过红外避障模块,探测到障碍物,灵活地进行自动避障。

创新点:

使用手柄操作,操纵方便,具有很大的娱乐性。

3.功能及总体设计

该作品主要可以分为两个部分:

小车的运动、转向部分和红外避障部分。

对于运动和转向部分,经由ArduinoUNO板,再用PM-R3多功能扩展板连接电机和舵机,实现小车运动。

操作时,通过蓝牙和遥控手柄连接主板,达到操纵的目的;红外避障部分,分布在小车各侧的多个红外小板通过红外传感器模块感应到障碍物,进而控制舵机的转动,避开障碍物。

1)功能介绍

这款简易的智能小车,通过操作手柄进行遥控操控,进行各种前进、后退、转弯、变速等运动。

切换模式后,当遇到障碍物时,它可以通过红外避障模块,探测到障碍物,灵活地进行自动避障。

2)总体设计

该小车主要由运动和转向部分和红外避障部分两个部分组成。

(1)整体框架图

项目整体框架图如图1所示。

图1整体框架图

PM-R3多功能扩展板连接到ArduinoUNO板上,通过PM-R3多功能扩展板连接并驱动步进电机和转向舵机;另外,PM-R3多功能扩展板连接了红外避障模块,四个红外避障小板接收到的障碍物的信号通过它处理,控制电机的工作和舵机的转向。

(2)系统流程图

系统流程图(遥控模式略)如图2所示。

图2系统流程图

避障模式下,在小车运动过程中,如果遇到障碍物,被红外小板探测到后,让舵机转动,从而达到转向的目的;如果前方各个方向都有障碍物,小车则后退。

(3)总电路图

系统总电路图如图3所示

图三系统总电路图

ArduinoUNO板上连接了有PM-R3多功能扩展板。

驱动步进电机和转向舵机也通过PM-R3多功能扩展板连接;另外,PM-R3多功能扩展板连接到红外避障模块,四个红外避障小板接收到的障碍物的信号通过它传回扩展板,控制电机的工作和舵机的转向。

3)模块介绍

本项目主要包括以下几个模块:

运动与转向模块、红外避障模块,下面分别给出各部分的功能、元件、电路图和相关代码。

(1)运动与转向模块

功能介绍:

小车通过操作手柄进行遥控操控,进行各种前进、后退、转弯、变速等运动

元器件清单:

S3003舵机,17mm联轴器D-3mm,0.5模50齿齿轮,0.5模34齿齿轮,传动连杆,后轮连杆,电机固定支架,25mm金属减速电机,开关,PM-R3多功能扩展板,PS2手,11.1V-2400mAH锂电池组,杜邦线。

电路图:

电机模块接线图如图4所示;电机模块电路原理图如图5所示;PM-R3扩展电路板电路示意图如图6所示。

图4电机模块接线图

 

图5电机模块电路示意图

图6PM-R3扩展电路板电路示意图

相关代码:

#include//舵机库文件

#include//蓝牙PS2X手柄库文件

PS2Xps2x;//声明手柄ps2x

Servomyservo;//声明舵机myservo

//ps2引脚

#definePS2_DATA0//14

#definePS2_CMDA1//15

#definePS2_SELA2//16

#definePS2_CLKA3//17

//红外传感器引脚

#defineQ7//7

#defineQR8//8

#defineQL10//10

#defineH9//9

//电机驱动引脚定义

#definePWMB15

#definePWMB26

#defineSERVOPIN2//舵机驱动引脚定义

#defineSERVOMIN-20//舵机转动角度

#defineSERVOMID45//舵机转动角度

#defineSERVOMAX120//舵机转动角度

#defineTURNLEFTmyservo.write(SERVOMIN)//向左转

#defineTURNMIDmyservo.write(SERVOMID)//向中转

#defineTURNRIGHTmyservo.write(SERVOMAX)//向右转

#defineMOTORFOWARD1setMotorA(155)//遥控向前移动

#defineMOTORFOWARD2setMotorA(55)//避障向前移动

#defineMOTORBACK1setMotorA(-155)//遥控向后移动

#defineMOTORBACK2setMotorA(-55)//避障向后移动

#defineMOTORSTOPsetMotorA(0)//刹车

boolEnableRockerR=1;//右边摇杆操控控制变量

boolEnableRockerL=1;//左边摇杆操控控制变量

intRMid=0;//小车向中转控制变量

intLStop=0;//刹车控制变量

interror=0;//控制信号判断变量

bytetype=0;//信号种类判断

voidsetup()

{

Serial.begin(57600);//设置串口波57600

//电机驱动

pinMode(PWMB1,OUTPUT);//配置引脚,PWM1为输出

pinMode(PWMB2,OUTPUT);//配置引脚,PWM2为输出

//避障信号收集

pinMode(Q,INPUT);//Q对应前面中间的红外传感器

pinMode(QR,INPUT);//QR对应前面右边的红外传感器

pinMode(QL,INPUT);//QL对应前面左边的红外传感器

pinMode(H,INPUT);//H对应后边的红外传感器

//舵机库函数中的引脚链接函数

myservo.attach(SERVOPIN);

//初始状态

MOTORSTOP;

SERVOMID;

delay(300);

//判断ps手柄的控制信号是否接收

error=ps2x.config_gamepad(PS2_CLK,PS2_CMD,PS2_SEL,PS2_DAT);

if(error==0)

{

Serial.print("FoundController,configuredsuccessful");

Serial.println("Tryoutallthebuttons,Xwillvibratethecontroller,fasterasyoupressharder;");

Serial.println("holdingL1orR1willprintouttheanalogstickvalues.");

Serial.println("Note:

Gotowww.billporter.infoforupdatesandtoreportbugs.");

}

elseif(error==1)

Serial.println("Nocontrollerfound,checkwiring,seereadme.txttoenabledebug.visitwww.billporter.infofortroubleshootingtips");

elseif(error==2)

Serial.println("Controllerfoundbutnotacceptingcommands.seereadme.txttoenabledebug.Visitwww.billporter.infofortroubleshootingtips");

elseif(error==3)

Serial.println("ControllerrefusingtoenterPressuresmode,maynotsupportit.");

type=ps2x.readType();

//判断ps2信号类,我们所用的是"DualShockController"信号

switch(type)

{

case0:

Serial.print("UnknownControllertypefound");

break;

case1:

Serial.print("DualShockControllerfound");

break;

case2:

Serial.print("GuitarHeroControllerfound");

break;

case3:

Serial.print("WirelessSonyDualShockControllerfound");

break;

}

}

void(*resetFunc)(void)=0;//重置

voidloop()

{

inti=0;//避障与蓝牙遥控切换变量

//红外传感器数字信号读取

intQ0=digitalRead(Q);

intQ1=digitalRead(QR);

intQ2=digitalRead(QL);

intH0=digitalRead(H);

//信号判断

if(error==1)resetFunc();//没有控制信号则跳出循环

ps2x.read_gamepad();//读取控制信号

if(ps2x.Button(PSB_START))

Serial.println("Startisbeingheld");

//按下start按钮时串口监视器显示"Startisbeingheld"

if(ps2x.NewButtonState(PSB_SELECT))//避障和蓝牙遥控切换

{

Serial.println("Selectisbeingheld");

i=(i+1)%2;

}

//蓝牙遥控

if(i==0)

{

//按钮控制电机

if(ps2x.ButtonPressed(PSB_PAD_UP))//前进

{

Serial.println("PAD_UPjustpressed");

MOTORFOWARD1;

EnableRockerL=0;

}

elseif(ps2x.ButtonReleased(PSB_PAD_UP))//刹车

{

Serial.println("PAD_UPjustreleased");

MOTORSTOP;

EnableRockerL=1;

LStop=0;

}

if(ps2x.ButtonPressed(PSB_PAD_DOWN))//后退

{

Serial.println("PAD_DOWNjustpressed");

MOTORBACK1;

EnableRockerL=0;

}

elseif(ps2x.ButtonReleased(PSB_PAD_DOWN))//刹车

{

Serial.println("PAD_DOWNjustreleased");

MOTORSTOP;

EnableRockerL=1;

LStop=0;

}

//摇杆控制电机

if(EnableRockerL)

{

if(0<=ps2x.Analog(PSS_LY)&&ps2x.Analog(PSS_LY)<100)//前进

{

Serial.println("f");

MOTORFOWARD1;

LStop=0;

}

elseif(255>=ps2x.Analog(PSS_LY)&&ps2x.Analog(PSS_LY)>170)

//后退

{

MOTORBACK1;

Serial.println("b");

LStop=0;

}

else

{

if(LStop==0)//刹车

{

MOTORSTOP;

Serial.println("s");

LStop++;

}

}

}

//按钮控制舵机

if(ps2x.ButtonPressed(PSB_CIRCLE))//右转

{

Serial.println("Circlejustpressed");

TURNRIGHT;

EnableRockerR=0;

}

elseif(ps2x.ButtonReleased(PSB_CIRCLE))//转回中间

{

Serial.println("Circlejustreleased");

TURNMID;

EnableRockerR=1;

RMid=0;

}

if(ps2x.ButtonPressed(PSB_SQUARE))//左转

{

Serial.println("Squarejustpressed");

TURNLEFT;

EnableRockerR=0;

}

elseif(ps2x.ButtonReleased(PSB_SQUARE))//转回中间

{

Serial.println("Squarejustreleased");

TURNMID;

EnableRockerR=1;

RMid=0;

}

//摇杆控制舵机

if(EnableRockerR)

{

if(0<=ps2x.Analog(PSS_RX)&ps2x.Analog(PSS_RX)<100)//左转

{

TURNLEFT;

Serial.println("l");

RMid=0;

}

elseif(255>=ps2x.Analog(PSS_RX)&ps2x.Analog(PSS_RX)>160)

//右转

{

TURNRIGHT;

Serial.println("r");

RMid=0;

}

else

{

if(RMid==0)//转回中间

{

TURNMID;

Serial.println("mid");

RMid++;

}

}

}

}

(2)红外避障模块

功能介绍:

八路红外避障模块是智能小车红外线探测系统的工具。

它使用红外线发射和接收管等分立元器件组成探头,并使用LM339电压比较器获得输出信号。

电源从模块VCC,GND输入,VCC,SIG1,GND对应接到红外小板上,对应的通道LED显示灯灭(常态下无遮挡输出高电平),若通电后LED常亮,则对应调节电位器一顺时针旋转,使感应距离变小,逆时针旋转使感应距离变大。

此时用手或者白纸遮挡红外小板,则对应通道显示灯会亮,表示输出一个低电平信号。

单片机只要对OUT1-OUT4的电平信号进行判断。

常态下无遮挡为高电平,有遮挡时输出为低电平。

元器件清单:

8路红外主板,避障小板,杜邦线。

电路图:

红外避障模块电路原理图如图7所示。

图7红外避障模块电路原理图

相关代码:

红外避障部分,代码如下

if(Q0==HIGH)

//输出高电平,正前方无障碍物

{

if(Q1==HIGH&Q2==HIGH)

//输出高电平,前方左右无障碍物,前进

{

TURNMID;

MOTORFOWARD2;

}

elseif(Q1==LOW&Q2==HIGH)

//右前方输出低电平,左前方输出高电平,右前方有障物,向左转

{

MOTORFOWARD2;

TURNLEFT;

}

elseif(Q1==HIGH&Q2==LOW)

//左前方输出低电平,右前方输出高电平,左前方有障碍物,向右转

{

MOTORFOWARD2;

TURNRIGHT;

}

else

//前方左右均有障碍物,后退

{

TURNMID;

MOTORBACK;

}

}

else

//输出低电平,正前方有障碍物

{

if(Q1==HIGH&Q2==HIGH)

//前方左右输出高电平,无障碍物,默认后退至左后方

{

MOTORBACK2;

TURNLEFT;

delay(100);

MOTORBACK2;

TURNRIGHT;

delay(100);

}

elseif(Q1==LOW&Q2==HIGH)

//右前方输出低电平,左前方输出高电平,右前方有障物,后退至左后方

{

MOTORBACK2;

TURNLEFT;

delay(100);

MOTORBACK2;

TURNRIGHT;

delay(100);

}

elseif(Q1==HIGH&Q2==LOW)

//左前方输出低电平,右前方输出高电平,左前方有障碍物,后退至右后方

{

MOTORBACK2;

TURNRIGHT;

delay(100);

MOTORBACK2;

TURNLEFT;

delay(100);

}

else

//前方左右均输出低电平,前方左右有障碍物

{

if(H0==HIGH)

//后方输出高电平,无障碍物,向后退

{

TURNMID;

MOTORBACK2;

}

elseif(H0==LOW)

//后方输出低电平,有障碍物,刹车

{

MOTORSTOP;

}

}

}

if(ps2x.NewButtonState(PSB_CROSS))//强制刹车

{

Serial.println("Xjustchanged");

MOTORSTOP;

}

delay(50);

}

voidsetMotorA(intm1Speed)//电机驱动函数

{

if(m1Speed>=0)

{

digitalWrite(PWMB2,HIGH);

analogWrite(PWMB1,255-m1Speed);

}

else

{

digitalWrite(PWMB1,HIGH);

analogWrite(PWMB2,m1Speed+255);

}

}

4.产品展示

整体外观图如图9所示。

图8整体外观图

图9最终演示结果图

5.故障及问题分析

(1)问题:

组装小车很顺利,但是烧入Arduino代码之后,舵机的角度不对,原计划是在Arduino代码里直接修改舵机角度,但是紧接着发现,修改完后小车的舵机有时候会卡死。

解决方案:

经过多次尝试,我们决定拆下舵机查看,查了许多资料,最终得知是未进行安装前舵机的调节。

之后,我们对舵机进行了多次调整,终于是舵机正常运行。

(2)问题:

在进行小车避障功能的实现时,发现连上数据线小车正常工作,断开数据线,用小车电源驱动,发现不可运行。

解决方案:

刚开始,我们分开检查了各部分主板,发现并没有问题,于是询问老师,认为是小车的电源电压不足,于是将7.4V的电源换成了9.1V的电源,结果把ArduinoUNOR3烧了,于是重买了一块Arduino发现可用。

(3)问题:

对红外传感器的测距进行调整时并没有什么问题,但是进行测试的时候发现传感器总是误测。

解决方案:

光线问题,最后决定用纸制的障碍物进行测试,发现可行。

(4)问题:

本来设定ps2蓝牙遥控器的“select”键为手动控制与避障切换的按键,但是必须旧按才可实现切换。

解决方案:

在代码中使用变量i进行模式切换的关键变量。

(5)问题:

代码可行性问题,即小车在某些特定的情况下,现有代码无法让小车运行状态或者方案最佳,例如:

遇到死角,小车的自动避障失灵。

解决方案:

多次修改代码,原代码是小车遇到死角自动后退,直到检测不到死角(前、左前、右前的红外传感器探测到障碍物)再前进,此时就出现了前面所说的,失灵。

最终修改代码,让小车根据情况向右后方或者左后方后退,即可避免上述问题。

6.附录:

元器件清单

完成本项目所用到的元器件及其数量如下表所示

 

元器件/测试仪表

数量

小车框架

亚克力底板(7块/套)

1

65mm轮子

4

ArduinoUNO主板

1

轴承

若干

螺丝,螺母,铜柱

若干

舵机和电机

S3003舵机

1

17mm联轴器D-3mm

2

0.5模50齿齿轮

1

0.5模34齿齿轮

1

传动连杆

2

后轮连杆

1

电机固定支架

1

25mm金属减速电机

1

开关

1

PM-R3多功能扩展板

1

PS2手柄

1

7.4V-2400mAH锂电池组

1

杜邦线

若干

避障模块

8路红外主板

1

避障小板

8

7.参考文献

【1】李永华.Arduino软硬件协同设计实战指南[M].第1版.北京:

清华大学出版社,2015.

【2】JohnBoxall.动手玩转Arduino[M].翁恺译.第1版.北京:

人民邮电出版社,2014.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2