课设报告基于Arduino单片机的实物设计文档格式.docx
- 文档编号:4428824
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:22
- 大小:876.61KB
课设报告基于Arduino单片机的实物设计文档格式.docx
《课设报告基于Arduino单片机的实物设计文档格式.docx》由会员分享,可在线阅读,更多相关《课设报告基于Arduino单片机的实物设计文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
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寻线功能
使小车沿着黑线走,根据黑线的位置选着行走的状态.
2寻线传感器与实验连接图
TCRT5000红外对管的工作原理是利用红外线对颜色的反射率不一样,将反射信号的强弱转化成电流信号。
黑白寻迹模块在检测到黑色高电平有效,检测到白色是为低电平有效,检测高度为0-3cm。
使用方法
传感器接口有3根排针,分别是GND,VCC,OUT。
VCC和GND为供电端,OUT是信号输出端。
2.检测到物体,信号端输出低电平;
未检测到物体,信号端输出高电平.
主要判断信号输出端是0或者1,就能判断物体是否存在。
性能参数:
1:
检测距离,检测白纸时约为2厘米。
视颜色的不同距离有所不同,白色最远.2。
供电电压:
2.5V~12V,不要超过12V。
(注意:
最好用低电压供电,供电电压太高传感器的寿命会变短。
5V供电为佳。
)3.工作电流,5V时18~20ma。
经大量测试,传感器硬件设置为18~20ma工作电流时性能最佳,主要表现在抗干扰能力上。
检测到物体,信号端输出低电平;
未检测到物体,信号端输出高电平。
5.传感器输出TTL电平,能直接与3。
3V或者5V单片机IO口相连.
黑线或者白线检测原理1。
利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,传感器发射出去的红外光被大部分反射回来.于是传感器输出低电平0.2。
当平面有一黑线,传感器在黑线上方时,因黑色的反射能力很弱,反射回来的红外光很少,达不到传感器动作的水平,所以传感器还输出1.3。
我们只要用单片机判断传感器的输出端是0或者是1,就能检测黑线。
4.检测白线的原理和检测黑线的原理一样,检测白线时,白线周边的颜色也要比较接近黑色,然后调节红外传感器上面的可调电阻,将灵敏度调低,一直调到刚好周边的颜色检测不到为止,那样就能检测白线了.
连接参考图如下:
3.5避碰模块
3.5。
1超声波模块
超声波智能避障实现方便、计算简单、易于做到实时控制,并且在测量精度方面能达到实用的要求,因此成为常用的避障方法。
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(MotorLeft1,LOW);
digitalWrite(MotorLeft2,LOW);
delay(i*30);
}
voidright(intc)//右转
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft2,HIGH);
delay(c*30);
voidstopp(intd)//停止
{
digitalWrite(MotorRight1,LOW);
digitalWrite(MotorLeft1,LOW);
delay(d*10);
voidback(intg)//后退
{digitalWrite(MotorRight1,HIGH);
digitalWrite(MotorRight2,LOW);
digitalWrite(MotorLeft1,HIGH);
delay(g*100);
voidre(intx)//右大转
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorLeft1,HIGH);
digitalWrite(MotorLeft2,LOW);
delay(x*25);
voidle(inth)//左打转
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);
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<
des—1)
{advance
(1);
stopp(50);
count=count+1;
if(count==des-1)
{le(12);
SM=digitalRead(SensorMiddle);
SR=digitalRead(SensorRight);
}elseif(count>
=des){digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
delay(50000);
}elseadvance
(2);
else//直進
}}
if(SM==LOW)
{if(SR==LOW&SL==HIGH)
{left
(1);
stopp
(2);
}elseif(SL==LOW&SR==HIGH)
{right
(1);
}}
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。
(”);
Serial.print(resuls->
bits,DEC);
Serial.println(”bits)”);
}Serial.print(”Raw(”);
Serial。
print(count,DEC);
Serial。
):
for(inti=0;
i〈count;
i++){if((i%2)==1)Serial.print(results—〉rawbuf[i]*USECPERTICK,DEC);
}else{Serial.print(—(int)results-〉rawbuf[i]*USECPERTICK,DEC);
}Serial。
}Serial。
println(””);
{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==?
){}
}}
3避碰模块程序
主程序
{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<
IRremote。
h〉
#include<
Servo。
h>
intRECV_PIN=12;
intMotorRight1=8;
intMotorRight2=9;
intMotorLeft2=6;
constintSensorLeft=2;
constintSensorRight=5;
intSL;
intSM;
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);
voiddump(decode_results*results)
{intcount=results—〉rawlen;
if(results->
decode_type==UNKNOWN)
{Serial.println("
Couldnotdecodemessage”);
else{if(results—〉decode_type==NEC){Serial。
DecodedNEC:
"
}elseif(results—〉decode_type==SONY)
{Serial.print("
DecodedSONY:
);
}elseifresults-〉decode_type==RC5)
DecodedRC5:
}elseif(results-〉decode_type==RC6){
DecodedRC6:
}Serial。
print(results->
value,HEX);
Serial.print("
(”);
Serial.print(results-〉bits,DEC);
println("
bits)”);
}Serial.print("
Raw("
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);
print(”"
Serial.println(””);
inton=0;
{Serial.begin(9600);
pinMode(MotorRight1,OUTPUT);
pinMode(MotorRight2,OUTPUT);
pinMode(MotorLeft1,OUTPUT);
pinMode(SensorMiddle,INPUT);
pinMode(SensorRight,INPUT);
pinMode(speedpin,OUTPUT);
pinMode(speedpin1,OUTPUT);
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(MotorRight2,LOW);
delay(c*30);
voidstopp(intd)
{digitalWrite(MotorRight1,LOW);
digitalWrite(MotorRight2,LOW);
delay(d*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报告 基于 Arduino 单片机 实物 设计