Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Wind direction averaging
#1

I  adapted the Tx board software a bit so the wind direction is averaged each 15 seconds. 
Too often the wind direction is all over the place in some wind conditions...

At the receiver end I added a 5 minute averaging of the wind direction (and speed also) so when I look at the display I know for sure where the wind is coming from.

This is the Tx board software mod:
Code:
// --- For all other supported Wind Direction Sensors ----------------------- #if (WINDDIR_SENSORTYPE == 20) double get_WindVane() {   windDirAverageCounter += 1;   //Serial << windDirAverageCounter << '\t';   analogRead(VANE_PIN); // Do 1 reading to stabilize ADC   delay(5);   unsigned int vane_reading = analogRead(VANE_PIN);   //Serial.println(vane_reading);   // calc the current wind direction   windDirection = ((vane_reading - Min_vane_reading) * 360L) / (Max_vane_reading - Min_vane_reading);   windDirection += WDir_offs;   // Precaution in case the calibration values are wrong or slightly off   if (windDirection < 0 || windDirection >= 360)   {     windDirection = 0;   }   //Serial << "Dir: " << (windDirection) << endl;   //----------------------------------------------------------------------------   // calculate wind direction average   //----------------------------------------------------------------------------   windDirSinusSum += sin(radians(windDirection));   windDirCoSinusSum += cos(radians(windDirection));   if (windDirAverageCounter == 5)   {     // calculate the average wind direction.     // convert result from Radians to Degrees     atan2Dir = degrees(atan2((windDirSinusSum / windDirAverageCounter),                              (windDirCoSinusSum / windDirAverageCounter)));     // if the atan2 calculation result is negative, we need to add 360 to the result!     if (atan2Dir < 0)     {       // multiplication by 10 is needed for round2int function       windDirAverage = round2int((atan2Dir + 360) * 10);       // sometimes we get 360 as result so we need to convert that to zero       if (windDirAverage == 360)       {         windDirAverage = 0;       }     }     else     {       // multiplication by 10 is needed for round2int function       windDirAverage = round2int(atan2Dir * 10);     }     //Serial << "av: " << windDirAverage << endl << endl;     // reset counter     windDirAverageCounter = 0;     windDirSinusSum = 0;     windDirCoSinusSum = 0;     windDirAverage = windDirAverage * 10;   }   // return windDirection;   return windDirAverage; } #endif #endif // End ID2
Reply


Messages In This Thread
Wind direction averaging - by edr1924 - 12-10-2019, 14:02
RE: Wind direction averaging - by werk_ag - 13-10-2019, 22:45
RE: Wind direction averaging - by edr1924 - 15-10-2019, 13:41



Users browsing this thread: 1 Guest(s)