ich habe ein Python Script laufen, welches zu bestimmten Zeiten ausgeführt wird und mit Hilfe eines Ultraschallsensors den Füllstand eines Heizöltanks misst.
Da es hier gewisse Unschärfen bei der Entfernungsermittlung gibt, lasse ich im Script eine Methode mehrmals ausführen und hole mir dann von den Werten den Mittelwert und verwende diesen im Folgenden (Wert Distance)
Allerdings gibt es hier einige Ausreißer und mir erscheint die Verwendung des Medians hier sinnvoller als die Mittelwertmethode. Leider bin ich was Python angeht eher ein Neuling. (Viel youtube, copypaste sowie Try&Error)
Ich habe zwar schon etwas mit dem Code herumgespielt bekomme aber keine brauchbaren Ergebnisse (Sprich code nicht ausführbar) unexpected unindent...
Eventuell könnt ihr mir hier einen kurzen Tipp geben wie ich den Median für Distance berechnen und ausführen kann. Im Idealfall als zusätzliche Variable. Ich danke euch bereits im Vorraus.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import required modules
import time
import datetime
import RPi.GPIO as GPIO
# define GPIO pins
GPIO.setwarnings(False)
GPIOTrigger = 18
GPIOEcho = 17
# function to measure the distance
def MeasureDistance():
# set trigger to high
time.sleep(10.0)
GPIO.output(GPIOTrigger, True)
# set trigger after 10Â µs to low
time.sleep(0.000001)
GPIO.output(GPIOTrigger, False)
# store initial start time
StartTime = time.time()
# store start time
while GPIO.input(GPIOEcho) == 0:
StartTime = time.time()
# store stop time
while GPIO.input(GPIOEcho) == 1:
StopTime = time.time()
# calculate distance
TimeElapsed = StopTime - StartTime
Distance = (TimeElapsed * 34400) / 2
return Distance
# main function
def main():
try:
# while True:
Distance0 = MeasureDistance()
Distance01 = MeasureDistance()
Distance02 = MeasureDistance()
Distance03 = MeasureDistance()
Distance04 = MeasureDistance()
Distance05 = MeasureDistance()
Distance06 = MeasureDistance()
Distance07 = MeasureDistance()
Distance08 = MeasureDistance()
Distance09 = MeasureDistance()
Distance10 = MeasureDistance()
Distance11 = MeasureDistance()
Distance12 = MeasureDistance()
Distance13 = MeasureDistance()
Distance14 = MeasureDistance()
Distance15 = MeasureDistance()
Distance16 = MeasureDistance()
Distance17 = MeasureDistance()
Distance18 = MeasureDistance()
Distance19 = MeasureDistance()
Distance20 = MeasureDistance()
Distance21 = MeasureDistance()
Distance22 = MeasureDistance()
Distance23 = MeasureDistance()
Distance24 = MeasureDistance()
Distance25 = MeasureDistance()
Distance26 = MeasureDistance()
Distance27 = MeasureDistance()
Distance28 = MeasureDistance()
Distance29 = MeasureDistance()
Distance30 = MeasureDistance()
Distance31 = MeasureDistance()
Distance32 = MeasureDistance()
Distance33 = MeasureDistance()
Distance34 = MeasureDistance()
Distance35 = MeasureDistance()
Distance36 = MeasureDistance()
Distance37 = MeasureDistance()
Distance38 = MeasureDistance()
Distance39 = MeasureDistance()
Distance40 = MeasureDistance()
Distance_sum = Distance01 + Distance02 + Distance03 + Distance04 + Distance05 + Distance06 + Distance07 + Distance08 + Distance09 + Distance10 + Distance11 + Distance12 + Distance13 + Distance14 + Distance15 + Distance16 + Distance17 + Distance18 + Distance19 + Distance20 + Distance21 + Distance22 + Distance23 + Distance24 + Distance25 + Distance26 + Distance27 + Distance28 + Distance29 + Distance30 + Distance31 + Distance32 + Distance33 + Distance34 + Distance35 + Distance36 + Distance37 + Distance38 + Distance39 + Distance40
Distance = round(Distance_sum / 40,1)
# Meine Tanks haben Maximal 6000 Liter bei 153 cm Füllhöhe
# Zusätzlich 1 cm Offset vom Einbauort des Sensors
Fuellstand = 156.5 - Distance
Liter = 6000 / 151 * Fuellstand
Prozent = Fuellstand / 151 * 100
Zeit = time.time()
ZeitStempel = datetime.datetime.fromtimestamp(Zeit).strftime('%Y-%m-%d_%H:%M:%S')
print (ZeitStempel), ("%.1f" % Fuellstand),("%.0f" % Liter), ("%.0f" % Prozent)
#("Entfernung: %.1f cm" % Distance),
time.sleep(2)
# reset GPIO settings if user pressed Ctrl+C
except KeyboardInterrupt:
print("Measurement stopped by user")
GPIO.cleanup()
if __name__ == '__main__':
# use GPIO pin numbering convention
GPIO.setmode(GPIO.BCM)
# set up GPIO pins
GPIO.setup(GPIOTrigger, GPIO.OUT)
GPIO.setup(GPIOEcho, GPIO.IN)
# set trigger to false
GPIO.output(GPIOTrigger, False)
# call main function
main()