RS41-SGP hum calc with real pressure

pull/193/head
Hansi, dl9rdz 2021-09-26 13:52:28 +02:00
rodzic 0379cedd7b
commit 2186482fb8
4 zmienionych plików z 24 dodań i 9 usunięć

Wyświetl plik

@ -52,8 +52,12 @@ install:
- arduino --install-library "GFX Library for Arduino"
script:
- arduino --board esp32:esp32:t-beam --verify $PWD/RX_FSK/RX_FSK.ino
- find build
- find /home/travis/.arduino15/packages/esp32/hardware/esp32/
- ESPPATH=`arduino --get-pref runtime.tools.xtensa-esp32-elf-gcc.path`
- $ESPPATH/bin/xtensa-esp32-elf-c++ -c RX_FSK/src/fonts/fonts.cpp -o /tmp/fonts.o
- $ESPPATH/bin/xtensa-esp32-elf-ld -T fontlink.ld --oformat=binary -o /tmp/fonts.bin /tmp/fonts.o
- ls -la /tmp/fonts.bin
#- find build
#- find /home/travis/.arduino15/packages/esp32/hardware/esp32/
- $PWD/scripts/makeimage.py $ESP32TOOLS $PWD/build/RX_FSK.ino.bin $PWD/RX_FSK/data $PWD/out.bin
after_success:
- .travis/push.sh

Wyświetl plik

@ -613,7 +613,7 @@ float GetRATemp( uint32_t measuredCurrent, uint32_t refMin, uint32_t refMax, flo
}
// taken from https://github.com/einergehtnochrein/ra-firmware
float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, float sensorTemp, float externalTemp ) {
float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, float sensorTemp, float externalTemp, float pressure ) {
struct subframeBuffer *calibration = (struct subframeBuffer *)sonde.si()->extra;
float current = float( humCurrent - humMin) / float( humMax - humMin );
/* Compute absolute capacitance from the known references */
@ -624,12 +624,15 @@ float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, floa
float Cp = ( C / calibration->value.calibU[0] - 1.0f) * calibration->value.calibU[1];
/* Compensation for low temperature and pressure at altitude */
float estimatedPressure = 1013.25f * expf(-1.18575919e-4f * sonde.si()->d.alt );
if(isnan(pressure)) {
// if no pressure is available (non-SGP), estimate based on altitude
pressure = 1013.25f * expf(-1.18575919e-4f * sonde.si()->d.alt );
}
float Tp = (sensorTemp - 20.0f) / 180.0f;
float sum = 0;
float powc = 1.0f;
float p = estimatedPressure / 1000.0f;
float p = pressure / 1000.0f;
for ( int i = 0; i < 3; i++) {
float l = 0;
float powt = 1.0f;
@ -792,10 +795,14 @@ int RS41::decode41(byte *data, int maxlen)
Serial.printf( "Pressure sens: pressureMain = %ld, pressureRef1 = %ld, pressureRef2 = %ld\n", pressureMain, pressureRef1, pressureRef2 );
#endif
struct subframeBuffer *calibration = (struct subframeBuffer *)(sonde.si()->extra);
// check for bits 3 through 20 set and 37 through 46
// temp: 0xF8==bits 3..7 : we need refResistorlow/high, taylorT, polyT
bool validExternalTemperature = calibration!=NULL && (calibration->valid & 0xF8) == 0xF8;
// humidity: bits 3..20 and 37..46.
// (note: we check validPressure below as well, thus we only calculate humidity of bit 33 (variant) is available as well)
bool validHumidity = calibration!=NULL && (calibration->valid & 0x7FE0001FFFF8) == 0x7FE0001FFFF8;
// pressure: bits 33 and 37..42 (variant; x25..x2a: matrixP) /// CALIB_P is 0x7E200000000)
bool validPressure = calibration!=NULL && (calibration->valid & CALIB_P)==CALIB_P && calibration->value.names.variant[7]=='P';
if ( validPressure ) {
@ -809,11 +816,11 @@ int RS41::decode41(byte *data, int maxlen)
Serial.printf("External temperature = %f\n", si->temperature );
}
if ( validHumidity && validExternalTemperature ) {
if ( validHumidity && validExternalTemperature & validPressure ) {
si->tempRHSensor = GetRATemp( tempHumiMain, tempHumiRef1, tempHumiRef2,
calibration->value.calTU, calibration->value.taylorTU, calibration->value.polyTrh );
Serial.printf("Humidity Sensor temperature = %f\n", si->tempRHSensor );
si->relativeHumidity = GetRAHumidity( humidityMain, humidityRef1, humidityRef2, si->tempRHSensor, si->temperature );
si->relativeHumidity = GetRAHumidity( humidityMain, humidityRef1, humidityRef2, si->tempRHSensor, si->temperature, si->pressure );
Serial.printf("Relative humidity = %f\n", si->relativeHumidity );
}
}

Wyświetl plik

@ -1,4 +1,4 @@
const char *version_name = "rdzTTGOsonde";
const char *version_id = "devel20210925";
const char *version_id = "devel20210926";
const int SPIFFS_MAJOR=2;
const int SPIFFS_MINOR=16;

Wyświetl plik

@ -1,5 +1,6 @@
#!/usr/bin/python
import os
import os.path
import sys
import csv
import subprocess
@ -29,6 +30,9 @@ data_dir = sys.argv[3]
file_out = sys.argv[4]
partition = esp32tools + "/partitions/default.csv"
if os.path.isfile("RX_FSK/partitions.csv"):
partition = "RX_FSK/partitions.csv"
with open(partition, 'rb') as csvfile:
partreader = csv.reader(csvfile, delimiter=',')
for row in partreader: