Inhaltsverzeichnis:

Micro:bit Rauschpegeldetektor - Gunook
Micro:bit Rauschpegeldetektor - Gunook

Video: Micro:bit Rauschpegeldetektor - Gunook

Video: Micro:bit Rauschpegeldetektor - Gunook
Video: Engraving a Leatherman 2024, Juli
Anonim
Micro:bit Rauschpegeldetektor
Micro:bit Rauschpegeldetektor
Micro:bit Rauschpegeldetektor
Micro:bit Rauschpegeldetektor
Micro:bit Rauschpegeldetektor
Micro:bit Rauschpegeldetektor

Dies ist nur ein kurzes Beispiel für einen Rauschpegeldetektor basierend auf dem micro:bit und dem Pimoroni enviro:bit.

Das Mikrofon am enviro:bit erfasst den Schallpegel, aus dem resultierenden Wert wird eine Position auf der 5x5 LED-Matrix berechnet und die entsprechende LED aktiviert. Die gemessenen Maximalwerte werden gespeichert und bleiben auf der LED-Matrix angezeigt.

Die Werte können auch in Zahlen angezeigt werden.

Es handelt sich also im Grunde genommen um ein sehr einfaches Werkzeug zur Erkennung des Geräuschpegels, z. für Klassenraumexperimente.

Die beschriebene Methode zur Anzeige von Ist- und Maximalwerten, die von einem Sensor auf der micro:bits 5x5 LED-Matrix erfasst werden, könnte auch für andere Parameter wie Temperatur, Feuchte oder Druck verwendet werden.

Schritt 1: Verwendete Teile und Software

Hardware:

  • Ein Mikro:Bit
  • Ein Pimoroni enviro:bit - kommt mit drei Sensoren für Ton, Licht und Farbe sowie Druck/Temperatur/Feuchtigkeit (20 GBP bei Pimoroni)
  • Ein Pimoroni power:bit - um das Gerät mit Batterien zu betreiben (optional oder auf andere Weise, um das Microbit zu betreiben, 6 GBP bei Pimoroni)

Software:

  • Microsoft MakeCode
  • Die Pimoroni enviro:bit MakeCode-Erweiterung

Um das Skript in Ihr micro:bit zu laden, kopieren Sie einfach die mitgelieferte Hex-Datei mit einem angehängten enviro:bit auf Ihr micro:bit.

Schritt 2: Der Code

Der Code wurde mit Microsoft MakeCode im Blockmodus unter Verwendung der Enviro:Bit-Erweiterung geschrieben. Unten finden Sie den entsprechenden JavaScript-Code.

Die Funktion envirobit.getSoundLevel() liest den Schallpegel vom Sensor und gibt einen Wert von 0 bis 443 zurück.

Die Konstante signal_max definiert einen Maximalwert des auf der LED-Matrix anzuzeigenden Dynamikbereichs, obige Werte werden als signal_max behandelt. Dadurch können Sie die Empfindlichkeit des Geräts für Ihre Anwendung optimieren.

Die in einem Messkreis erfassten Maximalwerte werden in der Variante Noise_max gespeichert und bleiben auf der LED-Matrix angezeigt.

Durch Drücken der Taste „A“wird Noise_max zurückgesetzt und der Bildschirm gelöscht, durch Drücken der Taste „B“wird der gemessene Rauschwert als aktuelle Zahl angezeigt.

Um den Wert anzuzeigen, werden die Werte unterhalb von signal_max in 25 "Bins" platziert, die durch eine LED dargestellt werden, beginnend von 0 (oben links) bis 24 (unten rechts). Anschließend wird die x/y-Position berechnet und die entsprechende LED eingeschaltet. Werte oberhalb von signal_max werden in Bin 24 abgelegt. Liegt der Wert unterhalb von noise_max, werden die LEDs wieder ausgeschaltet.

let noise_x = 0let signal_max = 0 let noise_5 = 0 let noise_25 = 0 let noise_max = 0 basic.showString("Noise") noise_max = 0 noise_25 = 0 noise_5 = 0 signal_max = 250 basic.forever(function () { while (input.buttonIsPressed(Button. B)) { basic.showNumber(envirobit.getSoundLevel()) basic.showString("--") } if (input.buttonIsPressed(Button. A)) { Noise_max = 0 basic.clearScreen() } Noise_25 = Math.floor(envirobit.getSoundLevel() / signal_max * 25) if (noise_25 > 24) { Noise_25 = 24 } Noise_5 = Math.floor(noise_25 / 5) Noise_x = Noise_25 - Noise_5 * 5 led.plot(noise_x, Noise_5) basic.pause(200) if (noise_25 Noise_max) { Noise_max = Noise_25 } })

Schritt 3: Ein Code für einen Temperatursensor (Feuchtigkeit, Druck) mit Min/Max-Kennzeichen

Ein Code für einen Temperatursensor (Feuchtigkeit, Druck) mit Min/Max-Kennzeichen
Ein Code für einen Temperatursensor (Feuchtigkeit, Druck) mit Min/Max-Kennzeichen

Hier finden Sie einen Code für die enviro:bit Temperaturfunktion.

Die Parameter signal_min und signal_max legen die auf der LED-Matrix angezeigten minimalen und maximalen Temperaturen (*C) fest. Hier führt die Einstellung von signal_main=5 und signal_max=30 dazu, dass 5 und 6*C durch die obere linke LED (0, 0) und 28/29*C durch die untere rechte LED (4, 4) dargestellt werden.

Es gibt Raum für Optimierungen: Mit dem aktuellen Code hinterlassen steigende und fallende Temperaturen eine Spur von LEDs, die entweder ein- oder ausgeschaltet sind. Auf der anderen Seite lässt sich damit die aktuelle Temperaturtendenz (fallend/steigend) ablesen, da der aktuelle Wert durch die blinkende LED angezeigt wird.

Das Ersetzen von getTemperature() durch getHumidity() oder getPressure() und die entsprechende Anpassung der signal_min- und signal_max-Werte (z. B. 0/100 % bzw. 950/1150 hPA) würde es ermöglichen, diese Parameter auf der LED-Matrix anzuzeigen.

let Temp_x = 0 lass Temp_5 = 0 lass signal_delta = 0 lass Temp_25 = 0 lass Temp_Min = 0 lass signal_min = 0 lass Temp_Max = 0 lass signal_max = 0 basic.showString("Temp") signal_max = 30 signal_min = 5 signal_delta = signal_max - signal_min Temp_Max = 0 Temp_Min = 24 basic.forever(function () { if (input.buttonIsPressed(Button. A)) { Temp_Max = 0 Temp_Min = 24 basic.clearScreen() } while (input.buttonIsPressed(Button. B)) { basic.showNumber(Math.round(envirobit.getTemperature())) basic.showString("C") } Temp_25 = Math.floor((envirobit.getTemperature() - signal_min) / signal_delta * 25) if (Temp_25 > 24) { Temp_25 = 24 } if (Temp_25 < 0) { Temp_25 = 0 } Temp_5 = Math.floor(Temp_25 / 5) Temp_x = Temp_25 - Temp_5 * 5 led.plot(Temp_x, Temp_5) basic.pause(100) if (Temp_25 Temp_Min) { led.unplot(Temp_x, Temp_5) } if (Temp_25 > Temp_Max) { Temp_Max = Temp_25 } if (Temp_25 < Temp_Min) { Temp_Min = Temp_25 } })

Empfohlen: