<strike id="um4h1"></strike>
<legend id="um4h1"><pre id="um4h1"><dl id="um4h1"></dl></pre></legend>
<th id="um4h1"><track id="um4h1"></track></th>
  • <dd id="um4h1"></dd><nav id="um4h1"><sub id="um4h1"></sub></nav>
    <rp id="um4h1"></rp>

    <dd id="um4h1"></dd>
    1. <th id="um4h1"></th>
       找回密碼
       馬上注冊

      QQ登錄

      只需一步,快速開始

      搜索

      [ 單片機 ] arduino小車

      2013-10-4 15:22| 發布者: zsz20020526 | 查看: 18111

      第一次做,很粗糙,都是模塊的組合,變速箱用的是模型小車的,最大的難點在于變速箱和馬達齒輪的配合因為完全是不配套的兩樣東西,視頻中小車也有走外的跡象,配合是主要問題,兩塊亞克力板的孔沒有打好,在安裝上還是有瑕疵

      智能小車接線

      智能小車接線

      第一刀開啟arduino智能小車DIY的第一步

      第一刀開啟arduino智能小車DIY的第一步

      重要的電機驅動擴展板到了

      重要的電機驅動擴展板到了

      最初的設想想加個散熱扇

      最初的設想想加個散熱扇

      這邊用到了接口擴展板

      這邊用到了接口擴展板

      舵機到貨,有點小貴,金屬齒的

      舵機到貨,有點小貴,金屬齒的

      搭建中,,,

      搭建中,,,

      程序DEBUG中

      程序DEBUG中

      完成圖

      完成圖

      變速箱和馬達

      變速箱和馬達

      為了使用大扭力電機,改變了原有變速箱的安裝方式

      為了使用大扭力電機,改變了原有變速箱的安裝方式


      代碼部分
      //超聲波智能避障車程序(ARDUINO)

      #include
      int pinI1=5;//定義I1接口(I1-I4是l298N擴展模塊上的電機輸出接口)
      int pinI2=4;//定義I2接口
      int pinI3=7;//定義I3接口
      int pinI4=6;//定義I4接口


      int inputPin = A1; // 定義超音波信號接收腳位(插錯的后果,讀值為0,舵機不停地轉頭)
      int outputPin =A0; // 定義超音波信號發射腳位

      int Fspeedd = 0; // 前速
      int Rspeedd = 0; // 右速
      int Lspeedd = 0; // 左速
      int directionn = 0; // 前=8 後=2 左=4 右=6 
      Servo myservo; // 設 myservo
      int delay_time = 250; // 伺服馬達轉向後的穩定時間

      int Fgo = 8; // 前進
      int Rgo = 6; // 右轉
      int Lgo = 4; // 左轉
      int Bgo = 2; // 倒車

      void setup()
      {
      Serial.begin(9600); // 定義馬達輸出腳位 
      pinMode(pinI1,OUTPUT);
      pinMode(pinI2,OUTPUT);
      pinMode(pinI3,OUTPUT);
      pinMode(pinI4,OUTPUT);

      pinMode(inputPin, INPUT); // 定義超音波輸入腳位
      pinMode(outputPin, OUTPUT); // 定義超音波輸出腳位 

      myservo.attach(9); // 定義伺服馬達輸出第9腳位(PWM)
      }
      void advance(int a) // 前進
      {
      digitalWrite(pinI4,LOW);//使直流電機(右)逆時針轉
      digitalWrite(pinI3,HIGH);
      digitalWrite(pinI1,LOW);//使直流電機(左)順時針轉
      digitalWrite(pinI2,HIGH);
      delay(a * 100); 
      }


      void turnR(int b) //右轉(雙輪)
      {
      digitalWrite(pinI4,HIGH);//使直流電機(右)順時針轉
      digitalWrite(pinI3,LOW);
      digitalWrite(pinI1,LOW);//使直流電機(左)順時針轉
      digitalWrite(pinI2,HIGH);
      delay(b * 100);
      }
      void turnL(int c) //左轉(雙輪)
      {
      digitalWrite(pinI4,LOW);//使直流電機(右)逆時針轉
      digitalWrite(pinI3,HIGH);
      digitalWrite(pinI1,HIGH);//使直流電機(左)逆時針轉
      digitalWrite(pinI2,LOW);
      delay(c * 100);
      void stopp(int d) //停止
      {
      digitalWrite(pinI4,HIGH);//使直流電機(右)剎車
      digitalWrite(pinI3,HIGH);
      digitalWrite(pinI1,HIGH);//使直流電機(左)剎車
      digitalWrite(pinI2,HIGH);
      delay(d * 100);
      }
      void back(int e) //後退
      {

      digitalWrite(pinI4,HIGH);//使直流電機(右)順時針轉
      digitalWrite(pinI3,LOW);
      digitalWrite(pinI1,HIGH);//使直流電機(左)逆時針轉
      digitalWrite(pinI2,LOW);
      delay(e * 100); 
      }

      void detection() //測量3個角度(0.90.179)
      int delay_time = 250; // 伺服馬達轉向後的穩定時間
      ask_pin_F(); // 讀取前方距離

      if(Fspeedd < 10) // 假如前方距離小於10公分
      {
      stopp(1); // 清除輸出資料 
      back(2); // 後退 0.2秒
      }

      if(Fspeedd < 25) // 假如前方距離小於25公分
      {
      stopp(1); // 清除輸出資料 
      ask_pin_L(); // 讀取左方距離
      delay(delay_time); // 等待伺服馬達穩定
      ask_pin_R(); // 讀取右方距離 
      delay(delay_time); // 等待伺服馬達穩定 

      if(Lspeedd > Rspeedd) //假如 左邊距離大於右邊距離
      {
      directionn = Rgo; //向右走
      }

      if(Lspeedd <= Rspeedd) //假如 左邊距離小於或等於右邊距離
      {
      directionn = Lgo; //向左走
      if (Lspeedd < 10 && Rspeedd < 10) //假如 左邊距離和右邊距離皆小於10公分
      {
      directionn = Bgo; //向後走 

      }
      else //加如前方不小於(大於)25公分 
      {
      directionn = Fgo; //向前走 
      }

      void ask_pin_F() // 量出前方距離 
      {
      myservo.write(90);
      digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
      float Fdistance = pulseIn(inputPin, HIGH); // 讀差相差時間
      Fdistance= Fdistance/5.8/10; // 將時間轉為距離距離(單位:公分)
      Serial.print("F distance:"); //輸出距離(單位:公分)
      Serial.println(Fdistance); //顯示距離
      Fspeedd = Fdistance; // 將距離 讀入Fspeedd(前速)
      void ask_pin_L() // 量出左邊距離 
      {
      myservo.write(5);
      delay(delay_time);
      digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
      float Ldistance = pulseIn(inputPin, HIGH); // 讀差相差時間
      Ldistance= Ldistance/5.8/10; // 將時間轉為距離距離(單位:公分)
      Serial.print("L distance:"); //輸出距離(單位:公分)
      Serial.println(Ldistance); //顯示距離
      Lspeedd = Ldistance; // 將距離 讀入Lspeedd(左速)
      void ask_pin_R() // 量出右邊距離 
      {
      myservo.write(177);
      delay(delay_time);
      digitalWrite(outputPin, LOW); // 讓超聲波發射低電壓2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH); // 讓超聲波發射高電壓10μs,這裡至少是10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW); // 維持超聲波發射低電壓
      float Rdistance = pulseIn(inputPin, HIGH); // 讀差相差時間
      Rdistance= Rdistance/5.8/10; // 將時間轉為距離距離(單位:公分)
      Serial.print("R distance:"); //輸出距離(單位:公分)
      Serial.println(Rdistance); //顯示距離
      Rspeedd = Rdistance; // 將距離 讀入Rspeedd(右速)

      void loop()
      {
      myservo.write(90); //讓伺服馬達回歸 預備位置 準備下一次的測量
      detection(); //測量角度 並且判斷要往哪一方向移動

      if(directionn == 2) //假如directionn(方向) = 2(倒車) 
      {
      back(8); // 倒退(車)
      turnL(2); //些微向左方移動(防止卡在死巷裡)
      Serial.print(" Reverse "); //顯示方向(倒退)
      }
      if(directionn == 6) //假如directionn(方向) = 6(右轉) 
      {
      back(1); 
      turnR(6); // 右轉
      Serial.print(" Right "); //顯示方向(左轉)
      }
      if(directionn == 4) //假如directionn(方向) = 4(左轉) 
      back(1); 
      turnL(6); // 左轉
      Serial.print(" Left "); //顯示方向(右轉) 
      if(directionn == 8) //假如directionn(方向) = 8(前進) 
      advance(8); // 正常前進 
      Serial.print(" Advance "); //顯示方向(前進)
      Serial.print(" "); 
      }
      }

      收藏 邀請
      已有15人參與

      會員評論

      • 引用 文藝復興的凱撒 2017-3-30 19:28
        很強
      • 引用 040326 2014-6-20 21:57
        神馬都沒看懂
      • 引用 睡覺覺 2014-2-14 10:47
        有不有更簡單的制作方法,我對你的很感興趣。
      • 引用 ②④κ__蒓~帥 2013-12-15 17:49
        0.0
      • 引用 Go!Go!Go! 2013-10-25 19:47
        下載出現錯誤
      • 引用 zsz20020526 2013-10-19 23:07
        超自然の科學: 繁體的注釋,難道是轉的。。。。。。。。。。
        不是。!是臺灣貨,自帶一小部份試驗程序與漢字沖突,總死機,所以是繁體
      • 引用 超自然の科學 2013-10-15 13:16
        繁體的注釋,難道是轉的。。。。。。。。。。
      • 引用 莫殤の影 2013-10-9 12:47
        嗷嗷!又一個我看不懂的……
      • 引用 FixedGear 2013-10-8 19:34
        泥煤    銀燕舵機還叫貴............................真........
      • 引用 隨風12 2013-10-8 19:01
        那個舵機干嘛用的
      • 引用 a13613473411 2013-10-5 22:37
        zjk995063909: 挺不錯。就是為啥那個注釋是繁體的?
      • 引用 zjk995063909 2013-10-5 18:14
        挺不錯。就是為啥那個注釋是繁體的?
      • 引用 oommggdd 2013-10-5 11:47
        牛牛牛牛牛
      • 引用 wait...偉 2013-10-5 08:34
        好復雜。。。
      • 引用 Robbie 2013-10-5 03:35
        怎么沒有視頻效果?

      查看全部評論>>

      推薦閱讀

      QQ|極客迷網 ( ICP09011854

      44030602000010

      © 2009-2016 All Rights Reserved

      GMT+8, 2022-4-16 16:24 , Processed in 0.063853 second(s), 29 queries , Gzip On, Memcache On.