Alle
Befehle aus der Musik-Gruppe erzeugen Signale am Piezo-Lautsprecher des
Calliope. Allerdings ist die Ausgabe sehr leise, sodass man den Sound
nur nahe an der Platine hört. Das Rechteck-Signal erscheint am
Pin 2 des Motor-Headers (OUT2). Der Ausgang OUT1 ist dagegen auf
GND-Potential geschaltet.
Der
Klingelton ist eine Dauersignal, das auch für Messzwecke verwendet
werden kann. Es hat eine hohe Präzision, da es über einen Teiler vom
quarzgenauen Systemtakt abgeleitet ist.
Für
mehr Lautstärke kann man einen Lautsprecher zwischen Pin 2 und 3 des
Motor-Headers anschließen. Bei einem 8-Ohm-Lautsprecher fließen dann
aber fast 200 mA, die Lautstärke ist viel höher als nötig. Man sollte
daher einen Widerstand von 470 R in Reihe schalten. Aber man kann auch
einen Port als Widerstand nutzen. Hier wurde zu diesem Zweck P1 als
Ausgang geschaltet. Wenn der Lautsprecher zwischen OUT2 und P1
liegt, ist der Spitzenstrom auf etwa 15 mA begrenzt. Dem Port tut es
nicht weh, und der Motortreiber sagt danke.
Gegentakt-Sound
Um
einen gut hörbaren Ton zu erzeugen, kann man eine eigene
Rechteckschwingung über beide Ausgänge des Motortreibers erzeugen.
Damit erhält man ein Gegentaktsignal mit doppelter Signalspannung
am Lautsprecher. Hier wird ein Signal von 500 Hz programmiert.
Es ist hörbar, aber immer noch nicht sehr laut. Das Oszilloskop
zeigt, dass der Schallgeber eine wesentlich höhere Eigenresonanz bei
rund 5 kHz hat.
Wenn man die Impulslänge auf 100 µs einstellt, wird der Lautsprecher mit 5
kHz bei seiner Resonanz angeregt. Man sieht, dass die Amplitude höher
wird. Und tatsächlich wird es nun lauter.
Dann
noch die Ansteuerung auf 100%, fertig ist der gut hörbare Ton. Mit
jedem Druck auf Taste A gibt es einen Ton von 0,2 s Länge
let index = 0
input.onButtonPressed(Button.A, () => {
for (let index = 0; index <= 1000; index++) {
motors.motorPower(100)
control.waitMicros(100)
motors.motorPower(-100)
control.waitMicros(100)
}
})
Anwendung: Automatische Morsetaste
Mit
der Taste A werden Punkte gemorst, mit der Taste B Striche. Punkte und
Pausen dauern 100 ms, Striche 300 ms. Die Morsegeschwindigkeit ist also
60 Bpm. Das Programm eignet sich als Morsetrainer.
let index = 0
basic.forever(() => {
if (input.buttonIsPressed(Button.A)) {
for (let index = 0; index <= 500; index++) {
motors.motorPower(100)
control.waitMicros(100)
motors.motorPower(-100)
control.waitMicros(100)
}
basic.pause(100)
}
if (input.buttonIsPressed(Button.B)) {
for (let index = 0; index <= 1500; index++) {
motors.motorPower(100)
control.waitMicros(100)
motors.motorPower(-100)
control.waitMicros(100)
}
basic.pause(100)
}
})
Elektronik-Labor Projekte Microbit