使用arduino计算皮托管风速

时间:2017-05-16 16:41:08

标签: arduino arduino-uno pressure

尝试使用皮托管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);
}

2 个答案:

答案 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)。