Inhoudsopgave:
- Stap 1: gebruikte componenten
- Stap 2: Envelopvolger
- Stap 3: PWM voor de analoge meter
- Stap 4: Microfoonkalibratie
- Stap 5: Android-app
- Stap 6: Samenvatting
Video: Bluetooth-compatibele analoge VU-meter - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
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:
Analoge joystick #HMS2018: 8 stappen
Analoge joystick # HMS2018: je hebt één Elegoo Uno R3 adruino, één Elegoo-joystickmodule en 5 vrouwelijke naar mannelijke DuPoint-draden nodig
ANALOGE ULTRASONE SENSOR voor AFSTANDSMETING: 3 stappen
ANALOGE ULTRASONE SENSOR voor AFSTANDSMETING: Deze instructables gaan over het gebruik van een ultrasone sensor die op Arduino is aangesloten en om nauwkeurig afstanden van 20 cm tot 720 cm te meten
Verbeterde halfgeleidercurve-tracer met de analoge ontdekking 2: 8 stappen
Verbeterde Semiconductor Curve Tracer met de Analog Discovery 2: Het principe van curve tracing met de AD2 wordt beschreven in de volgende links hieronder: https://www.instructables.com/id/Semiconductor-Cur… https://reference.digilentinc .com/reference/instru…Als de gemeten stroom vrij hoog is, is de accu
Analoge metingen uitvoeren op de Raspberry Pi: 5 stappen
Analoge metingen uitvoeren op de Raspberry Pi: Hallo allemaal! In deze tutorial laat ik je zien hoe we direct analoge waarden kunnen vastleggen met behulp van de Raspberry Pi. Zoals we allemaal weten, is de Raspberry Pi een behoorlijk krachtige minicomputermodule die populair is bij hobbyisten en professionele
Laten we bouwen (analoge synth): 5 stappen
Let's Build (Analogue Synth): In deze serie laat ik je zien hoe je een eenvoudige modulaire analoge synthesizer bouwt met zowel analoge als digitale componenten.Link naar schema en componenten: https://drive.google.com/open?id= 1mZX4LyiJwXZLJ3R56SDxloMnk8z07IYJ