Innehållsförteckning:
- Steg 1: Använda komponenter
- Steg 2: Kuvertföljare
- Steg 3: PWM för den analoga mätaren
- Steg 4: Mikrofonkalibrering
- Steg 5: Android -app
- Steg 6: Sammanfattning
Video: Bluetooth -aktiverad analog VU -mätare: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Detta var mitt projekt för en av mina universitetsklasser som heter SMP. När vi använde utvecklingsbrädan STM32F103RB baserade jag mitt projekt på detta med utgångspunkt från en enkel VU -mätare. Jag lade sedan till några extra funktioner som Bluetooth -stöd för att sända värden från ADC till en Android -app för att skapa ett enkelt dB -diagram.
Steg 1: Använda komponenter
- STM32F103RB utvecklingskort
- HC-05 zs040 bluetooth-modul
- Analog VU -mätarpanel (länk)
- Electret mikrofon
- LM324N quad op-amp
- 2 TIP120 -transistorer
- 3 1N4148 dioder
- Olika kondensatorer och motstånd
Även om du kan köra den här kretsen från kortets 5V -skena, använde jag också en extern 5V -strömförsörjning.
Steg 2: Kuvertföljare
Huvuddelen i denna design är kuvertföljaren som tar signalen från elektretmikrofonen och matar ut en spänning som är proportionell mot mikrofonens signalamplitud.
Råsignalen från mikrofonen skickas först genom en förstärkare med en förstärkning på 150.
Signalen passeras sedan genom den faktiska kuvertföljaren som endast ska mata ut de positiva signaldelarna.
Den sista delen är att subtrahera offset-spänningen på 1,65V från utmatningen från kuvertföljaren för att ge en signal på 0 V för inget ljud, 1,65 V för mellanljud och 3,3 V för högt ljud som ska vara kompatibelt med det inbyggda ADC för styrelsen.
Denna kuvertföljare implementeras från detta fantastiska StackExchange -svar.
Steg 3: PWM för den analoga mätaren
För att få mätarens nål att gå har jag konfigurerat TIM4 -timern på mikrokontrollkortet med en frekvens på cirka 500 Hz.
Genom att successivt prova olika arbetscykler har jag bestämt mig med några värden som var tillräckligt för att få nålen att gå från 0 till 100.
Jag kommer att beskriva processen för att visa ett exakt värde i nästa steg genom att tillämpa lite matematik.
Steg 4: Mikrofonkalibrering
Efter att ha följt kuvertet skrev jag sedan en enkel kod för att använda ADC och verifierade att läsvärdet verkligen ändras i enlighet med ljudstyrkan i rummet.
För att "översätta" detta värde till en verklig dB -avläsning har jag använt en onlinetongenerator med en frekvens på 550 Hz och min Android för att ge en referensavläsning.
Jag har ritat dessa värden och använt MatLAB: s Curve Fit Tool för att få en funktion som kartlägger ADC -avläsningar till verkliga approximationer av dB -nivåerna (eller åtminstone tillräckligt nära min telefons avläsningar).
Vi kan se att detta följer mikrofonens logaritmiska skala.
Jag gjorde också samma sak för att kartlägga nålposition till PWM -värden. Jag samlade dessa värden genom att öka PWM -värdet med 10 successivt tills behovet träffade avläsningen på dess skala.
Genom att kombinera dessa två funktioner fick jag ett enkelt sätt att visa avläsningen från ADC till ett verkligt värde på mätindikatorn.
Steg 5: Android -app
Appen använder detta coola bibliotek för att kommunicera via Bluetooth -seriell för att utbyta byteinformation.
Huvudförbehållet för detta system är att den maximala ordlängd som skickas via Bluetooth är 8 bitar och ADC -värdet representeras som 12 bitar. För att övervinna detta problem delade jag upp ett ADC -värde i 2 separata 6 bitars värden (MSB och LSB) med de återstående 2 bitarna som används för att identifiera meddelandetypen (MSB, LSB, CHK).
Därför delar vi det verkliga värdet i två meddelanden för ett enda ADC -värde som vi vill sända. För att kontrollera integriteten för dessa meddelanden skickade jag ett tredje meddelande med XOR av de två första meddelandena.
När värdeintegriteten har kontrollerats kan vi använda samma funktion för att få dB -nivån och plotta den på vårt live -diagram.
Steg 6: Sammanfattning
Medan jag som mikrokontroller-del av detta projekt fungerar ganska bra med att visa ljudstyrkan i ett rum, stötte jag på vissa problem när jag skickade data via Bluetooth på grund av paketförlust.
Källkoden för detta projekt hittar du här:
- Android -följeslagare - repo
- Mikrocontroller -kod - repo
Bidra gärna om du tycker att detta är användbart på något sätt.
Rekommenderad:
LEDura - Analog LED -klocka: 12 steg (med bilder)
LEDura - Analog LED -klocka: Efter en lång tid med att bara ha gjort olika projekt bestämde jag mig för att göra en instruerbar själv. För den första kommer jag att guida dig genom processen att göra din egen analoga klocka gjord med fantastisk adresserbar LED -ring. Den inre ringen visar timmarna
Arduino LED -kontroll med analog joystick: 6 steg
Arduino LED -styrning med analog joystick: I den här självstudien lär vi oss hur man använder analog joystick för att styra lysdioden. Se en demonstrationsvideo
Hur man gör analog klocka och digital klocka med LED -remsa med Arduino: 3 steg
Hur man gör analog klocka och digital klocka med LED -remsa med Arduino: Idag kommer vi att göra en analog klocka & Digital klocka med Led Strip och MAX7219 Dot -modul med Arduino. Den kommer att korrigera tiden med den lokala tidszonen. Den analoga klockan kan använda en längre LED -remsa, så den kan hängas på väggen för att bli en konstverk
ZERO DELAY USB JOYSTICK - AUTO ANALOG MODIFICATION: 5 Steg
ZERO DELAY USB JOYSTICK - AUTO ANALOG MODIFICATION: Detta är ett ytterligare projekt till Zero Delay USB Encoder True Analog Joystick Modification. Du måste ha modifierat, testat och kalibrerat kodaren i det tidigare projektet innan du lägger till den här enheten. När den är klar och fungerar
Raspberry Pi GPIO -kretsar: Användning av en LDR -analog sensor utan ADC (analog till digital omvandlare): 4 steg
Raspberry Pi GPIO -kretsar: Användning av en LDR -analog sensor utan ADC (analog till digital omvandlare): I våra tidigare instruktioner har vi visat dig hur du kan koppla din Raspberry Pi: s GPIO -stift till lysdioder och switchar och hur GPIO -stiften kan vara höga eller låg. Men vad händer om du vill använda din Raspberry Pi med en analog sensor? Om vi vill använda en