2021年8月17日 星期二

HCSR04

 





const int trigPin = 12;

const int echoPin = 13;

long duration;

int distance;

int range=20;

int num_val=(range/10);//距離是20,分10等分num_val=2

void setup() 

{

  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output

  pinMode(echoPin, INPUT); // Sets the echoPin as an Input

  Serial.begin(9600); // Starts the serial communication

  for(int i=2;i<12;i++)

  {

    pinMode(i,OUTPUT);

  }

}

void loop()

{

  digitalWrite(trigPin, LOW);// Clears the trigPin

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);// Sets the trigPin on HIGH state for 10 micro seconds

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);// Reads the echoPin, returns the sound wave travel time in microseconds

  duration = pulseIn(echoPin, HIGH);// Calculating the distance

  distance= duration*0.034/2;// Prints the distance on the Serial Monitor

  Serial.print("Distance: ");

  Serial.println(distance);

//--------------------------------------

  for(int i=2;i<12;i++)//每次把led關掉

  {

    digitalWrite(i,LOW);

  }

  if(distance<=range)//量出20才做這件事,距離18/2=9等分亮9個燈,愈靠近燈亮愈多

  {

    for(int j=2;j<(11-(distance/num_val))+2;j++)//(20/2)=10變(11-10)+2=3,因為從2開始

    {//(11-2)+1共10等分, 2<3, 只亮pin2 ,if distance=0 2<13

       digitalWrite(j,HIGH);//為什麼從2,因為led從pin 2開始

    }

  }

}

2021年8月16日 星期一

https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/

引用來源

 https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/

工作原理 – 超聲波傳感器


它發射 40 000 Hz 的超聲波,超聲波在空氣中傳播,如果其路徑上有物體或障礙物,它將反彈回模塊。考慮到傳播時間和聲速,您可以計算出距離。

超聲波傳感器工作原理

HC-SR04 超聲波模塊有 4 個引腳,接地、VCC、觸發和迴聲。模塊的地和 VCC 引腳需要分別連接到地和 Arduino 板上的 5 伏引腳,觸發和迴聲引腳需要連接到 Arduino 板上的任何數字 I/O 引腳。

本教程所需的組件


您可以從以下任何站點獲取這些組件:

披露:這些是附屬鏈接。作為亞馬遜合作夥伴,我從符合條件的購買中賺取收入。

為了生成超聲波,您需要將 Trig 設置為高狀態 10 µs。這將發出一個 8 週期的聲波脈衝,它將以聲音的速度傳播,並將在 Echo 引腳中接收。Echo 引腳將輸出聲波傳播的時間(以微秒為單位)。

超聲波傳感器圖

例如,如果物體距離傳感器 10 cm,並且聲速為 340 m/s 或 0.034 cm/µs,則聲波將需要傳播大約 294 u 秒。但是你從 Echo 引腳得到的將是這個數字的兩倍,因為聲波需要向前傳播並向後反彈。因此,為了獲得以厘米為單位的距離,我們需要將從回波引腳接收到的旅行時間值乘以 0.034,然後再除以 2。

超聲波傳感器方程

Arduino 和 HC-SR04 超聲波傳感器代碼


首先,您必須定義 Trig 和 Echo 引腳。在這種情況下,它們是 Arduino 板上的引腳編號 9 和 10,它們被命名為 trigPin 和 echoPin。然後,您需要一個 Long 變量,名為“duration”,表示您將從傳感器獲得的旅行時間,以及一個表示距離的整數變量。

// 定義引腳編號
const int trigPin = 9;
const int echoPin = 10;
// 定義變量
持續時間;
整數距離;

在設置中,您必須將 trigPin 定義為輸出,將 echoPin 定義為輸入,並啟動串行通信以在串行監視器上顯示結果。

無效設置(){
pinMode ( trigPin, OUTPUT ) ; // 將觸發引腳設置為輸出
pinMode ( echoPin, INPUT ) ; // 將 echoPin 設置為輸入
串行。開始9600 // 開始串行通信
}

在循環中,您首先必須確保trigPin 清晰,因此您必須將該引腳設置為低電平狀態僅2 µs。現在為了生成超聲波,我們必須將觸發引腳設置為 HIGH 狀態 10 µs。使用pulseIn()函數,您必須讀取旅行時間並將該值放入變量“duration”中。這個函數有2個參數,第一個是echo pin的名字,第二個你可以寫HIGH或LOW。

// 清除觸發引腳
數字寫入觸發引腳,低
延遲微秒2
// 將觸發引腳設置為 HIGH 狀態 10 微秒
數字寫入觸發引腳,高
延遲微秒10
數字寫入觸發引腳,低

在這種情況下,HIGH 意味著pulsIn()函數將等待由反彈聲波引起的引腳變為高電平並開始計時,然後在聲波結束時等待引腳變為低電平,這將停止計時。最後,該函數將以微秒為單位返回脈衝的長度。

為了獲得距離,我們將持續時間乘以 0.034,然後除以 2,正如我們之前解釋過的這個等式。

// 讀取 echoPin,以微秒為單位返迴聲波傳播時間
持續時間 =脈衝輸入echoPin,高
// 計算距離
距離=持續時間* 0.034 /2;
// 在串行監視器上打印距離
串行。打印“距離:” ;
串行。打印距離

最後,我們將在串行監視器上打印距離值。

這是完整的代碼:

/*
* 超聲波傳感器 HC-SR04 和 Arduino 教程
*
* 德揚·內德爾科夫斯基 (Dejan Nedelkovski),
* www.HowToMechatronics.com
*
*/
// 定義引腳編號
const int trigPin = 9;
const int echoPin = 10;
// 定義變量
持續時間;
整數距離;
無效設置(){
pinMode ( trigPin, OUTPUT ) ; // 將觸發引腳設置為輸出
pinMode ( echoPin, INPUT ) ; // 將 echoPin 設置為輸入
串行。開始9600 // 開始串行通信
}
無效循環(){
// 清除觸發引腳
數字寫入觸發引腳,低
延遲微秒2
// 將觸發引腳設置為 HIGH 狀態 10 微秒
數字寫入觸發引腳,高
延遲微秒10
數字寫入觸發引腳,低
// 讀取 echoPin,以微秒為單位返迴聲波傳播時間
持續時間 =脈衝輸入echoPin,高
// 計算距離
距離=持續時間* 0.034 /2;
// 在串行監視器上打印距離
串行。打印“距離:” ;
串行。打印距離
}

Arduino 超聲波傳感器和 LCD 顯示屏示例

這是另一個如何將超聲波傳感器與 Arduino 配合使用並在 LCD 上顯示結果的示例。

Arduino 超聲波傳感器和 LCD 顯示屏示例

您可以按如下方式連接超聲波傳感器和 LDC:

Arduino超聲波傳感器和LDC電路圖

測量距離的代碼與基本示例幾乎相同。在這裡,我們不是在串行監視器上打印結果,而是將它們打印在 LCD 上。如果您需要更多有關如何使用和連接 LCD 與 Arduino 的詳細信息,您可以查看我的特定教程。

HC_SR04 超音波感測器

來源出處:http://filix08.blogspot.com/2018/11/hcsr04.html 

HC_SR04 超音波感測器

HC_SR04 超音波感測器


所謂超音波是指超出人耳所能聽到的頻率 20KHz 的音波人類的聽覺一般只能聽到 20Hz~20KHz 左右的音域但某些動物如狗海豚或蝙蝠等可以聽到 20KHz 以上的超音波例如海豚利用超音波傳遞溝通訊息而蝙蝠則利用超音波在飛行中定位以避開障礙物

在空氣中傳遞的超音波其頻率在 20K~200KHz 之間頻率越高衰減程度越大可傳播的距離越短一般常用的超音波模組其頻率通常是 38K, 40K,  42KHz 這三種.
 HC-SR04 超音波模組使用的是 40KHz 的超音波可探測距離為 2cm~400cm.
它有如下圖所示的 Vcc (5V), Gnd, Trig, Echo 四隻腳 :

VCC                          –> +5V
trig  
(發送端)       –> 
 A2
echo(接收端)      –>   A3
GND(接地)         –>   GND
規格
        精度:3mm
        距離範圍:2 ~ 450cm
        有效的角度:<15
        電源:DC5V/2mA
        測量頻率:40Hz(最快每25ms測量一次)

當待檢測物體直接位於其前面時,感測器是最準確的,
但是你可以在45度“視角”內得到物體的響應。

文件建議將視窗限制在30度(兩邊15度)以獲得準確的讀數。


Trig是 發送 40KHz 超聲波給物體  
Echo是接收 Trig碰撞物體反射回來的超聲波  
探測距離的原理就是使用 Trig發送至少10µS寬度的脈波 發射後 Echo會由低電位變為高電位 直到接收到反射回來的超音波Echo由高電位回復為低電位 其中間的反應時間 藉由換算 得到我們可知的 公分 和 英吋

使用超音波量測距離必須知道音波的傳遞速度這主要取決於大氣的密度而溫度又是影響空氣密度的主要因素音速與溫度的關係如下 :
音速 = 331.5 m/s + 0.6*攝氏溫度
在常溫 20 度時音速是 331.5 + 0.6*20 = 343.5 m/s, 大約是 344 m/s.

超音波測距的原理是利用一個超音波發射器與一個接收器組成的模組來量測音波從發射到收到反射波的時間乘以音速即可得到音波往返的距離除以 2 即得與反射物體間的距離在常溫 20 度下音波前進 1 公分約需 58 微秒計算如下 :

公分=0.01 公尺=(344 公尺/*t)/2  
此處除以 2 是因為音波花了 t 秒往返走了兩倍距離,
須除以 2 才是單程距離.
t=(0.01*2)/344=5.8*10e-5=58*10e-6 =58 微秒

說明
Hz:(赫茲)是頻率的國際單位,表示每一秒週期性事件發生的次數。
µS微秒
1s(1= 1000ms(毫秒)
1ms(1毫秒= 1000µS(微秒)

練習
1. 用超音波測量距離 
2. 超音波測量距離大於30cm時,LED亮綠燈
                                 小
30cm但大於15cm,LED藍燈亮
                                 低於15
cm時,LED亮紅燈
3. 倒車雷達
    
(50cm 每秒嗶1--30cm 0.5秒嗶1-- 10cm 0.3秒嗶1)

※ 使用 Scratch 3.0 控制 Arduino 讀取 HC_SR04 超音波感測器

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...