Pieps Musik

Der diesjährige Conrad Adventskalender beschäftigt sich mit dem Thema Sound. Passend verbirgt sich hinter der heutigen Tür ein Piezo-Speaker (sowie etwas Draht). Mangels weiterer Bauteile soll im heutigen Experiment die Funktionsweise des Piezo-Elements erläutert werden: Wird eine Spannung angelegt, verformt sich die Metallscheibe und gibt ein Knacken ab. Darüber hinaus wird das Element ähnlich wie ein Kondensator geladen. Ein weiteres knacken ist erst nach Entladung zu hören.

Solche Piezo-Elemente sorgen in Armbanduhren oder elektronischem Spielzeug für den piepsigen Sound, mit dem bereits Generationen von Eltern genervt wurden. Bringt man die Piezoscheibe zum Schwingen, indem man ihn mit schnellen elektrischen Impulsen versorgt, ertönen die bekannten LoFi-Klänge. Die Schwingungen könnte man z.B. mit einem 555 Timer erzeugen.

Oder man schließt das Piezo-Element kurzerhand an Arduino an, dann kann man sogar Melodien programmieren!

Arduino und Piezo

Ich habe eine Sketch aus dem offiziellen Arduino-Tutorial so abgewandelt, dass ein „weihnachtsliches“ JingleBells ertönt. Die JingleBells-Version findest Du hier (KLICK).

Arduino erzeugt durch schnelles High/Low-Setzen von Pin 9 eine Rechteck-Schwingung – die je nach Frequenz am Piezo verschiedene Töne erzeugt. Diese werden ab Zeile 11 definiert:

// TONES ==========================================
// Start by defining the relationship between
// note, period, & frequency.
#define c 3830 // 261 Hz
#define d 3400 // 294 Hz
#define e 3038 // 329 Hz
#define f 2864 // 349 Hz
#define g 2550 // 392 Hz
#define a 2272 // 440 Hz
#define b 2028 // 493 Hz
#define C 1912 // 523 Hz
// Define a special note, 'R', to represent a rest
#define R 0

Rechteckschwingung
Rechteckschwingung. Bild von Saure. cc-by-sa

„Period“ ist jeweils eine Periodendauer der Schwingung (in der Grafik als T gekennzeichnet). Der Ton selbst wird in der Funktion playTone() erzeugt. In Zeilen 63 / 64 wird Pin9 für eine halbe Periode (tone_ / 2) auf HIGH gesetzt; anschließend in Zeile 67/68 auf LOW. Dies wiederholt sich so lange, bis die Tondauer erreicht ist.

while (elapsed_time < duration) {

digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);

// DOWN
digitalWrite(speakerOut, LOW);
delayMicroseconds(tone_ / 2);

// Keep track of how long we pulsed
elapsed_time += (tone_);

Möchtest Du die Melodie ändern, schau dir die Zeilen 34-40 an. Viel Spaß beim experimentieren!


0 Antworten auf „Pieps Musik“


  1. Keine Kommentare

Antwort hinterlassen

XHTML: Du kannst diese Tags benutzen: <a href=""> <abbr title=""> <acronym title=""> <b> <blockquote> <code> <em> <i> <strike> <strong>


fünf + = elf