Raspberry Pi – Aktiver Buzzer
In meinem Sensoren Set gibt es auch mehrere Ausgabegeräte. Neben den visuellen LEDs sind das auch akustische Bauteile, so genannte Buzzer. Den aktiven Buzzer stelle ich euch in diesem Artikel kurz vor und zeige euch anhand eines Beispiels mit Source Code wie ihr diesen ansteuern könnt. Premiere hat in diesem Artikel mein neuer Youtube Kanal, in dem ich in nächster Zeit Videos hochladen werden. Ich beginne mit einem Video des aktiven Buzzers. Schließlich wollt ihr ihn ja auch hören und das geht rein mit Text leider schlecht…
Raspberry Pi – Aktiver Buzzer
Dieses Audio-Ausgabegerät nenne ich bewusst Buzzer. Auf Deutsch würde man dieses wohl Summer oder Lautsprecher nennen, in den relevanten Artikel die man über Google findet wird dieser Sensor eigentlich immer Buzzer genannt.
Das Bauteil selbst ist ein piezoelektrisches Bauteil. Der Buzzer besteht lediglich aus einem Ferroelektrikum, dessen Membran beim Anlegen einer elektrischen Spannung mit dessen Frequenz zu schwingen beginnt und einen gleichmäßigen Ton von sich gibt. Da wir am Raspberry Pi lediglich digitale GPIO Pins haben können wir somit nur ein einziges Signal an den Buzzer schicken. Wenn Strom fließt wird ein Ton ausgegeben, fließt kein Strom, dann ist auch kein Ton zu hören.
Versuchsaufbau
Der Versuchsaufbau ist eigentlich relativ simpel. Ein aktiver Buzzer ist bereits fix auf eine kleine Platine mit dem nötigen Widerstand aufgelötet und es gibt 3 Pins. Diese 3 Pins teilen sich in Masse (GND), Betriebsspannung (+5V) und das Signal. Masse und Betriebsspannung können wir einfach direkt an die GPIO Pins 2 und 6 anschließen (siehe dazu die Übersicht bei der Einleitung zur GPIO Schnittstelle). Für das Signal können wir einen beliebigen der normalen GPIO Pins verwenden. Ich bevorzuge den Pin mit der Nummer 7 (GPIO 4).
Mit female-female Steckkabel kann man das Bauteil direkt an die GPIO Schnittstelle anschließen. Leider besitze ich keine, also nehme ich den Umweg über mein Steckbrett. Die exakte Verkabelung ist dem Bild zu entnehmen. Mein aktiver Buzzer hat die Spannung auf dem mitleren Pin (rote Kabel). Links gesehen von der Vorderseite befindet sich die Masse (blauer Steckdraht) und rechts verbinden wir den Signalpin (violettes Kabel).
Beispielsoftware
Wie immer ist meine Beispielsoftware mit Python programmiert. Der größte Vorteil ist, dass der Raspberry Pi (Python Interpreter) ja genau für diesen Zweck entwickelt wurde und die GPIO Bibliothek von Python so wunderbar gut funktioniert.
Mein Beispielscript sieht wie folgt aus:
import RPi.GPIO as GPIO import time #initialisiere GPIO PIN_A = 7 GPIO.setmode(GPIO.BOARD) GPIO.setup(PIN_A, GPIO.OUT) print "Programm wird mit STRG+C beendet" done = False state = True try: while not done: GPIO.output(PIN_A, state) if state: state = False else: state = True time.sleep(0.2) GPIO.cleanup() except KeyboardInterrupt: GPIO.cleanup()
Wir benötigen neben der GPIO Bibliothek auch die für die Zeit (time). Im nächsten Schritt initialisieren wir wie gewohnt die GPIO Schnittstelle. Unser GPIO Pin (GPIO 4) wird für die Ausgabe von Signalen konfiguriert. Der Hauptteil des Programms ist die Endlossschleife. In dieser weisen wir dem Pin den Zustand der Variablen state zu.
Zur Erinnerung: der GPIO Pin ist wie alle anderen Pins ein digitaler, man kann also nur 1 oder 0 ausgeben. Das entspricht einer boolschen Variable. Nachdem wir die Ausgabe vom Pin gesetzt haben verändern wir noch die Variable state in ihr Gegenteil. Mit der time.sleep() Funktion lassen wir unser Programm für 0.2 Sekunden lang schlafen. Danach führen wir die Schleife weiter aus. Durch dieses Vorgehen entsteht kein durchgehender Ton sondern ein immer wieder piepender Ton. Gerne könnt ihr experimentieren und das Intervall verändern. Was passiert wenn man time.sleep(1.0) verwendet? Oder time.sleep(0.1)?
Sobald das Programm durch einen Interrupt von der Tastatur beendet worden ist (STRG+C drücken), dann soll auch die GPIO Schnittstelle aufgeräumt werden. Falls das nicht gemacht wird kann es passieren, dass der Ton auch nach Beendigung des Programms weiter ausgegeben wird.
Gefahren
Mein aktiver Buzzer hat schon jede Menge mitmachen müssen. Da meine Anleitung offenbar einen Fehler in der Pinbelegung zeigt, habe ich den Buzzer auch schon vollkommen falsch verkabelt. Solange man nur mit den +5 Volt beziehungsweise +3,3 Volt Pins vom Raspberry Pi arbeitet ist das Bauteil eigentlich nicht kaputt zu bekommen. Trotzdem sollte man es nicht darauf ankommen lassen!
Verwendung
Aktive Buzzer sind robust, billig herzustellen und klein. Sie werden in vielen Geräten verbaut, das heißt jeder von euch hat garantiert im Haushalt irgendwo einen solchen Buzzer bereits im Einsatz. Einige Beispiele:
- Waschmaschine
Ist ein Waschprogramm fertig, dann informiert die Waschmaschine den Benutzer darüber durch Blinken (optische Rückmeldung) und Piepsen (akustische Rückmeldung). Ich kann mich gar nicht an Modelle erinnern die so einen Ton nicht ausgeben. - Küchengeräte
In der Küche hat auch beinahe jedes Gerät mit einer Zeitsteuerung so einen aktiven Buzzer verbaut. Sei es nun die Mikrowelle die einen Ton abgibt, wenn das essen fertig ist oder der Geschirrspüler, wenn das Besteck wieder sauber ist. - Auto
ältere Autos mit Abstandsmesser geben noch einen Piepton von sich der durch die Häufigkeit der Töne den Abstand akustisch darstellt. Moderne Autos verwenden meist schon Displays und die Tonausgabe über den Bordcomputer.
Der größte Vorteil der aktiven Buzzer ist wohl, dass sie mit der üblichen Betriebsspannung von 5 Volt einen wirklich gut hörbaren lauten Ton von sich geben.
Für eigene Projekte eignet sich ein Buzzer in jedem Fall. Man denke nur an ein geschlossenes System ohne Display, ein Roboter zum Beispiel. Dieser führt irgendwelche Befehle aus und man bekommt davon nur schwer Rückmeldungen. Ein Buzzer der einfache Debugausgaben in einem Skript akustisch ausgibt wäre da schon eine Erleichterung. Ein wenig mehr Kreativität vorausgesetzt, kann man mit dem Buzzer auch allerhand Informationen an die Außenwelt schicken, Stichwort Morse Code.
Fazit
Ein aktiver Buzzer ist ein sehr simples Bauteil, dass man aber gut für eigene Projekte verwenden kann. Es gibt keine einfachere Möglichkeit einem Projekt eine akustische Ausgabe hinzuzufügen. Dabei kann man durchaus kreativ sein. Ideen für Anwendungen habt ihr sicher genug, ich hoffe ihr könnt mit Hilfe meiner kleinen Einführung auch schnell Erfolge vorweisen. Wie immer freue ich mich auf Kommentare von euch, gerne könnt ihr auch eure eigenen Projekte hier vorstellen.
Hallo Werner,
würde Dein Buzzer Projekt gern übernehmen, allerdings liegt mein Schwerpunk noch auf der Hardwareseite. Da ich mich mit dem RPi noch einarbeite, wird zwangsweise die Programmierung für mich noch hinzukommen. Daher habe ich eine Frage an Dich und hoffe, dass Du helfen kannst.
Wenn das Programm statt in einer Dauerschleife nur einmal durchlaufen werden soll, wie sieht dann der Code aus? Kann ich da etwas von auskommentieren?
Hintergrund ist der Zustand einer uneinsichtigen Toreinfahrt, die vom RPi gemeldet werden soll.
(Beispiel: Beim befahren der Einfahrt, 3 x piepen und dann wieder aus.)
Vielen Dank und Gruß, Ludgar
Hallo, das ist eigentlich recht einfach. Du muss die Schleife einfach so abändern:
dann piepst es nur einmal. Du kannst durch eine Zählvariable auch noch mitzählen, zB von 0 bis 3 und erst dann done auf True setzen. Dann piepst es 3 mal.
Hallo,
ich hoffe ich darf das hier fragen:
wie sorge ich dafür wenn dieser Bewegungsmelder (https://www.amazon.de/Pyroelectrische-Infrarot-Bewegung-Sensor-Detektor/dp/B008AESDSY/ref=sr_1_3?ie=UTF8) eine Bewegung erkennt den folgenden Buzzer (https://www.amazon.de/Terminal-Industrielle-Elektronik-Buzzer-Schwarz/dp/B00W8YEG8S/ref=sr_1_1?ie=UTF8) auslöst? Also per Python Skript.
Ich hoffe du kannst mir helfen
Toll wäre es gewesen, mal einen Link zum verwendeten Buzzer-Bauteil zu posten.
Hi, ich habe einen Buzzer aus einem Mainboard-Testset übrig (Firma InLine), der hat aber nur 2 Kabel/Stecker.
Nehme ich dann in dem Fall GRD und GPIO 4 oder GRD und +5V oder GRD und +5V ???
Danke