4.3.4 Slimme Geluidsmeter

4.3.4.1 Overzicht

Img

De slimme geluidsmeter, ook bekend als de sound level meter of decibelmeter, wordt gebruikt om geluid te detecteren. Geluid wordt gecategoriseerd in verschillende niveaus, en de micro:bit-microfoon detecteert de intensiteit in de omgeving in real time. Op basis van de niveaus verdeelt de micro:bit dit in meerdere gradaties.

In dit project toont het OLED-display het huidige geluidsniveau in real time, en de 5×5 LED-matrix zal enkele LED’s in- of uitschakelen afhankelijk van het geluidsniveau.

Dit type apparaat verlaagt de technische drempel en kosten van geluidsmonitoring aanzienlijk, en wordt daarom veel toegepast voor omgevingsgeluidsmonitoring, arbeidsgezondheid en -veiligheid, bouwplaatsen en uitgaansgelegenheden, enz.

Img

4.3.4.2 Componentkennis

Img

Microbit Microfoon

Img

De micro:bit V2-board is uitgerust met een microfoon die geluiden en audiosignalen detecteert. De microfoon bevindt zich aan de bovenkant van het bord (het kleine gaatje, dat gebruikt wordt om omgevingsgeluidsignalen op te vangen, en een LED-indicator bevindt zich naast het gaatje). De chip die de microfoon aanstuurt en verwerkt bevindt zich aan de achterkant van het bord.

Bij gebruik plaatst u het micro:bit-bord gewoon met de voorkant omhoog.

Img

Wanneer het bord geluid detecteert, gaat de LED-indicator van de microfoon branden.

Img

Img

4.3.4.3 Benodigde componenten

Img

Img

Img

micro:bit V2 hoofdboard ×1

micro:bit shield ×1

OLED display ×1

Img

Img

Img

micro USB-kabel ×1

4-pins draad ×1

batterijhouder ×1

Img

AA-batterijen(zelf mee te nemen) ×6

4.3.4.4 Bedradingsschema

⚠️ Bij het aansluiten, let op de kleur van de draden.

OLED display

wire color

micro:bit shield pin

micro:bit board pin

GND

black

G

G

VCC

red

V2

V

SDA

blue

20

P20

SCL

green

19

P19

Img

4.3.4.5 Codeflow

Img

4.3.4.6 Testcode

⚠️ Tip 1: Voordat u de code naar de Microbit board downloadt, importeert u alstublieft het bibliotheekbestand “oled_ssd1306.py” volgens Import Library on MU” .

Img

Complete code:

# importeer gerelateerde bibliotheken
from microbit import *
from oled_ssd1306 import *

# initialiseer en wis oled
initialize()  # initialiseer oled
clear_oled()  # wis oled

# functie om elk bereik van getallen naar een ander bereik te mappen
def map(value, fromMin, fromMax, toMin, toMax):
    fromRange = fromMax - fromMin
    toRange = toMax - toMin
    valueScaled = float(value - fromMin) / float(fromRange)
    return toMin + (valueScaled * toRange)

# set afbeeldingen voor eenvoudige staafgrafiek
graph5 = Image("99999:""99999:""99999:""99999:""99999")
graph4 = Image("00000:""99999:""99999:""99999:""99999")
graph3 = Image("00000:""00000:""99999:""99999:""99999")
graph2 = Image("00000:""00000:""00000:""99999:""99999")
graph1 = Image("00000:""00000:""00000:""00000:""99999")
graph0 = Image("00000:""00000:""00000:""00000:""00000")

allGraphs = [graph0, graph1, graph2, graph3, graph4, graph5]

# negeer eerste geluidsniveau meting
# soundLevel = microphone.sound_level()
# sleep(100)

while True:
    # map geluidsniveaus van bereik 0-255 naar bereik 0-5 om afbeelding te kiezen
    soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5))
    display.show(allGraphs[soundLevel])
    clear_oled() # wis OLED
    add_text(0, 0, "Acoustic Sound Level:")  # Toon de tekenreeks op de overeenkomstige positie van OLED
    add_text(0, 2, str(microphone.sound_level()))  # Toon soundLevel op de overeenkomstige positie van OLED
    sleep(200)

Img

Korte uitleg:

① Importeer libraries van microbit en oled_ssd1306.

from microbit import *
from oled_ssd1306 import *

② Initialiseer OLED-pixels, wis het OLED.

initialize()  # initialiseer oled
clear_oled()  # wis oled

③ Definieer een map-subfunctie (om elk getallenbereik naar een ander bereik te mappen).

def map(value, fromMin, fromMax, toMin, toMax):
    fromRange = fromMax - fromMin
    toRange = toMax - toMin
    valueScaled = float(value - fromMin) / float(fromRange)
    return toMin + (valueScaled * toRange)

④ Definieer een set eenvoudige staafgrafiek-afbeeldingen.

graph5 = Image("99999:""99999:""99999:""99999:""99999")
graph4 = Image("00000:""99999:""99999:""99999:""99999")
graph3 = Image("00000:""00000:""99999:""99999:""99999")
graph2 = Image("00000:""00000:""00000:""99999:""99999")
graph1 = Image("00000:""00000:""00000:""00000:""99999")
graph0 = Image("00000:""00000:""00000:""00000:""00000")

allGraphs = [graph0, graph1, graph2, graph3, graph4, graph5]

⑤ Map het geluidswaardebereik van 0-255 naar 0-5 voor de gekozen grafiekafbeelding.

soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5))
display.show(allGraphs[soundLevel])

⑥ Lees de gedetecteerde waarde en toon deze op het OLED.

clear_oled() # wis OLED
add_text(0, 0, "Acoustic Sound Level:")  # Toon de tekenreeks op de overeenkomstige positie van OLED
add_text(0, 2, str(microphone.sound_level()))  # Toon soundLevel op de overeenkomstige positie van OLED
sleep(200)

4.3.4.7 Testresultaat

Img

Na het aansluiten en inschakelen via de micro USB-kabel, sluit u de externe voeding (6 AA-batterijen) aan om voldoende stroomvoorziening te garanderen, en klik op “Flash” om de code naar de micro:bit te downloaden.

Img

Na het uploaden van de testcode, drukt u op de resetknop aan de achterkant van de micro:bit.

Img

Blas lucht (of maak een zeer hard geluid) in de microfoon op het Microbit board (⚠️ speciale herinnering: Inblazen heeft een duidelijker effect), en het OLED-display zal real-time informatie tonen gerelateerd aan de sterkte van het inblazen (of geluid), zodat gebruikers intuïtief de intensiteit kunnen begrijpen. Tegelijkertijd zal het 5×5 LED-dotmatrixscherm op het Microbit board geleidelijk het aantal rijen LED-lampjes op het scherm verhogen of verlagen afhankelijk van de intensiteit van het inblazen (of geluid), waardoor het effect ontstaat van het aangeven van de intensiteit van het inblazen (of geluid).

Img

⚠️ Opmerking: De bouwblokken in het experiment zijn niet bij deze kit inbegrepen.

(Tip: Als er geen resultaat wordt waargenomen, drukt u alstublieft op de resetknop van het micro:bit board.)

Img