Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Simple Audio Player Zero

Материал из Онлайн справочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Простой аудиопроигрыватель для Arduino Zero[1]

Этот пример показывает, как настроить Arduino Zero на проигрывание WAV-файла, хранящегося на SD-карте, при помощи библиотеки AudioZero и 10-битного цифро-аналогового преобразователя.

Необходимое оборудование

  • Плата Arduino Zero
  • Динамик или наушники на 8 Ом
  • Модуль Arduino c SD-картой на CS4 (вроде модуля Arduino Wireless SD)
  • Компоненты для построения цепи с внешним звукоусилителем: LM386 (маломощный звукоусилитель), потенциометр на 10 кОм, резистор на 10 Ом, 2 конденсатора на 10 мкФ, конденсатор на 0,05 мкФ (или 0,1 мкФ), конденсатор на 250 мкФ

Цепь

Модуль, в который вставлена SD-карта, помещается поверх Arduino Zero. Файл под названием «test.wav» записан в корневой директории SD-карты. В качестве теста можно попробовать подсоединить наушники напрямую к «земле» и DAC0 (в зависимости от полярности).

Чтобы подключить к плате динамик, между ним и контактом DAC0 нужно будет добавить цепь со звукоусилителем. Ее цель – увеличить громкость динамика. Существует много разных звукоусилителей, и один из самых распространенных – это LM386. Схема ниже показывает, как создать эту цепь при помощи LM386 и еще нескольких компонентов. Питание LM386 можно осуществить при помощи разных источников напряжения, и для этого нужно подключить его контакт Vs, например, к +5V на Arduino Zero или внешней 9-вольтовой батарее. Коэффициент усиления в цепи можно увеличить за счет конденсатора, подключенного к 1-ому и 8-ому контактам LM386. С конденсатором на 10 мкФ коэффициент усиления будет составлять «200», а без него – «50». Потенциометр позволяет управлять громкостью, производимой звукоусилителем.

Внимание: Подключать напрямую динамик к контактам Arduino Zero не следует.

Схема цепи со звукоусилителем


Подключение LM386 и динамика к Arduino Zero

Аудиофайл

Аудиофайл, хранящийся на SD-карте, должен быть в WAV-формате и в следующем качестве: моно, 8 бит, 88200 Гц, беззнаковая PCM. Такие файлы можно получить при помощи программ вроде audacity.

Код

  1. /*
  2.   Простой аудиопроигрыватель для Arduino Zero
  3.  
  4.  Демонстрирует использование библиотеки Audio для Arduino Zero
  5.  
  6.  Необходимое оборудование:
  7.  * Модуль Arduino c SD-картой, подключенной к CS4
  8.  * Звуковой файл «test.wav» в корневой директории SD-карты
  9.  * Звукоусилитель, подключенный к DAC0 и «земле»
  10.  * Динамик, подключенный к звукоусилителю
  11.  
  12.  Arturo Guadalupi <a.guadalupi@arduino.cc>
  13.  Angelo Scialabba <a.scialabba@arduino.cc>
  14.  Claudio Indellicati <c.indellicati@arduino.cc>
  15.  
  16.  Этот код не защищен авторским правом.
  17.  
  18.  http://www.arduino.cc/en/Tutorial/SimpleAudioPlayer
  19.  
  20. */
  21.  
  22. #include <SD.h>
  23. #include <SPI.h>
  24. #include <Audio.h>
  25.  
  26. void setup() {
  27.   // запускаем последовательную коммуникацию на скорости 9600 бод (в отладочных целях):
  28.   Serial.begin(9600);
  29.  
  30.   // настраиваем SD-карту:
  31.   Serial.print("Initializing SD card...");  //  "Инициализация SD-карты..."
  32.   if (!SD.begin(4)) {
  33.     Serial.println(" failed!");  //  " не удалась!"
  34.     while(true);
  35.   }
  36.   Serial.println(" done.");  //  " завершена успешно."
  37.  
  38.   // стерео 44100 КГц = 88200; пребуферация – 100 миллисекунд:
  39.   Audio.begin(88200, 100);
  40. }
  41.  
  42. void loop() {
  43.   int count = 0;
  44.  
  45.   // открываем WAV-файл, записанный на SD-карту:
  46.   File myFile = SD.open("test.wav");
  47.   if (!myFile) {
  48.     // если файл не открылся, сообщаем об ошибке и останавливаем скетч:
  49.     Serial.println("error opening test.wav");  //  "ошибка при попытке открыть test.wav"
  50.     while (true);
  51.   }
  52.  
  53.   const int S = 1024; // количество сэмплов, считываемых за один блок
  54.   short buffer[S];
  55.  
  56.   Serial.print("Playing");  //  "Проигрывание"
  57.   // пока файл не закончится:
  58.   while (myFile.available()) {
  59.     // считываем сэмплы из файла в буфер:
  60.     myFile.read(buffer, sizeof(buffer));
  61.  
  62.     // подготавливаем сэмплы:
  63.     int volume = 1024;
  64.     Audio.prepare(buffer, S, volume);
  65.     // скармливаем» сэмплы:
  66.     Audio.write(buffer, S);
  67.  
  68.     // каждые 100 блоков пишем «.»:
  69.     count++;
  70.     if (count == 100) {
  71.       Serial.print(".");
  72.       count = 0;
  73.     }
  74.   }
  75.   myFile.close();
  76.  
  77.   Serial.println("End of file. Thank you for listening!");  //  "Конец файла. Спасибо за прослушивание!"
  78.   while (true) ;
  79. }

См.также

Внешние ссылки

  1. Arduino.cc - SimpleAudioPlayerZero