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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4290|回復: 1
打印 上一主題 下一主題
收起左側

stm32單片機紅外遙控超聲波避障小車源程序+視頻+制作詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:794476 發表于 2020-7-2 10:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
去年11月到12月,和同學一起在學校參加院電子設計大賽做的項目,看起來時間很長,但實際上我們攏共做的時間差不多是3天的樣子。
板子是正點的,所以很多地方我們就直接扒的正點的例程,比如紅外遙控的部分完整拿過來了,能直接用。
我們在完成學校的要求后又多加了測距顯示和差速調節(讓小車可以從完全停止到最高速度),后面我會分塊盡量詳細敘述小車的功能原理及代碼介紹。

視頻演示
https://www.bilibili.com/video/av85501350/
電源
我們采用的是三節18650供電,三節電池就有12v,用來驅動小車綽綽有余,為了獲得更穩定符合小車需求的電壓,我們又采用了一個LM2596S降壓模塊,把12V的電壓給降到3v給單片機供電。在安裝電源的時候,其實我們犯了一個錯誤,把電池給安裝在了小車的第二層,這樣在取放電池時就需要拆卸螺絲,比較麻煩。

驅動
驅動模塊使用的是經典的L298N,主要是實驗室一抓一大把,關于模塊的詳細說明可以搜索得到,不再贅述。
我們對于這個模塊具體的使用如圖我們做的是4輪驅動,把輪子分左右用一個驅動模塊進行驅動,為了用PWM對小車進行速度控制,所以我們需要調用時鐘,這里調用TIM4,使能PB8對左電機進行方向控制,使能PB9作為左電機的PWM信號,使能PA6對右電機進行方向控制,使能PB10作為右電機的PWM信號。

一邊有倆電機對應倆輪子,所以,這里還進行了映射,PB8映射到PB5和PB6,對應左邊的in1和in2,進行方向控制。
PA6映射到PA5和PA6,對應左邊的in3和in4,進行方向控制。
更多具體的配置都在函數里面。
驅動部分并不是由我完全負責,所以我會在大體完成后找機會請當時一起完成的小伙伴一起校驗。
在驅動部分,我想再主要挑一部分詳細談談。
當時我們在對于進行差速控制部分有一個想法,讓它實現從零開始逐步加速或者最高速逐步減速,同時也完成要求的三擋速度。
對于要求的三擋速度,其他選了小車的組,據我觀察,應該都是在函數里面寫好了預先配置3個的PWM占空比,來實現。
當時是我負責的這個功能的實現,我覺得這樣寫只能單一完成那個要求,然后為了達成我們預想的差速調節,于是我在主函數設置一個變量來代表占空比,然后motor.c里面引進并在后面的調速函數和三擋預置速度函數調用,就能夠實現這兩個功能了。里面更改占空比的數值是我們測試調節修改出來的。


在控制方向上,我們有旋轉和有一定精度的角度的旋轉。功能完成也是依靠調節占空比,不再贅述。

超聲波部分我們采用的模塊是HC-SR04,同樣是一個比較經典的模塊,這一部分比較搞的是什么,是超聲波模塊需要5v供電,及其重要,我們一開始代碼調試好后,一直顯示不出來正確的數據,一直為0(我們有加OLED顯示模塊,所以可以方便測試),從驅動做好后一直順風順水突然在這卡殼了,弄得我們自閉許久。后來在網上查到是5v供電后,一改立馬成功。

OLED顯示
我們用的0.96寸7針顯示模塊,代碼部分也沒什么好說的,網上找到讀懂后直接調用就行了

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "motor.h"
  4. #include "usart.h"
  5. #include "remote.h"  
  6. #include "oled.h"
  7. #include "hcsr04.h"
  8. /*
  9. void ZYSTM32_run(int speed,int time);       //前進函數
  10. void ZYSTM32_brake(int time);               //剎車函數
  11. void ZYSTM32_Spin_Left(int speed,int time); //左旋轉函數
  12. void ZYSTM32_Spin_Right(int speed,int time);//右旋轉函數
  13. void ZYSTM32_back(int speed,int time);      //后退函數
  14. */
  15. float length=0,sum=0;
  16.          u16 tim;
  17.          uint j=0;
  18. int i=2000;
  19. int main(void)
  20. {        
  21.          u8 key;
  22.           float distance;
  23.          delay_init();
  24.          TIM4_PWM_Init(7199,0);  //初始化PWM
  25.          Remote_Init();                        //紅外接收初始化        
  26.          CH_SR04_Init();
  27.                           OLED_Init();                        //初始化OLED  
  28.                 OLED_Clear();
  29.          ZYSTM32_brake(500);         
  30.          NVIC_Config();         
  31.          while(1)
  32.                 {                  
  33.                          key=Remote_Scan();        
  34.                         distance=Senor_Using();                        
  35.                         OLED_ShowString(0,2,"distance is");
  36.                         OLED_ShowNum(0,4,distance,8,20);
  37.                         if(distance>30)
  38.                         switch(key)
  39.                         {   
  40.                                 case 98:ZYSTM32_run(100);break;            
  41.                                 case 2:ZYSTM32_brake(100);break;                                             
  42.                                 case 34:ZYSTM32_Spin_Left(100);break;                  
  43.                                 case 168:ZYSTM32_back(100);break;                  
  44.                                 case 194:ZYSTM32_Spin_Right(100);break;
  45.         case 104:speedchange(1);break;
  46.         case 152:speedchange(2);break;        
  47.         case 176:speedchange(3);break;        
  48.                                 case 48:turnleft45(220);break;                //4   
  49.                                 case 24:turnright45(220);break;                //5   
  50.                      case 16:turnleft45(50);break;     //7
  51.         case 56:turnright45(50);break;                //8               
  52.                                 case 224:speeddown();break;                                    
  53.                                 case 144:speedup();break;
  54.                         }
  55.                         else
  56.                                 {
  57.                                         ZYSTM32_back(100);
  58.                                         delay_us(50);
  59.                                         ZYSTM32_brake(100);
  60.                         }
  61.                 }
  62. }
復制代碼

所有資料51hei提供下載:
小車基礎部分+紅外遙控+超聲波避障測距顯示.7z (205.01 KB, 下載次數: 126)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:793141 發表于 2020-9-19 14:58 | 只看該作者
為什么用紅外遙控沒有反應
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区 | www.黄网| 久草在线影 | 国产精品日韩欧美一区二区 | 成人在线小视频 | 亚洲电影一区 | 成人在线精品视频 | 久久大陆 | 亚洲视频在线看 | 日韩在线一区二区三区 | 日韩成人在线视频 | 日韩视频一区二区 | 黄a大片| 久久久国产一区二区三区 | 91天堂网 | 精品欧美一区二区三区久久久 | 久久99国产精品久久99果冻传媒 | 国产高清免费视频 | 在线欧美亚洲 | 国产欧美精品一区二区三区 | 成人黄色网址大全 | 久久免费香蕉视频 | h片在线看 | 日韩av在线一区二区 | 一区二区日本 | 欧美日韩在线电影 | 国产资源视频 | 成人h电影在线观看 | 久久精品在线免费视频 | 午夜视频在线免费观看 | 中文字幕亚洲精品 | 成人区一区二区三区 | 毛片免费观看视频 | 中文字幕一区二区三区不卡在线 | 免费一级黄 | 久久精品com | 亚洲精品电影 | 精品久久香蕉国产线看观看亚洲 | 亚洲免费久久久 | 亚洲综合伊人 | 99国产精品久久久 |