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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2176|回復(fù): 1
收起左側(cè)

51單片機(jī)L298N循跡避障功能智能小車程序設(shè)計(jì)

[復(fù)制鏈接]
ID:1023151 發(fā)表于 2023-12-29 10:28 | 顯示全部樓層 |閱讀模式
該設(shè)計(jì)是在單片機(jī)小車為基礎(chǔ)開發(fā)的循跡系統(tǒng)。小車由L298N電機(jī)驅(qū)動模塊、紅外循跡模塊,由STC89C52RC控制芯片完成各模塊之間的連接與控制。按鍵能傳送相應(yīng)命令,對小車移動進(jìn)行靈活巧妙的控制。當(dāng)系統(tǒng)啟動后,通過按鍵來選擇紅外循跡的圖形從而改變小車的移動方向。在自動模式下,能沿著紅外循跡到地面黑線運(yùn)動,能躲避障礙物。具體設(shè)計(jì)模塊圖如圖1-1所示。  
制作出來的實(shí)物圖如下:
1.jpg 2.jpg 3.jpg

電路原理圖如下:
1.png

4.1 主程序設(shè)計(jì)
在軟件設(shè)計(jì)中,采用了PWM 調(diào)速、信息融合技術(shù)等,編寫程序時(shí)使用了C/C++語言,實(shí)現(xiàn)相同功能時(shí)只需要更簡單的語句,循跡模塊主程序?yàn)榕袛嗾Z句,判斷光電開關(guān)的狀態(tài),如果其中一個(gè)光電傳感器未接收到反射信號(黑線或障礙物吸收了紅外光線),單片機(jī)使用PWM 算法調(diào)控,通過控制電流在一個(gè)周期中的占空比,立刻調(diào)整左右輪差速實(shí)現(xiàn)方向調(diào)控,實(shí)現(xiàn)轉(zhuǎn)彎循跡,如果兩個(gè)光電傳感器同時(shí)未接收到反射信號,單片機(jī)輸出電平停止直流電機(jī)的運(yùn)轉(zhuǎn),實(shí)現(xiàn)避障停車。通過調(diào)用各個(gè)子函數(shù)實(shí)現(xiàn)智能小車的功能,經(jīng)實(shí)踐檢測程序的整體可讀性較好,方便移植。
4.2 電機(jī)驅(qū)動程序
本設(shè)計(jì)采用 L298N電機(jī)驅(qū)動模塊。由L298N模塊各個(gè)端口的邏輯關(guān)系可知,當(dāng) ENA與ENB為 1 時(shí),通過控制 IN1、IN2、IN3、IN4 端口電平的高低來改變電機(jī)的轉(zhuǎn)向。電機(jī)方向控制邏輯表如表3-1。同時(shí)單片機(jī)還可以產(chǎn)生PWM波,通過調(diào)節(jié)占空比的方式來控制電機(jī)的轉(zhuǎn)速。
4.3 紅外循跡程序
初始化結(jié)束后,接收到循跡指令,小車前方有一對紅外對管,分別置于黑線兩側(cè),紅外管相對于黑線有 2mm到 4mm的距離。當(dāng)兩對紅外管都能探測到黑線時(shí),汽車就會一直向前行駛。當(dāng)左側(cè)傳感器無法檢測到黑線時(shí),左側(cè)電機(jī)向前旋轉(zhuǎn),右側(cè)電機(jī)向后旋轉(zhuǎn),利用差速原理實(shí)現(xiàn)車輛的向右轉(zhuǎn)向,直到檢測到左側(cè)的黑線后,小車?yán)^續(xù)沿直線行駛。同樣,當(dāng)無法在右側(cè)檢測到黑線時(shí),右電機(jī)向左旋轉(zhuǎn),左電機(jī)向右旋轉(zhuǎn),實(shí)現(xiàn)車輛的向左轉(zhuǎn)向,直到在右側(cè)檢測到黑線,小車?yán)^續(xù)直線行駛。循跡流程如圖3-1所示。
4.4 按鍵掃描程序
只要使用單片機(jī),按鍵檢測基本上是一定要實(shí)現(xiàn)的功能。按鍵檢測要好用,最重要的是實(shí)時(shí)和去抖。初學(xué)者往往會在主循環(huán)調(diào)用按鍵檢測程序(實(shí)時(shí))并利用延時(shí)去抖(準(zhǔn)確)。這種在主循環(huán)內(nèi)延時(shí)的做法對整個(gè)程序非常不友好,也非常不高效。因此我們將其做成一個(gè)按鍵檢測的模塊化程序,方便調(diào)用和調(diào)試

單片機(jī)源程序如下:
  1. #include <REGX52.H>
  2. #include "LCD1602.h"
  3. #include "Delay.h"
  4. #include "Timer0.h"
  5. #include "CCDR.h"
  6. #include "Key.h"
  7. sbit MotorA=P1^4;
  8. sbit MotorB=P1^5;

  9. sbit A01=P1^0;
  10. sbit A02=P1^1;
  11. sbit B01=P1^2;
  12. sbit B02=P1^3;

  13. unsigned char Sr=1;////半徑(無限制)
  14. unsigned char Rr=10;////半徑(1~80)

  15. unsigned char Counter,CompareA,CompareB;        //計(jì)數(shù)值和比較值,用于輸出PWM
  16. unsigned char KeyNum,m,
  17.         SpeedA=13,
  18.   SpeedB=10;


  19. void cwA(int a)///正
  20. {
  21.                 A01=0;
  22.     A02=1;
  23.     CompareA=a;
  24. }
  25. void ccwA(int a)///反
  26. {
  27.                 A01=1;
  28.     A02=0;
  29.     CompareA=a;
  30. }
  31.        
  32. void cwB(int b)///反
  33. {
  34.                 B01=1;
  35.     B02=0;
  36.     CompareB=b;
  37. }
  38. void ccwB(int b)///正
  39. {
  40.                 B01=0;
  41.     B02=1;
  42.     CompareB=b;
  43. }

  44. void qian(void)
  45. {
  46.          cwA(SpeedA);
  47.          cwB(SpeedB);
  48. }
  49. void hou (void)
  50. {
  51.          ccwA(SpeedA);
  52.          ccwB(SpeedB);
  53. }
  54. void you(void)
  55. {
  56.         cwA(SpeedA);
  57.         ccwB(SpeedB);
  58. }
  59. void zuo(void)
  60. {
  61.         ccwA(SpeedA);
  62.         cwB(SpeedB);
  63. }
  64. void square()
  65. {
  66.         qian();
  67.         time(Sr);
  68.   zuo();
  69.         Delay(600);

  70. }
  71. void round()
  72. {
  73.          cwA(SpeedA);
  74.          cwB(SpeedB+Rr);
  75. }




  76. void main()
  77. {
  78.                 Timer0_Init();
  79. //          LCD_Init();                                                //LCD初始化
  80. //          LCD_ShowChar(1,1,'A');                        //在1行1列顯示字符A
  81. //          LCD_ShowString(1,3,"Hello");        //在1行3列顯示字符串Hello
  82. //        LCD_ShowNum(1,9,66,2);                        //在1行9列顯示數(shù)字66,長度為2
  83. //        LCD_ShowSignedNum(1,12,-88,2);        //在1行12列顯示有符號數(shù)字-88,長度為2
  84. //        LCD_ShowHexNum(2,1,0xA5,2);                //在2行1列顯示十六進(jìn)制數(shù)字0xA5,長度為2
  85. //        LCD_ShowBinNum(2,4,0xA5,8);                //在2行4列顯示二進(jìn)制數(shù)字0xA5,長度為8
  86. //        LCD_ShowChar(2,13,0xDF);                //在2行13列顯示編碼為0xDF的字符
  87. //        LCD_ShowChar(2,14,'C');                        //在2行14列顯示字符C
  88.         while(1)
  89.         {
  90.                 KeyNum=Key();
  91.                 if(KeyNum==1)
  92.                 {
  93.       m=0;
  94.                 }               
  95.                 if(KeyNum==2)
  96.                 {
  97.       m=1;
  98.                 }
  99.                 if(m==1)
  100.                 {
  101. //                 LCD_ShowString(1,3,"square");                        //在1行1列顯示字符A
  102.      square();
  103.                 }
  104.                 if(m==0)
  105.                 {
  106. //                        LCD_ShowString(1,3,"round");                        //在1行1列顯示字符A
  107.             round();
  108.                 }

  109.         }
  110. }
  111. void Timer0_Routine() interrupt 1
  112. {
  113.         TL0 = 0x9C;                //設(shè)置定時(shí)初值
  114.         TH0 = 0xFF;                //設(shè)置定時(shí)初值
  115.         Counter++;
  116.         Counter%=100;        //計(jì)數(shù)值變化范圍限制在0~99
  117.         if(Counter<CompareA)        //計(jì)數(shù)值小于比較值
  118.         {
  119.                 MotorA=1;                //輸出1
  120.         }
  121.         else                                //計(jì)數(shù)值大于比較值
  122.         {
  123.                 MotorA=0;                //輸出0
  124.         }
  125.         if(Counter<CompareB)        //計(jì)數(shù)值小于比較值
  126.         {
  127.                 MotorB=1;                //輸出1
  128.         }
  129.         else                                //計(jì)數(shù)值大于比較值
  130.         {
  131.                 MotorB=0;                //輸出0
  132.         }
  133. }

復(fù)制代碼
原理圖PCB: 無
仿真: 無
代碼: 51單片機(jī)電子繪圖小車.7z (1.57 MB, 下載次數(shù): 23)

視頻.7z

5.85 MB, 下載次數(shù): 6, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:1107914 發(fā)表于 2024-1-4 10:07 | 顯示全部樓層
求 怎么把里面顯示日期的代碼改成顯示學(xué)號的啊...靜態(tài)顯示就行
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线观看中文字幕dvd播放 | 亚洲精品久久久久avwww潮水 | 黄网站免费在线 | 欧美片网站免费 | 中文字幕日韩欧美一区二区三区 | 色资源在线观看 | 在线永久看片免费的视频 | 欧美一级片免费看 | 日本男人天堂 | 91精品亚洲| av日韩精品| 日韩一区二区三区视频 | 成人av一区 | 九九久久国产 | 天天干天天干 | 久久久久久久一区 | 国产一级黄色网 | 国产精品久久一区二区三区 | 国产欧美精品区一区二区三区 | 国产精品成人69xxx免费视频 | 亚洲在线一区 | 欧美色成人 | 久久精品国产99国产 | 欧美一级三级在线观看 | 美女网站视频免费黄 | 91高清在线观看 | 国产露脸国语对白在线 | 国产精品一区二区福利视频 | 亚洲成人一区二区在线 | 久久久久亚洲 | 亚洲综合首页 | 91大片| 在线视频一区二区 | 美女在线视频一区二区三区 | 国产视频久久 | 一级片av| 久久久久久中文字幕 | 国产农村妇女精品一区 | aaaaa毛片 | 国产精品日韩 | 涩色视频在线观看 |