尝试使用皮托管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);
}
答案 0 :(得分:2)
正如一位评论者所指出的,analogRead的返回值是0-1023之间的整数。这是引脚A0上的电压比例,从0到比较电压。 (如果您使用的是5V Arduino,1023是5V.3V Arduino,1023是3V。看起来您并没有做任何复杂的改变,而是改变您使用的是什么比较电压,所以这应该是准确的。)
我将假设您正在使用5V,因为这是您的传感器所使用的。
您需要做的是查看设备的https://themeteorchef.com/tutorials/using-dynamic-templates,以确定压力和电压之间的关系。看一下表,你有一个复杂的bugger,但是从第5页的图表看,你可以假设0.5V(analogRead大约102)是-2kPa的压力和4.5V(analogRead大约921) )是2kPa的压力。您很幸运,缩放是线性的。
我说&#34;周围&#34;因为很清楚该设备在它的响应中有相当多的污点 - 至少是正负0.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;
}
}
让我知道,在评论中,如果我搞砸了什么,我会看到修复它。这完全没有能够实际编译/测试的好处。 =]
答案 1 :(得分:0)
当您在伯努利方程式中提及动压pd时,我想是指总压与静压之差,因为空速V等于:V = sqrt(2 *(p_total-p_static)/空气密度) ,因此您的pd应该是(p_dynamic-p_static)。