2018年1月26日 星期五

Arduino (8) 超聲波模組HC-SR04+1位元七段LED顯示器+74HC595+無源蜂鳴器。

講到現實上的超聲波應用,首先先想到倒車雷達,就來做倒車雷達囉。

再多加個LED七段顯示器來顯示距離變化吧!!



超聲波模組HC-SR04。


市面上有賣一種收發合一的版本,但這種收發分開的版本比較便宜。




再來是LED七段顯示器,加了一顆74HC595,這暫存器可減少過多連接處理器的線路。

但線路看起來還是很多啊,

LED七段顯示器每一段記得加1個330歐姆的電阻來限流,不然用久了會罷工。




我寫成10個階段(0~9),雷達越遠顯示器的數字越大。

我還加了個蜂鳴器,這樣更像倒車雷達了。


程式如下:

const int trigPin=10;
const int echoPin=9;
const int mike=5;
unsigned long data;

const byte dataPin  = 2;    
const byte latchPin = 3;   
const byte clockPin = 4;  
//74HC595的數位PIN宣告。

const byte num[10]={
    B01111110,  
    B00110000,  
    B01101101, 
    B01111001, 
    B00110011,  
    B01011011,  
    B01011111,  
    B01110000,    
    B01111111, 
    B01110011     
};
//LED顯示器的數字陣列宣告。

void LED7(int N){
    digitalWrite(latchPin,LOW);
    shiftOut(dataPin,clockPin,LSBFIRST,N);
    digitalWrite(latchPin,HIGH);
    delay(10);
//控制七段LED的函式。
}

unsigned long ping(){
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);
  return pulseIn(echoPin,HIGH);
//超聲波回傳變數的函式。


}
void setup(){
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
  pinMode(mike,OUTPUT);
  pinMode(dataPin,OUTPUT);
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  data=ping()/58;
 //算出距離值
  int A=abs(data/10);
 //算出分類帽變數。

  switch(A)
  {
    case 1:
    tone(5, 1047,100);
    LED7(num[1]);
    break;   
    case 2:
    tone(5, 1047,100);
    LED7(num[2]);
    break;   
    case 3:
    tone(5, 1047,100);
    LED7(num[3]);
    break; 
    case 4:
    tone(5, 1047,100);
    LED7(num[4]);
    break; 
    case 5:
    tone(5, 1047,100);
    LED7(num[5]);
    break; 
    case 6:
    tone(5, 1047,100);
    LED7(num[6]);
    break; 
    case 7:
    tone(5, 1047,100);
    LED7(num[7]);
    break; 
    case 8:
    tone(5, 1047,100);
    LED7(num[8]);
    break; 
    case 9:
    tone(5, 1047,100);
    LED7(num[9]);
    break; 
    case 0:
    tone(5, 1047,100);
    LED7(num[0]);
    break; 
    default:
    noTone(5);
//分類帽定義。

  }
  Serial.print("Distance  ");
  Serial.print(data);
  Serial.print("cm");
  Serial.println();
//序列阜監控。
  delay(300);
}

感覺不像市面上的倒車雷達來的快和準,可能是我程式Delay那邊沒有寫好,

但是有一定的功能了,差不多就好。



沒有留言:

張貼留言

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

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