Inhoudsopgave:

Micro:bit geluidsniveaudetector - Ajarnpa
Micro:bit geluidsniveaudetector - Ajarnpa

Video: Micro:bit geluidsniveaudetector - Ajarnpa

Video: Micro:bit geluidsniveaudetector - Ajarnpa
Video: Sound Sensor Potentiometer Adjustment 2024, November
Anonim
Micro:bit geluidsniveaudetector
Micro:bit geluidsniveaudetector
Micro:bit geluidsniveaudetector
Micro:bit geluidsniveaudetector
Micro:bit geluidsniveaudetector
Micro:bit geluidsniveaudetector

Dit is slechts een kort voorbeeld van een geluidsniveaudetector op basis van de micro:bit en de Pimoroni enviro:bit.

De microfoon op de enviro:bit detecteert het geluidsniveau, en uit de resulterende waarde wordt een positie op de 5x5 LED-matrix berekend en wordt de bijbehorende LED geactiveerd. De maximaal gemeten waarden worden opgeslagen en blijven op de LED-matrix weergegeven.

De waarden kunnen ook in cijfers worden weergegeven.

Het is dus eigenlijk een heel eenvoudig hulpmiddel voor het detecteren van geluidsniveaus, b.v. voor experimenten in de klas.

De beschreven methode om de werkelijke en maximale waarden weer te geven die door een sensor op de micro:bits 5x5 LED-matrix worden gedetecteerd, kan ook worden gebruikt voor andere parameters zoals temperatuur, vochtigheid of druk.

Stap 1: Gebruikte onderdelen en software

Hardware:

  • Een micro:bit
  • Een Pimoroni enviro:bit - wordt geleverd met drie sensoren voor geluid, licht en kleur, en druk/temperatuur/vochtigheid (20 GBP bij Pimoroni)
  • Een Pimoroni power:bit - om het apparaat van stroom te voorzien van batterijen (optioneel, of een andere manier om de microbit van stroom te voorzien, 6 GBP bij Pimoroni)

Software:

  • Microsoft MakeCode
  • De Pimoroni enviro:bit MakeCode-extensie

Om het script naar uw micro:bit te laden, kopieert u gewoon het meegeleverde hex-bestand naar uw micro:bit met een enviro:bit bijgevoegd.

Stap 2: De code

De code is geschreven met Microsoft MakeCode in blokmodus, met behulp van de Enviro:Bit-extensie. Hieronder vindt u de bijbehorende JavaScript-code.

De functie envirobit.getSoundLevel() leest het geluidsniveau van de sensor en retourneert een waarde van 0 tot 443.

De constante signal_max definieert een maximale waarde van het dynamische bereik dat moet worden weergegeven op de LED-matrix, de bovenstaande waarden worden behandeld als zijnde signal_max. Hiermee kunt u de gevoeligheid van het apparaat optimaliseren voor uw toepassing.

De maximaal gedetecteerde waarde in een meetcirkel wordt opgeslagen in de variant noise_max en blijft weergegeven op de LED-matrix.

Door op knop "A" te drukken wordt noise_max gereset en wordt het scherm gewist, door op knop "B" te drukken wordt de gemeten ruiswaarde weergegeven als het werkelijke getal.

Om de waarde weer te geven, worden de waarden onder signal_max in 25 "bakken" geplaatst, weergegeven door één LED, beginnend van 0 (linksboven) tot 24 (rechtsonder). Vervolgens wordt de x/y-positie berekend en wordt de bijbehorende LED ingeschakeld. Waarden boven signal_max worden in bak 24 geplaatst. Als de waarde onder noise_max ligt, gaan de LED's weer uit.

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 (invoer.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 } })

Stap 3: Een code voor een temperatuursensor (vochtigheid, druk) met min/max-identifiers

Een code voor een temperatuursensor (vochtigheid, druk) met min/max-identifiers
Een code voor een temperatuursensor (vochtigheid, druk) met min/max-identifiers

Hier vind je een code voor de enviro:bit temperatuurfunctie.

Parameters signal_min en signal_max stellen de minimum- en maximumtemperaturen (*C) in die op de LED-matrix worden weergegeven. Bij het instellen van signal_main=5 en signal_max=30 worden 5 en 6*C weergegeven door de LED linksboven (0, 0) en 28/29*C door de LED rechtsonder (4, 4).

Er is ruimte voor optimalisatie: met de huidige code laten stijgende en dalende temperaturen een spoor achter van LED's die aan of uit zijn. Aan de andere kant maakt dit het mogelijk om de huidige temperatuurtendens (dalend/stijgend) af te lezen, aangezien de huidige waarde wordt aangegeven door de knipperende LED.

Door getTemperature() te vervangen door getHumidity() of getPressure() en de waarden voor signal_min en signal_max dienovereenkomstig aan te passen (bijv. 0/100 % respectievelijk 950/1150 hPA) zouden deze parameters op de LED-matrix kunnen worden weergegeven.

let Temp_x = 0let Temp_5 = 0 let signal_delta = 0 let Temp_25 = 0 let Temp_Min = 0 let signal_min = 0 let Temp_Max = 0 let 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 } })

Aanbevolen: