8职业生涯规划书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

“蓝牙手柄避障小车”设计设计者:严梓桓(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扩展电路板电路示意图相关代码:#includeServo.h//舵机库文件#includePS2X_lib.h//蓝牙PS2X手柄库文件PS2Xps2x;//声明手柄ps2xServomyservo;//声明舵机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:Goto);}elseif(error==1)Serial.println(Nocontrollerfound,checkwiring,seereadme.txttoenabledebug.visit);elseif(error==2)Serial.println(Controllerfoundbutnotacceptingcommands.seereadme.txttoenabledebug.Visit);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按钮时串口监视器显示Startisbeingheldif(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.

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功