Мазмұны:
- 1 -қадам: Бұл жобаға қажет нәрселер (талаптар)
- 2 -қадам: жұмыс принципін түсіну
- 3 -қадам: схемалық
- 4 -қадам: Audacity көмегімен MP3 файлын WAV файлына түрлендіру
- 5-қадам: WAV-дан C-кодқа өту
- 6 -қадам: Соңғы файлды жасаңыз және Linux -ты күйдіріңіз
Бейне: Динамикте немесе Flyback трансформаторында PWM көмегімен Arduino көмегімен әндерді (MP3) ойнаңыз: 6 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Сәлем Жігіттер, Бұл менің бірінші нұсқаулық, сізге ұнайды деп сенемін !!
Негізінде, бұл жобада мен ноутбуктен Arduino -ға музыкалық деректерді беру үшін Arduino мен ноутбук арасындағы сериялық байланысты қолдандым. Деректерді PWM сигналы ретінде ойнату үшін Arduino TIMERS көмегімен.
Айта кеткім келді, бұл жоба жаңадан бастаушыларға арналмаған !!!
Шындығында, бұл жоба ең ұзақ жобалардың бірі болды, өйткені оны іске асыру үшін бізге көп нәрсе қажет.
НАЗАР АУДАРЫҢЫЗ
Мен осы нұсқаулықтың екінші бөлігін жасадым, ол әлдеқайда жеңіл және жұмыс істеу үшін аз қиындықтар қажет
Екінші бөлімге сілтеме (ең оңай).
1 -қадам: Бұл жобаға қажет нәрселер (талаптар)
1. Arduino тақтасы (біз кез келген тақтаны қолдана аламыз (328, 2560), яғни Mega, Uno, Mini және т.б., бірақ әр түрлі түйреуіштері бар)
2. Linux бар ДК немесе ноутбук (мен Fedora 29 қолдандым) немесе Linux көмегімен Live USB
3. Breadboard немесе Perfboard
4. Сымдарды қосу
5. TC4420 (Mosfet драйвері немесе сол сияқты)
6. Power Mosfet (N немесе P арнасы, сосын сәйкесінше сым салыңыз) (мен N-арнаны қолдандым)
7. Динамик немесе Flyback трансформаторы (Иә, сіз оны дұрыс оқыдыңыз!)
8. Сәйкес қуат көзі (0-12В) (мен ATX қуат көзін қолдандым)
9. Жылу қабылдағыш (мен ескі компьютерден құтылдым)
10. Windows пен қалам дискісі бар ДК.
Әр компоненттің егжей -тегжейлі жұмысын және осы жобаны білу үшін келесі қадамды оқыңыз.
Мен осы нұсқаулықтың екінші бөлігін жасадым, ол әлдеқайда жеңіл және жұмыс істеу үшін аз қиындықтар қажет. Екінші бөлімге сілтеме (ең оңай).
2 -қадам: жұмыс принципін түсіну
Аххх !! Нұсқаулықтың ең ұзақ бөлігі, бұл бөлімді оқу мен жазу скучно.
Ең алдымен, біз бұл заттың қалай жұмыс істейтініне шолу жасауымыз керек.
біз мұнда не істеп жатырмыз, алдымен біз MP3 әнін WAV файлына және бұл файлды сілтемедегі бағдарламалық жасақтаманы пайдаланып C тақырып файлына түрлендіреміз. Бұл C коды шын мәнінде 8 биттік (неге 8 биттік? Әрі қарай оқу) деректер үлгілерін қамтиды, оларды біздің Arduino көмегімен белгіленген жылдамдықта немесе жылдамдықта ойнау керек, ол біздің іріктеу жылдамдығымызға сәйкес көрсетілген.
Дыбыстық сигнал теориясы.
Іріктеу коэффициенті немесе бит жылдамдығы не екенін білмейтіндер үшін:-
Іріктеу жиілігі біз бір секундта ойнайтын үлгілердің саны ретінде анықталады (әдетте Гц немесе КГц -пен өлшенеді).
Толығырақ білу үшін: -Мында басыңыз
Стандартты іріктеу жиілігі - 44100 Гц (ең жақсы сапа), 32000 Гц, 22050 Гц және т.б.
Демек, сәйкесінше толқын шығару үшін 44100 үлгі бір секунд ішінде пайдаланылады.
яғни әрбір үлгіні 1/44100 = 22.67 uS белгіленген аралықта ойнау қажет.
Содан кейін дыбыстық сигналдың биттік тереңдігі келеді, бұл әдетте дыбыстың сандық аудиода қаншалықты дәл көрсетілгенін көрсетеді. Бит тереңдігі неғұрлым жоғары болса, сандық дыбыс дәлірек болады.
Бірақ Arduino немесе 16 МГц сағаты бар кез келген басқа микроконтроллер бізді тек 8 биттікке дейін пайдалануға мүмкіндік береді. Мен мұның себебін түсіндіремін.
1028 бетте 328p деректер кестесінде формула бар:- мәліметтер парағы
Мен егжей -тегжейлі айтпаймын, неге мен бұл формуланы қолданамын.
сигнал жиілігі = Сағат сигналы / N x (1+TOP)
Сағат сигналы = 16 МГц (Arduino тақтасы)
N = prescaler (1 - біздің жобаның мәні)
TOP = мәні 0-ден 2^16-ға дейін (16-разрядты есептегіш үшін) (біздің жоба үшін 255 = 2^8 (8-биттік))
біз сигнал = 62,5 кГц жиілігінің мәнін аламыз
Бұл тасымалдаушы толқын жиілігі бит тереңдігіне байланысты екенін білдіреді.
Мысалы, егер біз TOP мәнін қолданатын болсақ = 2^16 = 65536 (яғни бит тереңдігі 16 биттік)
онда біз сигнал = 244 Гц жиілігінің мәнін аламыз (біз оны пайдалана алмаймыз)
OKK … Дыбыстық сигналдар қалай жұмыс істейді деген теория жеткілікті, сондықтан жобаға оралыңыз.
Ән үшін жасалған C коды Arduino-ға көшірілуі мүмкін және оны ойнатуға болады, бірақ біз 8000 Гц іріктеу жиілігімен 3 секундтық аудио ойнатуға дейін шектеулі. Өйткені бұл C коды мәтіндік файл болып табылады, сондықтан қысылмайды, бірақ ашылады. Және бұл тым көп орын алады. (мысалы, 44, 1 КГц үлгілері бар 43 секундтық аудиосы бар C кодтық файлы 23 Мбайтқа дейін бос орын алады). Біздің Arduino Mega бізге шамамен 256 Кб бос орын береді.
Сонымен, біз Arduino көмегімен әндерді қалай ойнаймыз. Бұл мүмкін емес. Бұл нұсқаулық жалған. Оқырмандар уайымдамаңыз, Сондықтан біз Arduino -ға дыбыстық ақпаратты жіберу үшін өте жоғары жылдамдықта (1 Мб/с дейін) Arduino арасындағы қандай да бір байланыс түрін қолдануымыз керек.
Бірақ мұны істеу үшін бізге қанша жылдамдық қажет?
Жауап - секундына 44000 байт, бұл орташа жылдамдық 44000*8 = 325 000 бит/с жоғары.
Бұл деректерді Arduino -ға жіберу үшін бізге үлкен жады бар басқа перифериялық қондырғы қажет. Бұл біздің Linux -пен жұмыс істейтін компьютеріміз болады (неге Linux -пен жұмыс істейтін компьютер? Бұл туралы көбірек білу үшін оқыңыз.)
Аха… Бұл біз сериялық байланысты қолдана аламыз дегенді білдіреді … Бірақ күте тұрыңыз … сериялық жылдамдық 115200 бит/с дейін болуы мүмкін, яғни (325000/115200 = 3), бұл талап етілгеннен үш есе баяу.
Жоқ, достарым, олай емес. Біз жылдамдықты немесе Baud Rate 500 000 бит/с жылдамдықты кабельмен 20-30 см-ге дейін қолданамыз, бұл талап етілгеннен 1,5 есе жылдам.
Неліктен Windows емес, Linux ???
Сонымен, біз үлгілерді компьютермен бірге 1/44100 = 22.67 uS аралығында жіберуіміз керек (жоғарыда көрсетілген).
Сонымен, оны қалай бағдарламалауға болады?
Біз C ++ көмегімен ұйқы функциясын қолдана отырып, деректерді байтпен сериялық жіберу үшін пайдалана аламыз
nanosleep, Chrono және т.
үшін (int x = 0; x
sendData (x);
nanosleep (22000); // 22uS
}
БІРАҚ, бұл WINDOWS -те жұмыс істемейді, Linux -те де осылай жұмыс істемеді (бірақ мен оны менің кодымда көруге болатын басқа жолды таптым.)
Өйткені біз терезелердің көмегімен мұндай түйіршіктілікке қол жеткізе алмаймыз. Мұндай дәйектілікке қол жеткізу үшін сізге Linux қажет.
Мен тіпті Linux -те тапқан мәселелер …
біз Linux көмегімен осындай түйіршіктілікке қол жеткізе аламыз, бірақ мен бағдарламамды 22uS үшін ұйықтайтын функция таппадым.
Nanosleep, Chrono nanosleep және т. Бірақ маған дәл 22 АҚШ қажет болды. Мен Google -дегі әр бетті зерттедім және C/C ++ - те бар барлық мүмкін функцияларды қолдандым, бірақ мен үшін ештеңе жұмыс істемеді. Содан кейін мен өз функциямды ойлап таптым, бұл мен үшін нағыз сүйкімділік болды.
Менің кодым қазір дәл 1uS немесе одан жоғары ұйқыны қамтамасыз етеді !!!
Сондықтан біз қиын бөлікті өттік, ал қалғаны оңай …
Біз Arduino көмегімен белгілі бір жиіліктегі PWM сигналын, сондай -ақ тасымалдаушы толқын жиілігін қолданғымыз келеді.
Сонымен, бізге PWM құру үшін Arduino TIMERS деп аталатын құралдарды қолдану қажет. Айтпақшы, мен бұл туралы толығырақ айтпаймын, өйткені сіз TIMERS тақырыбында көптеген оқулықтарды таба аласыз, бірақ егер сіз оларды таба алмасаңыз, төменде түсініктеме беремін.
Мен TC4420 Mosfet драйверін қолдандым, біздің Arduino түйреуіштерін сақтап қалу үшін, олар кейде MOSFET жүргізу үшін көп ток бере алмайды.
Осылайша, бұл жобаның теориясы болды, енді біз схеманы көре аламыз.
НАЗАР АУДАРЫҢЫЗ
Шын мәнінде, бұл жоба әдейі қиындатылды (неге екенін айтайын), noPC талап ететін басқа әдіс бар, тек Arduino мен динамикте менің келесі нұсқаулықта.
*Бұл жобаның негізгі мақсаты - сериялық байланысты қолдану және оның қуатын білу және компьютерді дәл осындай уақыт аралықтарында тапсырмаларды дәл орындауға қалай бағдарламалау керектігін білу.*
3 -қадам: схемалық
Схемада көрсетілгендей барлық компоненттерді қосыңыз. Сонымен, сізде екі нұсқа бар:-
1. Динамикті қосыңыз (5В қосылған)
2. Flyback трансформаторын қосыңыз (12 В -ға қосылған)
Мен екеуін де сынап көрдім. Және екеуі де жақсы жұмыс істейді.
Жауапкершіліктен бас тарту:-
*Мен Flyback трансформаторын сақтық шараларын қолдануды ұсынамын, себебі ол қауіпті болуы мүмкін, себебі ол жоғары кернеуді шығарады. Мен ешқандай зақымға жауап бермеймін*.
4 -қадам: Audacity көмегімен MP3 файлын WAV файлына түрлендіру
Сонымен, алдымен бағдарламалық жасақтаманы жүктеп алыңыз
1. Audacity, іздеу және Google -дан жүктеу
2. WAV файлын C-кодқа түрлендіру үшін WAVToCode деп аталатын терезелік қосымшаны жүктеңіз
Сіз WAVToCode бағдарламалық жасақтамасын осы сілтемеден пайдалана аласыз және оны осы сілтемеден жүктей аласыз.
Мен сондай -ақ екі бағдарламалық қамтамасыз етуді пайдалану туралы егжей -тегжейлі қадамдар беремін.
Осы нұсқаулықпен байланысты фотосуреттерді қараңыз.
Бұл қадамда біз MP3 -ді Wav -ге түрлендіреміз. (Фотосуреттерді орындаңыз, жоба жиілігі 44100 Гц болуы керек)
Келесі қадамда біз wav файлын C Code түрлендіреміз.
5-қадам: WAV-дан C-кодқа өту
Суреттерді қадағалаңыз.
Соңғы екі суретті қараңыз, өзгерістер дәл солай болуы керек, бас әріптер бас әріптер мен кіші әріптер кіші болуы керек, немесе компиляция кезінде синтаксистік қате пайда болады.
(Сіз 1мин 41сек ән 23мб бос орын алғанын көре аласыз.)
Әннің аты мен ұзақтығын сәйкесінше әннің аты мен ұзақтығымен өзгертіңіз.
Және C Code файлын сақтаңыз.
Мұны Arduino -мен ойнағыңыз келетін барлық әндерге жасаңыз
6 -қадам: Соңғы файлды жасаңыз және Linux -ты күйдіріңіз
Барлық түрлендірілген әндерді осы сілтемеде берілген Файлға қосыңыз.
Және суреттерді қадағалаңыз.
Мен қосқан Arduino -ға кодты жүктеңіз.
C Code файл атауларын есте сақтаңыз.
Соңында Fedora Live USB немесе басқаларын өртеп, gcc компиляторын орнатыңыз, содан кейін қалтаның компиляция нұсқауларын қолданып бағдарламаны құрастырыңыз және іске қосыңыз.
Соңында сіз Speaker немесе Flyback әндерін тыңдай аласыз.
Бұл нұсқаулықты оқығаныңыз үшін рахмет және сізге ұнаса түсініктеме беріңіз.
НАЗАР АУДАРЫҢЫЗ, бұл нұсқаулықтың екінші бөлігін жасадым, ол әлдеқайда жеңіл және жұмыс істеу үшін аз қиындықтар қажет. Екінші бөлімге сілтеме (ең оңай)
Ұсынылған:
Arduino көмегімен Neopixel Ws2812 LED немесе LED STRIP немесе Led сақинаны қалай қолдануға болады: 4 қадам
Arduino көмегімен Neopixel Ws2812 LED немесе LED STRIP немесе светодиодты қалай қолдануға болады: Сәлеметсіз бе, балалар, Neopixel жетекші жолағы өте танымал және оны ws2812 жарық диодты жолағы деп те атайды. Олар өте танымал, себебі бұл жарықдиодты жолақтарда біз әр сымға жеке тоқтала аламыз, яғни егер сіз бірнеше шамдардың бір түсте жарқырағанын қаласаңыз
Flyback трансформаторында немесе динамикте PWM үшін ADC көмегімен Arduino көмегімен әндерді ойнаңыз: 4 қадам
Flyback трансформаторында немесе динамикте PWM үшін ADC көмегімен Arduino көмегімен әндер ойнаңыз: Сәлеметсіздер ме, балалар, бұл менің басқа нұсқаулықтың екінші бөлігі (бұл өте қиын болды), мен бұл жобада Arduino -да ADC мен TIMERS -ты қолдандым. Дыбыстық сигналды PWM сигналына түрлендіріңіз, бұл менің бұрынғы нұсқаулығыма қарағанда әлдеқайда жеңіл
Музыканы Arduino көмегімен ойнаңыз!: 5 қадам (суреттермен)
Музыканы Arduino көмегімен ойнаңыз!: Бұл нұсқаулықта мен сізге Arduino UNO мен SD Card модулін пайдаланып музыканы қалай ойнайтынымды көрсетемін. Біз SPI байланысын қолданамыз. Алдымен бастайық
MP3 форматында DVD -ден әндерді немесе басқа материалдарды қалай алуға болады: 4 қадам
MP3 форматында DVD -ден әндерді немесе басқа материалдарды қалай алуға болады: Егер сізде әндері бар DualDisc болса, сіз оны iPod -да тыңдағыңыз келеді, немесе сіз тыңдағыңыз келетін түсініктеме трегі бар қалыпты DVD -де. Ipod, мұны істеу үшін қалғанын оқыңыз. Қажетті заттар-компьютер, қолдар, ми, DVD, Ipod
Флеш ойындарын желіде немесе желіден тыс жүктеп алыңыз және ойнаңыз: 5 қадам
Флеш ойындарын желіде немесе желіден тыс жүктеу және ойнау: Бұл нұсқаулықта мен сізге флеш ойындарын жүктеуді үйретемін. Саяхатта ойнау үшін керемет, егер сіз Wi-Fi ала алмасаңыз