Arduino:Примеры/Simple Audio Player Zero
{{#setlogo:ArduinoCommunityLogo.png}}
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Простой аудиопроигрыватель для 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 не следует.
Аудиофайл
Аудиофайл, хранящийся на 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 }
См.также
Внешние ссылки