Arduino Nano+超聲波模塊+溫溼度傳感器校準

Arduino Nano+超聲波模塊+溫溼度傳感器校準
目的
1.超聲波發射器向某一方向發射超聲波,在發射時刻的同時開始計
時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。設超聲波在空氣中的傳播速度爲 340m/s,根據計時器記錄的時間 t,就可以計算出發射點距障礙物的距離 S
2.利用溫溼度傳感器,本實驗種加入 LM35溫度量測,以作爲聲速校正。比較在 0~200cm距離量測下,有溫度量測與沒有溫度量測的誤差爲多少。
原理圖
在這裏插入圖片描述接線圖:
在這裏插入圖片描述

流程圖
在這裏插入圖片描述代碼
#include “DHT.h”
#define Trig 2 //引腳Tring 連接 IO D2
#define Echo 3 //引腳Echo 連接 IO D3
#define LED_D 5
#define dhtPin 8 //讀取DHT11 Data
#define dhtType DHT11 //選用DHT11
DHT dht(dhtPin, dhtType);
float cm; //距離變量
float cm2;//校準後變量
float temp; //
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(LED_D,OUTPUT);
dht.begin();//啟動DHT
}

void loop() {
float h = dht.readHumidity();//讀取濕度
float t = dht.readTemperature();//讀取攝氏溫度
float f = dht.readTemperature(true);//讀取華氏溫度
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(“無法從DHT傳感器讀取!”);
return;
}
//給Trig發送一個低高低的短時間脈衝,觸發測距
digitalWrite(Trig, LOW); //給Trig發送一個低電平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //給Trig發送一個高電平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //給Trig發送一個低電平
temp = float(pulseIn(Echo, HIGH)); //存儲回波等待時間,
// pulseIn函數會等待引腳變爲HIGH,開始計算時間,再等待變爲LOW並停止計時
// 返回脈衝的長度

//聲速是:340m/1s 換算成 34000cm / 1000000μs => 34 / 1000
//因爲發送到接收,實際是相同距離走了2回,所以要除以2
//距離(釐米) = (回波時間 * (34 / 1000)) / 2
// 簡化後的計算公式爲 (回波時間 * 17)/ 1000
cm = (temp * 17)/1000;
cm2 = (temp * (16.5725 +0.0305*t))/1000; //把回波時間換算成cm

if(cm2<10){
digitalWrite(LED_D,HIGH);
}
else{
digitalWrite(LED_D,LOW);
}
Serial.print(“攝氏度爲:”);
Serial.print(t);
Serial.print(“聲速爲:”);
Serial.print(331.45+0.61*t);//氣體中的聲速,331.45是在0度時聲音在空氣中的速度
Serial.print(“Echo =”);
Serial.print(temp);//串口輸出等待時間的原始數據
Serial.print(" | | Distance = “);
Serial.print(cm);//串口輸出距離換算成cm的結果
Serial.println(“cm”);
Serial.print(” | | 校準過後的距離 = ");
Serial.print(cm2);//串口輸出距離換算成cm的結果
Serial.println(“cm”);
delay(1000);
}
實驗結果
在這裏插入圖片描述在這裏插入圖片描述(這個實驗使用溫溼度模塊進行聲速的校準,使用LED是爲了更明顯顯示實驗的結果)
有問題,歡迎探討,(有一個課題:這款超音波模塊是否可以作爲單發單收模塊使用,歡迎你的探究)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章