Read the statement by Michael Teeuw here.
Trouble with python script for ultrasonic mudule HC-SR04
-
Hi,
i’ve got some problems with my script (don’t know, where i found it).
In principle, it works, but after 1 or 2 days, the monitor switches no longer on or off.
This means that the script is in an undefined state.
With the logging I wanted to see where it hangs, but that does not really work either.
Who can help me and optimize the script?Thank you
#Bibliotheken einbinden / Import libs from subprocess import call import RPi.GPIO as GPIO import time import logging #Einstellungen für das Logging / settings for log options logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='%m-%d %H:%M', filename='PIR.log', filemode='w') # define a Handler which writes INFO messages or higher to the sys.stderr console = logging.StreamHandler() console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') # tell the handler to use this format console.setFormatter(formatter) # add the handler to the root logger logging.getLogger('').addHandler(console) #GPIO Modus (BOARD / BCM) GPIO.setmode(GPIO.BCM) #GPIO Pins zuweisen / set GPIO pins GPIO_TRIGGER = 23 GPIO_ECHO = 24 Monitor_State = 0 Counter = 0 TVSERVICE = '/opt/vc/bin/tvservice' #Richtung der GPIO-Pins festlegen (IN / OUT) / direction for Pins (in/out) GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) Text = (time.strftime("%d.%m.%Y %H:%M:%S")) + (" Messung vom User gestartet") logging.info('Gestartet') logging.info(Text) logging.info('ENDE') # Bildschirm erst einmal ausschalten :-) / switch off monitor first :-) call([TVSERVICE, '-o']) def distanz(): # setze Trigger auf HIGH / set trigger to HIGH GPIO.output(GPIO_TRIGGER, True) # setze Trigger nach 0.01ms aus LOW / set trigger after 0.01ms low time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) StartZeit = time.time() StopZeit = time.time() # speichere Startzeit / remember starttime while GPIO.input(GPIO_ECHO) == 0: StartZeit = time.time() # speichere Ankunftszeit / remember 2'nd time while GPIO.input(GPIO_ECHO) == 1: StopZeit = time.time() # Zeit Differenz zwischen Start und Ankunft / calc difference TimeElapsed = StopZeit - StartZeit # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren # und durch 2 teilen, da hin und zurueck distanz = (TimeElapsed * 34300) / 2 return distanz if __name__ == '__main__': try: while True: abstand = distanz() if abstand < 120 and Monitor_State == 0: logging.info('Monitor gestartet') Monitor_State=1 Counter = 0 call([TVSERVICE, '-p']) elif abstand < 120 and Monitor_State == 1: Ausgabe = " Counter reset " + (" - %.1f cm" % abstand) logging.info(Ausgabe) Counter = 0 elif abstand >= 120 and Monitor_State == 1 and Counter = 100 and Counter >= 11: Monitor_State=0 Counter = 0 call([TVSERVICE, '-o']) time.sleep(1) # Beim Abbruch durch STRG+C resetten / reset after STRG+C except KeyboardInterrupt: GPIO.cleanup()
-
@mymirror What is your log saying? I am not that fluent in Python, but in the last
elif
you assignCounter
the value100
. The seems not right.Its an Ultrasonic sensor, so do you still hear the clicking noise after 1 or 2 days?
-
@idoodler Thanks for your Reply.
There is no clicking noise … as i haven’t got any sound device connected.
But you’re right … the 100 seems to be the problem.
I didn’t “saw” it … damn.
I’ll correct this and test it again.Thanks
-
@mymirror Funny story. Last Thursday I found the same issue in the production code of a project I am working on in my real live job, which lead to an really wired issue.
That was the biggest facepalm ever:weary_face:
And the ultra sonic sensor is clicking itself. The sensor is just a speaker and an microphone. The speaker is clicking constantly and the microphone is picking up the clicking. I am pretty jung, it would drive me crazy if I have to sleep, or stay here the sensor for a long time. But with increasing age humans won’t hear it anymore. But I think animals like cats, dogs, birds, … do hear it better.
The more you know :sign_of_the_horns: