Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
To byl můj projekt pro jednu z mých univerzitních tříd s názvem SMP. Když jsme použili vývojovou desku STM32F103RB, založil jsem na tom svůj projekt, počínaje jednoduchým měřičem VU. Poté jsem přidal některé další funkce, jako je podpora Bluetooth, k vysílání hodnot z ADC do aplikace pro Android a vytvořil jednoduchý dB diagram.
Krok 1: Použité komponenty
- Vývojová deska STM32F103RB
- Modul Bluetooth HC-05 zs040
- Panel analogového měřiče VU (odkaz)
- Elektretový mikrofon
- Quad op-amp LM324N
- 2 tranzistory TIP120
- 3 diody 1N4148
- Různé kondenzátory a odpory
Ačkoli můžete tento obvod vyhnat z 5V kolejnice desky, použil jsem také externí 5V napájecí zdroj.
Krok 2: Sledovatel obálek
Hlavní částí tohoto návrhu je sledovač obálky, který odebírá signál z elektretového mikrofonu a vydává napětí úměrné amplitudě signálu mikrofonu.
Surový signál z mikrofonu je nejprve veden zesilovačem se ziskem 150.
Signál je pak veden skrz skutečný sledovač obálky, který by měl vydávat pouze kladné části signálu.
Poslední část je odečtením ofsetového napětí 1,65 V od výstupu sledovače obálky, aby poskytl signál 0 V pro žádný zvuk, 1,65 V pro střední zvuk a 3,3 V pro hlasitý zvuk, který by měl být kompatibilní s vestavěným ADC desky.
Tento sledovatel obálek je implementován z této skvělé odpovědi StackExchange.
Krok 3: PWM pro analogový měřič
Abych rozjel jehlu měřidla, nakonfiguroval jsem časovač TIM4 desky mikrokontroléru s frekvencí kolem 500 Hz.
Postupným zkoušením různých pracovních cyklů jsem se vyrovnal s některými hodnotami, které stačily na to, aby se jehla dostala z 0 na 100.
V následujícím kroku podrobně popíši postup zobrazení přesné hodnoty použitím nějaké matematiky.
Krok 4: Kalibrace mikrofonu
Po dokončení sledovače obálek jsem poté napsal jednoduchý kód pro použití ADC a ověřil, že se hodnota čtení skutečně mění podle hlasitosti v místnosti.
Abych mohl tuto hodnotu „přeložit“do skutečného odečtu dB, použil jsem online generátor tónů s frekvencí 550 Hz a svůj Android k poskytnutí referenčního odečtu.
Vynesl jsem tyto hodnoty a použil nástroj MatLAB Curve Fit Tool k získání funkce, která mapuje hodnoty ADC na skutečné aproximace úrovní dB (nebo alespoň dostatečně blízko hodnotám mého telefonu).
Vidíme, že to následuje po logaritmické stupnici mikrofonu.
Totéž jsem udělal i pro mapování polohy jehly na hodnoty PWM. Shromáždil jsem tyto hodnoty postupným zvyšováním hodnoty PWM o 10, dokud potřeba nedosáhla hodnoty na stupnici.
Kombinací těchto 2 funkcí jsem získal snadný způsob, jak zobrazit hodnoty z ADC na skutečnou hodnotu na indikátoru měřidla.
Krok 5: Aplikace pro Android
Tato aplikace využívá tuto skvělou knihovnu ke komunikaci prostřednictvím sériového rozhraní Bluetooth k výměně informací o bajtech.
Hlavní výhradou tohoto systému je, že maximální délka slova odesílaná přes Bluetooth je 8 bitů a hodnota ADC je reprezentována jako 12 bitů. Abychom tento problém překonali, rozdělil jsem jednu hodnotu ADC na 2 samostatné 6bitové hodnoty (MSB a LSB) se zbývajícími 2 bity použitými k identifikaci typu zprávy (MSB, LSB, CHK).
Proto pro jednu hodnotu ADC, kterou chceme vysílat, rozdělíme skutečnou hodnotu na 2 zprávy. Abych zkontroloval integritu těchto zpráv, poslal jsem třetí zprávy s XOR prvních 2 zpráv.
Poté, co je zkontrolována integrita hodnoty, můžeme použít stejnou funkci, abychom získali úroveň dB a vykreslili ji do našeho živého grafu.
Krok 6: Shrnutí
Zatímco část mikroprocesoru tohoto projektu funguje docela dobře a zobrazuje hlasitost uvnitř místnosti, při odesílání dat přes Bluetooth došlo ke ztrátě paketů.
Zdrojový kód tohoto projektu naleznete zde:
- Doprovodná aplikace pro Android - repo
- Kód mikrokontroléru - repo
Pokud vám to bude jakýmkoli způsobem užitečné, přispějte.