MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    Trouble with python script for ultrasonic mudule HC-SR04

    Scheduled Pinned Locked Moved Unsolved Troubleshooting
    4 Posts 2 Posters 1.2k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M Offline
      MyMirror
      last edited by

      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()
      
      
      idoodlerI 1 Reply Last reply Reply Quote 0
      • idoodlerI Offline
        idoodler Module Developer @MyMirror
        last edited by

        @mymirror What is your log saying? I am not that fluent in Python, but in the last elif you assign Counter the value 100. The seems not right.

        Its an Ultrasonic sensor, so do you still hear the clicking noise after 1 or 2 days?

        M 1 Reply Last reply Reply Quote 0
        • M Offline
          MyMirror @idoodler
          last edited by

          @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

          idoodlerI 1 Reply Last reply Reply Quote 0
          • idoodlerI Offline
            idoodler Module Developer @MyMirror
            last edited by

            @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:

            1 Reply Last reply Reply Quote 0
            • 1 / 1
            • First post
              Last post
            Enjoying MagicMirror? Please consider a donation!
            MagicMirror created by Michael Teeuw.
            Forum managed by Sam, technical setup by Karsten.
            This forum is using NodeBB as its core | Contributors
            Contact | Privacy Policy