使用arduino用皮托管计算风速
Calculating wind speed with pitot tube using arduino
尝试使用皮托管 MPXV7002DP 计算风速。
我们从传感器获取动态压力,然后应用伯努利方程:
pd = dynamic pressure
air density = 1.225kg/m^3
windspeed = sqrt(2*Pd/air density)
我们正在使用 Arduino UNO。
我们认为从传感器读取压力有问题。
我们不知道如何获得正确的值。
#include <SoftwareSerial.h>
float Output=0;
void setup() {
Serial.begin(9600);
}
void loop() {
float sensorValue = analogRead(A0);
output=sqrt((2*sensorValue)/1.225);
Serial.println(output);
Serial.print("m/s");
delay(100);
}
正如一位评论者所指出的,analogRead 的 return 值是 0-1023 之间的一个整数。这是引脚 A0 上电压的比例,从 0 到比较电压。 (如果您使用的是 5V Arduino,则 1023 是 5V。3V Arduino,1023 是 3V。看起来您没有做任何复杂的事情来改变您使用的比较电压,所以这应该是准确的.)
我假设您使用的是 5V,因为这是您的传感器使用的电压。
您需要做的是查看您设备的 data sheet,以确定压力和电压之间的关系。查看 sheet,这里有一个复杂的问题,但从第 5 页的图表来看,您可以假设 0.5V(模拟读数约为 102)是 -2kPa 的压力和 4.5V( 921 左右的 analogRead) 是 2kPa 的压力。你很幸运,缩放是线性的。
我说 "around" 是因为很明显该设备的响应有相当大的倾斜 - 至少正负 .5V 或 .2kPa! (换句话说,0kPa 可以读取 462 到 562 之间的任何值。)
您应该将 analogRead 值从 0-102 映射到 -2kPa,从 921-1023 映射到 2kPa,并且介于两者之间的所有值都应该是 -2 和 2 之间的插值。我面前没有 arduino所以我不能尝试,但它应该是这样的:
result = analogRead(A0);
if (result < 102) {
kPa = -2.0;
} else {
if (result > 921) {
kPa = 2.0;
} else {
kPa = map(result, 102, 921, -2000, 2000)/1000.0;
}
}
如果我搞砸了,请在评论中告诉我,我会设法修复它。这一切都没有能够实际 compile/test 的好处。 =]
当你在伯努利方程中提到动态压力 pd 时,我想你指的是总压力和静态压力之间的差异,因为空速 V 等于:V = sqrt(2 * (p_total - p_static) / airdensity),所以你的 pd 应该是 (p_dynamic - p_static)。
尝试使用皮托管 MPXV7002DP 计算风速。
我们从传感器获取动态压力,然后应用伯努利方程:
pd = dynamic pressure
air density = 1.225kg/m^3
windspeed = sqrt(2*Pd/air density)
我们正在使用 Arduino UNO。
我们认为从传感器读取压力有问题。
我们不知道如何获得正确的值。
#include <SoftwareSerial.h>
float Output=0;
void setup() {
Serial.begin(9600);
}
void loop() {
float sensorValue = analogRead(A0);
output=sqrt((2*sensorValue)/1.225);
Serial.println(output);
Serial.print("m/s");
delay(100);
}
正如一位评论者所指出的,analogRead 的 return 值是 0-1023 之间的一个整数。这是引脚 A0 上电压的比例,从 0 到比较电压。 (如果您使用的是 5V Arduino,则 1023 是 5V。3V Arduino,1023 是 3V。看起来您没有做任何复杂的事情来改变您使用的比较电压,所以这应该是准确的.)
我假设您使用的是 5V,因为这是您的传感器使用的电压。
您需要做的是查看您设备的 data sheet,以确定压力和电压之间的关系。查看 sheet,这里有一个复杂的问题,但从第 5 页的图表来看,您可以假设 0.5V(模拟读数约为 102)是 -2kPa 的压力和 4.5V( 921 左右的 analogRead) 是 2kPa 的压力。你很幸运,缩放是线性的。
我说 "around" 是因为很明显该设备的响应有相当大的倾斜 - 至少正负 .5V 或 .2kPa! (换句话说,0kPa 可以读取 462 到 562 之间的任何值。)
您应该将 analogRead 值从 0-102 映射到 -2kPa,从 921-1023 映射到 2kPa,并且介于两者之间的所有值都应该是 -2 和 2 之间的插值。我面前没有 arduino所以我不能尝试,但它应该是这样的:
result = analogRead(A0);
if (result < 102) {
kPa = -2.0;
} else {
if (result > 921) {
kPa = 2.0;
} else {
kPa = map(result, 102, 921, -2000, 2000)/1000.0;
}
}
如果我搞砸了,请在评论中告诉我,我会设法修复它。这一切都没有能够实际 compile/test 的好处。 =]
当你在伯努利方程中提到动态压力 pd 时,我想你指的是总压力和静态压力之间的差异,因为空速 V 等于:V = sqrt(2 * (p_total - p_static) / airdensity),所以你的 pd 应该是 (p_dynamic - p_static)。