成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

畢業(yè)設(shè)計(jì) - 題目: 基于單片機(jī)的智能小車 - 嵌入式 物聯(lián)網(wǎng) 本科畢設(shè)

Genng / 2668人閱讀

摘要:基于單片機(jī)的智能小車控制就是其中的一個(gè)體現(xiàn)。本設(shè)計(jì)實(shí)現(xiàn)了一種基于單片機(jī)的自動(dòng)避障智能模型車系統(tǒng),通過紅外傳感器采集路況信息,通過對檢測信息的分析,自動(dòng)控制轉(zhuǎn)向電機(jī)轉(zhuǎn)向,改變行駛路徑,繞過障礙物,從而實(shí)現(xiàn)車穩(wěn)定避障。


1 簡介

Hi,大家好,這里是丹成學(xué)長,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目

基于單片機(jī)的智能小車

大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì)

技術(shù)解答、畢設(shè)幫助、開題指導(dǎo)print("Q 746876041") 

2 緒論

2.1 課題背景與目的

智能化作為現(xiàn)代電子產(chǎn)品的新趨勢, 是今后的電子產(chǎn)業(yè)的發(fā)展方向。智能化設(shè)計(jì)的電子產(chǎn)品可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)運(yùn)作, 不需要人為的管理, 可應(yīng)用于科學(xué)勘探、 環(huán)境監(jiān)測、 智能家居等方面。 基于單片機(jī)的智能小車控制就是其中的一個(gè)體現(xiàn)。 本設(shè)計(jì)實(shí)現(xiàn)了一種基于 51 單片機(jī)的自動(dòng)避障智能模型車系統(tǒng), 通過紅外傳感器采集路況信息, 通過對檢測信息的分析, 自動(dòng)控制轉(zhuǎn)向電機(jī)轉(zhuǎn)向, 改變行駛路徑, 繞過障礙物, 從而實(shí)現(xiàn)車穩(wěn)定避障。

3 系統(tǒng)設(shè)計(jì)

本設(shè)計(jì)學(xué)長采用直流減速電機(jī), 電機(jī)專用驅(qū)動(dòng)芯片L298N進(jìn)行電機(jī)驅(qū)動(dòng)控制, 主控芯片為STC89C52, 測距部分采用超聲波模塊, 控制器采用24L01無線電通信模塊, 自動(dòng)避障部分采用紅外收發(fā)模塊。

這個(gè)設(shè)計(jì)雖然只是學(xué)長的一個(gè)演示模型, 但是具有充分的科學(xué)性和實(shí)用性。 首先我們根據(jù)交通路面的復(fù)雜情況, 按照適當(dāng)?shù)谋壤谱鞒鲆粋€(gè)路況模型, 包括彎道、直道以及路面上設(shè)置的障礙物等。 在彎、 直道上, 小車沿著預(yù)定軌道自由行使,當(dāng)小車遇到障礙物時(shí), 脈沖調(diào)制的紅外線傳感器將檢測到的信號(hào)發(fā)送給單片機(jī),單片機(jī)根據(jù)程序發(fā)出相應(yīng)的控制信號(hào)控制小車自動(dòng)避開障礙物。 由無線模塊控制小車進(jìn)行倒車、 前進(jìn)、 左轉(zhuǎn)、 右轉(zhuǎn)等動(dòng)作。

3.1 設(shè)計(jì)方案

3.1.1 小車遙控部分

方案一

小車的無線通信模塊采用紅外遙控, 紅外收發(fā)遙控是目前大部份遙控小車采用的遙控手段, 紅外遙控具有代碼簡單, 操作性強(qiáng)的特點(diǎn)。 如圖為紅外遙控模塊實(shí)物圖。

方案二

小車的通信模塊采用無線電 NRF24L01 模塊, NRF24L01 是一款工作在 2. 4~2. 5GHz, 世界通用 ISM 頻段的單片無線收發(fā)器芯片。 無線收發(fā)器包括:頻率發(fā)生器、 增強(qiáng)型 SchockburstTM 模式控制器、 功率放大器、 晶體振蕩器、 調(diào)制器、 解調(diào)器。 輸出功率、 頻道選擇和協(xié)議的設(shè)置可以通過 SPI 接口進(jìn)行設(shè)置。如下圖為 NRF24L01 無線模塊實(shí)物圖。

3.1.2 小車驅(qū)動(dòng)部分

方案一

小車的電機(jī)驅(qū)動(dòng)部分采用自己搭建的 9012 三極管電路來實(shí)行小車的驅(qū)動(dòng), 9012 三極管電路具有電路簡單, 操作方便的等特點(diǎn)。

方案二

小車的電機(jī)驅(qū)動(dòng)部分采用 L298N 芯片直流電機(jī)驅(qū)動(dòng)模塊, 該模塊具有較大的驅(qū)動(dòng)帶載能力, 驅(qū)動(dòng)部分端子供電范圍 Vs: +5V~+35V, 并且另外自帶了 5V、 3V 的輸出端口。

方案論證

本設(shè)計(jì)為 4 輪驅(qū)動(dòng)的小車, 對于小車驅(qū)動(dòng)部分要求能夠有較大的帯載能力, 并且在小車的實(shí)際設(shè)計(jì)過程中, 需要不同的輸出電壓來提供給小車的各個(gè)模塊。 因此綜上所述采用方案二, 小車的電機(jī)驅(qū)動(dòng)部分使用 L298N 芯片直流電機(jī)驅(qū)動(dòng)模塊。

3.2 系統(tǒng)架構(gòu)

本設(shè)計(jì)主要分為兩部分: 遙控部分和小車部分。 遙控部分主要由電源電路,單片機(jī)最小系統(tǒng), 無線電模塊組成, 遙控部分的系統(tǒng)框圖如圖所示。

小車部分由電源電路, 單片機(jī)最小系統(tǒng), 顯示電路, 無線電木塊, 報(bào)警電路,超聲波電路等電路模塊組成, 小車部分的系統(tǒng)框圖如圖所示。

3.3 主要設(shè)計(jì)流程

注意這里學(xué)長設(shè)計(jì)的是藍(lán)牙通信方式的小車

3.3.1 材料

1.4wd小車一臺(tái),包含馬達(dá),兩個(gè)底盤,和螺絲等(要自己組裝)

L298N電機(jī)驅(qū)動(dòng)模塊兩個(gè),用來控制馬達(dá)的轉(zhuǎn)速,方向,停止與否。

51單片機(jī)最小系統(tǒng)板一個(gè)和STC89C52RC芯片一個(gè)

HC-05藍(lán)牙模塊一個(gè)(藍(lán)牙遙控)和usb轉(zhuǎn)TTL轉(zhuǎn)接模塊一個(gè)(用于設(shè)置和調(diào)試藍(lán)牙模塊)

路紅外循跡模塊(黑白循跡)

8650電池四個(gè)和18650電池盒和杜邦線若干。

3.3.2 組裝

  • 1.先把四個(gè)馬達(dá)和車輪裝在一起,組裝成一個(gè)小車框架。

  • 2.L298N電機(jī)的接線

一個(gè)L298N有四個(gè)輸出口(out1,out2,out3,out4)接馬達(dá),每兩個(gè)輸出口控制一個(gè)馬達(dá),因此可以控制兩個(gè)馬達(dá),12v接口接電源正極,5v接口是給最小系統(tǒng)板供電,所以5v接系統(tǒng)板5v口。

四個(gè)IO輸入口(in1,in2,in3,in4)通過芯片控制輸出口。兩個(gè)使能端口(A,B),只有高電平時(shí)電機(jī)才有有效,低電平時(shí)電機(jī)不轉(zhuǎn)轉(zhuǎn)。因?yàn)橛袃蓚€(gè)電機(jī)只有一個(gè)供電源所以兩個(gè)電機(jī)要并聯(lián)連接在一起。

下面是電機(jī)的控制表,當(dāng)使能端位低電平(0)時(shí)電機(jī)處于停止?fàn)顟B(tài),當(dāng)輸出口為(00或11)時(shí)處于制動(dòng)狀態(tài),阻止電機(jī)轉(zhuǎn)動(dòng)。

L298N無效,無法驅(qū)動(dòng)馬達(dá)的原因(1.電壓不夠,起碼要7v以上。2.使能端沒有處于高電平狀態(tài) 。3.L298N或馬達(dá)壞了).

藍(lán)牙的接線

藍(lán)牙接在最小系統(tǒng)板,藍(lán)牙的TXD(發(fā)送口)口接系統(tǒng)板的RXD(接收口)口,RXD口接TXD口也就是交叉連接,發(fā)送口對接收口。

在接在系統(tǒng)板之前,要對藍(lán)牙進(jìn)行一些設(shè)置(名稱,密碼,波特率),這時(shí)就要用到usb轉(zhuǎn)TTL模塊。

接在電腦上,打開串口調(diào)試助手(軟件在后面的鏈接),進(jìn)入AT模式 (進(jìn)入方法,藍(lán)牙模塊上面有個(gè)按鈕,在usb口插入電腦前,長按不放,插入電腦即可,如果看到藍(lán)牙模塊上的燈在快速閃爍,說明已經(jīng)進(jìn)入AT模式,慢閃是工作模式)。

紅外的接線

紅外模塊的接線很簡單,按照引腳上的說明,一一對應(yīng)接在系統(tǒng)板上即可。

3.4 軟件部分

3.4.1 遙控部分主程序流程

遙控部分主程序流程圖如圖所示。 程序從主函數(shù)開始執(zhí)行, 無線藍(lán)牙模塊初始化, 同時(shí)在主函數(shù)中定義單片機(jī)口對應(yīng)的按鍵按下時(shí)所發(fā)出的函數(shù)值。接下來判斷是否有按鍵按下, 如果有按鍵按下, 則發(fā)送相應(yīng)的按鍵對應(yīng)的函數(shù)值,接著判斷是否又有按鍵按下。 如果未發(fā)現(xiàn)按鍵按下則在主函數(shù)中循環(huán)判斷是否有按鍵按下。

3.4.2 小車部分主程序流程圖

小車部分主程序流程圖如圖所示。

程序從主函數(shù)開始執(zhí)行, 藍(lán)牙無線模塊初始化, 液晶顯示模塊初始化, 藍(lán)牙無線電模塊初始化, 超聲波模塊初始化。

各個(gè)模塊初始化完畢后, 單片機(jī)判斷是否接受到了信號(hào), 如果接收到信號(hào),則判斷相應(yīng)的按鍵值, 如果沒有接收到按鍵值則返回繼續(xù)判斷是否接受到信號(hào)。接收到信號(hào)后, 小車開始執(zhí)行鍵值對應(yīng)的相應(yīng)的命令。 而超聲波測距, 并在液晶上顯示相應(yīng)距離, 危險(xiǎn)距離報(bào)警都是貫穿在整個(gè) while(1) 的語句中的。

3.5 實(shí)現(xiàn)效果

3.5.1 手機(jī)控制軟件

3.5.2 小車部分效果


3.6 部分相關(guān)代碼

/************************************************  作者:丹成學(xué)長,Q746876041************************************************/#include#includesbit LEA=P1^0;//左邊輪的使能端Asbit LEB=P1^1;//左邊輪的使能端B//左前輪sbit LIN1=P1^2;//sbit LIN2=P1^3;////左后輪sbit LIN3=P1^4;sbit LIN4=P1^5;sbit REA=P3^2;//右邊輪使能端Asbit REB=P3^3;//右邊輪使能端B//右前輪sbit RIN1=P3^4;sbit RIN2=P3^5;//右后輪sbit RIN3=P3^6;sbit RIN4=P3^7;//方向控制void delay(int time);//延時(shí)函數(shù)void forward();//前進(jìn)void back();//后退void stop();//停止void start();//啟動(dòng)void turnLeft();//左轉(zhuǎn)void turnRight();//右轉(zhuǎn)//藍(lán)牙模塊//定時(shí)器1用作串口發(fā)生器,用于與藍(lán)牙通信void time1Init();//定時(shí)器1的初始化void processMsg();//處理藍(lán)牙接收到的信息//紅外模塊//從右到左//in1是最右邊的紅外燈sbit in1=P2^0;sbit in2=P2^1;sbit in3=P2^2;sbit in4=P2^3;int isTrace=0;//是否開啟循跡功能void trace();//紅外循跡//PWM調(diào)速//通過控制使能端高低電平輸出的時(shí)間從而控制速度int count=0; //用于計(jì)數(shù)int pwm=20;      //表示啟動(dòng)的時(shí)間,20表示啟動(dòng)20msvoid time0Init();//定時(shí)器0的初始化.                //用于控制高低電平的時(shí)間                //定時(shí)器比較準(zhǔn)確void go();//啟動(dòng) 使能端為高電平 1void pause();//停止    使能端為低電平 0void time0Fun();//定時(shí)器0的中斷函數(shù)int main(){    EA=1;//打開總中斷    time1Init();//定時(shí)器1初始化    time0Init();//定時(shí)器0初始化    start();//使車的方向一開始向前    while(1)    {        if(isTrace)            trace();        if(count>=100) //100ms一個(gè)周期            count=0;        if(count<pwm) //pwm表示啟動(dòng)的時(shí)間                      //pwm越大 速度越快            go();        else if(count>=pwm)            pause();    }    return 0;}void delay(int time)//延時(shí)函數(shù){    int i;    for(i=0;i<time;i++)    {        _nop_();//在晶振12M下                //一個(gè)nop函數(shù)延時(shí)1us    }}void forward()//前進(jìn){    //前進(jìn),所有輪正轉(zhuǎn)    LIN1=0;    LIN2=1;    LIN3=0;    LIN4=1;    RIN1=0;    RIN2=1;    RIN3=0;    RIN4=1;}void back()//后退{      //前進(jìn),所有輪反轉(zhuǎn)    LIN1=1;    LIN2=0;    LIN3=1;    LIN4=0;    RIN1=1;    RIN2=0;    RIN3=1;    RIN4=0;}void turnLeft()//左轉(zhuǎn){    //左轉(zhuǎn)  左邊的輪正轉(zhuǎn),右邊輪反轉(zhuǎn)    LIN1=0;    LIN2=1;    LIN3=0;    LIN4=1;    RIN1=1;    RIN2=0;    RIN3=1;    RIN4=0;    delay(5000);//延時(shí)5ms 控制轉(zhuǎn)彎的角度}void turnRight()//右轉(zhuǎn){    //右轉(zhuǎn),左邊輪反轉(zhuǎn),右邊輪正轉(zhuǎn)    LIN1=1;    LIN2=0;    LIN3=1;    LIN4=0;    RIN1=1;    RIN2=0;    RIN3=1;    RIN4=0;    delay(5000);//延時(shí)5ms 控制轉(zhuǎn)彎的角度}void stop()//停止{    //停止,全部高電平或低電平    LIN1=0;    LIN2=0;    LIN3=0;    LIN4=0;    RIN1=0;    RIN2=0;    RIN3=0;    RIN4=0;}void start(){    forward();//一開始,前進(jìn)方向}//定時(shí)器1用作串口發(fā)生器,用于與藍(lán)牙通信void time1Init()//定時(shí)器1的初始化{    TMOD=0x20;//定時(shí)器1,工作模式2,8位自動(dòng)重裝模式    TH1=0xfd;//9600波特率,要與藍(lán)牙的一致    TL1=0xfd;    //串口通信方式1    SM0=0;    SM1=1;    PCON=0x00;//波特率不加倍    SCON=0x50;//工作方式一    REN=1;//允許接收    ES=1;//開啟串口中斷    TR1=1;//啟動(dòng)定時(shí)1}void processMsg() interrupt 4 //中斷4//處理藍(lán)牙接收到的信息{    char ch;    //等待接收完畢    while(!RI)//當(dāng)RI為0時(shí)沒有接收完畢        ;        //為1時(shí)接收完畢    //信息存存在sbuf中    ch=SBUF;//獲取接收的信息    switch(ch)    {        case "f":  //前進(jìn)            forward();            break;        case "b": //后退            back();            break;        case "l": //左轉(zhuǎn)            turnLeft();            break;        case "r": //右轉(zhuǎn)            turnRight();            break;        case "s":    //停止            stop();            break;        case "o":            start();            break;//啟動(dòng)        case "t": //開啟循跡功能            isTrace=1;            break;        case "1":  //一檔            pwm=20;            break;        case "2":  //二檔            pwm=60;            break;        case "3": //三檔            pwm=100;            break;        default:            break;    }}void trace()//紅外循跡{    //當(dāng)紅外遇到黑線時(shí)吸收紅外光,輸出高電平    //遇到白線時(shí)反射紅外,輸出低電平    int dir=0;//0表示直走                //1 代表左轉(zhuǎn)                //2 代表右轉(zhuǎn)    //0 0 0 0    if(in1==0&&in2==0&&in3==0&&in4==0)        dir=0;    //1 0 0 0    else if (in1==1&&in2==0&&in3==0&&in4==0)        dir=2;    //1 1 0 0    else if (in1==1&&in2==1&&in3==0&&in4==0)        dir=2;    //1 1 1 0    else if (in1==1&&in2==1&&in3==1&&in4==0)        dir=0;    //1 1 1 1    else if (in1==1&&in2==1&&in3==1&&in4==1)        dir=0;    //0 1 0 0    else if (in1==0&&in2==1&&in3==0&&in4==0)        dir=2;    //0 1 1 0    else if (in1==0&&in2==1&&in3==1&&in4==0)        dir=0;    //0 1 1 1    else if (in1==0&&in2==1&&in3==1&&in4==1)        dir=1;    //0 0 1 0    else if (in1==0&&in2==0&&in3==1&&in4==0)        dir=1;    //0 0 1 1    else if (in1==0&&in2==0&&in3==1&&in4==1)        dir=1;    //1 0 1 0    else if (in1==1&&in2==0&&in3==1&&in4==0)        dir=1;    //1 1 1 0    else if (in1==1&&in2==1&&in3==1&&in4==0)        dir=2;    //1 0 1 1    else if (in1==1&&in2==0&&in3==1&&in4==1)        dir=0;    //1 0 0 1    else if (in1==1&&in2==0&&in3==0&&in4==1)        dir=0;    //0 0 0 1    else if (in1==0&&in2==0&&in3==0&&in4==1)        dir=1;    //1 1 0 1    else if (in1==1&&in2==1&&in3==0&&in4==1)        dir=0;    switch(dir)    {        case 0:            forward();            break;        case 1:            turnLeft();            break;        case 2:            turnRight();            break;    }}void time0Init()//定時(shí)器0的初始化.                //用于控制高低電平的時(shí)間                //定時(shí)器比較準(zhǔn)確{    TMOD|=0x01;//工作方式一                //用或運(yùn)算是為了不改變                //定時(shí)器1對應(yīng)位的值。    TH0=0xfc;    TL0=0x66;  //定時(shí)1ms    ET0=1;//開啟定時(shí)器0的中斷    TR0=1;//啟動(dòng)定時(shí)器0}void go()//啟動(dòng) 使能端為高電平 1{    LEA=1;    LEB=1;    REA=1;    REB=1;}void pause()//停止    使能端為低電平 0{    LEA=0;    LEB=0;    REA=0;    REB=0;}void time0Fun() interrupt 1{    TH0=0xfc;    TL0=0x66;    //1ms 中斷一次,count加一    count++;}/*******************************************************************篇幅有限,只展示部分代碼作者:丹成學(xué)長,Q746876041********************************************************************/

4 最后

技術(shù)解答、畢設(shè)幫助、開題指導(dǎo)print("Q 746876041") 

單片機(jī)畢設(shè)項(xiàng)目大全:
https://blog.csdn.net/huawei123444/article/details/119822845

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123692.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<