尝试使用皮托管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的返回值是0-1023之间的整数。这是引脚A0上的电压比例,从0到比较电压。 (如果你使用的是5V Arduino,1023是5V.3V Arduino,1023是3V。看起来你做的任何复杂事情都不会改变你所使用的比较电压,所以这应该是准确的。)
我将假设您正在使用5V,因为这是您的传感器使用的。
您需要做的是查看设备的data sheet,以确定压力和电压之间的关系。看一下表,你有一个复杂的bugger,但是从第5页的图表看,你可以假设0.5V(analogRead大约102)是-2kPa的压力和4.5V(analogRead大约921) )是2kPa的压力。你很幸运,缩放是线性的。
我说“周围”是因为很明显该设备在它的响应中有相当多的污点 - 至少加上或减去.5V或.2kPa! (换句话说,0kPa可以读取从462到562的任何地方。)
你应该将analogRead值从0-102映射到-2kPa,从921-1023到2kPa,其间的所有内容都应该是介于-2和2之间的lerp。我没有在我面前的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;
}
}
让我知道,在评论中,如果我搞砸了什么,我会看到修复它。这完全没有能够实际编译/测试的好处。 =]
当你提到伯努利方程中的动态压力pd时,我想你的意思是总压力和静压之间的差值,因为空速V等于:V = sqrt(2 *(p_total - p_static)/ airdensity),所以你的pd应该是(p_dynamic - p_static)。