Изучаем Arduino: инструметы и методы технического волшебства - страница 34

стр.

- 113 -

Рис. 5.4. Схема включения динамика и регулятора громкости

Рис. 5.5. Монтажная схема подключения динамика

- 114 -

Так же, как и при подключении светодиодов, необходимо поставить токоограничивающий резистор последовательно с динамиком. В предыдущих главах упоминалось, что каждый вывод Arduino может выдать ток не более 40 мА. Внутреннее сопротивление нашего динамика равно 8 Ом (как и для большинства имеющихся в продаже динамиков). Это сопротивление обмоток провода, которые составляют электромагнит. Напомним, что закон Ома гласит U = I·R. Выходное напряжение для вывода Arduino 5 В и ток не должен превышать 40 мА. Отсюда определяем, что минимальное сопротивление должно быть R = 5 В/40 мА = 125 Ом. Поскольку сопротивление динамика 8 Ом, то минимальное сопротивление токоограничивающего резистора получается 125 - 8 = 117 Ом. Ближайший номинал резистора 150 Ом.

Регулируя сопротивление, можно изменять громкость динамика. Сделаем это проще, включив последовательно с резистором потенциометр (рис. 5.4). На схеме R1 -резистор 150 Ом, R2-потенциометр 10 кОм.

Обратите внимание, что, в отличие от предыдущих случаев, здесь подключены только два вывода потенциометра: средний идет на динамик, а один из крайних соединен последовательно с токоограничивающим резистором 150 Ом. При повороте ручки потенциометра сопротивление цепи увеличивается и громкость снижается.

Подключите динамик к плате Arduino в соответствии со схемой, изображенной на рис. 5.4, и проверьте правильность монтажа по рис. 5.5.

Полярность включения динамиков не имеет значения. Схема собрана, и можно приступать к написанию музыки.

5.6. Создание мелодии

Для формирования мелодии очень удобно использовать массивы. Вывод последовательности звуков реализуется простым циклом перебора массива нот с отправкой текущего значения на динамик.

5.6.1. Использование массивов

Массив представляет собой упорядоченную последовательность элементов одного типа, которые связаны между собой. Группировка таких элементов - идеальный формат для перебора. Массив можно представить как нумерованный список. Каждый элемент массива имеет индекс, который указывает его местоположение в списке. В нашем примере в массиве хранится звуковая последовательность - список нот, которые будем воспроизводить по порядку.

В Arduino при объявлении массива необходимо указывать его размер. Вы можете это сделать, либо явно указав размерность массива, либо заполнив массив всеми значениями. Например, если требуется, чтобы массив содержал четыре элемента типа int, объявляем его в программе так:

int numbers[4];

При необходимости можно инициализировать массив значениями при объявлении.

При объявлении массива таким способом указывать число элементов массива

- 115 -

необязательно, предполагается, что длина массива равна числу объявленных элементов:

// Оба варианта объявления верны

int numbers[4] = {-7, 0, 6, 234};

int numbers[] = {-7, 0, 6, 234};

Обратите внимание, что массивы индексируются с нуля. Доступ к элементу массива можно получить, поставив после имени массива в квадратных скобках соответствующее значение индекса. Например, если требуется установить яркость светодиода, подключенного к выводу 9 Arduino, равной значению третьего элемента в массиве, то можно сделать это следующим образом:

analogWrite(9,numbers[2]);

Обратите внимание, что индекс 2 представляет собой третье значение в массиве, поскольку нумерация начинается с нуля. Изменить одно из значений массива можно так: numbers[2] = 10;

Далее массивы потребуются нам, чтобы создать структуру, которая может содержать последовательность нот, воспроизводимую на динамике.

5.6.2. Создание массивов нот и определение их длительности звучания

Для хранения информации о мелодии, которую вы хотите воспроизвести, создадим два массива одинаковой длины. Первый содержит перечень нот, а второй - список длительности звучания для каждой ноты в миллисекундах. Затем, перебирая индексы этих массивов, воспроизведем мелодию.

Пользуясь музыкальными навыками, которые я приобрел на уроках в средней школе, я сочинил короткую мелодию (листинг 5.1).