• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
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.1k 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 May 31, 2018, 12:05 PM

    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()
    
    
    I 1 Reply Last reply Jun 2, 2018, 7:46 AM Reply Quote 0
    • I Offline
      idoodler Module Developer @MyMirror
      last edited by Jun 2, 2018, 7:46 AM

      @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 Jun 2, 2018, 8:01 AM Reply Quote 0
      • M Offline
        MyMirror @idoodler
        last edited by Jun 2, 2018, 8:01 AM

        @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

        I 1 Reply Last reply Jun 2, 2018, 8:10 AM Reply Quote 0
        • I Offline
          idoodler Module Developer @MyMirror
          last edited by Jun 2, 2018, 8:10 AM

          @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
          1 / 1
          • First post
            1/4
            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