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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于機器視覺的網球識別與回收裝置—智能小車STM32代碼

[復制鏈接]
跳轉到指定樓層
樓主
好久沒逛51hei電子論壇了,最近看到有人詢問智能小車(其實很多人都喜歡做小車),又想起自己寫過智能小車,上傳了,讓大家參考下。
實物忘了放哪就不拍了,注意是拿來參考的,不是讓你直接燒錄的…………,直接燒錄也沒用是吧。當時靠這個代碼拿了個電賽省二,新人們可以參考下,STM32的初學者也可以參照下思路,設計出一款自己的小車…………
好的,就這樣吧。
對了,第二個py文件是OPENMV的代碼,要用OPENMV攝像頭做顏色識別的同學也可參考下


單片機源程序如下:
  1. /**************************************************************************************

  2. *                              基于機器視覺的網球識別與回收裝置                                                                                                  *

  3.        摘要:本設計旨在制作出一個能夠在網球場上自動搜尋網球并自動回收網球的裝置。        
  4.                          本設計是以STM32單片機為核心設備,通過OPENMV攝像頭對網球進行圖像識別并回傳,
  5.        回傳數據處理后STM32將驅動回收裝置自動行駛到目標位置,實現將球自動拾取并存
  6.                          放的功能。本設計基本模塊包括MCU、驅動板、攝像頭、撿球裝置、收集裝置和電源。
  7.                          其中MCU為STM32F103核心板,驅動板為L293D電機驅動板,攝像頭為OPENMV,撿球裝
  8.                          置及收集裝置為定制結構。

  9.         適用單片機:STM32F103ZET6     適用開發板:野火科技 F103霸道開發板   
  10.                                 默認時鐘頻率:72MHZ                                                                                                         
  11. ***************************************************************************************/

  12. //連接方式 :請參考interface.h文件
  13. #include "stm32f10x.h"
  14. #include "interface.h"      //STM32各種接口
  15. #include "LCD1602.h"        //1602液晶屏(提供坐標可視化)
  16. #include "IRCtrol.h"        //定時及中斷相關
  17. #include "motor.h"          //電機及舵機驅動
  18. #include "uart.h"           //串口相關
  19. #include "redvoid.h"        //紅外避障相關
  20. #include "UltrasonicCtrol.h"//超聲波模塊相關(已棄用)

  21. /******注意:各個子文件并未清晰注釋,請讀者自行研究****/
  22. /**************************************************************************************/
  23. //全局變量定義
  24. unsigned int speed_count=0;//占空比計數器 50次一周期
  25. char front_left_speed_duty=SPEED_DUTY;
  26. char front_right_speed_duty=SPEED_DUTY;
  27. char behind_left_speed_duty=SPEED_DUTY;
  28. char behind_right_speed_duty=SPEED_DUTY;


  29. unsigned int tick_5ms = 0;//5ms計數器,作為主函數的基本周期
  30. unsigned int tick_1ms = 0;//1ms計數器,作為電機的基本計數器
  31. unsigned int tick_200ms = 0;//刷新顯示
  32. unsigned int tick_10ms = 0;
  33. unsigned int tick_500ms = 0;
  34. unsigned int zhuanjiao;  //舵機角度參考值
  35. unsigned int ServoFlag;  //舵機標志位
  36. unsigned int DetectFlag; //紅外避障標志位
  37. unsigned int DataBuf_x[3];   // 攝像頭傳回的x坐標數據
  38. unsigned int DataBuf_y[3];   // 攝像頭傳回的y坐標數據
  39. unsigned int buf_i;

  40. int x_pos;
  41. int y_pos;
  42. int x_pos_last;
  43. int y_pos_last;
  44. int Cam_key=0;
  45. int Turn_Flag=0;


  46. char ctrl_comm = COMM_STOP;//控制指令
  47. char ctrl_comm_last = COMM_STOP;//上一次的指令


  48. unsigned char continue_time=0;
  49. unsigned char bt_rec_flag=0;//藍牙控制標志位
  50. unsigned char redray_flag=0;//紅外循跡標志位
  51. unsigned char duoji_count=0;
  52. unsigned char RecFlag;
  53. /*****************************************************************************************/


  54. //定時器周期是0.1ms
  55. //舵機PWM周期是20ms,0 - 180°分別對應 0.5 - 2.5ms 的脈寬
  56. //變量zhuanjiao可調范圍為 5 - 25 對應 0 - 180°,當zhuanjiao = 15 時對應90°
  57. //為了讓舵機運行更精確,建議向右或向左轉是不要使用0°或180°,建議向中間靠近一點
  58. //右轉時選用zhuanjiao=7 左轉時用zhuanjiao=23

  59. /*******************************************************************************
  60. * 函 數 名 :DuojiMid
  61. * 函數功能 :舵機下壓
  62. * 輸    入 :無
  63. * 輸    出 :無
  64. *******************************************************************************/
  65. void DuojiMid()
  66. {
  67.         zhuanjiao++;
  68.   Delayms(20);
  69. }
  70.                                                         
  71. /*******************************************************************************
  72. * 函 數 名 :DuojiRight
  73. * 函數功能 :舵機上升
  74. * 輸    入 :無
  75. * 輸    出 :無
  76. *******************************************************************************/
  77. void DuojiRight()
  78. {
  79.         zhuanjiao--;
  80.         Delayms(20);
  81. }

  82. //void DuojiLeft()
  83. //{
  84. //        zhuanjiao = 230;
  85. //        Delayms(300);
  86. //}

  87. /*******************************************************************************
  88. * 函 數 名 :DuojiRight
  89. * 函數功能 :舵機相關動作
  90. * 輸    入 :無
  91. * 輸    出 :無
  92. *******************************************************************************/
  93. void Duoji()  //舵機動作函數
  94. {
  95.         int i;
  96.         zhuanjiao=100;
  97.         CarStop();
  98.         for(i=0;i<110;i++)
  99.         {
  100.                 DuojiMid();          //zhuanjiao ++ 向下壓
  101.         }

  102.                 for(i=0;i<110;i++)
  103.         {
  104.                 DuojiRight();          //zhuanjiao -- 向上抬起
  105.         }

  106. }

  107. /*******************************************************************************
  108. * 函 數 名 :search
  109. * 函數功能 :小車處理攝像頭發送的坐標,根據不同情況執行不同功能
  110. * 輸    入 :無
  111. * 輸    出 :無
  112. *******************************************************************************/
  113. void search()
  114. {
  115.                                 if(Turn_Flag==1)
  116.                         {
  117.                                 if(x_pos_last == x_pos)
  118.                                 {
  119.                                    CarRight();
  120.                                 }
  121.                                        
  122.                         }        

  123.           else{
  124.                         
  125.                                 if(x_pos>200)
  126.                                 {
  127.                                         CarRight();                                        //修正轉右
  128.                                 }  
  129.                                 
  130.                                 else if(x_pos<120)
  131.                                 {
  132.                                         CarLeft();          //修正轉左
  133.                                 }  
  134.                                 
  135.                                 else if(120<x_pos  &&  x_pos<200)  //x坐標在區間內
  136.                                 {
  137.                                  
  138.                                         if(y_pos<150)   //y坐標bu在區間內
  139.                                          {                        
  140.                                           CarBack();               //go straight,wrong name
  141.                                          }
  142.                                        
  143.                                          if(y_pos>180)
  144.                                   {                                         
  145.                                                  CarGo();                //go backwards,wrong name                                          
  146.                                          }
  147.                                        
  148.                                  else if(150<y_pos  &&  y_pos<180 )
  149.                                         {
  150.                                                  if(VOID_R_IO==BARRIER_Y||VOID_M_IO==BARRIER_Y||VOID_L_IO==BARRIER_Y)
  151.                                                  Delayms(10);
  152.                                                  if(VOID_R_IO==BARRIER_Y||VOID_M_IO==BARRIER_Y||VOID_L_IO==BARRIER_Y)                                                
  153.                                                  Duoji();   
  154.                                          }
  155.                                   }                                                                                                        
  156.                            }
  157.                                 
  158.                                 
  159.                         if( (x_pos_last - x_pos) > 50 || (x_pos_last - x_pos)  < -50   )
  160.                            {
  161.                                 CarRight();
  162.                            }                     //比較x軸與前一次值避免兩球同時判斷混亂
  163.                         
  164.                                 x_pos_last=x_pos;
  165.                                 y_pos_last=y_pos; //記錄上一次的坐標
  166.                                        
  167. }

  168. /*******************************************************************************
  169. * 函 數 名 :TurnBack
  170. * 函數功能 :小車強制右轉(適用于紅外避障)
  171. * 輸    入 :無
  172. * 輸    出 :無
  173. *******************************************************************************/
  174. void TurnBack()
  175. {
  176.         
  177.         CarRight();
  178.         Delayms(1000);

  179. }

  180. /*******************************************************************************
  181. * 函 數 名 :main
  182. * 函數功能 :主函數
  183. * 輸    入 :無
  184. * 輸    出 :無
  185. *******************************************************************************/
  186. int main(void)
  187. {
  188.         unsigned int i;
  189.         delay_init();
  190.         GPIOCLKInit();
  191.         UserLEDInit();
  192.         LCD1602Init();
  193.         IRCtrolInit();
  194.         TIM2_Init();
  195.         TIM5_Init();
  196.         MotorInit();
  197.         //UltraSoundInit();
  198.         RedRayInit();
  199.         ServoInit();
  200.         USART1Conf(9600);
  201.         USART3Conf(9600);
  202.         Delayms(500);
  203.         
  204.         for(i=0;i<3;i++)
  205.           {
  206.                         DataBuf_x[i]=0x30;
  207.                         DataBuf_y[i]=0x30;
  208.                
  209.                 }
  210.                         
  211. /******************************************************************************************/
  212. while(1)
  213. {         
  214.                          if(tick_5ms >= 5)
  215.                 {
  216.                         tick_5ms = 0;

  217.                         tick_200ms++;
  218.                         if(tick_200ms >= 40)
  219.                         {
  220.                                 tick_200ms = 0;
  221.                                 LEDToggle(LED_PIN);
  222.                         }
  223.                         continue_time--;//200ms 無接收指令就停車
  224.                         
  225.                         if(continue_time == 0)
  226.                         {
  227.                                 continue_time = 1;
  228.                                 CarStop();
  229.                         }
  230.                                 
  231.         LCD1602WriteCamData();        
  232.                                                 
  233.                                 x_pos=(DataBuf_x[0]-0x30)*100+(DataBuf_x[1]-0x30)*10+(DataBuf_x[2]-0x30);
  234.                                 y_pos=(DataBuf_y[0]-0x30)*100+(DataBuf_y[1]-0x30)*10+(DataBuf_y[2]-0x30);
  235.                         
  236.               if(Cam_key==1)
  237.                           {        
  238.                search();                                       
  239.                           }
  240.                                                                                                                                        
  241.                                 if(VOID_R_IO==BARRIER_Y||VOID_M_IO==BARRIER_Y||VOID_L_IO==BARRIER_Y)
  242.                                 {   
  243.            Delayms(10);
  244.            if        (VOID_R_IO==BARRIER_Y && VOID_M_IO==BARRIER_Y  &&  VOID_L_IO==BARRIER_Y)                                //檢測前方是不是墻,是的話就掉頭                                                                                    
  245. ……………………

  246. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
小車V6.1.7z (618.95 KB, 下載次數: 54)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:615455 發表于 2020-6-18 11:26 | 只看該作者
謝謝 分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人性生活 | 国产欧美日韩精品一区 | 人人做人人澡人人爽欧美 | 日韩成人精品一区二区三区 | 天天射天天干 | 国产乱码精品一区二区三区忘忧草 | 日韩综合在线 | 四色永久 | 亚洲国产区 | 日韩一区二区福利视频 | 丝袜美腿一区二区三区动态图 | 日韩精品在线一区 | 色噜噜亚洲男人的天堂 | 性在线 | 青青伊人久久 | 亚洲女人天堂成人av在线 | 一区二区久久精品 | 在线视频成人 | 久久婷婷麻豆国产91天堂 | 国产激情在线播放 | 国产精品69毛片高清亚洲 | 欧美一二三四成人免费视频 | 国产福利在线播放麻豆 | 欧美精品久久久久 | h视频在线免费 | 国产91在线 | 亚洲 | 日韩欧美在 | 欧美jizzhd精品欧美巨大免费 | 国产精品免费一区二区三区 | 国产一区二区三区视频免费观看 | h片免费看 | 另类二区 | 国产中文区二幕区2012 | 男人的天堂视频网站 | 国产成人精品午夜 | 动漫www.被爆羞羞av44 | 久久久久无码国产精品一区 | 欧美日韩在线一区二区三区 | 欧美综合在线观看 | 亚洲一区二区三区久久久 | 日本国产一区二区 |