標題: 51紅外循跡小車 [打印本頁]
作者: 5ey6y 時間: 2018-6-4 11:05
標題: 51紅外循跡小車
項目分工:
1、領料、焊接、板子的成型。
2、板子的裝接、調試。
3、程序的編寫與仿真
4、資料的收集與整理、實驗報告總結。
一、課題具體安排與實施實訓時間:第十六周到第十九周;
第十六周收集材料,板子成型;
第十七周寫程序;
第十八周調試、寫實驗報告;
第十九周答辯。
二、課題目標:1、掌握基于C51單片機、FPGA模數混合硬件系統設計和程序設計;
2、學會智能電子產品的功能設計與任務分析,能進行小型電子產品方案的設計;
3、通過智能循跡小車軟件系統設計,整機調試,設計、軟件性能并仿真調試;
4、培養團隊合作能力、溝通能力、創新能力以及組織能力。
三、課題要求: 1.基本要求
(1)輸入電源:12V;

(2)具有前進、左轉、右轉、自動停車的功能;
(3)能根據提供的8字循跡路線進行尋跡。
2.發揮部分
(1)按鍵啟動;
(2)轉向提示;
(3)鳴號提示;
摘要:本循跡小車是AT89C51單片機為控制核心,加以直流電機,電源電路以及其他電路構成。系統AT89C51通過I/O控制小車前進及轉向。尋跡由光敏電阻組成光敏探測器完成。
四、小車循跡原理: 本智能循跡小車以AT89C51單片機為核心控制系統,用光敏電阻組成光敏探測器。光敏電阻的阻值可以跟隨周圍環境光線的變化而變化。當光線照射到白線上面時,光線反射強烈,光線照射到黑線上面時,光線反射較弱。因此光敏在白線和黑線上面上方時,阻值會發生明顯的變化。將阻值的變化值經過比較器就可以輸出高低電平。經單片機處理后,輸出控制信號給電機驅動電路,來控制電機的驅動。所以整個過程不需要人來控制,當不同的光敏電阻檢測到黑線時,電機會有不同的轉動方向。從而實現了簡單的智能控制。
五、硬件設計1、總體設計

電路原理方框圖
2、單片機控制系統模塊設計
我們采用AT89C52片機最小系統電路為整個系統的控制系統,它負責控制小車的運動狀態。
(1)啟動小車
小車在接收到FPGA送過來的啟動指令后,讀取尋跡信號,根據尋跡信號確定小車的運行狀態,將小車的運行狀態送至FPGA,同時根據相應算法,驅動小車的左右電機前進。
(2)正常前進
當尋跡板中間兩個傳感器檢測到黑線(任意一個檢測到黑線或兩個同時檢測到黑線),小車都正常前進。
(3) 左拐彎
當最左端的傳感器檢測到黑線,右端3個傳感器檢測到白色時,小車應左拐彎。
(4) 右拐彎
當最右端的傳感器檢測到黑線,左端3個傳感器檢測到白色時,小車應右拐彎。
(5)后退
當4個傳感器都檢測到白色,小車后退。
(6) 停車
當4個傳感器同時連續多次檢測到黑線(如連續3次),小車停車。小車停車后,發出一個停車標志信號送給FPGA。
3、尋跡模塊的設計
尋跡板送過來的4路檢測信號送到FPGA板,FPGA將此4路信號送出至4個LED燈顯示狀態(檢測至黑線亮,否則滅);同時將此4路信號送到單片機。

4、顯示模塊的設計
我們采用的是數碼管顯示。
(1) 小車啟動
小車啟動時,顯示“1”。
(2)小車左拐
小車左拐時,顯示“2”。
(3) 小車右拐
小車右拐時,顯示“3”。
(4)小車前進
小車前進時,顯示“4”。
(5) 小車后退
小車后退時,顯示“5”。
(6) 停車
小車停車時,顯示“6”。
5、提示音模塊的設計
(1) 小車啟動
小車啟動前發出3聲“嘟、嘟、嘟”的聲音,提示音結束后,FPGA發出一個啟動信號給單片機,從而啟動小車。
(2) 停車
小車停車時,FPGA播放一首音樂,音樂播放結束即表示小車完成了任務。
6、FPGA模塊的設計
(1) 尋跡信號處理
尋跡板過來的信號一方面送到LED燈顯示尋跡狀態,另一方面要將此信號送到單片機去處理。
(2) 小車狀態顯示
將小車的運行狀態用數碼管顯示出來。
(3) 提示音
小車啟動前,發出3聲提示音。小車停車后播放一首音樂。
(4) 小車啟動
小車在發出3聲提示音后,FPGA發出一個開始指令給單片機,從而啟動小車前進。
(5) 小車停車
小車停車后,FPGA接收到單片機的停車指令,開始播放音樂,直到一首音樂播放完畢。
7、電機驅動模塊設計
我們選用電機驅動芯片L298N。L298N為單塊集成電路,高電壓,高電流,四通道驅動,可直接是對電機進行控制,無需隔離電路,通過單片機的I/O輸入改變控制端的電平,即可以對電機進行正反轉,停止的操作,非常方便,亦能滿足直流減速電機的大電流要求。調試時在依照上表,用程序輸入對應的碼值,能夠實現對應的動作。下表是其使能、輸入引腳和輸出引腳的邏輯關系。
六、軟件設計 智能小車的控制使用ATMEL公司的AT89C51單片機。程序設計上,通過對檢測信號的采集、分析數據,判斷出小車的運行狀態,進而控制小車沿黑線行駛。
主程序流程圖

七、程序設計:1、單片機C語言程序設計:
#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;}//右轉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;}//左轉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、循跡程序設計:
#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;
}
}
作者: 夢縈藍寶 時間: 2018-12-16 21:07
如果配上備注的話那就是錦上添花了,謝謝樓主提供程序
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
h视频在线观看免费
|
中文精品视频
|
久久久成人动漫
|
国产目拍亚洲精品99久久精品
|
国内精品久久久久久
|
一区二区免费视频
|
欧美不卡一区二区三区
|
日本a视频
|
亚洲精品性视频
|
伊人网国产
|
午夜精品久久久久久久久久久久久
|
精品欧美激情在线观看
|
日本黄色大片免费
|
偷拍亚洲色图
|
亚洲精品4
|
亚洲欧美日韩精品久久亚洲区
|
久草青青
|
亚洲精品久久久
|
日韩欧美在线不卡
|
免费国产网站
|
欧美日韩高清一区二区三区
|
亚洲一区二区三区四区五区中文
|
国产情侣在线看
|
国产综合在线视频
|
蜜桃官网
|
黑人巨大精品欧美一区二区免费
|
久久久久一区
|
国产一级免费在线观看
|
最新中文字幕久久
|
成人精品视频在线观看
|
国内在线视频
|
97国产一区二区
|
国产小视频在线看
|
久久久久久国产精品免费免费男同
|
拍真实国产伦偷精品
|
盗摄精品av一区二区三区
|
另类在线
|
国产一区二区黑人欧美xxxx
|
91视频免费在观看
|
操久久|
91九色视频
|