课设报告基于Arduino单片机的实物设计.docx
- 文档编号:1975551
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:21
- 大小:872.34KB
课设报告基于Arduino单片机的实物设计.docx
《课设报告基于Arduino单片机的实物设计.docx》由会员分享,可在线阅读,更多相关《课设报告基于Arduino单片机的实物设计.docx(21页珍藏版)》请在冰点文库上搜索。
课设报告基于Arduino单片机的实物设计
基于Arduino单片机的实物设计
题目:
基于Arduino的智能小车(乌龟)设计
:
学院:
专业:
班级:
学号:
指导教师:
设计时间:
一、任务设计及要求
利用Arduino设计智能小车(乌龟)其功能:
1、实现循迹〔利用TCRT5000红外对管〕;
2、避碰功能〔利用超声波〕;
3、红外遥控功能;
4、综合以上功能实现自动循迹、避障、红外控制的智能小车;
二、Arduino
2.1Arduino简介
ARDUINO智能小乌龟是一款单片机学习应用开发系统,以arduino单片机系列atmega-328为核心.完成寻线,避障,红外遥控和蓝牙遥控的功能,.套件包含了大量的趣味程序,并可扩展外置的电路模块,从而增加小车的使用功能.旨在让使用者在学习ARDUINO单片机时能脱离枯燥的理论知识,在玩乐中获取单片机系统开发的能力。
2.2参数说明
1.电机参数:
电压范围:
1.5-12V,电机轴长10mm,转速100rpm/min.
2.控制电机选用L298N驱动模块,与单片机真正隔离.
3.三组寻线模块,检测黑白线,精度更高,也可用与防跌落控制.
4.红外遥控通信模块,组成智能小车遥控系统.5.超声波模块,小车避障系统.
5.蓝牙无线模块,可以和手机蓝牙配对遥控机器人.
6.可接入外部7~12V的电压。
并能搭载多款传感器模块,根据您的想象力实现各种功能.
三、硬件设计
3.1所需硬件清单
1.金属减速电机2个;2.优质轮胎2个;3.电机固定件2个;4、牛眼万向轮;5.机器人底盘2片;6.L298N电机驱动板1个;7.ARDUINOUNO328控制板1个;8.ARDUINO传感器扩展板1个;9.云台1个;10.舵机1个;11.超声波模块1个;12.三组寻线模块;13.红外接收传感器;14.单片机遥控器;15.2000MA18650充电电池2节;16.18650电池盒一个;17.18650充电器一个。
3.2硬件设计说明
结合实际、根据需要,将系统分为四个模块,即电机驱动模块,循迹模块,避碰模块,红外模块,分开做,自后将其综合起来。
3.3电机驱动模块
3.3.1L298N说明
L298N是一个驱动模块,就是单片机的驱动电流太小无法驱动电动机,因此L298N其起到一个放大器作用。
通过控制L298NI1I2I3I4接口,控制电机的正转,反转,转弯和停顿。
3.3.2L298N连接图
如以下图所示:
3.4循迹模块
3.4.1寻线功能
使小车沿着黑线走,根据黑线的位置选着行走的状态。
3.4.2寻线传感器与实验连接图
TCRT5000红外对管的工作原理是利用红外线对颜色的反射率不一样,将反射信号的强弱转化成电流信号。
黑白寻迹模块在检测到黑色高电平有效,检测到白色是为低电平有效,检测高度为0—3cm。
使用方法
1.传感器接口有3根排针,分别是GND,VCC,OUT。
VCC和GND为供电端,OUT是信号输出端。
2.检测到物体,信号端输出低电平;未检测到物体,信号端输出高电平。
3.主要判断信号输出端是0或者1,就能判断物体是否存在。
性能参数:
1:
检测距离,检测白纸时约为2厘米。
视颜色的不同距离有所不同,白色最远。
2.供电电压:
2.5V~12V,不要超过12V。
(注意:
最好用低电压供电,供电电压太高传感器的寿命会变短。
5V供电为佳。
)3.工作电流,5V时18~20ma。
经大量测试,传感器硬件设置为18~20ma工作电流时性能最佳,主要表现在抗干扰能力上。
4.检测到物体,信号端输出低电平;未检测到物体,信号端输出高电平。
5.传感器输出TTL电平,能直接与3.3V或者5V单片机IO口相连。
黑线或者白线检测原理1.利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,传感器发射出去的红外光被大局部反射回来。
于是传感器输出低电平0。
2.当平面有一黑线,传感器在黑线上方时,因黑色的反射能力很弱,反射回来的红外光很少,达不到传感器动作的水平,所以传感器还输出1。
3.我们只要用单片机判断传感器的输出端是0或者是1,就能检测黑线。
4.检测白线的原理和检测黑线的原理一样,检测白线时,白线周边的颜色也要比较接近黑色,然后调节红外传感器上面的可调电阻,将灵敏度调低,一直调到刚好周边的颜色检测不到为止,那样就能检测白线了。
连接参考图如下:
3.5避碰模块
3.5.1超声波模块
超声波智能避障实现方便、计算简单、易于做到实时控制,并且在测量精度方面能到达实用的要求,因此成为常用的避障方法。
3.5.2实验连接图
3.6红外模块
3.6.1红外模块说明
实验前须知:
1.先把IRremote函式库资料夹放进Arduinolibraries目录底下
2.开启IrReceive.pde测得自己的红外线遥控的码〔在SerialMonitor可显示IRcode〕,再将IRcode记录下来,然后到程式里面修改成自己的红外线码即可。
3.6.2实物图
四、模块软件设计
4.1循迹模块程序
intMotorRight1=8;//IN1
intMotorRight2=9;//IN2
intMotorLeft1=7;//IN4
intMotorLeft2=6;//IN3
intspeedpin=11;//定义EA(PWM调速)
intspeedpin1=10;//定义EB(PWM调速)接口
constintSensorLeft=5;//左感測器輸入腳
constintSensorMiddle=4;//中感測器輸入腳
constintSensorRight=3;//右感測器輸入腳
intSL;//左感測器狀態
intSM;//中感測器狀態
intSR;//右感測器狀態
voidadvance(inta)//前进
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,HIGH);
delay(a*50);
}
voidleft(inti)//左转
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,LOW);
delay(i*30);
}
voidright(intc)//右转
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,HIGH);
delay(c*30);
}
voidstopp(intd)//停顿
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,LOW);
delay(d*10);
}
voidback(intg)//后退
{digitalWrite(MotorRight1,HIGH);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,HIGH);
digitalWrite(MotorLeft2,LOW);
delay(g*100);
}
voidre(intx)//右大转
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,HIGH);
digitalWrite(MotorLeft1,HIGH);
digitalWrite(MotorLeft2,LOW);
delay(x*25);
}
voidle(inth)//左打转
{digitalWrite(MotorRight1,HIGH);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,LOW);
digitalWrite(MotorLeft2,HIGH);
delay(h*25);
}
voidsetup()
{Serial.begin(9600);
pinMode(MotorRight1,OUTPUT);//腳位8(PWM)
pinMode(MotorRight2,OUTPUT);//腳位9(PWM)
pinMode(MotorLeft1,OUTPUT);//腳位7(PWM)
pinMode(MotorLeft2,OUTPUT);//腳位6(PWM)
pinMode(speedpin,OUTPUT);
pinMode(speedpin1,OUTPUT);
pinMode(SensorLeft,INPUT);//左感測器
pinMode(SensorMiddle,INPUT);//中感測器
pinMode(SensorRight,INPUT);//右感測器
}
voidloop()
{
SL=digitalRead(SensorLeft);
SM=digitalRead(SensorMiddle);
SR=digitalRead(SensorRight);
SL=digitalRead(SensorLeft);
SM=digitalRead(SensorMiddle);
SR=digitalRead(SensorRight);
if(SM==HIGH){
if(SR==LOW&SL==HIGH)//向左
{left
(1);stopp
(2);
}elseif(SL==LOW&SR==HIGH)
{right
(1);stopp
(2);}
elseif(SL==HIGH&SR==HIGH)
{if(count {advance (1); stopp(50);} count=count+1; if(count==des-1) {le(12); SL=digitalRead(SensorLeft); SM=digitalRead(SensorMiddle); SR=digitalRead(SensorRight); }elseif(count>=des){digitalWrite(MotorRight1,LOW);digitalWrite(MotorRight2,LOW); digitalWrite(MotorLeft1,LOW); digitalWrite(MotorLeft2,LOW); delay(50000); }elseadvance (2);} else//直進 {advance (1);}} if(SM==LOW) {if(SR==LOW&SL==HIGH) {left (1); stopp (2); }elseif(SL==LOW&SR==HIGH) {right (1); stopp (2);}} if((SL==LOW&SR==LOW&SM==LOW)) { le (1);}}} 4.2红外模块程序 longadvence=0x00FF629D; longback=0x00FFA857; longstopp=0x00FF02FD; longleft=0x00FF22DD; longright=0x00FFC23D; IRrecvirrecv(RECV_PIN); decode_resultsresults; voiddump(decode_results *results) {intcount= results->rawlen;if(results->decode_type==UNKNOWN){Serial.println("Couldnotdecodemessage");} else{if(results->decod_type==NEC)Serial.print("DecodedNEC: ");}elseif(results->decode_type==SONY){Serial.print("DecodedSONY: ");}elseif(results->decode_type==RC5){Serial.print("DecodedRC5: ");}elseif(results->decode_type==RC6){Serial.print("DecodedRC6: ");} Serial.print(results->value,HEX)Serial.print("(");Serial.print(resuls->bits,DEC);Serial.println("bits)");}Serial.print("Raw(");Serial.print(count,DEC);Serial.print("): ");for(inti=0;i }Serial.print(""); }Serial.println("");} voidsetup() {Serial.begin(9600); irrecv.enableIRIn();//Startthereceiver }inton=0; unsignedlonglast=millis();void(loop) {i(irrecv.decode(&results))} if(millis()-last>250){on=! on; digitalWrite(13,on? HIGH: LOW);dump(&result) if(results.value==? ){} }} 4.3避碰模块程序 主程序 voidloop() {myservo.write(90);//测量 detection();//测量角度 if(directionn==2)//假设directionn(方向)=2(倒車) {back(5);//倒退 stopp();//停顿 while (1); }if(directionn==8) {advance (2);}} 五、综合设计与调试 5.1流程图 红外信号 障碍物 路径1 路径2 终点 终点 开场 5.2软件设计 #include #include intRECV_PIN=12; intMotorRight1=8;//IN1 intMotorRight2=9;//IN2 intMotorLeft1=7;//IN4 intMotorLeft2=6;//IN3 intspeedpin=11; intspeedpin1=10; constintSensorLeft=2; constintSensorMiddle=4; constintSensorRight=5; intSL;intSM; intSR; intinputPin=A0; intoutputPin=A1; intFspeedd=0; intdirectionn=0; Servomyservo; intdelay_time=250; intFgo=8; intBgo=2; intcount=0; intdes=0; intf=0; //******红外控制局部******** longadvence=0x00FF629D; longb=0x00FFA857; longs=0x00FF02FD; longl=0x00FF22DD; longr=0x00FFC23D; IRrecvirrecv(RECV_PIN); decode_resultsresults; voiddump(decode_results*results) {intcount=results->rawlen; if(results->decode_type==UNKNOWN) {Serial.println("Couldnotdecodemessage");} else{if(results->decode_type==NEC){Serial.print("DecodedNEC: ");}elseif(results->decode_type==SONY) {Serial.print("DecodedSONY: ");}elseifresults->decode_type==RC5) {Serial.print("DecodedRC5: ");}elseif(results->decode_type==RC6){ Serial.print("DecodedRC6: ");}Serial.print(results->value,HEX);Serial.print("("); Serial.print(results->bits,DEC);Serial.println("bits)"); }Serial.print("Raw("); Serial.print(count,DEC); Serial.print("): "); for(inti=0;i {if((i%2)==1) {Serial.print(results->rawbuf[i]*USECPERTICK,DEC);} else{Serial.print(-(int)results->rawbuf[i]*USECPERTICK,DEC);}Serial.print("");} Serial.println("");} inton=0; unsignedlonglast=millis(); voidsetup() {Serial.begin(9600); pinMode(MotorRight1,OUTPUT); pinMode(MotorRight2,OUTPUT); pinMode(MotorLeft1,OUTPUT); pinMode(MotorLeft2,OUTPUT); pinMode(SensorLeft,INPUT); pinMode(SensorMiddle,INPUT);pinMode(SensorRight,INPUT);pinMode(speedpin,OUTPUT);pinMode(speedpin1,OUTPUT);Serial.begin(9600); irrecv.enableIRIn(); pinMode(inputPin,INPUT); pinMode(outputPin,OUTPUT); myservo.attach(3);} voiddetection() {intdelay_time=250; ask_pin_F(); if(Fspeedd<3) {directionn=Bgo;} else{directionn=Fgo;}} voidask_pin_F() {myservo.write(90); digitalWrite(outputPin,LOW); delayMicroseconds (2); digitalWrite(outputPin,HIGH); delayMicroseconds(10); digitalWrite(outputPin,LOW);floatFdistance=pulseIn(inputPin,HIGH); Fdistance=distance/5.8/10; Fspeedd=Fdistance;} voidadvance(inta) {digitalWrite(MotorRight1,LOW);digitalWrite(MotorRight2,HIGH);digitalWrite(MotorLeft1,LOW);digitalWrite(MotorLeft2,HIGH); delay(a*50);} voidleft(inti) {digitalWrite(MotorRight1,LOW); digitalWrite(MotorRight2,HIGH);digitalWrite(MotorLeft1,LOW);digitalWrite(MotorLeft2,LOW);delay(i*30); }voidright(intc) {digitalWrite(MotorRight1,LOW);digitalWrite(MotorRight2,LOW);digitalWrite(MotorLeft1,LOW);digitalWrite(MotorLeft2,HIGH);delay(c*30);} voidstopp(intd) {digitalWrite(MotorRight1,LOW);digitalWrite(MotorRight2,LOW);digitalWrite(MotorLeft1,LOW);digitalWrite(MotorLeft2,LOW);delay(d*10); }voidback(intg) {digitalWrite(MotorR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报告 基于 Arduino 单片机 实物 设计