Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Привет ребята, Это моя первая инструкция, надеюсь, вам понравится !!
По сути, в этом проекте я использовал последовательную связь между моим Arduino и моим ноутбуком для передачи музыкальных данных с моего ноутбука на Arduino. И использование ТАЙМЕРОВ Arduino для воспроизведения данных в виде сигнала ШИМ.
Хочу отметить, что этот проект не для новичков !!!.
На самом деле, этот проект был одним из самых продолжительных, потому что нам нужно многое сделать, чтобы он заработал.
ВНИМАНИЕ
Я сделал вторую часть этого руководства, которая намного проще и требует минимальных усилий для работы
Ссылка на вторую часть (самая простая).
Шаг 1. Что нам нужно для этого проекта (требования)
1. Плата Arduino (мы можем использовать любую плату (328, 2560), то есть Mega, Uno, Mini и т. Д., Но с определенными разными контактами)
2. ПК или ноутбук с Linux (я использовал Fedora 29) или Live USB с Linux
3. Макетная или монтажная плата.
4. Подключение проводов
5. TC4420 (драйвер Mosfet или что-то в этом роде)
6. Силовой МОП-транзистор (канал N или P, подключите его соответственно) (я использовал канал N)
7. Динамик или обратноходовой трансформатор (да, вы правильно прочитали !!)
8. Подходящий источник питания (0-12 В) (я использовал свой собственный блок питания ATX)
9. Радиатор (я сохранил со своего старого ПК).
10. ПК с Windows и флеш-накопителем.
Чтобы узнать подробности работы каждого компонента и этого проекта, прочтите следующий шаг.
Я сделал вторую часть этого руководства, которая намного проще и требует минимальных проблем для работы. Ссылка на вторую часть (самая простая).
Шаг 2: понимание принципа работы
Аааа !! Самая длинная часть обучаемого, читать и писать этот раздел скучно.
Прежде всего, нам нужно получить обзор того, как эта штука на самом деле работает.
Что мы здесь делаем, так это то, что сначала мы конвертируем нашу песню MP3 в файл WAV, а этот файл в файл заголовка C с помощью программного обеспечения, которое находится по ссылке. Этот код C на самом деле содержит 8-битные (почему 8-битные? Читайте дальше) образцы данных, которые нам нужно воспроизвести с помощью нашей Arduino с фиксированной частотой или скоростью, которая указана в соответствии с нашей частотой дискретизации.
Теория звукового сигнала.
Для тех, кто не знает, что такое частота дискретизации или битрейт: -
Частота дискретизации определяется как количество сэмплов, которые мы воспроизводим за секунду (обычно измеряется в Гц или кГц).
Чтобы узнать больше в деталях: -Нажмите здесь
Стандартные частоты дискретизации: 44100 Гц (наилучшее качество), 32000 Гц, 22050 Гц и т. Д.
это означает, что 44100 сэмплов используются в секунду для соответствующей генерации волны.
т.е. каждый сэмпл должен воспроизводиться с фиксированным интервалом 1/44100 = 22,67 мкс.
Затем идет битовая глубина аудиосигнала, которая обычно является мерой того, насколько точно звук представлен в цифровом аудио. Чем выше битовая глубина, тем точнее цифровой звук.
Но с Arduino или любым другим микроконтроллером с тактовой частотой 16 МГц мы можем использовать только 8-битные. Я объясню почему.
На странице 102 в даташите 328p есть формула: - Datasheet
Я не буду вдаваться в подробности, почему я использую эту формулу.
частота сигнала = тактовый сигнал / N x (1 + TOP)
Тактовый сигнал = 16 МГц (плата Arduino)
N = предделитель (1 - значение для нашего проекта)
TOP = значение от 0 до 2 ^ 16 (для 16-битного счетчика таймера) (255 = 2 ^ 8 (8-бит) для нашего проекта)
получаем значение частоты Signal = 62,5 кГц
Это означает, что частота несущей волны зависит от битовой глубины.
Предположим, если мы используем значение TOP = 2 ^ 16 = 65536 (т.е. разрядность 16 бит)
тогда мы получаем значение частоты сигнала = 244 Гц (которое мы не можем использовать)
ОК … Так что этой теории о том, как работают аудиосигналы, достаточно. Итак, вернемся к проекту.
Код C, сгенерированный для песни, можно скопировать в Arduino и воспроизвести, но мы ограничены воспроизведением звука до 3 секунд с частотой дискретизации 8000 Гц. Поскольку этот код C является текстовым файлом и, следовательно, не сжат, а скорее распакован. И занимает слишком много места. (например, файл кода C с 43-секундным звуком с выборками 44,1 кГц занимает до 23 МБ), а наша Arduino Mega дает нам пространство около 256 КБ.
Итак, как мы будем воспроизводить песни с помощью Arduino. Это невозможно. Эта инструкция - подделка. Не волнуйтесь, читатели, Вот почему нам нужно использовать какую-то связь между Arduino на ооочень высоких скоростях (до 1 Мб / с) для отправки аудиоданных в 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 мкс с нашего ПК.
Итак, как мы можем его запрограммировать?
Мы можем использовать C ++ для отправки байта данных через Serial с интервалом, используя какую-то функцию сна.
например, nanosleep, Chrono и т. д. и т. д.….
для (int x = 0; x
sendData (x);
nanosleep (22000); // 22 мкс
}
НО ЭТО НЕ РАБОТАЕТ В WINDOWS, также не работает таким образом в Linux (но я нашел другой способ, который вы можете увидеть в моем прилагаемом коде).
Потому что мы не можем добиться такой детализации с помощью окон. Для достижения такой детализации вам понадобится Linux.
Проблемы, которые я обнаружил даже с Linux…
мы можем достичь такой степени детализации с помощью Linux, но я не нашел такой функции, которая бы спала для моей программы за 22uS.
Такие функции, как nanosleep, Chrono nanosleep и т. Д., Также не работают, так как они обеспечивают сон только более 100 мкс. Но мне нужно было ровно 22 мс. Я исследовал каждую страницу в Google и экспериментировал со всеми возможными функциями, доступными в C / C ++, но у меня ничего не работало. Затем я придумал свою собственную функцию, которая сработала для меня как настоящий шарм.
И мой код теперь обеспечивает точный, именно сон 1 мкс или выше !!!
Итак, мы рассмотрели сложную часть, а остальное легко …
И мы хотим сгенерировать сигнал ШИМ с помощью Arduino с определенной частотой, а также с частотой несущей волны (62,5 кГц (как вычислено выше) для хорошей устойчивости к сигналу).
Итак, нам нужно использовать так называемые ТАЙМЕРЫ Arduino для создания ШИМ. Кстати, я не буду вдаваться в подробности об этом, потому что вы найдете много руководств по теме ТАЙМЕРОВ, но если вы не найдете их, прокомментируйте ниже, я сделаю одно.
Я использовал драйвер Mosfet TC4420, чтобы спасти наши выводы Arduino, потому что они иногда не могут подавать такой большой ток для управления MOSFET.
Итак, это была почти теория этого проекта, теперь мы можем видеть принципиальную схему.
ВНИМАНИЕ ВНИМАНИЕ ВНИМАНИЕ
На самом деле, этот проект был намеренно усложнен (я расскажу почему), в моей следующей инструкции есть еще один метод, который не требует ПК, только Arduino и динамик. Ссылка здесь.
* Основная цель этого проекта - использовать последовательную связь и узнать ее мощность, а также узнать, как мы можем запрограммировать наш компьютер для выполнения задач точно с такими точными интервалами. *
Шаг 3: Схема
Подключите все компоненты, как показано на схеме. Итак, у вас есть два варианта: -
1. Подключите динамик (подключенный к 5 В)
2. Подключите обратноходовой трансформатор (подключен к напряжению 12 В).
Я пробовал оба. И оба работают очень хорошо.
Отказ от ответственности: -
* Я рекомендую использовать обратноходовой трансформатор с осторожностью, так как это может быть опасно, поскольку производит высокое напряжение. И я не буду нести ответственности за любой ущерб. *
Шаг 4: конвертируйте MP3 в WAV файл с помощью Audacity
Итак, в первую очередь скачайте программное обеспечение.
1. Смелость, поиск и загрузка с Google
2. Чтобы преобразовать файл WAV в C-код, загрузите оконное приложение с именем WAVToCode.
Вы можете узнать, как использовать программное обеспечение WAVToCode по этой ссылке и загрузить его по этой ссылке.
Я также дам подробные инструкции по использованию обоих программ.
См. Фотографии, связанные с этим руководством.
На этом этапе мы конвертируем MP3 в Wav. (Следуйте фотографиям, частота проекта должна быть 44100 Гц)
На следующем шаге мы конвертируем wav-файл в C-код.
Шаг 5: WAV в C-код
Следите за фотографиями.
См. Последние два рисунка, изменения должны быть точно такими же, заглавные буквы должны быть заглавными, а нижний регистр - меньшим, иначе вы получите синтаксическую ошибку во время компиляции.
(Вы можете видеть, что песня продолжительностью 1 мин 41 заняла 23 МБ.)
Измените название и продолжительность песни, указав название и продолжительность вашей песни соответственно.
И сохраните файл кода C.
Сделайте это со всеми песнями, которые хотите воспроизводить с помощью Arduino
Шаг 6: создайте окончательный файл и запустите свой Linux
Добавьте все преобразованные песни в файл, указанный по этой ссылке.
И следите за картинками.
Загрузите код в Arduino, который я прикрепил.
Запомните имена файлов C-кода (например, образ жизни, доллар, носитель), потому что мы должны указать те же самые имена в нашем коде с учетом регистра.
В конце запустите Fedora Live USB или другой и установите компилятор gcc, а затем, используя инструкции по компиляции из папки, скомпилируйте программу и запустите ее.
В конце концов, вы сможете слушать песни из Speaker или Flyback.
Спасибо, что прочитали это руководство, и, пожалуйста, прокомментируйте, если оно вам нравится.
ВНИМАНИЕ Я сделал вторую часть этой инструкции более простой и требует минимальных усилий для работы. Ссылка на вторую часть (самая простая)