2020年5月1日 星期五

Arduino 循跡車程式

/**************************************************   
  Arduino 循跡車程式
  硬體: Arduino Uno + L298N + TCRT5000 + TT減速馬達
  原理是用TCRT5000感應模組(車頭左右各一個),
  當感應器偵測到黑色物體時會傳回1,否則會傳回0,
  據此我們可以判斷(左,右) =
  (0,0)時,車子剛好在黑線這上方,所以直行,
  (1,0)時,左邊已經壓線,所以要左轉,
  (0,1)時,右邊已經壓線,所以要右轉,
  (1,1)時,左右兩邊都已壓在黑線上,所以停止車子。
 
  注意!!!!!
  車子速度不可太快,否則一下子就會衝出線外,無法控制。

 
    大魷魚創客工作室 2020.4.4 
    https://www.facebook.com/groups/806191766461206/

***************************************************/

int R_TCRT_Pin = 2;  //右邊感應器連接在D2           
int L_TCRT_Pin = 12; //左邊感應器連接在D12                 

const int IN1 = 3;  //馬達控制板連接在D3, D5, D6, D9
const int IN2 = 5; 
const int IN3 = 6; 
const int IN4 = 9; 

void setup() {
  Serial.begin (9600);           
  pinMode(R_TCRT_Pin, INPUT); //把D2設成輸入模式       
  pinMode(L_TCRT_Pin, INPUT); //把D12設成輸入模式
}

void loop()
{
  int  R=0, L=0;   //存放左,右感應器狀態的變數,預設值給定為0
  byte speed = 128;
 
  R = digitalRead(R_TCRT_Pin); //讀取右邊感應器的狀態
  L = digitalRead(L_TCRT_Pin); //讀取左邊感應器的狀態
 
  if( R==0 && L==0 ) Forward(speed); // (白,白): 車子剛好在黑線正上方,所以直行。
  if( L==1 && R==0 ) Left(speed);    // (黑,白): 左邊已經壓線,所以要左轉。
  if( L==0 && R==1 ) Right(speed);   // (白,黑): 右邊已經壓線,所以要右轉。
  if( L==1 && R==1 ) Stop();         // (黑,黑): 左右兩邊都已壓在黑線上,所以停止車子。
}

void Forward(byte speed) /* 車子前進的函數 */     
{ analogWrite(IN1, 0);
  analogWrite(IN2, speed);
  analogWrite(IN3, speed);
  analogWrite(IN4, 0);
}

void Back(byte speed) /* 車子後退的函數 */       
{ analogWrite(IN1, speed);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, speed);
}
void Left(byte speed) /* 車子左轉的函數 */         
{ analogWrite(IN1, 0);
  analogWrite(IN2,speed);
  analogWrite(IN3, 0);
  analogWrite(IN4, speed);
 }

void Right(byte speed) /* 車子右轉的函數 */         
{ analogWrite(IN1, speed);
  analogWrite(IN2, 0);
  analogWrite(IN3, speed);
  analogWrite(IN4, 0);
}

void Stop() /* 車子停止的函數 */           
{ analogWrite(IN1, 0);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, 0);
}

沒有留言:

張貼留言