Skip to content

杰生的Blog

[ALC07] UltraSonic (HC-SR04) 超音波模組實作

Posted on 2024 年 8 月 25 日2024 年 9 月 15 日 By chantais000 在〈[ALC07] UltraSonic (HC-SR04) 超音波模組實作〉中尚無留言

超音波感測器是一種利用發射出的超聲波遇到物體會反射回波來測定距離的原理運作,和 Arduino 微控器結合為一個實驗                    

Jason Chin 2019/9/24

這個範例是超音波模組 HC-SR04 測試和實作的範例

HC-SR04 是超音波感測器模組,由超音波發射器、接收器和控制電路所組成。當它被觸發的時候,發射器會發射連續的40kHz的聲波,當近接快要碰觸到超音波前方的物體時,音波會反射回接收器。超音波是很高頻的聲音,人類耳朵無法聽見的聲音,所以稱為超音波。

這次利用HC-SR04的超音波模組來測試

本次使用的超音波感測器模組型號為HC-SR04
HC-SR04有五個pin腳,說明如下:
Vcc:接電源
Trig:GPIO模式時,為訊號發送端 Trigger
Echo:GPIO模式時,為訊號接收端 Echo 
GND:接地

HC-SR04 規格:

Ultrasonic Ranging Module HC – SR04

Working Voltage: DC 5 V 

Working Current: 15mA 

Working Frequency: 40Hz 

Max Range: 4m 

Min Range: 2cm 

MeasuringAngle: 15 degree 

Trigger Input Signal: 10uS TTL pulse 

Echo Output Signal: Input TTL lever signal and the range in proportion 

Dimension: 45*20*15mm

HC-SR04超音波測距的原理是發射一個電波,當電波遇到物體反射回來,再被測距儀偵測到反射電波,利用來回時間與音波的速度算出距離,計算公式如下:

距離 = (音波發射與接收時間差 * 聲音速度 (340M/S) ) / 2

所以超音波模組是 Arduino 給Trig pin一個10 us TTL pluse,模組就會發射8個40k Hz的聲波,如果有收到TTL的高電位訊號,那Echo會送出超音波來回的時間,使用者再計算音速換算成距離。

換算公式 =>「距離(cm) = 時間(us) / 2(來回) /29(cm/us)」。其它要注意的是量測物體最好大於0.5公尺平方,而trigger時間最好大於60ms,以免trig與echo干擾。

HC-SR04 的接線方式很簡單,只有 4 支接腳。

程式範例: 將距離測定值,傳送到監控畫面上

int Trig = 13;

int Echo = 12;

int Duration;

float Distance;

void setup() {

  Serial.begin(9600);

  pinMode(Trig,OUTPUT);

  pinMode(Echo,INPUT);

}

void loop() {

  digitalWrite(Trig,LOW);

  delayMicroseconds(1);

  digitalWrite(Trig,HIGH);

  delayMicroseconds(11);

  digitalWrite(Trig,LOW);

  Duration = pulseIn(Echo,HIGH);

  if (Duration>0) {

    Distance = Duration/2;

    Distance = Distance*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us

    Serial.print(Duration);

    Serial.print(” us “);

    Serial.print(Distance);

    Serial.println(” cm”);

  }

  delay(500);

}

接著介紹一個 Library : HC-SR04 Ultrasonic Sensor Library 它已經把測距的公式都包成了函式庫。

請到網路上找 HC-SR04 Ultrasonic,會找到 Ultrasonic-HC-SR04-master 把它 download 下來

範例之一

// Ultrasonic – Library for HR-SC04 Ultrasonic Ranging Module.

// Rev.4 (06/2012)

// J.Rodrigo ( www.jrodrigo.net )

// more info at www.ardublog.com

#include <Ultrasonic.h>

Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)

void setup() {

  Serial.begin(9600);

}

void loop()

{

  Serial.print(ultrasonic.Ranging(CM)); // CM or INC

  Serial.println(” cm” );

  delay(100);

}

範例之二

#include <Ultrasonic.h>

#define TRIGGER_PIN 12
#define ECHO_PIN 13
#define Alarm_PIN 8

Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

void setup()
{
Serial.begin(9600);
pinMode(Alarm_PIN,8);
}

void loop()
{
float cmMsec, inMsec;
long microsec = ultrasonic.timing();

cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);

Serial.print(“MS: “);
Serial.print(microsec);
Serial.print(“, CM: “);
Serial.print(cmMsec);
Serial.print(“, IN: “);
Serial.println(inMsec);
if(cmMsec <=10)
  {
 Serial.println(“too close”);
 digitalWrite(Alarm_PIN,HGHI);
  }

delay(1000);
}

文章pdf檔歡迎下載

Arduino

文章導覽

Previous Post: [ALC06] Perak Lights-Arduino的霹靂燈實驗
Next Post: [ALC08] RFID-RC522 Funduino 實驗

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

近期文章

  • [RLC06]Raspberry-Pi WIFI network card settings
  • [RLC05]Raspberry Pi Samba Setting
  • [RLC04]Raspberry Pi Chinese Setting
  • [RLC03]Raspberry Pi Serial RS232 實作
  • [RLC02]Raspberry Pi Sound Setting

近期留言

尚無留言可供顯示。

Copyright © 2025 杰生的Blog.

Powered by PressBook WordPress theme