使用arduino计算皮托管风速

问题描述 投票:2回答:2

尝试使用皮托管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);
}
arduino arduino-uno pressure
2个回答
2
投票

正如一位评论者指出的那样,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;
  }
}

让我知道,在评论中,如果我搞砸了什么,我会看到修复它。这完全没有能够实际编译/测试的好处。 =]


0
投票

当你提到伯努利方程中的动态压力pd时,我想你的意思是总压力和静压之间的差值,因为空速V等于:V = sqrt(2 *(p_total - p_static)/ airdensity),所以你的pd应该是(p_dynamic - p_static)。

© www.soinside.com 2019 - 2024. All rights reserved.