亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

Genng / 2833人閱讀

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


1 簡介

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

基于單片機的智能小車

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

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

2 緒論

2.1 課題背景與目的

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

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

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

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

3.1 設(shè)計方案

3.1.1 小車遙控部分

方案一

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

方案二

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

3.1.2 小車驅(qū)動部分

方案一

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

方案二

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

方案論證

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

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

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

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

3.3 主要設(shè)計流程

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

3.3.1 材料

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

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

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

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

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

8650電池四個和18650電池盒和杜邦線若干。

3.3.2 組裝

  • 1.先把四個馬達和車輪裝在一起,組裝成一個小車框架。

  • 2.L298N電機的接線

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

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

下面是電機的控制表,當使能端位低電平(0)時電機處于停止狀態(tài),當輸出口為(00或11)時處于制動狀態(tài),阻止電機轉(zhuǎn)動。

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

藍牙的接線

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

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

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

紅外的接線

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

3.4 軟件部分

3.4.1 遙控部分主程序流程

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

3.4.2 小車部分主程序流程圖

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

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

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

3.5 實現(xiàn)效果

3.5.1 手機控制軟件

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ù)void forward();//前進void back();//后退void stop();//停止void start();//啟動void turnLeft();//左轉(zhuǎn)void turnRight();//右轉(zhuǎn)//藍牙模塊//定時器1用作串口發(fā)生器,用于與藍牙通信void time1Init();//定時器1的初始化void processMsg();//處理藍牙接收到的信息//紅外模塊//從右到左//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)速//通過控制使能端高低電平輸出的時間從而控制速度int count=0; //用于計數(shù)int pwm=20;      //表示啟動的時間,20表示啟動20msvoid time0Init();//定時器0的初始化.                //用于控制高低電平的時間                //定時器比較準確void go();//啟動 使能端為高電平 1void pause();//停止    使能端為低電平 0void time0Fun();//定時器0的中斷函數(shù)int main(){    EA=1;//打開總中斷    time1Init();//定時器1初始化    time0Init();//定時器0初始化    start();//使車的方向一開始向前    while(1)    {        if(isTrace)            trace();        if(count>=100) //100ms一個周期            count=0;        if(count<pwm) //pwm表示啟動的時間                      //pwm越大 速度越快            go();        else if(count>=pwm)            pause();    }    return 0;}void delay(int time)//延時函數(shù){    int i;    for(i=0;i<time;i++)    {        _nop_();//在晶振12M下                //一個nop函數(shù)延時1us    }}void forward()//前進{    //前進,所有輪正轉(zhuǎn)    LIN1=0;    LIN2=1;    LIN3=0;    LIN4=1;    RIN1=0;    RIN2=1;    RIN3=0;    RIN4=1;}void back()//后退{      //前進,所有輪反轉(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);//延時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);//延時5ms 控制轉(zhuǎn)彎的角度}void stop()//停止{    //停止,全部高電平或低電平    LIN1=0;    LIN2=0;    LIN3=0;    LIN4=0;    RIN1=0;    RIN2=0;    RIN3=0;    RIN4=0;}void start(){    forward();//一開始,前進方向}//定時器1用作串口發(fā)生器,用于與藍牙通信void time1Init()//定時器1的初始化{    TMOD=0x20;//定時器1,工作模式2,8位自動重裝模式    TH1=0xfd;//9600波特率,要與藍牙的一致    TL1=0xfd;    //串口通信方式1    SM0=0;    SM1=1;    PCON=0x00;//波特率不加倍    SCON=0x50;//工作方式一    REN=1;//允許接收    ES=1;//開啟串口中斷    TR1=1;//啟動定時1}void processMsg() interrupt 4 //中斷4//處理藍牙接收到的信息{    char ch;    //等待接收完畢    while(!RI)//當RI為0時沒有接收完畢        ;        //為1時接收完畢    //信息存存在sbuf中    ch=SBUF;//獲取接收的信息    switch(ch)    {        case "f":  //前進            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;//啟動        case "t": //開啟循跡功能            isTrace=1;            break;        case "1":  //一檔            pwm=20;            break;        case "2":  //二檔            pwm=60;            break;        case "3": //三檔            pwm=100;            break;        default:            break;    }}void trace()//紅外循跡{    //當紅外遇到黑線時吸收紅外光,輸出高電平    //遇到白線時反射紅外,輸出低電平    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()//定時器0的初始化.                //用于控制高低電平的時間                //定時器比較準確{    TMOD|=0x01;//工作方式一                //用或運算是為了不改變                //定時器1對應(yīng)位的值。    TH0=0xfc;    TL0=0x66;  //定時1ms    ET0=1;//開啟定時器0的中斷    TR0=1;//啟動定時器0}void go()//啟動 使能端為高電平 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") 

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

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

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

相關(guān)文章

發(fā)表評論

0條評論

閱讀需要支付1元查看
<