diff --git a/python_payload/apps/sensors/__init__.py b/python_payload/apps/sensors/__init__.py index 72e991d24948132e4bb80d340c8345d23c47ddb6..f5da9456548948f4bc9a66beb3234f861d5c4e6a 100644 --- a/python_payload/apps/sensors/__init__.py +++ b/python_payload/apps/sensors/__init__.py @@ -37,6 +37,8 @@ def azimuth(vec): def relative_altitude(pascal, celsius): # https://en.wikipedia.org/wiki/Hypsometric_equation + if pascal <= 0: + return 0 return (celsius + 273.15) * (287 / 9.81) * math.log(101325 / pascal, math.e) diff --git a/python_payload/st3m/power.py b/python_payload/st3m/power.py index f1e2956376ed34272cc8cf00468e4cce560cb1f6..ea9bd54ec085868fa33590813f4108c8def69720 100644 --- a/python_payload/st3m/power.py +++ b/python_payload/st3m/power.py @@ -143,7 +143,7 @@ class Power: self._ts = time.ticks_ms() def _battery_voltage_sample(self) -> float: - return self._adc.read_uv() * 2 / 1e6 + return self._adc.read_uv() * 2.1428 / 1e6 def _update(self) -> None: ts = time.ticks_ms() @@ -185,12 +185,13 @@ class Power: percentage = 0 voltage_readings = [] - for i in range(5): - voltage_readings.append(self._adc.read_uv() * 2 / 1e6) + for i in range(8): + voltage_readings.append(self._battery_voltage_sample()) voltage_readings.sort() - # take median - voltage = voltage_readings[2] + voltage_readings = voltage_readings[2:-2] + # take average + voltage = sum(voltage_readings) / len(voltage_readings) # print(voltage) @@ -199,25 +200,4 @@ class Power: percentage = self._batLUT[i][0] break - self._prev_battery_percentages.pop(0) - self._prev_battery_percentages.append(percentage) - # log.debug("percentage: " + str(percentage) + " %") - # log.debug("prev: " + str(self._prev_battery_percentages) + " %") - percent_list = self._prev_battery_percentages - - if -1 in percent_list: - return percentage - - # avoid division by zero in weird edge cases - listsum = sum(percent_list) - if (listsum == 0) or (percent_list[0] == 0): - return 0 - - for i in range(3): - if listsum / percent_list[0] == 3: - # all values are the same, we settled on a value (might be the same as before but that's ok) - # print("check if new valid value/the end: "+str(time.ticks_diff(time.ticks_us(), ts))) - return percentage - else: - # we're still settling on a value, return previously settled value - return self._battery_percentage + return percentage