Innehållsförteckning:

Bluetooth -aktiverad analog VU -mätare: 6 steg
Bluetooth -aktiverad analog VU -mätare: 6 steg

Video: Bluetooth -aktiverad analog VU -mätare: 6 steg

Video: Bluetooth -aktiverad analog VU -mätare: 6 steg
Video: This Is Why It's Called "Bluetooth" 🤔 (EXPLAINED) 2024, November
Anonim
Bluetooth -aktiverad analog VU -mätare
Bluetooth -aktiverad analog VU -mätare

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

Kuvertföljare
Kuvertföljare
Kuvertföljare
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

Mikrofonkalibrering
Mikrofonkalibrering
Mikrofonkalibrering
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: