Arduino:Примеры/SimpleAudioPlayer

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

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


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

Этот пример показывает, как при помощи Arduino Due и библиотеки Audio настроить примитивный аудиопрогрыватель.

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

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

Цепь

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

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

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

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


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

Звуковой файл

Звуковой файл, хранящийся на SD-карте, должен быть в WAV-формате и в качестве 16 бит 44100 Гц.

Код

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

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

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

 Создан Массимо Банзи (Massimo Banzi) 20 сентября 2012 года,
 модифицирован Скоттом Фитцджеральдом (Scott Fitzgerald) 19 октября
 2012 года, еще раз модифицирован Артуро Гуадалупи (Arturo Guadalupi)
 18 декабря 2015 года

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

 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.");  //  " завершена успешно"
  // задаем скорость передачи данных по SPI: 

  // стерео 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) ;
}

См.также

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