Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор: 6 стъпки (със снимки)
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор: 6 стъпки (със снимки)
Anonim
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор
Пускайте песни (MP3) с Arduino с помощта на PWM на високоговорител или Flyback трансформатор
Пускайте песни (MP3) с Arduino с помощта на PWM на високоговорител или Flyback трансформатор
Пускайте песни (MP3) с Arduino с помощта на PWM на високоговорител или Flyback трансформатор
Пускайте песни (MP3) с Arduino с помощта на PWM на високоговорител или Flyback трансформатор
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор

Здравейте момчета, Това е първата ми инструкция, надявам се да ви хареса !!

По принцип в този проект използвах серийната комуникация между моя Arduino и моя лаптоп, за да предам музикални данни от моя лаптоп към Arduino. И използвайки таймерите Arduino за възпроизвеждане на данните като PWM сигнал.

Исках да отбележа, че този проект не е за начинаещи !!!.

Всъщност този проект беше един от най -дългите проекти, защото трябва да направим много неща, за да работи.

ВНИМАНИЕ

Направих втората част от тази инструкция, която е много по -лесна и се нуждае от минимални проблеми, за да работи

Връзка към втора част (най -лесната).

Стъпка 1: Нещата, от които се нуждаем за този проект (изисквания)

1. Arduino Board (можем да използваме всяка дъска (328, 2560), т.е. Mega, Uno, Mini и т.н., но със специфични различни щифтове)

2. PC или лаптоп с Linux (използвал съм Fedora 29) или Live USB с Linux

3. Breadboard или Perfboard

4. Свързване на проводници

5. TC4420 (драйвер на Mosfet или нещо такова)

6. Захранване на Mosfet (N или P канал, моля свържете след това съответно) (използвал съм N-канал)

7. Високоговорител или Flyback трансформатор (Да, прочетохте го правилно !!)

8. Подходящо захранване (0-12V) (използвал съм собствено ATX захранване)

9. Радиатор (спасих от стария си компютър)

10. Компютър с Windows и писалка.

За да знаете подробната работа на всеки компонент и този проект, моля, прочетете следващата стъпка.

Направих втората част от тази инструкция, която е много по -лесна и се нуждае от минимални проблеми, за да работи. Връзка към втора част (най -лесната).

Стъпка 2: Разбиране на принципа на работа

Аааа !! най -дългата част от инструктаж, четенето и писането на този раздел е скучно.

На първо място, трябва да получим Общ преглед, как всъщност работи това нещо.

това, което правим тук е, че първо, ние преобразуваме нашата MP3 песен във WAV файл и този файл в C заглавен файл, като използваме софтуера, който е в линка. Този C код всъщност съдържа 8-битови (защо 8-битови? Прочетете по-нататък) извадки от данни, които трябва да играем с помощта на нашия Arduino с фиксирана скорост или скорост, която е посочена според нашата честота на дискретизация.

Теория на аудио сигнала.

За тези, които не знаят каква е честотата на извадката или битрейта:-

Честотата на дискретизация се определя като броя на пробите, които играем за секунда (обикновено се измерва в Hz или KHz).

За да научите повече в Детайли: -Кликнете тук

Стандартните честоти на извадката са 44100 Hz (най -добро качество), 32000 Hz, 22050 Hz и т.н.

което означава, че 44100 проби се използват за секунда, за да се генерира съответно вълна.

Всяка проба трябва да се играе на фиксиран интервал от 1/44100 = 22,67 uS.

След това идва битовата дълбочина на аудио сигнала, която обикновено е мярка за това колко точно звукът е представен в цифрово аудио. Колкото по -голяма е битовата дълбочина, толкова по -точен е цифровият звук.

Но с Arduino или друг микроконтролер с 16Mhz часовник ни позволява да ни използваме само до 8-битови. Ще обясня защо.

Има формула на страница № 102 в листа с данни на 328p:- Лист с данни

Няма да навлизам в подробности, защо използвам тази формула.

честота на сигнала = Часовник сигнал / N x (1+ТОП)

Сигнал на часовника = 16Mhz (платка Arduino)

N = предварително делител (1 е стойност за нашия проект)

TOP = стойност от 0 до 2^16 (За 16-битов таймер) (255 = 2^8 (8-битов) за нашия проект)

получаваме стойността на честотата на Сигнал = 62,5 kHz

Това означава, че честотата на носещата вълна зависи от дълбочината на бита.

Да предположим, че ако използваме TOP стойност = 2^16 = 65536 (т.е. битова дълбочина от 16 бита)

тогава получаваме стойността на честотата на сигнала = 244 Hz (която не можем да използваме)

OKK … Значи тази теория за това как работят аудиосигналите е достатъчна, така че обратно към проекта.

C кодът, генериран за песен, може да бъде копиран в Arduino и може да се възпроизвежда, но ние сме ограничени до 3-сек аудио възпроизвеждане с честота на дискретизация 8000 Hz. Тъй като този C код е текстов файл и следователно не е компресиран, а по -скоро декомпресиран. И заема твърде много място. (напр. C код файл с 43-сек аудио с 44, 1 KHz семпли заема място до 23 MB). И нашата Arduino Mega ни дава пространство от около 256 Kb.

И така, как ще свирим песни, използвайки Arduino. Не е възможно. Тази инструкция е фалшива. Не се притеснявайте читатели, Ето защо трябва да използваме някакъв вид комуникация между Arduino при изключително високи скорости (до 1 Mb/s), за да изпращаме аудио данни към Arduino.

Но от колко точно скорост имаме нужда, за да направим това ??

Отговорът е 44000 байта в секунда, което означава, че скоростта е повече от 44000*8 = 325 000 бита/сек.

Нуждаем се от друго периферно устройство с голямо хранилище, за да изпратим тези данни към нашия Arduino. И това ще бъде нашият компютър с Linux (защо компютър с Linux ??? моля, прочетете по -нататък, за да научите повече за него.)

Ахаа … Това означава, че можем да използваме серийна комуникация … Но изчакайте … серийният е възможен само със скорост до 115200 бита/сек, което означава (325000/115200 = 3), че е три пъти по -бавен от необходимото.

Не, приятели, не е така. Ще използваме скорост или скорост на предаване от 500 000 бита/сек с кабел до 20-30 см макс., Което е 1,5 пъти по-бързо от необходимото.

Защо Linux, а не Windows ???

Така че, ние трябва да изпращаме проби на интервал (също посочен по -горе) от 1/44100 = 22,67 uS с нашия компютър.

И така, как можем да го програмираме така?

Можем да използваме C ++, за да изпращаме байт с данни през Serial на интервал, използвайки някаква функция за заспиване

като nanosleep, Chrono и т.н. и т.н. …

за (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

НО НЕ РАБОТИ НА WINDOWS също не работи по този начин в Linux (но намерих друг начин, който можете да видите в моя приложен код.)

Тъй като не можем да постигнем такава детайлност с помощта на windows. Имате нужда от Linux, за да постигнете такава детайлност.

Проблеми, които открих дори с Linux …

можем да постигнем такава детайлност, използвайки Linux, но не намерих такава функция, която да спи програмата ми за 22uS.

Функции като nanosleep, Chrono nanosleep и т.н. и т.н. също не работят, тъй като осигуряват сън само над 100 uS. Но имах нужда точно, точно 22 uS. Проучих всяка страница в google и експериментирах с всички възможни функции, които са налични в C/C ++, но нищо не работи за мен. Тогава измислих собствена функция, която ми действаше като истински чар.

И моят код сега осигурява точен, прецизен сън от 1uS или повече !!!

Така че покрихме трудната част, а останалото е лесно …

И ние искаме да генерираме ШИМ сигнал, използвайки Arduino със специфична честота, също и честота на носещата вълна. (62.5KHz (както е изчислено по -горе) за добър имунитет на сигнала).

Така че, ние трябва да използваме така наречените ТАЙМЕРИ на Arduino, за да създадем ШИМ. Между другото, няма да навлизам в много подробности по това, защото ще намерите много уроци по темата ТАЙМЕРИ, но ако не намерите такива, коментирайте по -долу, ще направя такъв.

Използвал съм TC4420 драйвер за Mosfet, за да запазя нашите Arduino Pins, защото те не могат да доставят толкова много ток, за да управляват понякога MOSFET.

Така че, това беше почти теорията на този проект, сега можем да видим електрическата схема.

ВНИМАНИЕ ВНИМАНИЕ ВНИМАНИЕ

Всъщност този проект беше направен много трудно умишлено (ще кажа защо), има друг метод, който изисква noPC само Arduino и говорител в следващата ми инструкция. Връзката е тук.

*Основната цел на този проект е да използваме серийна комуникация и да знаем нейната сила и да научим как можем да програмираме нашия компютър да изпълнява задачи точно на такива малки интервали.*

Стъпка 3: Схематично

Схематично
Схематично

Свържете всички компоненти, както е показано на схемата. Тук имате две възможности:-

1. Свържете високоговорител (свързан с 5V)

2. Свържете Flyback трансформатор (свързан с 12V)

Опитах и двете. И двете работят доста добре.

Опровержение:-

*Препоръчвам да използвате предпазен трансформатор с предпазни мерки, тъй като той може да бъде опасен, защото произвежда високи напрежения. И няма да нося отговорност за никакви щети.*

Стъпка 4: Конвертирайте MP3 във WAV файл с помощта на Audacity

Конвертирайте MP3 във WAV файл с помощта на Audacity
Конвертирайте MP3 във WAV файл с помощта на Audacity
Конвертирайте MP3 във WAV файл с помощта на Audacity
Конвертирайте MP3 във WAV файл с помощта на Audacity
Конвертирайте MP3 във WAV файл с помощта на Audacity
Конвертирайте MP3 във WAV файл с помощта на Audacity

Така че, първо, изтеглете софтуера

1. Audacity, търсене и изтегляне от Google

2. За да конвертирате WAV файл в C-код, изтеглете прозоречно приложение, наречено WAVToCode

Можете да научите как да използвате софтуера WAVToCode от тази връзка и да я изтеглите от тази връзка.

Ще дам и подробни стъпки как да използвате и двата софтуера.

Моля, вижте снимките, свързани с тази инструкция.

В тази стъпка ще преобразуваме MP3 във Wav. (Следвайте снимките, скоростта на проекта трябва да бъде 44100Hz)

В следващата стъпка ще преобразуваме wav файл в C Code.

Стъпка 5: WAV към C-код

WAV към C-код
WAV към C-код
WAV към C-код
WAV към C-код
WAV към C-код
WAV към C-код

Следвайте снимките.

Вижте последните две снимки, промените трябва да са абсолютно еднакви, главни букви трябва да са главни и малки букви трябва да са по -малки, или ще получите синтаксична грешка по време на компилирането.

(Можете да видите, че песента за 1 минута 41 секунди заема 23 MB място.)

Променете името и дължината на песента съответно с името и продължителността на песента.

И запишете файла C Code.

Направете това с всички песни, които искате да свирите с Arduino

Стъпка 6: Направете окончателен файл и стартирайте вашия Linux

Направете окончателен файл и стартирайте вашия Linux
Направете окончателен файл и стартирайте вашия Linux
Направете окончателен файл и стартирайте вашия Linux
Направете окончателен файл и стартирайте вашия Linux
Направете окончателен файл и стартирайте вашия Linux
Направете окончателен файл и стартирайте вашия Linux

Добавете всичките си конвертирани песни във Файл, предоставен в тази връзка.

И следвайте снимките.

Качете кода в Arduino, който съм прикачил.

Запомнете имената на файловете на C Code (напр. Начин на живот, долар, дрехи), защото трябва да споменем абсолютно същите имена в нашия код с чувствителност към регистъра.

В края стартирайте вашия Fedora Live USB или друг и инсталирайте gcc компилатор и след това, използвайки инструкциите за компилиране от папката, компилирайте програмата и я стартирайте.

В крайна сметка ще можете да слушате песни от Speaker или Flyback.

Благодарим ви, че прочетохте тази инструкция и моля, коментирайте, ако ви харесва.

ATTENTIONI направихме втората част от тази инструкция, която е много по -лесна и се нуждае от минимални проблеми, за да работи. Връзка към втора част (най -лесната)

Препоръчано: