### 4.3.4 Slimme Geluidsmeter #### 4.3.4.1 Overzicht ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.4.2 Componentkennis ![Img](./media/2top.png) **Microbit Microfoon** ![Img](./media/j1101.png) 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](./media/j1113.png) Wanneer het bord geluid detecteert, gaat de LED-indicator van de microfoon branden. ![Img](./media/j1112.png) ![Img](./media/2bottom.png) #### 4.3.4.3 Benodigde componenten | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 hoofdboard ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | micro USB-kabel ×1 | 4-pins draad ×1 | batterijhouder ×1 | |![Img](./media/AAbattery.png)| | | |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](./media/couj4.png) #### 4.3.4.5 Codeflow ![Img](./media/flow-chart-04.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) **Complete code:** ```Python # 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](./media/line1.png) **Korte uitleg:** ① Importeer libraries van microbit en oled_ssd1306. ```Python from microbit import * from oled_ssd1306 import * ``` ② Initialiseer OLED-pixels, wis het OLED. ```Python initialize() # initialiseer oled clear_oled() # wis oled ``` ③ Definieer een map-subfunctie (om elk getallenbereik naar een ander bereik te mappen). ```Python 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. ```Python 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. ```Python soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5)) display.show(allGraphs[soundLevel]) ``` ⑥ Lees de gedetecteerde waarde en toon deze op het OLED. ```Python 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](./media/4top.png) 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](./media/A126.png) Na het uploaden van de testcode, drukt u op de resetknop aan de achterkant van de micro:bit. ![Img](./media/A455.png) 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](./media/dongtu-4.gif) ⚠️ **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](./media/4bottom.png)