找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4355|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于89c51的紅外尋跡小車(chē)的制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:479983 發(fā)表于 2019-5-10 08:21 來(lái)自手機(jī) | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、        總體分析        3
二、        材料清單:        4
三、        系統(tǒng)原理圖        5
1.        L298n電機(jī)驅(qū)動(dòng):        5
2.        紅外模塊:        6
3.        51單片機(jī):        6
4.        7805穩(wěn)壓        7
四、        模塊功能        8
1.        L298n電機(jī)驅(qū)動(dòng):        8
2.        紅外模塊:        8
3.        51單片機(jī):        8
4.        7805穩(wěn)壓:        9
五、        軟件編程        10
1.        程序1:        10
2.        程序2:        12



材料清單:
小車(chē)底盤(pán)(帶輪胎,直流減速馬達(dá),萬(wàn)向輪);
紅外對(duì)管若干;
L9110和L298n電機(jī)驅(qū)動(dòng)模塊(推薦L298n);
51最小系統(tǒng)板(含51單片機(jī));
7805穩(wěn)壓芯片;
杜邦線若干;
銅柱若干;
18650電池(含電池盒);


系統(tǒng)原理圖
L298n電機(jī)驅(qū)動(dòng):



紅外模塊:

51單片機(jī):


7805穩(wěn)壓








模塊功能
L298n電機(jī)驅(qū)動(dòng):

L298N是ST公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。該芯片采用15腳封裝。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間峰值電流可達(dá)3A,持續(xù)工作電流為2A;額定功率25W。內(nèi)含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測(cè)電阻,將變化量反饋給控制電路。使用L298N芯片驅(qū)動(dòng)電機(jī)可以控制兩路電機(jī)。
紅外模塊:

紅外傳感器黑線的檢測(cè)原理是紅外發(fā)射管發(fā)射光線到路面,紅外光遇到白底則被反射,接收管接收到反射光,經(jīng)施密特觸發(fā)器整形后輸出低電平;當(dāng)紅外光遇到黑線時(shí)則被吸收,接收管沒(méi)有接收到反射光
51單片機(jī):

AT89C51單片機(jī)是把那些作為控制應(yīng)用所必需的基本內(nèi)容都集成在一個(gè)尺寸有限的集成電路芯片上。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM)、并行I/O口(4個(gè)8位I/O口)、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器。它們都是通過(guò)片內(nèi)單一總線連接而成,其基本結(jié)構(gòu)依舊是微處理器(CPU)加上外圍芯片的傳統(tǒng)結(jié)構(gòu)模式。但對(duì)各種功能部件的控制是采用特殊功能寄存器的集中控制方式,以實(shí)現(xiàn)不同的功能
7805穩(wěn)壓:
7805三端穩(wěn)壓集成電路,電子產(chǎn)品中,常見(jiàn)的三端穩(wěn)壓集成電路有正電壓輸出的78 ×× 系列和負(fù)電壓輸出的79××系列。顧名思義,三端IC是指這種穩(wěn)壓用的集成電路,只有三條引腳輸出,分別是輸入端、接地端和輸出端。


軟件編程
程序1:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit left1=P1^0;
sbit left2=P1^1;
sbit right1=P1^2;
sbit right2=P1^3; //
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;//紅外傳感
void delay(uint z)
{
uchar i;
while(z--)
{
for(i=0;i<121;i++);
}
} //延時(shí)函數(shù)}
void straight() //走直線函數(shù)
{
left1=0;
left2=1;
right1=0;
right2=1;
delay(3);
left1=0;
left2=0;
right1=0;
right2=0;
delay(14);
}
void turn_left() //左轉(zhuǎn)彎函數(shù)
{
left1=0;
left2=1;
right1=0;
right2=0;
delay(3);
left1=0;
left2=0;
right1=0;
right2=0;
delay(14);
}
void turn_right() //右轉(zhuǎn)彎函數(shù)
{

left1=0;
left2=0;
right1=0;
right2=1;
delay(3);
left1=0;
left2=0;
right1=0;
right2=0;
delay(14);
}
void tingzhi()//停止函數(shù)
{
left1=0;
left2=0;
right1=0;
right2=0;
left1=0;
left2=0;
right1=0;
right2=0;
}
void infrared() //循跡       
{
uchar flag;
{flag=3;}
else
if(led5==0&&(led3==1)&&(led2==1))                                                                          
{flag=4;}
else
if(led5==0&&(led1==1)&&(led4==1))                                  
{flag=4;}
else
if((led1==1)||(led2==1))
{flag=2;}
else
if((led3==1)||(led4==1))
{flag=1;}
else
flag=0;
switch (flag)
{
case 0: straight();
break;
case 2: turn_left();
break;
case 1: turn_right();
break;
case 3: straight();
break;
case 4: tingzhi();
break;
default: tingzhi();
break;
}
}
void main(void)
{
while(1)
{
infrared();
}
}

程序2:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar pro_zuo,pro_you,i,j; //左右占空比標(biāo)志
sbit left1=P1^0;
sbit left2=P1^1;       
sbit right1=P1^2;
sbit right2=P1^3; //
sbit led1=P2^0;       
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3; //紅外傳感
sbit led5=P2^4;               
sbit en1=P0^1;      
sbit en2=P0^2;     
void delay(uint z)
{
uchar i;
while(z--)
{for(i=0;i<121;i++);}
}
void init()
{
/*led1=0; //白線位置
led2=0; //白線位置
led5=1; //黑線位置
led3=0; //白線位置
led4=0; //白線位置 */
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
en1=1;
en2=1;
}
void time0(void)interrupt 1
{
i++;
j++;
if(i<=pro_you) {en1=1;}
   else en1=0;
if(i==40) {en1=~en1;i=0;}
if(j<=pro_zuo) {en2=1;}
   else en2=0;
if(j==40) {en2=~en2;j=0;}
TH0=(65536-100)/256;
TL0=(65536-100)%256;
}
void straight() //走直線函數(shù)
{
pro_you=4;
pro_zuo=5;
left1=0;
left2=1;
right1=0;
right2=1;
}
void turn_left() //左轉(zhuǎn)彎函數(shù)
{
pro_you=0;
pro_zuo=5;
left1=0;
left2=1;
right1=0;
right2=1;
}
void turn_right() //右轉(zhuǎn)彎函數(shù)
{
pro_you=5;
pro_zuo=0;
left1=0;
left2=1;
right1=0;
right2=1;
}
void tingzhi()//停止函數(shù)
{
left1=0;
left2=0;
right1=0;
right2=0;
left1=0;
left2=0;
right1=0;
right2=0;
}
void infrared() //循跡       
{
uchar flag;
if(led5==1&&(led3==1)&&(led2==1))                                                                 
{flag=3;}
else
if(led5==0&&(led3==1)&&(led2==1))                                                                 
{flag=4;}
else
if(led5==0&&(led1==1)&&(led4==1))                                                                 
{flag=4;}
else
if((led1==1)||(led2==1))
{flag=2;}
else
if((led3==1)||(led4==1))
{flag=1;}
else
flag=0;
switch (flag)
{
case 0: straight();
break;
case 1: turn_left();
break;
case 2: turn_right();
break;
case 3: straight();
break;
case 4: tingzhi();
break;
default: tingzhi();
break;
}
}
void main(void)
{
init();
delay(1);
while(1)
{
   infrared();
}
}
void int0(void)interrupt 0
{
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩1
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-5-10 18:20 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:479983 發(fā)表于 2019-5-19 17:07 來(lái)自手機(jī) | 只看該作者
好的,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表