久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

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

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

51紅外循跡小車(chē)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:344502 發(fā)表于 2018-6-4 11:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
項(xiàng)目分工:
1、領(lǐng)料、焊接、板子的成型。
2、板子的裝接、調(diào)試。
3、程序的編寫(xiě)與仿真
4、資料的收集與整理、實(shí)驗(yàn)報(bào)告總結(jié)。
一、課題具體安排與實(shí)施實(shí)訓(xùn)時(shí)間:第十六周到第十九周;
第十六周收集材料,板子成型;
第十七周寫(xiě)程序;
第十八周調(diào)試、寫(xiě)實(shí)驗(yàn)報(bào)告;
第十九周答辯。
二、課題目標(biāo):1、掌握基于C51單片機(jī)、FPGA模數(shù)混合硬件系統(tǒng)設(shè)計(jì)和程序設(shè)計(jì);
2、學(xué)會(huì)智能電子產(chǎn)品的功能設(shè)計(jì)與任務(wù)分析,能進(jìn)行小型電子產(chǎn)品方案的設(shè)計(jì);
3、通過(guò)智能循跡小車(chē)軟件系統(tǒng)設(shè)計(jì),整機(jī)調(diào)試,設(shè)計(jì)、軟件性能并仿真調(diào)試;
4、培養(yǎng)團(tuán)隊(duì)合作能力、溝通能力、創(chuàng)新能力以及組織能力。
三、課題要求: 1.基本要求
1)輸入電源:12V

2)具有前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)、自動(dòng)停車(chē)的功能;
   3)能根據(jù)提供的8字循跡路線進(jìn)行尋跡。
2.發(fā)揮部分
(1)按鍵啟動(dòng);
(2)轉(zhuǎn)向提示;
(3)鳴號(hào)提示;
摘要:本循跡小車(chē)是AT89C51單片機(jī)為控制核心,加以直流電機(jī),電源電路以及其他電路構(gòu)成。系統(tǒng)AT89C51通過(guò)I/O控制小車(chē)前進(jìn)及轉(zhuǎn)向。尋跡由光敏電阻組成光敏探測(cè)器完成。
四、小車(chē)循跡原理:   本智能循跡小車(chē)以AT89C51單片機(jī)為核心控制系統(tǒng),用光敏電阻組成光敏探測(cè)器。光敏電阻的阻值可以跟隨周?chē)h(huán)境光線的變化而變化。當(dāng)光線照射到白線上面時(shí),光線反射強(qiáng)烈,光線照射到黑線上面時(shí),光線反射較弱。因此光敏在白線和黑線上面上方時(shí),阻值會(huì)發(fā)生明顯的變化。將阻值的變化值經(jīng)過(guò)比較器就可以輸出高低電平。經(jīng)單片機(jī)處理后,輸出控制信號(hào)給電機(jī)驅(qū)動(dòng)電路,來(lái)控制電機(jī)的驅(qū)動(dòng)。所以整個(gè)過(guò)程不需要人來(lái)控制,當(dāng)不同的光敏電阻檢測(cè)到黑線時(shí),電機(jī)會(huì)有不同的轉(zhuǎn)動(dòng)方向。從而實(shí)現(xiàn)了簡(jiǎn)單的智能控制。

五、硬件設(shè)計(jì)1、總體設(shè)計(jì)

電路原理方框圖
2、單片機(jī)控制系統(tǒng)模塊設(shè)計(jì)
     我們采用AT89C52片機(jī)最小系統(tǒng)電路為整個(gè)系統(tǒng)的控制系統(tǒng),它負(fù)責(zé)控制小車(chē)的運(yùn)動(dòng)狀態(tài)。
(1)啟動(dòng)小車(chē)
      小車(chē)在接收到FPGA送過(guò)來(lái)的啟動(dòng)指令后,讀取尋跡信號(hào),根據(jù)尋跡信號(hào)確定小車(chē)的運(yùn)行狀態(tài),將小車(chē)的運(yùn)行狀態(tài)送至FPGA,同時(shí)根據(jù)相應(yīng)算法,驅(qū)動(dòng)小車(chē)的左右電機(jī)前進(jìn)。
(2)正常前進(jìn)
      當(dāng)尋跡板中間兩個(gè)傳感器檢測(cè)到黑線(任意一個(gè)檢測(cè)到黑線或兩個(gè)同時(shí)檢測(cè)到黑線),小車(chē)都正常前進(jìn)。
(3) 左拐彎
      當(dāng)最左端的傳感器檢測(cè)到黑線,右端3個(gè)傳感器檢測(cè)到白色時(shí),小車(chē)應(yīng)左拐彎。
(4) 右拐彎
      當(dāng)最右端的傳感器檢測(cè)到黑線,左端3個(gè)傳感器檢測(cè)到白色時(shí),小車(chē)應(yīng)右拐彎。
(5)后退
      當(dāng)4個(gè)傳感器都檢測(cè)到白色,小車(chē)后退。
(6) 停車(chē)
      當(dāng)4個(gè)傳感器同時(shí)連續(xù)多次檢測(cè)到黑線(如連續(xù)3次),小車(chē)停車(chē)。小車(chē)停車(chē)后,發(fā)出一個(gè)停車(chē)標(biāo)志信號(hào)送給FPGA。
3、尋跡模塊的設(shè)計(jì)
尋跡板送過(guò)來(lái)的4路檢測(cè)信號(hào)送到FPGA板,F(xiàn)PGA將此4路信號(hào)送出至4個(gè)LED燈顯示狀態(tài)(檢測(cè)至黑線亮,否則滅);同時(shí)將此4路信號(hào)送到單片機(jī)。



4、顯示模塊的設(shè)計(jì)
我們采用的是數(shù)碼管顯示。
(1) 小車(chē)啟動(dòng)
      小車(chē)啟動(dòng)時(shí),顯示“1”。
(2)小車(chē)左拐
      小車(chē)左拐時(shí),顯示“2”。
(3) 小車(chē)右拐
      小車(chē)右拐時(shí),顯示“3”。
(4)小車(chē)前進(jìn)
      小車(chē)前進(jìn)時(shí),顯示“4”。
(5) 小車(chē)后退
      小車(chē)后退時(shí),顯示“5”。
(6) 停車(chē)
           小車(chē)停車(chē)時(shí),顯示“6”。
5、提示音模塊的設(shè)計(jì)
(1) 小車(chē)啟動(dòng)
      小車(chē)啟動(dòng)前發(fā)出3聲“嘟、嘟、嘟”的聲音,提示音結(jié)束后,F(xiàn)PGA發(fā)出一個(gè)啟動(dòng)信號(hào)給單片機(jī),從而啟動(dòng)小車(chē)。
(2) 停車(chē)
      小車(chē)停車(chē)時(shí),F(xiàn)PGA播放一首音樂(lè),音樂(lè)播放結(jié)束即表示小車(chē)完成了任務(wù)。
6FPGA模塊的設(shè)計(jì)
1 尋跡信號(hào)處理
      尋跡板過(guò)來(lái)的信號(hào)一方面送到LED燈顯示尋跡狀態(tài),另一方面要將此信號(hào)送到單片機(jī)去處理。
2 小車(chē)狀態(tài)顯示
      將小車(chē)的運(yùn)行狀態(tài)用數(shù)碼管顯示出來(lái)。
3 提示音
      小車(chē)啟動(dòng)前,發(fā)出3聲提示音。小車(chē)停車(chē)后播放一首音樂(lè)。
4 小車(chē)啟動(dòng)
      小車(chē)在發(fā)出3聲提示音后,FPGA發(fā)出一個(gè)開(kāi)始指令給單片機(jī),從而啟動(dòng)小車(chē)前進(jìn)。
5 小車(chē)停車(chē)
      小車(chē)停車(chē)后,FPGA接收到單片機(jī)的停車(chē)指令,開(kāi)始播放音樂(lè),直到一首音樂(lè)播放完畢。
7、電機(jī)驅(qū)動(dòng)模塊設(shè)計(jì)
  我們選用電機(jī)驅(qū)動(dòng)芯片L298NL298N為單塊集成電路,高電壓,高電流,四通道驅(qū)動(dòng),可直接是對(duì)電機(jī)進(jìn)行控制,無(wú)需隔離電路,通過(guò)單片機(jī)的I/O輸入改變控制端的電平,即可以對(duì)電機(jī)進(jìn)行正反轉(zhuǎn),停止的操作,非常方便,亦能滿足直流減速電機(jī)的大電流要求。調(diào)試時(shí)在依照上表,用程序輸入對(duì)應(yīng)的碼值,能夠?qū)崿F(xiàn)對(duì)應(yīng)的動(dòng)作。下表是其使能、輸入引腳和輸出引腳的邏輯關(guān)系。
EN A(B)
IN1 (IN3)
IN2 (IN4)
電機(jī)運(yùn)行情況
H
H
L
正轉(zhuǎn)
H
L
H
反轉(zhuǎn)
H
IN2 (IN4)
IN1 (IN3)
快速停止
L
X
X
停止

六、軟件設(shè)計(jì) 智能小車(chē)的控制使用ATMEL公司的AT89C51單片機(jī)。程序設(shè)計(jì)上,通過(guò)對(duì)檢測(cè)信號(hào)的采集、分析數(shù)據(jù),判斷出小車(chē)的運(yùn)行狀態(tài),進(jìn)而控制小車(chē)沿黑線行駛。
   主程序流程圖



開(kāi)始

開(kāi)機(jī)指示

按鍵選擇

是否在直道?

檢測(cè)右轉(zhuǎn)?

檢測(cè)左轉(zhuǎn)?

是否檢測(cè)到全為白線?

停止按鈕

啟動(dòng)按鈕

Y

直行

N

Y

左電機(jī)轉(zhuǎn)
小車(chē)右轉(zhuǎn)

N

N

N

Y

停止

左電機(jī)轉(zhuǎn)
小車(chē)右轉(zhuǎn)

Y



七、程序設(shè)計(jì):
1、單片機(jī)C語(yǔ)言程序設(shè)計(jì):
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char w0=0;
unsigned char w1=0;
unsigned char t=0;
sbit RT1=P1^0;
sbit RT2=P1^1;
sbit LT1=P1^2;
sbit LT2=P1^3;
sbit IN1=P0^0;
sbit IN2=P0^1;
sbit IN3=P0^2;
sbit IN4=P0^3;
sbit ENA=P0^4;
sbit ENB=P0^5;
void delay(int z)
{
while(z--);
}
void init()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
}
void time0()interrupt 1
{
if(t<w0)
ENA=1;
else
ENA=0;
if(t<w1)
ENB=1;
else
ENB=0;
t++;
if(t>=100)
{t=0;}
}
void qianjin()
{
w0=30;
w1=30;
}
void turn_left1()
{w0=0;
w1=50;
}
void turn_left2()
{w0=0;
w1=60;
}
void turn_right1()
{w0=50;
w1=0;
}
void turn_right2()
{w0=60;
w1=0;
}
void xunji()
{
uchar flag;
if((RT1==1)&&(RT2==1)&&(LT1==1)&&(LT2==1))
{flag=0;}//直行
else if((RT1==0)&&(RT2==1)&&(LT1==1)&&(LT2==1))
{flag=1;}//右轉(zhuǎn)1
else if((RT1==0)&&(RT2==0)&&(LT1==1)&&(LT2==1))
{flag=2;}//2
else if((RT1=1)&&(RT2==1)&&(LT1==0)&&(LT2==1))
{flag=3;}//左轉(zhuǎn)1
else if((RT1==1)&&(RT2==1)&&(LT1==0)&&(LT2==0))
{flag=4;}//2
switch(flag)
{ case0:qianjin();
        break;
  case1:turn_righ1t();
        break;
  case2:turn_right2();
        break;
  case3:turn_left1();
        break;
  case4:turn_left2();
        break;
}
}
void main()
{init();
w0=30;
w1=30;
while(1)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
ENA=1;
ENB=1;
while(1)
{xunji();
}
}
}
  
2、循跡程序設(shè)計(jì):
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint tt=0,flag=0,flag1=0,flag2=0,num=0;
sbit in1=P2^0;
sbit in2=P2^1;
sbit in3=P2^2;
sbit in4=P2^3;
sbit a=P0^0;
sbit b=P0^1;
sbit c=P0^2;
sbit d=P0^3;
sbit ENA=P2^4;
sbit ENB=P2^5;
sbit control=P1^0;
sbit FPGA1=P1^1;
sbit FPGA2=P1^2;
sbit FPGA3=P1^3;
sbit FPGA4=P1^4;
sbit buzzer=P1^5;
void init_time();
void delay(unsigned int z);
void Turn_left()
{
       in1=0;
       in2=0;
       in3=1;
    in4=0;
}
      
void Turn_right()
{
       in1=1;
       in2=0;
       in3=0;
       in4=0;
}
void Go()
{
       in1=1;
       in2=0;
       in3=1;
       in4=0;
}
void Back()
{
       in1=0;
       in2=1;
       in3=0;
       in4=1;
}
void Stop()
{
       in1=1;
       in2=1;
       in3=1;
       in4=1;
}
void Go_left_right()
{
      
       in1=1;
       in2=0;
       in3=0;
       in4=1;
}
/*void Go_right()
{
       in1=0;
       in2=1;
       in3=0;
       in4=0;
}*/
void FPGA_display()
{
       FPGA1=a;
       FPGA2=b;
       FPGA3=c;
       FPGA4=d;
}
void FPGA_display1()
{
       FPGA1=a&0;
       FPGA2=b|1;
       FPGA3=c|1;
       FPGA4=d&0;
}
void main()
{
       uint i=10;
       init_time();
       delay(2);
       control=0;
       buzzer=1;
       //P0=0xff;
       //P1=0xff;
       //delay(2000);
      
       //delay(2000);
       //Go();
       //delay(100);
      
       while(!control)
       {
      
       delay(2);
       FPGA_display1();
       //delay(200);
       //delay(200);
       }
      
      
      
       if(control==1)
       {
              delay(300);
              Go();
              delay(100);
              Go();
              delay(100);
                     while(2)
                     {
                            if((a==0&&b==0&&c==1&&d==1)||(a==0&&b==0&&c==0&&d==1)||(a==0&&b==0&&c==1&&d==0))
                            Turn_right();FPGA_display();
                            delay(30);
                            if((a==1&&b==1&&c==0&&d==0)||(a==1&&b==0&&c==0&&d==0)||(a==0&&b==1&&c==0&&d==0))
                            Turn_left();FPGA_display();
                            delay(30);
                            if(a==0&&b==1&&c==1&&d==0)
                            Go();FPGA_display();
                            delay(9);
                            if(a==0&&b==0&&c==0&&d==0)
                            {
                                   Back();FPGA_display();
                                delay(10);
                                   Back();
                                    delay(10);
                                   
                                   Back();
                                   flag1++;
                                   flag2++;
                                   if(flag2==13)
                                          flag2=0;
                                   if(flag1==8)
                                   flag1=0;
                            }
                            if(flag1==7)
                            {
                                   flag1=0;
                                   Go();
                                   delay(60);
                                   Go();
                                   delay(60);
                                   Go();
                                   delay(60);
                                   Go();
                                   delay(60);
                                   
                                   
                                   
                            }
                            delay(5);
                            if(a==1&&b==1&&c==1&&d==1)
                            {
                                   flag++;
                                   if(flag==12)
                                          flag=4;
                            }
                            if(flag==1||flag==2||flag==3)
                            {
                                   Stop();
                                   //Turn_right();
                                   delay(100);
                                   Stop();
                                   delay(100);
                                   Back();
                                   delay(100);
                                   Back();
                                   delay(100);
                                   Back();
                                   delay(300);
                                   Back();
                                   delay(300);
                                   Turn_right();
                                   delay(500);
                                   Turn_right();
                                   delay(500);
                                   Turn_right();
                                   delay(500);
                                   //Back();
                                   //delay(200);
                                   
                                   //Turn_left();
                                   Turn_right();
                                   delay(500);
                                   //Turn_left();
                                   Turn_right();
                                   delay(400);
                                   //Turn_left();
                                   Turn_right();
                                   delay(300);
                                   //Turn_left();
                                   Turn_right();
                                   delay(200);
                                   flag=4;
                                   Go();
                                   delay(10);
                                   
                            }
                            //if(flag>=2)
                            //{
                            //     Go();
                            //     delay(50);
                            //}
                                   
                                   
                            //Go();
                            //Back();
                           
                     }
       }            
}
void delay(unsigned int z)
{
       unsigned int i,j;
       for(i=z;i>0;i--)
           for(j=110;j>0;j--);  
}
void init_time()
{
       TMOD=0x01;
       TH0=(65536-25000)/256;
       TL0=(65536-25000)%256;
       EA=1;
       TR0=1;
       ET0=1;
}
void time_0(void) interrupt 1
{
       TH0=(65536-20000)/256;
       TL0=(65536-20000)%256;
       tt++;
       num++;
       if(num==500)
       {
          num=0;
       buzzer=0;
       }
       //delay(1);
       if(tt>=9)
              tt=0;
       if(tt<=4)
       {
              ENA=1;
              ENB=1;
       }
       else
       {
              ENA=0;
              ENB=0;
       }
      
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:427288 發(fā)表于 2018-12-16 21:07 | 只看該作者
如果配上備注的話那就是錦上添花了,謝謝樓主提供程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线观看视频网站 | 日韩中文字幕视频 | 国产精品视频偷伦精品视频 | 亚洲精品久久区二区三区蜜桃臀 | 亚洲国产二区 | 亚洲午夜精品在线观看 | 国产精品国产成人国产三级 | 欧美一卡二卡在线观看 | www.亚洲 | 天天操夜夜操 | 91视频在线看 | 日韩国产欧美一区 | 国产 日韩 欧美 在线 | 中文字幕一区二区三区乱码在线 | 视频一区 国产精品 | 日韩高清国产一区在线 | 免费国产视频 | 亚洲美女一区二区三区 | 欧美又大粗又爽又黄大片视频 | 国产精品日韩 | a级在线免费视频 | 亚洲色综合 | 一区二区三区四区在线 | 一二三四av | 国产91丝袜在线播放 | 天堂av资源 | 天天插天天狠天天透 | 国产一二区在线 | 午夜天堂 | 久久男人| 日韩精品一区二区三区中文在线 | 欧美黑人一级爽快片淫片高清 | 欧美成人一级视频 | 在线看片网站 | 综合精品久久久 | 久久国产亚洲 | 日韩在线小视频 | 午夜午夜精品一区二区三区文 | 久久综合一区二区三区 | 免费av播放 | 亚洲精品国产区 |