Mikrofon-Empfindlichkeit?

Hallo zusammen,

ich würde gern - wie auf diversen Projektseiten beschrieben - das eingebaute Mikrofon des Calliope mini als Lautstärke-Sensor nutzen. Wenn ich per MakeCode/PXT den analogen Mikrofon-Pin MIC auslese, erhalte ich eigentlich nur einen Wert von etwa 517, der bei größerer Lautstärke auch mal auf 518 springt. Signifikante Änderungen sind nur zu sehen, wenn ich direkt auf das Mikro klopfe.

Ist mein Calliope-Mikrofon defekt? Muss ich das Mikro noch irgendwie kalibrieren?

Kann mir da jemand helfen?

Vielen Dank! :slight_smile:
Erik

Hallo Erik,

das Mikro auf den ersten Calliope bereitete einige Probleme, da die Hardware falsch dimensioniert war. Alle Infos dazu findest du bei Burkhard Kainka: Calliope Mini und das Mikrofon.
Solltest du einen aktuellen Calliope haben, müsste alles gehen. Dann teste mal statt mit Stimme oder Hintergrund im leeren Klassenraum und in einer aktiven Klasse. Weitere Anregungen bei Heise: https://www.heise.de/make/artikel/Laerm-O-Meter-fuers-Klassenzimmer-3879235.html.

Toni

Hallo Toni,

vielen Dank für deine Antwort. Den Beitrag von Burkhard Kainka hatte ich schon gesehen - aber leider nicht bis zum Ende gelesen. :roll_eyes: Dann wäre mir auch schon eher aufgefallen, dass ich offensichtlich noch eine ältere Serie der neuen Version des Calliope habe. :confused:

Ich hatte mir den Calliope damals noch im Rahmen der Crowdfunding-Kampagne gekauft. Ich gehe davon aus, jetzt keinerlei Gewährleistung mehr darauf zu haben. Gibt es dennoch die Möglichkeit, wegen des offensichtlichen Hardware-Fehlers das Gerät umzutauschen? Weiß das jemand?

Viele Grüße
Erik

Hallo Erik,

versuche es mal direkt über Jörn bzw. per E-Mail an austausch@calliope.cc.
Toni

Offenbar habe ich das Problem ebenfalls. Bei meinen Minis funktioniert die Lautstärke in Prozent im Roberta Lab ganz gut, jedoch in MakeCode ist der Minimalwert bei Stille ca. bei 517. Darüber hinaus können nur sehr laute Geräusche einen merklichen Ausschlag bewirken. bei leisen Geräuschen kann es auch mal sein, dass der Pegel abfällt auf ca. 480.
Ich besitze zwei ältere Minis mit noch 5 Motorpins, aber auch neuere (15 Stück, gekauft Anfang Mai 2019 bei Conrad).
Was soll ich machen? Ich kann nicht so gut Löten wie der Kollege Burkhard Kainka.

Es gibt ja eine Sinuskurve, du musst (wenigstens bei MakeCode) daraus Schwellenwerte nehmen und die mit der Lautstärke abgleichen. Das scheint bei Open Roberta automatisch zu geschehen. Am der Hardware liegt es nicht und die mini sind sicherlich 1.3 (das steht hinten auf dem mini), da ist die Anpassung von Burkhard Kanika auch schon drin.
Soweit ich mich erinnere sind schon ab 1.2 alle mini dahingehend identisch.

Grüße
Jörn

Verwende doch mal probehalber den Verteilebefehl aus Pins und nehme als unteren Wert die 480.

Viel Erfolg!

Michael

Hi,
ich habe dasselbe Problem.
Mit diesem simplen Nepo-Programm kann ich den Schülern den Lautstärke-Level visualisieren und darauf aufsetzend programmieren
grafik

Ich bekomme zuverlässig und reproduzierbar Werte von 0 bis 100.

In Makecode scheint das überhaupt nicht zu funktionieren:
grafik

Bei Totenstille zeigt das Display initial Werte von um die 510 an, wenn es lauter wird habe ich alles Mögliche von 300 bis 600, aber ganz sicher nicht Werte von 0 bis 1023 wie in der Hilfe beschrieben. Das Mikrofon reagiert im gleichen Setup praktisch überhaupt nicht auf den Input oder mit wirren Ergebnissen.

Wo ist hier der Denkfehler?

Zuerst einmal haben wir bei openroberta eine Prozentangabe. Geht also von 0 bis 100 und bei Makecode schwanken die Werte von 0-1023, also das Zehnfache.
Wir müssen die Werte also mappen:

Jetzt haben wir auch Prozentwerte von 0-100!
Trotzdem schwankt es stärker als bei Openroberta.
Wir müssten also wie Jörn schrieb Werte puffern und den Durchschnitt ausgeben.

Ich habe keine Probleme mit dem Wertebereich, nur damit, dass die gemessenen Werte überhaupt nicht realistisch sind, d.h. wenn ich z.B. meine Soundquelle direkt vor das Mikrofon halte, bekomme ich Werte von 300 angezeigt.

Als Soundquelle habe ich einen 1000Hz Ton von YouTube auf dem Handy abgespielt. Wenn ich das Handy dann vor das Mikrofon halte, bekomme ich Jedesmal, wenn ich die Lautstärke erhöhe:

  • bei Nepo: etwa 10% mehr angezeigt
  • bei MakeCode: Entweder gar keinen Effekt oder statt 515 Werte wie 513, 510, 517. Je nach Samplerate sogar deutlich unter 300, je lauter es wird, aber auch mal 600.

Selbst wenn ich 10, 100 oder 1000 Werte aufsummiere und den Mittelwert nehme, wird es nicht wirklich besser.

Ich hab jetzt mal 200 Werte genommen und anders gemappt, da sieht es brauchbarer aus.

Wenn man noch geschickter mappt könnte man die Werte noch mehr spreizen.
Interessant wäre es zu erfahren wie Openroberta vorgeht…

Ja, das wäre wirklich interessant zu wissen, wie Nepo das macht.

Bei mir sieht es allerdings auch damit nicht wirklich besser aus, ich kann kaum eine Relation zwischen der Lautstärke und der Anzeige feststellen, zumindest nicht so, dass ich das den Kindern vorführen könnte (wie bei Nepo).
Und dass ich derartig durch Reifen springen muss, um ein simples „get sound% of mic“ zu bekommen, ist zumindest in meiner Grundschul AG leider niemandem zu vermitteln (oder ich kann es nicht hinreichend gut erklären :slight_smile:)

Dafür geht das Herzen per Funk senden nicht mit Nepo :slight_smile:

Nach ewiger Suche den Quelltext gefunden!

  /**
      * Configures microphone pin as an analogue input (if necessary), and samples the Pin for its analog value.
      * Normalises the read value in 1-100 range
      *
      * @return the current analogue level on the pin, in the range 1-100, or
      *         MICROBIT_NOT_SUPPORTED if the given pin does not have analog capability.
      *
      */
    int MicroBitPin::getMicrophoneValue()
    {
    int min = 1023;
    int max = 0;
    int value = 0;
    for (int i = 0; i < 32; i += 1) {
        value = getAnalogValue();
        if ( value > max ) {
           max = value;
       } else if ( value < min ) {
           min = value;
       }
    }
    return (( max - min ) * 0.0977);
    }
1 „Gefällt mir“

https://github.com/OpenRoberta/microbit-dal/blob/master/source/drivers/MicroBitPin.cpp

Zeile 298

Ein Traum! Vielen Dank!

Jetzt müsste man das noch in Makecode direkt einbauen können :slight_smile: Und Rückgabewerte für Funktionen in Blockly wären auch nicht schlecht :crazy_face:

Ich kann Dir eine Erweiterung bauen. Ich habe aber sowieso schon angeregt die Mikrofonabfrage zu ändern und einen Einsteller dazu in den Simulator einzubauen.

Hmm. Ja. Ich fürchte, ich muss das Angebot annehmen. Irgendwie bekomme ich das nicht hin, trotz deiner Anleitung.

Ich habe das Paket in die Eingabe eingeklinkt

2 „Gefällt mir“

Dankeschön!!
Dann schau ich mal, was ich falsch gemacht habe :slight_smile:

wow, super cool, genau das habe ich gesucht! Danke!

1 „Gefällt mir“