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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14855|回復: 6
收起左側

Arduino智能循跡避障小車源程序

  [復制鏈接]
ID:627209 發表于 2019-10-21 18:48 | 顯示全部樓層 |閱讀模式
本小車基于Arduino uno開發,循跡比較靈敏,避障部分只適合本人設計的特殊賽道。
設計智能小車首先應該確定小車的基本結構,其主要包括以下幾個部分:
1)循跡模塊:指小車利用紅外發射裝置發射紅外線后,照射物體表面返回量的多少來測定小車的具體的位置,以進行循跡。
2)電機驅動模塊:指通過專用電路對電機進行驅動,單片機給出控制信號通過L298驅動電機正常運轉。
3)控制模塊:這是小車的控制中心,本設計采用Arduino系列單片機
4)電源模塊: 因設計需要,我們給小車單獨供電,設置獨立的電源模塊,使之穩定運行。
5)超聲波避障模塊:本文使用Arduino連接 HC-SR04 超聲波測距傳感器,超聲波完成距離測定,并控制小車在前方障礙小于某一特定值時,做出“停止”、“后退”等一系列動作。
  1. #define STOP      0
  2. #define FORWARD   1
  3. #define BACKWARD  2
  4. #define TURNLEFT  3
  5. #define TURNRIGHT 4

  6. int Trig = 12;
  7. int Echo = 13;
  8. float distance;
  9. int Distance = 0;
  10. int leftMotor1=2;//定義I1接口
  11. int leftMotor2=4;//定義I2接口
  12. int ENA = 6;//定義EA(PWM調速)接
  13. int rightMotor1 =7;//定義I3接口
  14. int rightMotor2 =8;//定義I4接口
  15. int ENB=5;//定義EB(PWM調速)接口
  16. int IRR=14;//定義右側尋線傳感器接口
  17. int IRM=15;//定義中間尋線傳感器接口
  18. int IRL=16;//定義左側尋線傳感器接口

  19. void setup()
  20. {
  21.   Serial.begin(9600);
  22.   pinMode(Trig,OUTPUT);
  23.   pinMode(Echo,INPUT);
  24.   pinMode(leftMotor1,OUTPUT);
  25.   pinMode(leftMotor2,OUTPUT);
  26.   pinMode(ENA,OUTPUT);
  27.   pinMode(rightMotor1,OUTPUT);
  28.   pinMode(rightMotor2,OUTPUT);
  29.   pinMode(ENB,OUTPUT);
  30.   pinMode(IRR,INPUT);
  31.   pinMode(IRM,INPUT);
  32.   pinMode(IRL,INPUT);
  33. }

  34. void motorRun(int cmd,int value)
  35. {
  36.   analogWrite(ENA, value);  //設置PWM輸出,即設置速度
  37.   analogWrite(ENB, value);
  38.   switch(cmd){
  39.     case FORWARD:
  40.       Serial.println("FORWARD"); //輸出狀態 前進
  41.       digitalWrite(leftMotor1,HIGH );
  42.       digitalWrite(leftMotor2,LOW );
  43.       digitalWrite(rightMotor1,LOW );
  44.       digitalWrite(rightMotor2,HIGH );
  45.       break;
  46.      case BACKWARD:
  47.       Serial.println("BACKWARD"); //輸出狀態 后退
  48.       digitalWrite(leftMotor1,LOW);
  49.       digitalWrite(leftMotor2,HIGH);
  50.       digitalWrite(rightMotor1,HIGH);
  51.       digitalWrite(rightMotor2,LOW);
  52.       break;
  53.      case TURNLEFT:
  54.       Serial.println("TURN  LEFT"); //輸出狀態 左轉
  55.       digitalWrite(leftMotor1, LOW);
  56.       digitalWrite(leftMotor2, HIGH);
  57.       digitalWrite(rightMotor1, LOW);
  58.       digitalWrite(rightMotor2, HIGH);
  59.       break;
  60.      case TURNRIGHT:
  61.       Serial.println("TURN  RIGHT"); //輸出狀態右轉
  62.       digitalWrite(leftMotor1, HIGH);
  63.       digitalWrite(leftMotor2, LOW);
  64.       digitalWrite(rightMotor1, HIGH);
  65.       digitalWrite(rightMotor2, LOW);
  66.       break;
  67.      default:
  68.       Serial.println("STOP"); //輸出狀態 停止
  69.       digitalWrite(leftMotor1, LOW);
  70.       digitalWrite(leftMotor2, LOW);
  71.       digitalWrite(rightMotor1, LOW);
  72.       digitalWrite(rightMotor2, LOW);
  73.   }
  74. }

  75. float Distance_test()
  76. {
  77.   digitalWrite(Trig,LOW);       //產生一個10US的高脈沖去觸發Trigpin
  78.   delayMicroseconds(2);
  79.   digitalWrite(Trig,HIGH);            
  80.   delayMicroseconds(10);            
  81.   digitalWrite(Trig,LOW);  
  82.   float distance = pulseIn(Echo,HIGH);
  83.   Distance = distance/58;
  84.   return Distance;
  85. }

  86. void loop()
  87. {
  88.   
  89.     Distance_test();
  90.      Serial.println(Distance);
  91.               if(Distance > 20 )
  92.                        {
  93.                          tracing();
  94.                        }
  95.               else if(Distance < 20 )
  96.               {
  97.                     motorRun(STOP,0);  
  98.                     delay(900);  
  99.                     motorRun(BACKWARD,60);
  100.                     delay(200);  
  101.                     motorRun(STOP,0);  
  102.                     delay(900);  
  103.                     motorRun(TURNLEFT,80);
  104.                     delay(800);
  105.                     motorRun(STOP,0);  
  106.                     delay(900);
  107.                     motorRun(FORWARD,60);
  108.                     delay(700);
  109.                     motorRuin(STOP,0);  
  110.                     delay(900);
  111.                     motorRun(TURNRIGHT,80);
  112.                     delay(800);
  113.                     motorRun(FORWARD,60);
  114.                     delay(1100);   
  115.                     motorRun(STOP,0);  
  116.                     delay(900);
  117.                     motorRun(TURNRIGHT,70);
  118.                     delay(600);
  119.                     motorRun(FORWARD,60);
  120.                     delay(600);
  121.                }
  122. }


  123. void tracing()
  124. {
  125.     int r,m,l;
  126.     r=digitalRead(IRR);
  127.     m=digitalRead(IRM);
  128.     l=digitalRead(IRL);
  129.     if(l==HIGH && m==HIGH && r== HIGH){
  130.     motorRun(FORWARD,60);
  131.     }
  132.    
  133.     if(l==LOW &&m==LOW && r== LOW){
  134.      motorRun(FORWARD,60);      //如果刪掉forward和delay,在三岔路口小車可能會左右來回“抽風”,讀者可以去掉嘗試一下。
  135.     delay(20);
  136.     motorRun(TURNRIGHT,90);
  137.    // motorRun(TURNRIGHT,90);
  138.     }
  139.     if(l==LOW &&m==HIGH && r==LOW){
  140.     motorRun(FORWARD,60);
  141.     }
  142.    else if(l==LOW &&m==HIGH && r==HIGH){
  143.     motorRun(TURNRIGHT,90);
  144.     }
  145.     else if(l==HIGH &&m==HIGH && r==LOW){
  146.     motorRun(TURNLEFT,90);}
  147.     else if(l==HIGH && m==LOW && r==LOW){
  148.     motorRun(TURNLEFT,90);}
  149.     else if(l==LOW && m==LOW && r==HIGH){
  150.    motorRun(TURNRIGHT,90);}
  151.     else if(l==HIGH && m==LOW && r==HIGH){
  152.     motorRun(TURNRIGHT,90);}

  153. }
復制代碼



評分

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

查看全部評分

回復

使用道具 舉報

ID:163392 發表于 2019-11-2 21:56 | 顯示全部樓層
不錯啊,參考下你的程序
回復

使用道具 舉報

ID:636039 發表于 2019-11-5 15:21 來自手機 | 顯示全部樓層
能不能,指點我這個設計,聲控小車(走直線,拍手頻率越高,車速越快),用什么實現,用什么芯片,大佬謝謝了
回復

使用道具 舉報

ID:648620 發表于 2019-11-24 22:57 | 顯示全部樓層
第114行motorRuin(STOP,0);
多了一個i欸
  
回復

使用道具 舉報

ID:844292 發表于 2020-11-16 11:04 | 顯示全部樓層
您好,想問一下您設計的賽道長什么樣子,有照片或者可以講解一下嗎?謝謝
回復

使用道具 舉報

ID:844772 發表于 2020-11-17 11:26 | 顯示全部樓層
13370353201 發表于 2019-11-5 15:21
能不能,指點我這個設計,聲控小車(走直線,拍手頻率越高,車速越快),用什么實現,用什么芯片,大佬謝謝 ...

如果只是根據拍的節奏控制車速,并用Arduino寫,買個最便宜的聲音模塊(10元幾個)就行。拍手導致模塊閾值反轉觸發中斷,再通過時鐘中斷對兩次聲音觸發的中斷計時,對應相應速度就行了。
回復

使用道具 舉報

ID:973173 發表于 2021-10-22 16:59 | 顯示全部樓層
把前、后、左、右這些方向寫成一個函數,挺不錯的思路
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天艹日日干 | 亚洲欧美久久 | 亚洲 欧美 在线 一区 | 成人在线精品视频 | 老司机深夜福利网站 | 亚洲国产精品日韩av不卡在线 | 国产欧美日韩综合精品一区二区 | 天天干天天草 | 毛片视频网站 | 丁香综合 | 成人国产一区二区三区精品麻豆 | 亚洲福利一区二区 | 女女百合av大片一区二区三区九县 | 日韩精品专区在线影院重磅 | 日韩国产中文字幕 | 亚洲久久久 | 99欧美精品 | 一区二区三区在线免费观看 | 国产精品不卡视频 | 国产农村妇女毛片精品久久麻豆 | 午夜电影福利 | 精品久久久久久亚洲精品 | 国产精品成人一区二区三区夜夜夜 | 欧美午夜影院 | 三级视频国产 | 日韩色在线 | 先锋资源网 | 先锋资源亚洲 | 久久精品成人热国产成 | 日本黄色一级片视频 | 在线看一区二区三区 | 成人精品在线视频 | 久久99久久99久久 | 久久999 | 伊人网站在线 | 99在线国产 | 日本一本视频 | 国产日产久久高清欧美一区 | 日韩精品a在线观看图片 | 亚洲视频免费在线看 | www.日韩免费 |