標(biāo)題: 單片機(jī)循跡避障車教程 [打印本頁]

作者: gzp12311    時(shí)間: 2018-10-17 13:05
標(biāo)題: 單片機(jī)循跡避障車教程
循跡避障車教程需要材料:直流電機(jī)4只                 小車底盤2個(gè)
  車輪4個(gè)
  超聲波模塊1個(gè)
  紅外探測(cè)模塊2個(gè)
  L298N電機(jī)驅(qū)動(dòng)模塊1個(gè)
  杜邦線若干
                 1.5V電池8節(jié)(12V電源)
  萬能板一個(gè)
  Arduino開發(fā)板一個(gè)
  M3螺絲螺母若干
原理講解1.小車前進(jìn)后退轉(zhuǎn)彎原理其輸入輸出對(duì)應(yīng)真值表如下(以LN1,LN2,OUT1,OUT2為例):
  

模塊中ENA,ENB分別為兩個(gè)電機(jī)的調(diào)速口,在Arduino中接PWM數(shù)字口,利用PWM調(diào)節(jié)速度(如果不需要此功能直接接到5V電源)。    試驗(yàn)中,我將左側(cè)兩個(gè)電機(jī)并聯(lián)到OUT1,OUT2口,右側(cè)兩個(gè)電機(jī)并聯(lián)到OUT3,OUT4口。以一個(gè)方向?yàn)閰⒖挤较颍凑颍,電機(jī)極性一定要清楚,OUT1,OUT3接正向,OUT2,OUT4接反向。下面是電機(jī)輸出結(jié)果表
  

2.循跡原理    其工作方式是白色紅外發(fā)光管發(fā)射紅外光,經(jīng)過反射被黑色接收管接收,接收到了返回高電平,否則低電平。原理:
由于黑色具有吸收光線的作用,當(dāng)小車到達(dá)黑色部分時(shí),其發(fā)射光被吸收,返回低電平,達(dá)到檢測(cè)路徑的功能。
此時(shí),小車的位置相對(duì)于軌跡來說,偏右,我們應(yīng)該左轉(zhuǎn)矯正位置。同理,偏左應(yīng)該右轉(zhuǎn)
當(dāng)兩面探頭都不在,或都在軌跡上,那么前進(jìn)。
3.超聲波避障原理知識(shí)1  超聲波
超聲波是一種頻率高于20000赫茲的聲波,它的方向性好,穿透能力強(qiáng),易于獲得較集中的聲能,可以在介質(zhì)中傳播,可用于測(cè)距、測(cè)速、清洗、焊接、碎石、殺菌消毒等。在醫(yī)學(xué)、軍事、工業(yè)、農(nóng)業(yè)上有很多的應(yīng)用。超聲波因其頻率下限大于人的聽覺上限而得名。超聲波在空氣中傳播速度約340米/秒,隨著溫度的變化,傳播速度有所變化。
知識(shí)2  超聲波測(cè)速原理
超聲波測(cè)速是利用超聲波發(fā)射管發(fā)射超聲波同時(shí)開始計(jì)時(shí),收到發(fā)射回波后產(chǎn)生一個(gè)信號(hào),將發(fā)射和接收到回波的時(shí)間乘以超聲波在介質(zhì)中的傳播速度除以2就是超聲波發(fā)射到物體的距離。利用超聲波模塊完成測(cè)速。
2.1 HC-SR04超聲模塊
HC-SR04有單片機(jī)STC11、升壓ICMAX232及運(yùn)算放大器TL074構(gòu)成,HC-SR04超聲波測(cè)距模塊可提供2cm-400cm的非接觸式距離感測(cè)功能,測(cè)距精度可高達(dá)3mm;模塊包括超聲波發(fā)射器、接收器與控制器。超聲波測(cè)速儀每隔一相等時(shí)間,發(fā)出一超聲脈沖信號(hào),每隔一段時(shí)間接收到物體反射回的該超聲脈沖信號(hào),根據(jù)發(fā)出和接收到的信號(hào)間的時(shí)間間隔差和聲速,測(cè)出被測(cè)物體的距離。
基本工作原理:
采用IO口TGIG觸發(fā)測(cè)距,給至少10us的高電平信號(hào);
模塊自動(dòng)發(fā)送8個(gè)40KHz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;
有信號(hào)返回,通過IO口ECHO輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測(cè)試距離=(高電平時(shí)間*聲速(340m/s))/2.
參數(shù)的設(shè)置
時(shí)序圖的說明
以上時(shí)序圖表明你在只需要提供一個(gè)10us以上脈沖觸發(fā)信號(hào),該模塊內(nèi)部將發(fā)出8個(gè)40KHz周期電平并檢測(cè)回波。一旦檢測(cè)到有回波信號(hào)則輸出回響信號(hào);仨懶盘(hào)的脈沖寬度與所測(cè)的距離成正比。由此通過發(fā)射信號(hào)到收到的回響信號(hào)時(shí)間間隔可以計(jì)算得到距離。公式:us/58=厘米;或是:距離=高電平時(shí)間*聲速(340m/s)/2;建議測(cè)量周期為60ms以上,以防止發(fā)射信號(hào)對(duì)回響信號(hào)的影響。
注:1、此模塊不宜帶電連接,若要帶電連接,則先讓模塊的GND端先連接,否則會(huì)影響模塊的正常工作。
2、測(cè)距時(shí),被測(cè)物體的面積不少于0.5平方米且平面盡量要求平整,否則影響測(cè)量的結(jié)果。
1.3原理圖及模塊實(shí)物
單片機(jī)超聲模塊說明(HC-SR04)
避障原理:利用測(cè)車子正前方障礙的距離,設(shè)定一個(gè)值,當(dāng)距離小于這個(gè)值時(shí),車子后退,或者轉(zhuǎn)彎。具體程序代碼
int IN1=7;
int IN2=8;
const int TrigPin = 13;
const int EchoPin = 12;
int ENA=5;//左直流電機(jī)
int IN3=9;
int IN4=10;
int ENB=6;//右直流電機(jī)
int IR_right=2;//定義右紅外傳感器引腳
int IR_left=3;//定義左紅外傳感器引腳
int IR_middle_1=A2;
int IR_middle_2=A3;//定義中間紅外傳感器引腳
int c;//用于保存超聲波測(cè)出的距離

void forward()//前進(jìn)
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  analogWrite(ENA,45);
  digitalWrite(IN4,LOW);
  digitalWrite(IN3,HIGH);
  analogWrite(ENB,45);
}
void backward()//后退
{
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,100);
  digitalWrite(IN4,HIGH);
  digitalWrite(IN3,LOW);
  analogWrite(ENB,100);
}
void left()//左轉(zhuǎn)
{
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,100);
  digitalWrite(IN4,LOW);
  digitalWrite(IN3,HIGH);
  analogWrite(ENB,100);
}
void right()//右轉(zhuǎn)
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  analogWrite(ENA,100);
  digitalWrite(35,HIGH);
  digitalWrite(36,LOW);
  analogWrite(ENB,100);
}
void stopp()//停止
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,HIGH);
  analogWrite(ENA,100);
  analogWrite(ENB,100);
}

void setup() {
  
  Serial.begin(9600);

  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(ENA,OUTPUT);
  pinMode(ENB,OUTPUT);
  stopp();
  pinMode(IR_right,INPUT);
  pinMode(IR_left,INPUT);
  pinMode(IR_middle_1,INPUT);
  pinMode(IR_middle_2,INPUT);
}
void loop(){
    digitalWrite(TrigPin, LOW); //低高低電平發(fā)一個(gè)短時(shí)間脈沖去TrigPin
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);
    delay(20);            //消除信號(hào)干擾
    c = pulseIn(EchoPin, HIGH) / 58.0; //將回波時(shí)間換算成cm
    c = (int(c * 100.0)) / 100.0; //保留兩位小數(shù)
   /*如果前方距離小于二十厘米,即前方有障礙,
    * 那么后退一步,轉(zhuǎn)個(gè)方向
   */
    if(c<20){
        backward();
        delay(100);//自己去調(diào)試距離,下同
        right();
        delay(100);
      }
    int Right=digitalRead(IR_right);
    int  Left=digitalRead(IR_left);
    //如果中間為高電平,左、右為低電平
    //說明小車沒有偏離軌道
   if((Middle_1==HIGH || Middle_2==HIGH)&&( Right==LOW && Left==LOW)){
   forward();
   }
    //如果右邊為高電平,中間、左為低電平
    //說明小車偏右
    else if((Middle_1==LOW && Middle_2==LOW) && Right==HIGH && Left==LOW){
      right();//小車左轉(zhuǎn)
   }  
//如果左邊為高電平,中間、右為低電平
//說明小車偏左
    else if((Middle_1==LOW && Middle_2==LOW) &&Right==LOW && Left==HIGH){
    left();//小車右轉(zhuǎn)
    }
//小車的3紅外傳感器距離可能導(dǎo)致3傳感器都為低電平或者沒檢測(cè)到黑線3傳感器都為高電平
//小車默認(rèn)前進(jìn)
    else{
   forward();
     }  
     }








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1