【问题标题】:average temperature in ArduinoArduino的平均温度
【发布时间】:2017-01-03 23:34:30
【问题描述】:

我有一个 Sparkfun 的 Arduino 温度计,可以测量温度。它非常精确,但我需要更多的平均值。

我使用的代码直接来自 Sparkfun (https://learn.sparkfun.com/tutorials/sik-experiment-guide-for-arduino---v32/experiment-7-reading-a-temperature-sensor)

const int temperaturePin = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{

  float voltage, degreesC, degreesF;

  voltage = getVoltage(temperaturePin);

  degreesC = (voltage - 0.5) * 100.0;

  degreesF = degreesC * (9.0/5.0) + 32.0;

  Serial.print("voltage: ");
  Serial.print(voltage);
  Serial.print("  deg C: ");
  Serial.print(degreesC);
  Serial.print("  deg F: ");
  Serial.println(degreesF);


  delay(1000); 
}


float getVoltage(int pin)
{
  return (analogRead(pin) * 0.004882814);
}

我希望每分钟平均每 10 秒获得一次读数,并剔除异常值,而不仅仅是每分钟的实际情况。 例如,如果在一分钟内读取 65、64、66、67、65、44 ......它将平均前 5 个并丢弃 44 个,平均为 65.4。

【问题讨论】:

  • 您可以通过首先执行five number summary来计算哪些值是异常值
  • 一种方法是丢弃最低和最高读数并对其余读数进行平均。还有其他方法...谷歌?一种更复杂的方法是,在知道可能的温度变化率后,任何超出该变化率的变化都必须持续达到规定的读数次数。
  • 问题是什么?
  • 平均不反对精确。而且 Arduino 不是 C 或标准 C++。
  • 你必须定义什么是异常值。有 6 个样本,很难说“这显然是一个异常值”。如果有两个超过 6 的异常值怎么办?和3?我的建议是保留所有这些。如果有噪音,则在一秒钟内进行 10 次测量,并在一分钟内将它们平均 6 次(每 10 秒开始一个 10 次测量的循环)。或者,如果您发现您的结果类型很常见,请排除最高和最低的结果。我建议你在转换之前用整数做这个数学运算,并在一行中完成所有转换,这样编译器就可以只做一条指令而不是三条指令。

标签: arduino average outliers


【解决方案1】:

我建议对数字进行排序并计算median 附近的几个数字的平均值(大约 10-25% 的样本数可能是一个好的开始)。这样您就可以很容易地消除异常值并获得相关的平均值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2018-08-15
    • 2016-06-22
    • 1970-01-01
    • 2020-12-30
    • 2018-01-11
    • 1970-01-01
    相关资源
    最近更新 更多