2018年3月1日 星期四

Arduino (24) 超聲波模組HC-SR01+二輪智能車系統。


和前一篇的差別就是將紅外線拆除,裝上了超聲波模組HC-SR01,

這看起來挺像瓦力的,兩個眼睛。

模式就是前進後,前方距離只有20CM時停止0.25秒,然後轉向,再前進。





程式如下 :

const int trigPin=11;
const int echoPin=12;
unsigned long data;
const byte IN1 = 10;   
const byte IN2 = 9;
const byte IN3 = 8;  
const byte IN4 = 7;

unsigned long ping(){
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(5);
  digitalWrite(trigPin,LOW);
  return pulseIn(echoPin,HIGH);
//超聲波函式。

}
byte dir = 0;
void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
  Serial.begin(9600);

}
void forward()
{
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW); 
}
void backward()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);  
}
void turnLeft()
{
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW); 
}
void turnRight()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
}
void stop()
{
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
}
void loop() {
   data=ping()/58;
  int A=abs(data);
 //A就是距離,單位公分。

  if (A>20) { 
  if (dir != 0) {  // 如果目前的行進狀態不是「前進」
     dir = 0;        // 設定成「前進」
     stop();         // 暫停馬達0.25秒
     delay(250);
      }
    forward();    // 前進
     } else {
   if (dir != 1) { // 如果目前的狀態不是「右轉」
      dir = 1;       // 設定成「右轉」
      stop();        // 暫停馬達0.25秒
      delay(250); 
      }
     turnRight(); // 向右轉
      }
   //上面這一坨是抄書本的,比較穩定。

   delay(500); 
}



沒有留言:

張貼留言

8051 (6) 紅外線避障模組控制LED七段顯示器。

這篇要做的Project就是感測器測到訊號時,LED七段顯示器會開始計算偵測次數, 到第5次時會讓紅色LED燈發光。 程式如下: #include <reg52.h> unsigned char seg[5]={0xf9,...