Indholdsfortegnelse:
- Trin 1: Brugte komponenter
- Trin 2: Konvolutfølger
- Trin 3: PWM for den analoge måler
- Trin 4: Mikrofonkalibrering
- Trin 5: Android App
- Trin 6: Resumé
Video: Bluetooth -aktiveret analog VU -måler: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Dette var mit projekt for en af mine universitetsklasser kaldet SMP. Da vi brugte udviklingsbordet STM32F103RB, baserede jeg mit projekt på dette ud fra en simpel VU -måler. Jeg tilføjede derefter nogle ekstra funktioner som Bluetooth -understøttelse til at udsende værdier fra ADC til en Android -app for at oprette et simpelt dB -diagram.
Trin 1: Brugte komponenter
- STM32F103RB udviklingsplade
- HC-05 zs040 bluetooth-modul
- Analog VU -målerpanel (link)
- Electret mikrofon
- LM324N quad op-amp
- 2 TIP120 transistorer
- 3 1N4148 dioder
- Forskellige kondensatorer og modstande
Selvom du kan køre dette kredsløb ud af brættets 5V -skinne, brugte jeg også en ekstern 5V -strømforsyning.
Trin 2: Konvolutfølger
Hovedstykket i dette design er konvolutfølgeren, der tager signalet fra elektretmikrofonen og udsender en spænding, der er proportional med mikrofonens signalamplitude.
Råsignalet fra mikrofonen sendes først gennem en forstærker med en forstærkning på 150.
Signalet sendes derefter gennem den faktiske kuvertfølger, som kun skal udsende de positive signaldele.
Den sidste del er at trække offsetspændingen på 1,65V fra konvolutfølgerens output for at give et signal på 0 V for ingen lyd, 1,65 V for mellemstor lyd og 3,3 V for høj lyd, der skal være kompatibel med den indbyggede ADC for bestyrelsen.
Denne kuvertfølger er implementeret fra dette fantastiske StackExchange -svar.
Trin 3: PWM for den analoge måler
For at få gang i målerens nål har jeg konfigureret TIM4 -timeren på mikrokontrolkortet med en frekvens på omkring 500 Hz.
Ved successivt at prøve forskellige driftscyklusser har jeg afgjort med nogle værdier, der var nok til at få nålen til at gå fra 0 til 100.
Jeg vil beskrive processen med at vise en nøjagtig værdi i det næste trin ved at anvende noget matematik.
Trin 4: Mikrofonkalibrering
Da konvolutfølgeren var færdig, skrev jeg derefter en enkel kode til brug af ADC'en og bekræftede, at læsningsværdien faktisk ændres i overensstemmelse med lydstyrken inde i rummet.
For at "oversætte" denne værdi til en egentlig dB -læsning har jeg brugt en online tonegenerator med en frekvens på 550 Hz og min Android til at levere en referenceaflæsning.
Jeg har tegnet disse værdier og brugt MatLABs Curve Fit Tool til at få en funktion, der kortlægger ADC -aflæsninger til faktiske tilnærmelser til dB -niveauerne (eller i det mindste tæt nok på min telefons aflæsninger).
Vi kan se, at dette følger mikrofonens logaritmiske skala.
Jeg gjorde også det samme for at knytte nålens position til PWM -værdier. Jeg samlede disse værdier ved at øge PWM -værdien med 10 successivt, indtil behovet ramte læsning på dens skala.
Ved at kombinere disse 2 funktioner fik jeg en nem måde at vise aflæsningen fra ADC til en faktisk værdi på måleindikatoren.
Trin 5: Android App
App'en bruger dette fede bibliotek til at kommunikere via Bluetooth -seriel for at udveksle byteinformation.
Dette systems største forbehold er, at den maksimale ordlængde, der sendes via Bluetooth, er 8 bit, og ADC -værdien er repræsenteret som 12 bit. For at overvinde dette problem opdelte jeg en ADC -værdi i 2 separate 6 bit -værdier (MSB og LSB) med de resterende 2 bits, der bruges til at identificere meddelelsestypen (MSB, LSB, CHK).
Derfor opdeler vi den faktiske værdi i to meddelelser for en enkelt ADC -værdi, som vi vil udsende. For at kontrollere integriteten af disse meddelelser sendte jeg en tredje besked med XOR af de to første meddelelser.
Efter at værdiens integritet er kontrolleret, kan vi anvende den samme funktion for at få dB -niveauet og plotte det ind på vores live -diagram.
Trin 6: Resumé
Selvom jeg mikrokontroller-delen af dette projekt fungerer ret godt med at vise lydstyrken i et rum, stødte jeg på nogle problemer, når jeg sendte data via Bluetooth på grund af tab af pakker.
Kildekoden til dette projekt findes her:
- Android -ledsager -app - repo
- Mikrocontroller kode - repo
Du er velkommen til at bidrage, hvis du finder dette nyttigt på nogen måde.
Anbefalede:
LEDura - Analog LED -ur: 12 trin (med billeder)
LEDura - Analog LED -ur: Efter lang tid med bare at lave forskellige projekter besluttede jeg at lave en instruerbar selv. For den første vil jeg guide dig gennem processen med at lave dit eget analoge ur lavet med fantastisk adresserbar LED -ring. Den indre ring viser timer, du
NUL DELAY USB JOYSTICK - AUTO ANALOG MODIFIKATION: 5 trin
ZERO DELAY USB JOYSTICK - AUTO ANALOG MODIFICATION: Dette er et yderligere projekt til Zero Delay USB Encoder True Analog Joystick Modification. Du skal have ændret, testet og kalibreret encoderen i det forrige projekt, før du tilføjer denne enhed. Når den er færdig og fungerer
Analog frontend til oscilloskop: 6 trin (med billeder)
Analog frontend til oscilloskop: Herhjemme har jeg nogle billige USB -lydkort, som kan købes i Banggood, Aliexpress, Ebay eller andre globale online butikker for nogle penge. Jeg spekulerede på, hvad interessant jeg kan bruge dem til og besluttede at prøve at lave et lavfrekvent pc -omfang med
Styring af 2 servoer ved hjælp af analog joystick .: 5 trin (med billeder)
Kontrol af 2 servoer ved hjælp af analog joystick .: Hej fyre, dette er min første instruerbare og i dette indlæg deler jeg, hvordan du bruger Analog Joystick til at styre servoer ved hjælp af Arduino UNO. Jeg vil prøve at forklare det så enkelt som muligt håber du kan lide det
Raspberry Pi GPIO kredsløb: Brug af en LDR analog sensor uden en ADC (analog til digital konverter): 4 trin
Raspberry Pi GPIO -kredsløb: Brug af en LDR -analog sensor uden en ADC (analog til digital konverter): I vores tidligere instruktioner har vi vist dig, hvordan du kan forbinde din Raspberry Pi's GPIO -ben til lysdioder og kontakter, og hvordan GPIO -benene kan være høje eller lav. Men hvad nu hvis du vil bruge din Raspberry Pi med en analog sensor? Hvis vi vil bruge en