Inhoudsopgave:

Bluetooth-compatibele analoge VU-meter - Ajarnpa
Bluetooth-compatibele analoge VU-meter - Ajarnpa

Video: Bluetooth-compatibele analoge VU-meter - Ajarnpa

Video: Bluetooth-compatibele analoge VU-meter - Ajarnpa
Video: Douk Audio CT3 Analog Power Meter for Amplifier/Speaker Voltage Current Detector VU Tester 2024, November
Anonim
Bluetooth-geactiveerde analoge VU-meter
Bluetooth-geactiveerde analoge VU-meter

Dit was mijn project voor een van mijn universitaire klassen genaamd SMP. Omdat we het STM32F103RB-ontwikkelbord gebruikten, heb ik mijn project hierop gebaseerd, beginnend met een eenvoudige VU-meter. Vervolgens heb ik wat extra functies toegevoegd, zoals Bluetooth-ondersteuning om waarden van de ADC uit te zenden naar een Android-app om een eenvoudige dB-grafiek te maken.

Stap 1: gebruikte componenten

  • STM32F103RB ontwikkelbord
  • HC-05 zs040 bluetooth-module
  • Analoog VU-meterpaneel (link)
  • Electret microfoon
  • LM324N quad op-amp
  • 2 TIP120-transistoren
  • 3 1N4148-diodes
  • Diverse condensatoren en weerstanden

Hoewel je dit circuit van de 5V-rail van het bord kunt halen, heb ik ook een externe 5V-voeding gebruikt.

Stap 2: Envelopvolger

Envelop Volger
Envelop Volger
Envelop Volger
Envelop Volger

Het belangrijkste onderdeel van dit ontwerp is de envelopvolger die het signaal van de elektreetmicrofoon opneemt en een spanning afgeeft die evenredig is met de signaalamplitude van de microfoon.

Het ruwe signaal van de microfoon wordt eerst door een versterker met een versterking van 150 geleid.

Het signaal wordt dan door de eigenlijke omhullendevolger geleid die alleen de positieve signaaldelen zou moeten uitvoeren.

Het laatste deel is het aftrekken van de offset-spanning van 1,65 V van de uitgang van de envelopvolger om een signaal van 0 V te leveren voor geen geluid, 1,65 V voor gemiddeld geluid en 3,3 V voor hard geluid dat compatibel zou moeten zijn met de ingebouwde ADC van het bestuur.

Deze envelopvolger is geïmplementeerd vanuit dit geweldige StackExchange-antwoord.

Stap 3: PWM voor de analoge meter

Om de naald van de meter aan de gang te krijgen, heb ik de TIM4-timer van het microcontrollerbord geconfigureerd met een frequentie van ongeveer 500 Hz.

Door achtereenvolgens verschillende duty-cycles uit te proberen, heb ik genoegen genomen met enkele waarden die voldoende waren om de naald van 0 naar 100 te laten gaan.

Ik zal het proces van het weergeven van een exacte waarde in de volgende stap gedetailleerd beschrijven door wat wiskunde toe te passen.

Stap 4: Microfoonkalibratie

Microfoon Kalibratie
Microfoon Kalibratie
Microfoon Kalibratie
Microfoon Kalibratie

Nadat ik de envelopvolger had gedaan, schreef ik een eenvoudige code om de ADC te gebruiken en controleerde ik dat de leeswaarde inderdaad verandert overeenkomstig het volume in de kamer.

Om deze waarde te "vertalen" naar een werkelijke dB-waarde, heb ik een online toongenerator met een frequentie van 550 Hz en mijn Android gebruikt om een referentiewaarde te geven.

Ik heb die waarden uitgezet en MatLAB's Curve Fit Tool gebruikt om een functie te krijgen die ADC-metingen toewijst aan werkelijke benaderingen van de dB-niveaus (of in ieder geval dicht genoeg bij de metingen van mijn telefoon).

We kunnen zien dat dit de logaritmische schaal van de microfoon volgt.

Ik deed ook hetzelfde om de naaldpositie toe te wijzen aan PWM-waarden. Ik verzamelde die waarden door de PWM-waarde achtereenvolgens met 10 te verhogen totdat de behoefte op de schaal werd weergegeven.

Door die 2 functies te combineren, kreeg ik een gemakkelijke manier om de aflezing van ADC weer te geven tot een werkelijke waarde op de meterindicator.

Stap 5: Android-app

De app gebruikt deze coole bibliotheek om via Bluetooth-serieel te communiceren om byte-info uit te wisselen.

Het belangrijkste voorbehoud van dit systeem is dat de maximale woordlengte die via Bluetooth wordt verzonden 8 bits is en dat de ADC-waarde wordt weergegeven als 12 bits. Om dit probleem op te lossen, heb ik een ADC-waarde gesplitst in 2 afzonderlijke 6-bits waarden (MSB en LSB) waarbij de resterende 2 bits worden gebruikt om het berichttype te identificeren (MSB, LSB, CHK).

Daarom splitsen we voor een enkele ADC-waarde die we willen uitzenden de werkelijke waarde in 2 berichten. Om de integriteit van die berichten te controleren, heb ik een derde bericht gestuurd met de XOR van de eerste 2 berichten.

Nadat de integriteit van de waarde is gecontroleerd, kunnen we dezelfde functie toepassen om het dB-niveau te krijgen en dit in onze live-grafiek te plotten.

Stap 6: Samenvatting

Hoewel het microcontroller-gedeelte van dit project redelijk goed werkt om de luidheid in een kamer weer te geven, ondervond ik enkele problemen bij het verzenden van gegevens via Bluetooth vanwege pakketverlies.

De broncode voor dit project is hier te vinden:

  • Begeleidende Android-app - opslagplaats
  • Microcontrollercode - opslagplaats

Voel je vrij om bij te dragen als je dit op een of andere manier nuttig vindt.

Aanbevolen: