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

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

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Простой аудиопроигрыватель для 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 }

См.также

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