Arduino Nano+超声波模块+温湿度传感器校准

Arduino Nano+超声波模块+温湿度传感器校准
目的
1.超声波发射器向某一方向发射超声波,在发射时刻的同时开始计
时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。设超声波在空气中的传播速度为 340m/s,根据计时器记录的时间 t,就可以计算出发射点距障碍物的距离 S
2.利用温湿度传感器,本实验种加入 LM35温度量测,以作为声速校正。比较在 0~200cm距离量测下,有温度量测与没有温度量测的误差为多少。
原理图
Arduino Nano+超声波模块+温湿度传感器校准接线图:
Arduino Nano+超声波模块+温湿度传感器校准

流程图
Arduino Nano+超声波模块+温湿度传感器校准代码
#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);
}
实验结果
Arduino Nano+超声波模块+温湿度传感器校准Arduino Nano+超声波模块+温湿度传感器校准(这个实验使用温湿度模块进行声速的校准,使用LED是为了更明显显示实验的结果)
有问题,欢迎探讨,(有一个课题:这款超音波模块是否可以作为单发单收模块使用,欢迎你的探究)