Hilfe Programmieren Bewegungsmelder Audiodatei abspielen

  • Hallo alle zusammen!


    Wir brauchen Hilfe beim Programmieren eines Bewegungsmelders der eine Audiodatei Triggern soll.

    Raspberry 3 und HC -SR501 Melder.


    Der Aufbau steht, nur vom Programmieren haben wir so gut wie keine Ahnung :D .

    Wenn uns jemand mit einem Code weiterhelfen könnte,der müsste Idiotensicher sein.

    Ich habe schon mal einen Link zu einem Thema erhalten,das hat uns nur garnicht weitergeholfen.

    Der Bewegungsmelder soll bei Kontakt eine Audiodatei auf dem Raspberry abspielen.

    Das ganze ist für ein Kunstprojekt wo das ganze in einer Bank verbaut ist.

    Bei erstellen eines Codes würden wir uns auch erkenntlich zeigen ;)


    Vielen Dank schon mal im Vorraus.

  • Go to Best Answer
  • Bash:

    Oder in Python3:

    Python
    #!/usr/bin/python3
    import time
    import RPi.GPIO as GPIO
    from subprocess import call
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(4, GPIO.IN)
    while 1:
          time.sleep(0.5)
          if GPIO.input(4) == GPIO.HIGH:
            call('/usr/bin/aplay /pfad/zum/sound.wav')
  • Hi fred0815,



    Danke Dir für die Codes.

    Sorry für die Dumme :rolleyes: Frage aber die Audiodatei ist im

    /home/pi/Music

    Ordner.

    Ich hab den unten bei call eingegeben aber file not found.

    Muss ich den Titelnamen auch spezifisch eingeben?

    • Official Post

    Oder Python3 mit gpiozero und pygame

  • Hi Hyle,


    Super Danke Dir!

    Es funktioniert!


    Jetzt noch die nächste Blöde Frage 8o

    Ich würde insgesamt 4 Bewegungsmelder dran hängen

    Was ändert sich da am Script?


    Ich habs geschafft 1 Bewegungsmelder zu integrieren,ich checks aber ned wie ich die anderen an die GPIO anschließen soll

    um sie zu integrieren.


    Sorry für die Fragen ^^

  • Vielleicht solltest Du dein Problem mal etwas detailierter beschreiben. Wenn Du mal auf die Seite von Tell schaust, findest Du diesen Link, welcher den fertigen Code für Taster an 5 GPIO's zeigt. Schließ halt 3 weitere Bewgungsmelder nach dem selben Schema an andere GIPIO's an und ändere die GPIO's & Soundfiles im Script.

  • Wie oben beschrieben hab ich keine ahnung vom programmieren.


    Bei diesem Script hat alles Funktioniert

    Die Frage is wie ich die anderen GPIO‘s dort einfügen?

    #!/usr/bin/env python3

    from gpiozero import MotionSensor
    import pygame.mixer
    from signal import pause

    PIR = MotionSensor(4) # https://pinout.xyz/pinout/pin7_gpio4#
    AUDIOFILE = "/home/pi/Desktop/01-Thunderstruck.mp3" #

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.


    def play_sound():
    pygame.mixer.init()
    pygame.mixer.music.load(AUDIOFILE)
    pygame.mixer.music.play(0)

    def main():
    PIR.when_motion = play_sound

    if __name__ == "__main__":
    main()
    pause()

    • Official Post

    Mit mehreren PIR würde ich es anders machen

    Die Audiodateien dürften klar sein. in den Zeilen 19 - 22 stehen nach "MotionSensor" in der Klammer die GPIO-Nummer, also beim ersten Sensor die 4 = GPIO 4 = Pin 7. (Weitere Nummerierungen findest Du hier: https://pinout.xyz)

    In den selben Zeilen steht nach Sound in der Klammer, die oben definierten Audiodateien.


    Das Skript ist natürlich von mir ungetestet!



    //Edit

    Verwende übrigens bitte einen Codeblock (dieser Button: ) für Ausgaben und Code, dann musst Du Dir nicht die Arbeit machen den Text bunt zu färben und das Video, was ich als Kommentar erklärend verlinkt habe, würde auch nicht auftauchen. ;)

  • Hi Hyle,


    Danke vielmals erstmal :)


    Ich bekomme folgende Fehlermeldung


    Traceback (most recent call last):

    File "/home/pi/audio2.py", line 15

    def main()

    ^

    SyntaxError: invalid syntax



    ich möchte von jedem melder die gleiche audio datei abspielen, hab es auch so angegeben


    #!/usr/bin/env python3


    from gpiozero import MotionSensor

    import pygame.mixer

    from pygame.mixer import Sound

    from signal import pause


    #Audiodateien

    ACDC = "/home/pi/Desktop/test.mp3"

    TROMPETE = "/home/pi/Desktop/test.mp3"

    KATZE = "/home/pi/Desktop/test.mp3"

    HUND = "/home/pi/Desktop/test.mp3"



    def main()

    pygame.mixer.init()


    button_sounds = {

    MotionSensor(4): Sound(ACDC),

    MotionSensor(3): Sound(TROMPETE),

    MotionSensor(17): Sound(KATZE),

    MotionSensor(27): Sound(HUND),

    }


    for button, sound in button_sounds.items():

    button.when_pressed = sound.play


    if __name__ == "__main__":

    main()

    pause()

    • Official Post

    Traceback (most recent call last):

    File "/home/pi/audio2.py", line 15

    def main()

    ^

    SyntaxError: invalid syntax

    Da fehlte noch ein Doppelpunkt nach main, also def main():


    ich möchte von jedem melder die gleiche audio datei abspielen, hab es auch so angegeben

    Dann halt überall Sound(ACDC).

  • Ned das ich nerven wollen würde ;)


    jetzt findet er scheinbar die datei nicht


    Traceback (most recent call last):

    File "/home/pi/audio2.py", line 27, in <module>

    main()

    File "/home/pi/audio2.py", line 17, in main

    MotionSensor(4): Sound(ACDC),

    pygame.error: Unable to open file '/home/pi/Desktop/test.mp3'




    Mit dem Script für einen Sensor klappt es einwandfrei ;)

  • #!/usr/bin/env python3


    from gpiozero import MotionSensor

    import pygame.mixer

    from pygame.mixer import Sound

    from signal import pause


    #Audiodateien

    ACDC = "/home/pi/Desktop/test.mp3"




    def main():

    pygame.mixer.init()


    pir_sounds = {

    MotionSensor(4): Sound(ACDC),

    MotionSensor(3): Sound(ACDC),

    MotionSensor(17): Sound(ACDC),

    MotionSensor(27): Sound(ACDC),

    }


    for pir, sound in pir_sounds.items():

    pir.when_motion = sound.play


    if __name__ == "__main__":

    main()

    pause()

    • Best Answer
    • Official Post

    Ok, dann halt so wie im ersten Skript, nur mit 4 Sensoren.