第5章-智能小车设计_第1页
第5章-智能小车设计_第2页
第5章-智能小车设计_第3页
第5章-智能小车设计_第4页
第5章-智能小车设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章智能小车设计目录5.1制作智能小车5.2采用驱动模块进行控制5.3材料清单5.4机械零件设计5.5实物拼装5.6成品实物图5.7项目拓展-智能巡线避障小车

5.1制作智能小车

大部分同学小的时候都梦想有一台属于自己的四驱车,并且好奇为什么通电四驱车就会跑起来,接下来的章节将介绍四驱车的工作原理以及带领同学们了解电机的类型并且让同学们制作出属于自己的智能小车。5.1.1直流电机直流电机(directcurrentmachine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。直流电机示意图如图5-1所示。图5-1常见的直流电机5.1.2直流无刷电机的控制原理直流无刷电机的控制原理,要让电机转动起来,首先控制部就必须根据hall-sensor感应到的电机转子所在位置,然后依照定子绕线决定开启(或关闭)换流器(inverter)中功率晶体管的顺序,inverter中之AH、BH、CH(这些称为上臂功率晶体管)及AL、BL、CL(这些称为下臂功率晶体管),使电流依序流经电机线圈产生顺向(或逆向)旋转磁场,并与转子的磁铁相互作用,如此就能使电机顺时/逆时转动。当电机转子转动到hall-sensor感应出另一组信号的位置时,控制部又再开启下一组功率晶体管,如此循环电机就可以依同一方向继续转动直到控制部决定要电机转子停止则关闭功率晶体管(或只开下臂功率晶体管);要电机转子反向则功率晶体管开启顺序相反。

基本上功率晶体管的开法可举例如下:AH、BL一组→AH、CL一组→BH、CL一组→BH、AL一组→CH、AL一组→CH、BL一组,但绝不能开成AH、AL或BH、BL或CH、CL。此外因为电子零件总有开关的响应时间,所以功率晶体管在关与开的交错时间要将零件的响应时间考虑进去,否则当上臂(或下臂)尚未完全关闭,下臂(或上臂)就已开启,结果就造成上、下臂短路而使功率晶体管烧毁。

当电机转动起来,控制部会再根据驱动器设定的速度及加/减速率所组成的命令(Command)与hall-sensor信号变化的速度加以比对(或由软件运算)再来决定由下一组(AH、BL或AH、CL或BH、CL或……)开关导通,以及导通时间长短。速度不够则开长,速度过头则减短,此部份工作就由PWM来完成。PWM是决定电机转速快或慢的方式,如何产生这样的PWM才是要达到较精准速度控制的核心。

高转速的速度控制必须考虑到系统的CLOCK分辨率是否足以掌握处理软件指令的时间,另外对于hall-sensor信号变化的资料存取方式也影响到处理器效能与判定正确性、实时性。至于低转速的速度控制尤其是低速起动则因为回传的hall-sensor信号变化变得更慢,怎样撷取信号方式、处理时机以及根据电机特性适当配置控制参数值就显得非常重要。或者速度回传改变以encoder变化为参考,使信号分辨率增加以期得到更佳的控制。电机能够运转顺畅而且响应良好,P.I.D.控制的恰当与否也无法忽视。之前提到直流无刷电机是闭回路控制,因此回授信号就等于是告诉控制部电机转速距离目标速度还差多少,这就是误差(Error)。知道了误差自然就要补偿,方式有传统的工程控制如P.I.D.控制。但控制的状态及环境其实是复杂多变的,若要控制的坚固耐用则要考虑的因素恐怕不是传统的工程控制能完全掌握,所以模糊控制、专家系统及神经网络也将被纳入成为智能型P.I.D.控制的重要理论。5.1.3直流电机的控制直流电机控制方法较为简单,可以采用Arduinouno直接控制,具体控制连接原理图如图5-2所示。控制代码也相对简单,具体如下文所示。图5-2直流电机控制连接图简单控制的示例:voidsetup(){pinMode(3,OUTPUT);}voidloop(){digitalWrite(3,HIGH);delay(2000);pinMode(3,OUTPUT);}intmotorpin=3;voidsetup(){}voidloop(){for(intfadeValue=0;fadeValue<=255;fadeValue+=50){analogWrite(motorpin,fadeValue);delay(2000);}for(intfadeValue=255;fadeValue>=0;fadeValue-=50){analogWrite(motorpin,fadeValue);delay(2000);}}5.2采用驱动模块进行控制驱动模块根据功能、性能分为很多种类,本节根据实际需求将介绍L298N驱动模块。L298N是一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。接口定义如图5-3所示,Arduino+L298N驱动直流电机接线方式如图5-4所示,接线方法如图5-5所示。图5-3

接口定义(1)简单示例图5-4Arduino+L298N驱动直流电机接线方式*当ENA使能IN1IN2控制OUT1OUT2

*当ENB使能IN3IN4控制OUT3OUT4

由于本模块是2路的H桥驱动,所以可以同时驱动两个电机,使能ENAENB之后,

*可以分别从IN1IN2输入PWM信号驱动电机1的转速和方向

*可以分别从IN3IN4输入PWM信号驱动电机2的转速和方向图5-5接线方法(2)接线方式IN1-4分别接Arduinomega2560的PIN4-7,将L298N上的ENA、ENB插口上的插销拔掉,随后,将ENA与Arduinomega2560的PIN11脚相连,ENB与Arduinomega2560的PIN8相连。连线示意图如图5-6所示。

IN1接PIN4;IN2接PIN5;IN3接PIN6;IN4接PIN7;

ENA接PIN11;ENB接PIN8;图5-6连线示意图示例:#definemotor1pin14//定义IN1引脚#definemotor1pin25//定义IN2引脚#definemotor1pwm11//定义ENA引脚(我的是Mega2560的板子)#definemotor2pin16//定义IN3引脚#definemotor2pin27//定义IN4引脚#definemotor2pwm8//定义ENB引脚voidmotor(intmotorpin1,intmotorpin2,intmotorpwm,intval){pinMode(motorpin1,OUTPUT);//输出第一个引脚pinMode(motorpin2,OUTPUT);//输出第二个引脚digitalWrite(motorpin2,0);//将第二个引脚置低digitalWrite(motorpin1,1);//将第一个引脚抬高analogWrite(motorpwm,val);//给EN引脚设定模拟值,设定转速}voidsetup(){}voidloop(){inti;for(i=100;i<=255;i++)//让电机的转速从100到255转动,A,B转速不一样,完成转向{motor(motor2pin1,motor2pin2,motor2pwm,255);//电机B保持255匀速转动motor(motor1pin1,motor1pin2,motor1pwm,i);//电机A从100到255转动delay(500);//间隔500ms

}for(i=100;i<=255;i++)//让电机从100到255转动,功能同上{motor(motor1pin1,motor1pin2,motor1pwm,255);motor(motor2pin1,motor2pin2,motor2pwm,i);delay(500);}motor(motor1pin1,motor1pin2,motor1pwm,255);//电机A以最大转速转动delay(5000);motor(motor1pin2,motor1pin1,motor1pwm,255);//电机A反向转动delay(5000);}程序效果:直流电机B电机匀速转动,A电机从100加速到255转动.5.3材料清单材料清单序号元器件名称型号参数规格数量参考实物图1ArduinoMega25601个2万向轮1寸全局从动转向轮1个3语言模块非特定人声语音识别模块1个4铜柱M3*64个5螺丝M3*8126螺母M3127杜邦线20cm公对母18电池盒四节电池盒19小车底盘网购(有条件可自己3d打印,或者使用洞洞板代替)110橡胶车轮直径65mm轴孔长5.3mm211电机DC3V-6V直流减速电机212开关小型开关113驱动板L298N114蓝牙串口模块HC-051个2.上述清单中的材料中有几处需要特别注意:(1)第11项直流减速电机,一定要按照要求购买减速电机,否则将会像市面上的玩具赛车一样一经上电就具有很高的速度。这样及其容易烧毁电路。(2)第3项是本项目的语音识别、对话功能实现的模块。之所以选择这个型号是因为其内置了较大的存储空间,用户可以自行定义2000句的对话。可以实现人和机器人的对话交流,也能实现用户对机器人的语音控制功能。该语音模块有三个版本,分别是核心板、升级版和完全版。核心板的价钱相对较低,本项目建议使用该版本。如果有同学想额外增加语音方面的功能和有这方面需求,可以选择后面两个版本。(3)项目2中万向轮亦可以用牛眼轮来替代。(4)项目14中需购买HC-05种类的蓝牙串口模块,HC-05主从端一体,可以进行信号的转化。比较出色的完成遥控任务5.4机械零件设计下车底板零件图如图5-7所示,立体图如图5-8所示。图5-7小车底板零件图图5-8小车地板立体图本节所提供的零件都是3D建模,自行打印完成的,在打印时需要注意小车地板上的螺丝口以及细小的口,以免后期因为当时的马虎而造成不必要的损失。5.5实物拼装底板拼装实物图如图5-9所示。图5-9底板拼装实物图5.5.1电路设计智能声控小车主要由转向机构、驱动机构、驱动控制模块(Mega2560)、语音控制模块四大部分组成小车为轮式结构,机械部分分为转向机构和驱动机构(Mega2560)转向机构主要由转向电机、转向架和万向轮轮组成驱动机构采用玩具小车常用的双电机驱动方案,包括两个减速电机和Mega2560,其原理为:转向时由控制语音者向小车发出转向信号,语音控制模块向Mega2560发送指令信息,Mega2560再发送信号给转向电机,转向电机根据转向信号正向或反向旋转一定角度,电机通过齿轮、齿条系统带动转向架摆动一定角度,最终带动与转向架固定在一起的前轮偏摆一定角度小车在转向时由于内、外侧的车轮的转弯半径不同,所以内外侧车轮的转速也不相同前轮为从动轮,会根据转弯角度的大小自动调节内、外侧车轮的转速;而后轮为主动轮,其转速分别由两个电机独立驱动,不会根据转弯半径自动调节转速因此小车转弯时,控制系统在控制转向电机的同时还需要根据转向角度的大小向两个驱动电机发出控制信号。连接图如图5-10所示。图5-10连接图5.5.2语音识别模块连接1.本项目语言识别模块使用了WEGASUN-M6核心板。该模块一款集语音识别、语音合成、语音(MP3)点播、RF(射频)功能、红外功能于一体的多功能模块。目前主要应用在智能家居、对话机器人、车载调度终端、高端智能语音交互玩具、楼宇智能化、教育机器人等方面。主打傻瓜式的简易操作、优越的语音识别和语音合成性能,应用领域十分广泛。2.模块连接方法语音识别模块与Arduino2560接线方法:语音模块TXD---2560RX1语音模块RXD---2560TX1语音模块GND---2560GND语音模块3V3---25603.3V

同时,注意语音识别模块的供电。如果发现语音识别模块的3.3V电压从2560的3.3V引脚取电无法进行语音识别或者播放语音,那请将语音识别模块的5V电源输入端接到UNO的VIN引脚端,并且选择外部9V的电源适配器给2560供电,这样就有充足的电流和电压了。实物连接图如图5-11所示。图5-11实物连接图3.程序代码1.核心板代码@KeyWordBuf02#前进001|后退002|$@KeyWordBuf04#左转003|右转004|$

@KeyWordBuf04#停止005|$@WriteKeyWordBuf#$@WriteFlashText#|001!|002!|003!|004!|005!|$2.ArduinoMega2560代码voidsk(){val=Serial2.read();if(-1!=val){if(1==val){digitalWrite(4,HIGH);digitalWrite(7,HIGH);analogWrite(5,250);analogWrite(6,250);}if(2==val){digitalWrite(4,LOW);digitalWrite(7,LOW);analogWrite(5,250);analogWrite(6,250);}if(3==val){digitalWrite(4,LOW);digitalWrite(7,HIGH);analogWrite(5,240);analogWrite(6,240);}if(4==val){digitalWrite(4,HIGH);digitalWrite(7,LOW);

analogWrite(5,240);analogWrite(6,240);}if(5==val){analogWrite(5,0);analogWrite(6,0);}}}4.蓝牙控制蓝牙小车原理:

app设定编码-->通过手机蓝牙发送编码-->HC05收到编码,发送到Arduino2560板子-->板子解析编码-->控制电机。下图5-12为蓝牙控制手机控制端截图。图5-12蓝牙控制手机控制端截图点击打开app之后,首先会自动弹出提示要求打开手机蓝牙,可以看到四个方向箭头以及中间停止,用来控制小车前进后退左转右转,做这些操作前提是要连接上蓝牙小车的蓝牙模块HC05.所以需要首先点击右下角很像螺母的图标弹出下图5-13蓝牙设备连接示意图。图5-13蓝牙设备连接示意图如果没有图5-13所示,请点击搜索蓝牙设备,不出意外应该会看到一个HC06,没有的话请确保你的蓝牙模块电源连接正确。看到HC06,点击一下,如果是第一次配对,是需要输入密码:默认是0000或者1234.如果配对过,点击就自动连接了。蓝牙小车前进后退左转右转停止,都是一种状态,所以我们用编码去区分。在我的app里,我默认设置为:前进3

后退4

左转1

右转2

停止0。当然,也可以自定义编码,点击左下角进入设置页面、如图5-14、5-15所示。图5-14设置界面

编码只能是0-9数字以及大小写26个字母,足够使用。图5-15设置自定义说完app端,要说一下怎么测试编码是否正确。把下面代码烧入Arduino2560板子:

voidsetup(){

//putyoursetupcodehere,torunonce:

Serial.begin(9600);

}

voidloop(){

//putyourmaincodehere,torunrepeatedly:

if(Serial.available()>0){

charch=Serial.read();

if(ch=='1’){//前进

Serial.println("up");

}elseif(ch=='2’){//后退

Serial.println("back");

}elseif(ch=='3’){//左转

Serial.println("left");

}elseif(ch=='4’){

//右转

Serial.println("right");

}elseif(ch=='0’){

//停车

Serial.println("stop");

}else{

//其他编码

Serial.println(ch);

}

}

}

然后就可以用ArduinoIDE自带的串口调试器来查看,不出意外应该可以看到类似下面的打印,如图5-16所示。图5-16打印结果5.6成品实物图电路细节图如图5-17所示,侧视图如图5-18所示,主视图如图5-19所示图5-17电路细节图图5-18侧视图图5-19主视图1.材料准备材料清单如表5-2所示,底板实物图如图5-20所示,电路连接图如图5-21所示,车前实物图如图5-22所示,小车与遥控器的电路连接图如图5-23所示。5.7项目拓展-智能巡线避障小车元器件名称参数规格数量参考实物图巡线传感器SEN1595-1D7超声波SRF-041图5-20实物图图5-21电路连接图图5-22实物图图5-23小车与超声波的电路连接图#include<Servo.h>//#definesendServomyservo;intEcho=A1;//Echo回声脚(P2.0)intTrig=A0;//Trig触发脚(P2.1)intin1=5;intin2=4;intin3=3;intin4=2;intrightDistance=0,leftDistance=0,middleDistance=0;voidforward(){digitalWrite(in1,HIGH);digitalWrite(in2,LOW);digitalWrite(in3,HIGH);digitalWrite(in4,LOW);}voidback(){digitalWrite(in1,LOW);digitalWrite(in2,HIGH);digitalWrite(in3,LOW);digitalWrite(in4,HIGH);}voidturnleft(){digitalWrite(in1,HIGH);digitalWrite(in2,LOW);digitalWrite(in3,LOW);digitalWrite(in4,HIGH);}voidturnright(){digitalWrite(in1,LOW);digitalWrite(in2,HIGH);digitalWrite(in3,HIGH);digitalWrite(in4,LOW);}voidstop(){digitalWrite(in1,LOW);digitalWrite(in2,LOW);digitalWrite(in3,LOW);digitalWrite(in4,LOW);}

intDistance_test()//量出前方距离{digitalWrite(Trig,LOW);//给触发脚低电平2μsdelayMicroseconds(2);digitalWrite(Trig,HIGH);//给触发脚高电平10μs,这里至少是10μsdelayMicroseconds(20);digitalWrite(Trig,LOW);//持续给触发脚低电floatFdistance=pulseIn(Echo,HIGH);//读取高电平时间(单位:微秒)Fdistance=Fdistance/58;//为什么除以58等于厘米,Y米=(X秒*344)/2//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58return(int)Fdistance;}voidsetup(){myservo.attach(9);Serial.begin(9600);//初始化串口

pinMode(Echo,INPUT);//定义超声波输入脚

pinMode(Trig,OUTPUT);//定义超声波输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论