Tartalomjegyzék:
- 1. lépés: Szükséges összetevők
- 2. lépés: Műszaki adatok
- 3. lépés: Áramköri diagramok
- 4. lépés: Szükséges alkalmazások és IDE -k
- 5. lépés: Mindenre vonatkozó kódok
- 6. lépés: Beállítása
- 7. lépés: Eredmények/videók
Videó: Valós idejű audio-MIDI konverter: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Namaste nép! Ez egy olyan projekt, amelyen az egyik kurzusomon (Real-Time Digital Signal Processing) dolgoztam az alapképzésben. A projekt célja egy DSP rendszer létrehozása, amely "hallgatja" az audioadatokat, és a megfelelő jegyzetek MIDI -üzeneteit adja ki az UART -on keresztül. Erre a célra az Arduino Nano -t használták. Röviden: a mikrovezérlő FFT-t végez a bejövő audio adatokon, elemzi a csúcsokat, és megfelelő MIDI üzenetet küld. Ne aggódjon azonban a MOSFET -ek miatt, mert azok egy másik projekthez tartoznak (amelyet később az oktatható anyagokról is feltesznek), és nem szükségesek ehhez a projekthez. Szóval kezdjük már !!
1. lépés: Szükséges összetevők
A projekt létrehozásához a következő összetevőkre lesz szükségünk, bár ezek közül sok általános, és helyettesíthetők megfelelőikkel. Tekintse meg a kapcsolási rajzot is a jobb kivitelezések kidolgozásához és kereséséhez.
Komponens mennyiség
1. Elektret mikrofon. 1
2. 30 Kilo Ohm ellenállás. 1
3. 150 kilométeres ellenállás. 1
4. 100 ohmos ellenállás. 1
5. 2.2 Kiló Ohmos ellenállások. 3
6. 10 Kilo Ohm előre beállított edény. 1
7. 10 Kilo Ohm trimmer edény. 1
8. 47 Kilo Ohm sztereó edény. 1
9. 470 Ohmos ellenállások. 2
10. 0.01uF kondenzátorok. 2
11. 2.2uF kondenzátorok. 3
12. 47uF kondenzátorok. 2
13. 1000uF kondenzátor. 1
14. 470uF kondenzátor. 1
15. 7805 feszültségszabályozó. 1
16. Női és férfi fejléc. Egyenként 1
17. Hordó Jack csatlakozó. 1
18. 12 V 1 A -os egyenáramú adapter. 1
19. SPST kapcsoló. (Nem kötelező) 1
20. Perfboard. 1
2. lépés: Műszaki adatok
Mintavételi gyakoriság: 3840 minta/sec
Minták száma FFT -nként: 256
Frekvencia felbontás: 15Hz
Frissítési frekvencia: kb. 15 Hz
A hangjegyek alsó és magasabb skálája nincs megfelelően rögzítve. Az alacsonyabb hangok alacsony frekvencia felbontásban szenvednek, míg a magasabb frekvenciák alacsony mintavételi gyakoriságban. Az arduino memóriája már kimerült, így nincs mód jobb felbontásra. A jobb felbontás pedig csökkentett frissítési gyakorisággal jár, így elkerülhetetlen a kompromisszum. Heisenberg bizonytalansági elvének laikus változata.
Az elsődleges nehézség a hangok közötti exponenciális távolság (ahogy az ábrán is látható. Minden impulzus a frekvencia tengelyén egy hangjegy). Az olyan algoritmusok, mint az LFT segíthetnek, de ez egy kicsit fejlett és kicsit bonyolult egy olyan eszközhöz, mint az arduino Nano.
3. lépés: Áramköri diagramok
Megjegyzés: Ne zavarjon a képeken látható három MOSFET és a csavaros kapcsok. Ezek nem szükségesek ehhez a projekthez. Vegye figyelembe, hogy a mikrofon bemeneti kártya eltávolítható vagy moduláris. Az alábbiakban a különböző blokkok kis leírása található.
1) A két 470 ohmos ellenállás kombinálja a sztereó audio jelet a mono hangjelhez. Győződjön meg arról, hogy a bemeneti jel földelése a virtuális földhöz (vg az kapcsolási rajzon), nem pedig az áramkör földeléséhez vezet.
2) A következő mondat egy másodrendű sallen kulcsos aluláteresztő szűrő, amely felelős a bemeneti jel sáv korlátozásáért az aliasozás elkerülése érdekében. Mivel csak +12V tápellátással dolgozunk, az op-erősítőt torzítjuk egy RC feszültségosztó elkészítésével. amely becsapja az op -erősítőt, hogy azt gondolja, hogy a tápegység 6 0-6 voltos tápegység (kettős sín), ahol vg az op erősítő földi referenciája.
3) Ekkor a kimenet aluláteresztő szűrő, hogy blokkolja a 6 voltos egyenáramú eltolást, és körülbelül 0,55 voltos DC -vel párosul, mert az ADC úgy van konfigurálva, hogy a belső 1,1 V -ot használja Vref -ként.
Megjegyzés: Az elektret mikrofon előerősítője nem a legjobb áramkör az interneten. Az op-amp-et tartalmazó áramkör jobb választás lett volna. Szeretnénk, ha a frekvenciaválasz a lehető legegyenletesebb lenne. A 47 kilós ohmos sztereó edényt a határfrekvencia meghatározására használják, amelynek általában a mintavételi frekvencia felének kell lennie. A 10 kilós ohmos előbeállítás (a kis fej fehér fejjel) a szűrő erősítésének és Q -értékének beállítására szolgál. A 10 kilós ohmos trimmer edényt (egy fémes hangológombbal, amely úgy néz ki, mint egy kis laposfejű csavar) arra használják, hogy a feszültséget a Vref fele közelébe állítsák.
Megjegyzés: Amikor a Nanót a PC -hez csatlakoztatja tartsa nyitva az SPST kapcsolót, különben zárva. Különösen ügyeljen arra, hogy ennek elmulasztása károsíthatja az áramkört/számítógépet/feszültségszabályozót vagy a fentiek bármely kombinációját
4. lépés: Szükséges alkalmazások és IDE -k
- Az Arduino Nano kódolásához a primitív AVR stúdió 5.1 -el mentem, mert úgy tűnik, hogy működik nekem. A telepítőt itt találja.
- Az Arduino Nano programozásához Xloadert használtam. Nagyon könnyű használni a könnyű eszközt.hex fájlok Arduinos -ra való írására. Itt megkaphatja.
- A kis bónusz mini projekthez és az áramkör hangolásához feldolgozást használtam. Innen szerezheti be, bár minden módosítás során jelentős változások történnek, így előfordulhat, hogy az elavult függvényekkel kell babrálnia a vázlat működéséhez.
- FL studio vagy bármely más MIDI feldolgozó szoftver. Innen ingyenesen letöltheti az FL Studio korlátozott hozzáférésű verzióját.
- A Loop MIDI virtuális MIDI portot hoz létre, és az FL studio úgy érzékeli, mintha MIDI eszköz lenne. Szerezzen innen egy példányt.
- A szőrtelen MIDI -t MIDI -üzenetek olvasására használják a COM -portról, és elküldik a hurok -MIDI -portra. Ezenkívül valós idejű hibakeresést végez a MIDI-üzenetekben, ami megkönnyíti a hibakeresést. Szerezzen be szőrtelen MIDI -t innen.
5. lépés: Mindenre vonatkozó kódok
Szeretném megköszönni az Electronic Lifes MFG -nek (Weboldal itt !!) a fixpontú FFT könyvtárat, amelyet ebben a projektben használtam. A könyvtár mega AVR családra van optimalizálva. Ez a link az általa használt könyvtári fájlokhoz és kódokhoz. Alább csatolom a kódomat. Ez tartalmazza a feldolgozási vázlatot és az AVR C kódot is. Felhívjuk figyelmét, hogy ez a konfiguráció működött számomra, és nem vállalok felelősséget, ha bármit megsértesz ezek miatt a kódok miatt. Ezenkívül sok problémám volt a kód működésével kapcsolatban. Például a DDRD (Data Direction Register) DDDx (x = 0-7) bitmaszkot tartalmaz a hagyományos DDRDx (x = 0-7) helyett. Ügyeljen ezekre a hibákra fordítás közben. A mikrovezérlő megváltoztatása is befolyásolja ezeket a definíciókat, ezért figyelje ezt is, miközben fordítási hibákat kezel. És ha kíváncsi, miért hívják a projektmappát DDT_Arduino_328p.rar -nak, akkor mondjuk azt, hogy este nagyon sötét volt, amikor elkezdtem, és elég lusta voltam ahhoz, hogy ne kapcsoljam fel a villanyt.: P
A feldolgozási vázlathoz érkezve a 3.3.6 feldolgozást használtam a vázlat megírásához. A COM port számát kézzel kell beállítani a vázlatban. Ellenőrizheti a megjegyzéseket a kódban.
Ha valaki tud segíteni a kódok Arduino IDE -be és a legújabb feldolgozási verzióba történő átvitelében, örülnék, és a fejlesztőknek / közreműködőknek is adnék hitelt.
6. lépés: Beállítása
- Nyissa meg a kódot, és fordítsa le a kódot a #define pcvisual megjegyzés nélküli és #define midi_out megjegyzéssel.
- Nyissa meg az xloader programot, és keresse meg a kódot tartalmazó könyvtárat, keresse meg a.hex fájlt, és égesse el nano fájlba a megfelelő tábla és COM port kiválasztásával.
- Nyissa meg a feldolgozási vázlatot, és futtassa a megfelelő COM portindexsel. Ha minden jól megy, látnia kell a jel spektrumát az A0 érintkezőn.
- Szerezzen be egy csavarhúzót, és forgassa el a vágóedényt, amíg a spektrum lapos lesz (az egyenáramú komponensnek közel kell lennie a nullához). Ekkor ne vigyen be semmilyen jelet a táblára. (Ne csatlakoztassa a mikrofon modult).
- Most használjon bármilyen ehhez hasonló sweep generátor eszközt, hogy bemenetet adjon a táblának a mikro-telefonról, és figyelje a spektrumot.
- Ha nem lát frekvenciát, csökkentse a határfrekvenciát a 47 kilométeres ellenállás megváltoztatásával. Növelje a nyereséget is a 10 kilós ohmos előre beállított edény használatával. Próbálja meg egyenletes és kiemelkedő sweep kimenetet elérni ezen paraméterek megváltoztatásával. Ez a szórakoztató rész (a kis bónusz!), Játssza le kedvenc dalait és élvezze a valós idejű spektrumukat. (Nézd meg a videót)
- Most fordítsa össze újra a beágyazott C kódot, ezúttal #define pcvisual megjegyzéssel és #define midi_out megjegyzés nélkül.
- Töltse be újra az új lefordított kódot az arduino Nano -ra.
- Nyissa meg a LoopMidi programot, és hozzon létre egy új portot.
- Nyissa meg az FL stúdiót vagy más MIDI interfész szoftvert, és győződjön meg arról, hogy a hurok midi portja látható a MIDI port beállításaiban.
- Nyitott szőrtelen MIDI, arduino csatlakoztatva. Válassza ki a kimeneti portot a LoopMidi porthoz. Nyissa meg a beállításokat, és állítsa a Baud sebességet 115200 értékre. Most válassza ki az Arduino Nano COM -portját, és nyissa meg a portot.
- Játssz néhány "tiszta" hangot a mikrofon közelében, és hallani kell a megfelelő hangot a MIDI szoftverben is. Ha nincs válasz, próbálja meg csökkenteni a C -kódban meghatározott up_threshold értéket. Ha a jegyzetek véletlenszerűen aktiválódnak, akkor növelje az up_threshold értéket.
- Szerezd meg a zongorát, és teszteld, milyen gyors a rendszer !! A legjobb az, hogy a jegyzetek aranysárga zónájában kényelmesen felismeri a több egyidejű gombnyomást.
Megjegyzés: Ha a COM porthoz egy alkalmazás fér hozzá, akkor egy másik nem tudja olvasni. Például, ha a szőrtelen MIDI COM portot olvas, az Xloader nem tudja villogni a táblát
7. lépés: Eredmények/videók
Egyelőre ennyi srácok! Remélem tetszik. Ha bármilyen javaslata vagy fejlesztése van a projektben, tudassa velem a megjegyzések részben. Béke!
Ajánlott:
Valós idejű óra modul használata (DS3231): 5 lépés
Valós idejű óramodul (DS3231) használata: A DS3231 egy olcsó, rendkívül pontos I2C valós idejű óra (RTC), beépített hőmérséklet-kompenzált kristályoszcillátorral (TCXO) és kristállyal. A készülék akkumulátor -bemenettel rendelkezik, és pontos időmérést tart fenn, amikor a fő áramellátás
Valós idejű Rubik-kocka bekötött szemű megoldó a Raspberry Pi és az OpenCV használatával: 4 lépés
Valós idejű Rubik-kocka bekötött szemű megoldó a Raspberry Pi és az OpenCV használatával: Ez a Rubik kockaeszköz 2. verziója, bekötött szemmel történő megoldásra. Az első verziót a javascript fejlesztette ki, láthatja a RubiksCubeBlindfolded1 projektet. Az előzőtől eltérően ez a verzió az OpenCV könyvtárat használja a színek és az
Valós idejű kút vízszintmérő: 6 lépés (képekkel)
Valós idejű kútvízszint-mérő: Ezek az utasítások leírják, hogyan lehet olcsó, valós idejű vízszintmérőt készíteni ásott kutakban való használatra. A vízszintmérőt úgy tervezték, hogy egy ásott kút belsejében lógjon, naponta egyszer mérje a vízszintet, és WiFi -n vagy mobilkapcsolaton keresztül küldje el az adatokat
Valós idejű kútvíz-hőmérséklet, vezetőképesség és vízszintmérő: 6 lépés (képekkel)
Valós idejű kútvíz-hőmérséklet-, vezetőképesség- és vízszintmérő: Ezek az utasítások leírják, hogyan lehet olcsó, valós idejű vízmérőt készíteni a hőmérséklet, az elektromos vezetőképesség (EC) és a vízszint figyelésére ásott kutakban. A mérőt úgy tervezték, hogy egy ásott kút belsejében lógjon, mérje a víz hőmérsékletét, EC és
Valós idejű grafikon rajzolása Androidon az Arduino-tól a HC-05-ig: 3 lépés
Valós idejű grafikon ábrázolása Androidon Arduino-tól HC-05-ig: Üdv, itt van egy oktatóanyag arról, hogyan lehet valós idejű grafikonot ábrázolni egy mikrovezérlőről, például egy Arduino-ról az alkalmazásra. Bluetooth-modult, például a HC-05-t használ üzenetküldő eszközként az adatok továbbítására és fogadására az Ar