Innholdsfortegnelse:
Video: Micro: bit Støynivådetektor: 3 trinn
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Dette er bare et kort eksempel på en støynivådetektor basert på micro: bit og Pimoroni enviro: bit.
Mikrofonen på enviro: bit oppdager lydnivået, og fra den resulterende verdien beregnes en posisjon på 5x5 LED -matrisen og den tilhørende LED -en aktiveres. Maksimale verdier lagres og vises fortsatt på LED -matrisen.
Verdiene kan også vises i tall.
Så det er i utgangspunktet et veldig enkelt verktøy for deteksjon av støynivå, f.eks. for eksperimenter i klasserommet.
Metoden beskrevet for å vise faktiske og maksimale verdier oppdaget av en sensor på micro: bits 5x5 LED -matrisen kan også brukes for andre parametere som temperatur, fuktighet eller trykk.
Trinn 1: Deler og programvare som brukes
Maskinvare:
- En mikro: bit
- En Pimoroni enviro: bit - leveres med tre sensorer for lyd, lys og farge, og trykk/temperatur/fuktighet (20 GBP på Pimoroni)
- En Pimoroni -effekt: bit - for å drive enheten fra batterier (valgfritt eller annen måte å drive mikrobiten på, 6 GBP på Pimoroni)
Programvare:
- Microsoft MakeCode
- Pimoroni enviro: bit MakeCode -utvidelsen
For å laste skriptet til micro: bit, bare kopier den medfølgende hex-filen til micro: bit med en enviro: bit vedlagt.
Trinn 2: Koden
Koden er skrevet med Microsoft MakeCode i blokkmodus, med Enviro: Bit -utvidelsen. Her finner du den tilsvarende JavaScript -koden.
Funksjonen envirobit.getSoundLevel () leser lydnivået fra sensoren og returnerer en verdi fra 0 til 443.
Konstant signal_max definerer en maksimal verdi for det dynamiske området som skal vises på LED -matrisen, verdiene ovenfor vil bli behandlet som et signal_max. Dette lar deg optimalisere enhetens følsomhet for applikasjonen din.
Den maksimale verdien som oppdages i en målesirkel er lagret i varianten noise_max og forblir vist på LED -matrisen.
Ved å trykke på knappen "A" tilbakestilles noise_max og tømmes på skjermen, ved å trykke på knappen "B" vises den målte støyverdien som det faktiske tallet.
For å vise verdien plasseres verdiene under signal_max i 25 "binger" representert med en LED, som starter fra 0 (øverst til venstre) til 24 (nederst til høyre). Deretter beregnes x/y -posisjonen og den tilhørende lysdioden slås på. Verdier over signal_max plasseres i skuff 24. Hvis verdien er under noise_max, slås lysdiodene på igjen.
la noise_x = 0let signal_max = 0 la noise_5 = 0 la noise_25 = 0 la noise_max = 0 basic.showString ("Noise") noise_max = 0 noise_25 = 0 noise_5 = 0 signal_max = 250 basic.forever (funksjon () {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}})
Trinn 3: En kode for en temperatur (fuktighet, trykk) sensor med min/maks -indikatorer
Her finner du en kode for enviro: bits temperaturfunksjon.
Parametrene signal_min og signal_max angir minimum og maksimum temperaturer (*C) som vises på LED -matrisen. Her resulterer innstilling av signal_main = 5 og signal_max = 30 i at 5 og 6*C representeres av den øvre venstre LED (0, 0) og 28/29*C av den nedre høyre LED (4, 4).
Det er rom for optimalisering: med den nåværende koden stigende og fallende temperaturer etterlater et spor av lysdioder enten slått på eller av. På den annen side tillater dette å lese gjeldende temperaturtendens (fallende/stigende), ettersom gjeldende verdi indikeres av blinkende LED.
Hvis du erstatter getTemperature () med getHumidity () eller getPressure () og justerer signal_min og signal_max verdiene deretter (f.eks.
la Temp_x = 0let Temp_5 = 0 la signal_delta = 0 la Temp_25 = 0 la Temp_Min = 0 la signal_min = 0 la Temp_Max = 0 la 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} hvis (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}})