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

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

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


Простой аудиопроигрыватель для 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
Подключение LM386 и динамика к Arduino Zero

Аудиофайл

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

Код

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

 Демонстрирует использование библиотеки Audio для Arduino Zero 

 Необходимое оборудование:
 * Модуль Arduino c SD-картой, подключенной к CS4 
 * Звуковой файл «test.wav» в корневой директории SD-карты
 * Звукоусилитель, подключенный к DAC0 и «земле»
 * Динамик, подключенный к звукоусилителю

 Arturo Guadalupi <a.guadalupi@arduino.cc>
 Angelo Scialabba <a.scialabba@arduino.cc>
 Claudio Indellicati <c.indellicati@arduino.cc>

 Этот код не защищен авторским правом.

 http://www.arduino.cc/en/Tutorial/SimpleAudioPlayer

*/

#include <SD.h>
#include <SPI.h>
#include <Audio.h>

void setup() {
  // запускаем последовательную коммуникацию на скорости 9600 бод (в отладочных целях):
  Serial.begin(9600);

  // настраиваем SD-карту:
  Serial.print("Initializing SD card...");  //  "Инициализация SD-карты..."
  if (!SD.begin(4)) {
    Serial.println(" failed!");  //  " не удалась!"
    while(true);
  }
  Serial.println(" done.");  //  " завершена успешно."

  // стерео 44100 КГц = 88200; пребуферация – 100 миллисекунд:
  Audio.begin(88200, 100);
}

void loop() {
  int count = 0;

  // открываем WAV-файл, записанный на SD-карту:
  File myFile = SD.open("test.wav");
  if (!myFile) {
    // если файл не открылся, сообщаем об ошибке и останавливаем скетч:
    Serial.println("error opening test.wav");  //  "ошибка при попытке открыть test.wav"
    while (true);
  }

  const int S = 1024; // количество сэмплов, считываемых за один блок
  short buffer[S];

  Serial.print("Playing");  //  "Проигрывание"
  // пока файл не закончится:
  while (myFile.available()) {
    // считываем сэмплы из файла в буфер:
    myFile.read(buffer, sizeof(buffer));

    // подготавливаем сэмплы:
    int volume = 1024;
    Audio.prepare(buffer, S, volume);
    // скармливаем» сэмплы:
    Audio.write(buffer, S);

    // каждые 100 блоков пишем «.»:
    count++;
    if (count == 100) {
      Serial.print(".");
      count = 0;
    }
  }
  myFile.close();

  Serial.println("End of file. Thank you for listening!");  //  "Конец файла. Спасибо за прослушивание!"
  while (true) ;
}

См.также

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