Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
See oli minu projekt ühe minu ülikooliklassi nimega SMP. Kuna kasutasime arendusplaati STM32F103RB, lähtusin oma projektist sellel, alustades lihtsast sõidukiüksuse arvestist. Seejärel lisasin lihtsa dB diagrammi loomiseks mõned lisafunktsioonid, näiteks Bluetoothi toe, et edastada väärtusi ADC -st Androidi rakendusse.
Samm: kasutatud komponendid
- STM32F103RB arendusplaat
- Bluetooth-moodul HC-05 zs040
- Sõidukiüksuse analoogpaneel (link)
- Elektreetmikrofon
- LM324N nelja op-võimendi
- 2 TIP120 transistorit
- 3 1N4148 dioodi
- Erinevad kondensaatorid ja takistid
Kuigi saate selle vooluahela plaadi 5V rööbastelt välja ajada, kasutasin ka välist 5V toiteallikat.
2. samm: ümbriku jälgija
Selle disaini peamine osa on ümbriku jälgija, mis võtab signaali elektreetmikrofonist ja väljastab pinge, mis on proportsionaalne mikrofoni signaali amplituudiga.
Mikrofoni toorsignaal edastatakse esmalt võimendi kaudu, mille võimendus on 150.
Seejärel edastatakse signaal läbi ümbriku tegeliku jälgija, mis peaks väljastama ainult positiivse signaali osi.
Viimane osa lahutatakse ümbrikujälgija väljundist 1,65 V nihkepinge, et saada signaal 0 V heli puudumisel, 1,65 V keskmise heli korral ja 3,3 V valju heli korral, mis peaks ühilduma sisseehitatud sisendiga Juhatuse ADC.
See ümbriku jälgija on rakendatud sellest suurepärasest StackExchange vastusest.
3. samm: PWM analoogmõõturi jaoks
Mõõturi nõela käivitamiseks olen konfigureerinud mikrokontrolleri TIM4 taimeri sagedusega umbes 500 Hz.
Proovides järjest erinevaid töötsükleid, leppisin kokku mõne väärtusega, millest piisas, et nõel tõuseks 0 -lt 100 -le.
Täpsema väärtuse kuvamise protsessi kirjeldan järgmises etapis, kasutades mõnda matemaatikat.
4. samm: mikrofoni kalibreerimine
Pärast ümbriku jälgija kirjutamist kirjutasin ma ADC kasutamiseks mõne lihtsa koodi ja kontrollisin, et lugemisväärtus tõepoolest muutub vastavalt ruumi valjusele.
Selle väärtuse tegelikuks dB lugemiseks "tõlkimiseks" kasutasin võrdlusnäidu saamiseks võrgutoonide generaatorit sagedusega 550 Hz ja oma Androidi.
Olen joonistanud need väärtused ja kasutanud MatLABi kõverate sobitamise tööriista, et saada funktsioon, mis kaardistab ADC näidud tegelikule dB taseme ligikaudsele väärtusele (või vähemalt piisavalt lähedale minu telefoni näitudele).
Näeme, et see järgib mikrofoni logaritmilist skaalat.
Tegin sama asja ka nõela asendi kaardistamiseks PWM väärtustega. Ma kogusin need väärtused, suurendades PWM väärtust 10 võrra järjest, kuni vajadus tabas selle skaalal.
Neid kahte funktsiooni kombineerides sain lihtsa võimaluse kuvada näidik ADC -st näidiku tegelikule väärtusele.
Samm: Androidi rakendus
Rakendus kasutab seda lahedat raamatukogu, et suhelda Bluetoothi jada kaudu, et vahetada baitide teavet.
Selle süsteemi peamine hoiatus on see, et Bluetoothi kaudu saadetava sõna maksimaalne pikkus on 8 bitti ja ADC väärtus 12 bitti. Selle probleemi lahendamiseks jagasin ühe ADC väärtuse kaheks eraldi 6 -bitiseks väärtuseks (MSB ja LSB), ülejäänud 2 bitti kasutati sõnumitüübi (MSB, LSB, CHK) tuvastamiseks.
Seetõttu jagame ühe ADC väärtuse jaoks, mida soovime edastada, tegeliku väärtuse kaheks sõnumiks. Nende sõnumite terviklikkuse kontrollimiseks saatsin esimese kahe kirja XOR -iga kolmanda sõnumi.
Pärast väärtuste terviklikkuse kontrollimist saame rakendada sama funktsiooni, et saada dB tase ja joonistada see oma reaalajas graafikule.
6. samm: kokkuvõte
Kuigi ma selle projekti mikrokontrolleri osa töötan päris hästi, näidates ruumis valjust, tekkis mul paketi kadumise tõttu andmete saatmisel Bluetoothi kaudu mõningaid probleeme.
Selle projekti lähtekoodi leiate siit:
- Androidi kaasrakendus - repo
- Mikrokontrolleri kood - repo
Andke oma panus, kui leiate, et see on mingil moel kasulik.