Оглавление:

Синтезатор Wii Nunchuck: 4 шага
Синтезатор Wii Nunchuck: 4 шага

Видео: Синтезатор Wii Nunchuck: 4 шага

Видео: Синтезатор Wii Nunchuck: 4 шага
Видео: [$9] Модульный синтезатор своими руками, контроллер нунчака Wii и Multi LFO/Joystic, датчик ускорения 2024, Июль
Anonim
Синтезатор Wii Nunchuck
Синтезатор Wii Nunchuck

Мир музыки Wii:

Я решил наконец совместить мою любовь к музыке с небольшим опытом программирования, который я приобрел за последние несколько лет. Я был заинтересован в создании собственного инструмента с тех пор, как увидел выступление Тода Мачовера в своей школе. Если вы не знакомы с его работой, дайте ему Google, поскольку он уже несколько лет раздвигает границы музыки, технологий, а также их пересечения (медиа-лаборатории Массачусетского технологического института, Rock Band, Guitar Hero и т. Д.).

Я подключил свой нунчак к Arduino Uno, работающей на библиотеке синтеза звука Mozzi, благодаря хорошо документированному использованию обоих в Интернете. Для удобства я использую адаптер для макета WiiChuck, который подключается прямо к Arduino. Этот относительно простой проект воспроизводит серию питчей в зависимости от высоты тона (YZ-Plane), измеренной акселерометром Nunchuck. Значение Y джойстика сопоставляется с усилением, чтобы сделать высоту звука громче или тише. Он также меняет аккорды в зависимости от кнопки Z и включает огибающую фазовой модуляции при нажатии кнопки C. Частота огибающей затем изменяется с помощью Roll, измеряемого от нунчака (изображение с поворотной ручкой).

Ресурсы:

  • 1 х Arduino Uno
  • 1 х Wii Nunchuck
  • 1 х адаптер WiiChuck
  • 1 x гнездовой стереоразъем 3,5 мм, совместимый с макетной платой
  • Аудиокабель 3,5 мм - 1 шт.
  • 1 x какой-то динамик (вы можете сначала подключить зуммер, чтобы проверить его
  • 4-5 Провода разных цветов

Необязательно, но рекомендуется:

  • Резистор 330 Ом - 1 шт.
  • 1 х 0,1 мкФ конденсатор

Шаг 1: подключение вашего NunChuck

Подключение вашего NunChuck
Подключение вашего NunChuck
Подключение вашего NunChuck
Подключение вашего NunChuck
Подключение вашего NunChuck
Подключение вашего NunChuck

Скопируйте / вставьте класс WiiChuck из Arduino Playground. Нам понадобится версия с объявлением выводов PWR и GND. Сохраните его как WiiChuck.h и храните в том же каталоге, что и ваш проект.

Теперь скопируйте / вставьте следующее в Arduino IDE и загрузите его.

#include "Wire.h" // # include "WiiChuckClass.h" // для остальных, скорее всего, это WiiChuck.h. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

// nunchuck_init (); Serial.begin (115200); chuck.begin (); chuck.update (); //chuck.calibrateJoy (); }

void loop () {

задержка (20); chuck.update ();

Serial.print (chuck.readPitch ());

Serial.print (","); Serial.print (chuck.readRoll ()); Serial.print (",");

Serial.print (chuck.readJoyX ());

Serial.print (","); Serial.print (chuck.readJoyY ()); Serial.print (",");

if (chuck.buttonZ) {

Serial.print ("Z"); } else {Serial.print ("-"); }

Serial.print (",");

// не функция // if (chuck.buttonC ()) {

if (chuck.buttonC) {Serial.print ("C"); } else {Serial.print ("-"); }

Serial.println ();

}

Отключите Arduino от питания и подключите адаптер WiiChuck к аналоговым контактам 2–5 на Arduino.

Снова подключитесь к источнику питания и убедитесь, что значения Nunchuck отправляются на ваш Arduino и распечатываются на последовательном мониторе. Если вы не видите никаких изменений в числах, убедитесь, что у вас хорошие связи и что вы, нунчак, работает. Я потратил несколько дней, пытаясь исправить программное обеспечение, прежде чем понял, что провод моего нунчака был внутренне сломан!

Далее мы подключим все к Mozzi…

Шаг 2. Знакомство с Моцци

Знакомство с Моцци
Знакомство с Моцци

Во-первых, вам нужно будет загрузить последнюю версию Mozzi. Они подпитываются пожертвованиями, поэтому сделайте пожертвование, если вам так хочется, и загрузите библиотеку. Вы можете легко добавить его в свои библиотеки, выбрав Sketch> Libraries> Add. ZIP Library… в Arduino IDE.

Теперь мы подключим разъем для наушников 3,5 мм к макетной плате и Arduino, чтобы мы могли легко подключиться к нему позже (пока вы можете отключить нунчак и адаптер).

  1. Подключите свой Джек к нижнему правому углу доски, чтобы освободить место для остальных. Домкрат должен быть шириной 5 контактов.
  2. Средний ряд соедините с землей с помощью перемычки.
  3. Подключите самый верхний ряд разъема к пустому ряду выше (10-й ряд на картинке). Это провод, по которому передается звуковой сигнал.
  4. Подключите цифровой контакт ~ 9 также к ряду 10.
  5. Подключите заземление на вашем Arduino к шине заземления на макетной плате.
  6. Вам не обязательно использовать резистор и конденсатор, но вы можете заметить пронзительный визг, если вы этого не сделаете. Он действует как фильтр нижних частот для устранения частот выше ~ 15 кГц.

Откройте скетч Mozzi Sinewave в Arduino IDE, выбрав File> Examples> Mozzi> Basics> Sinewave. По сути, это эквивалент Mozzi «Hello World».

Загрузите эскиз и подключите динамик к макету. Вы также можете использовать зуммер, если вы еще не подключили макетную плату к аудиоразъему.

Если вы не слышите постоянный сигнал A4 (440 Гц) из динамика, убедитесь, что все соединения в порядке, и повторите попытку.

Далее мы подключим нунчак к Arduino!

Шаг 3: Собираем все вместе

Собираем все вместе
Собираем все вместе

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

В среде Arduino IDE выберите «Файл»> «Примеры»> «Mozzi»> «Датчики»> «Пьезочастота»

Нам нужно будет добавить несколько строк в этот код, чтобы заставить его работать с Nunchuck. Добавьте включение в библиотеку WiiChuck и создайте экземпляр объекта WiiChuck с именем chuck. Вы также можете закомментировать объявление PIEZO_PIN или просто удалить его, поскольку мы не будем его использовать.

#include "WiiChuck. H"

Патрон WiiChuck = WiiChuck (); // const int PIEZO_PIN = 3; // устанавливаем аналоговый входной вывод для пьезо

Теперь в настройке нам нужно будет добавить следующее:

chuck.begin (); chuck.update ();

и, наконец, нам нужно будет изменить несколько вещей в updateControl ():

void updateControl () {

chuck.update (); // получить последние данные нунчака // прочитать пьезо // int piezo_value = mozziAnalogRead (PIEZO_PIN); // значение 0-1023 int piezo_value = map (Закомментируйте строку, которая устанавливает piezo_value, и добавьте ниже следующее:

void updateControl () {chuck.update (); // получить последние данные нунчака // прочитать пьезо // int piezo_value = mozziAnalogRead (PIEZO_PIN); // значение 0-1023 // Строка выше нам не нужна, но почему бы не сопоставить рулон с тем же диапазоном? int piezo_value = карта (chuck.readRoll (), -180, 180, 0 1023);

Загрузите код, и частота должна соответствовать вашему Nunchuck's Roll. Попробуйте сопоставить его с разными частотными диапазонами. Если вы еще не заметили ниже на скетче, значение датчика умножено на 3, поэтому в настоящее время мы воспроизводим тоны от 0 Гц до примерно 3000 Гц.

Шаг 4: Последние штрихи

Последние штрихи
Последние штрихи

Теперь вы готовы загрузить окончательную версию кода, которую я собрал из предыдущего шага, и еще несколько примеров Моцци (Phase_Mod_Envelope и Control_Gain, если быть точным). Чтобы облегчить себе жизнь, я также включил файл под названием pitches.h, который просто определяет значения частоты со знакомыми названиями нот (например, NOTE_A4).

Я предлагаю прочитать документацию Mozzi, поскольку большая часть кода прямо из примеров, за исключением кода для Nunchuck.

Вот ссылка на мой репозиторий Git. Включены все важные файлы, за исключением библиотеки Mozzi, которую вы должны получить с их веб-сайта, чтобы она была актуальной. Загрузите WiiMusic.ino и загрузите его на свое устройство, чтобы услышать, как он звучит. Я предлагаю вам поиграть с параметрами, которые я изменяю (изменить диапазоны карты, делить / умножать числа и т. Д.), Поскольку именно так я нашел конкретный звук, который искал.

Отражение

Я не чувствую, что закончил. Это не значит, что я не доволен проектом или звуком, который он издает, но мне кажется, что я просто окунул пальцы ног в новый мир, который я хочу продолжать исследовать, поэтому я добавлю новую ветку из этого проекта по мере продолжения. работать.

Тем не менее, как говорится, это было мое первое настоящее путешествие в мир микроконтроллеров, поэтому я очень благодарен за опыт обучения. Около двадцати часов, которые я потратил на это, подарили мне рождественские идеи для меня и практически каждого члена моей семьи. Я немного сожалею о том, что не работал над этим проектом с кем-то другим, поскольку я мог бы воспользоваться множеством советов и указаний на этом пути. Тем не менее, я лично многому научился во время своих испытаний, включая три дня, когда я выдергивал волосы, пытаясь отладить программную проблему, которой никогда не было (сломался внутренний провод в нунчаке).

Есть еще ряд возможностей для продвижения вперед. Например, я хотел бы использовать Arduino в качестве типа MIDI-интерфейса между MIDI-контроллером и выходом для наушников для изменения параметров MIDI-ноты, поскольку есть так много вариантов на выбор (громкость, срез, частота огибающей, изменение высоты тона, модуляция, вибрато, что угодно). Это обеспечит гораздо большую гибкость, включая переключение параметров с помощью кнопок и простое воспроизведение аккорда, который жестко не запрограммирован в массив C ++.

Рекомендуемые: