Оглавление:

Генератор музыки на основе погоды (генератор MIDI на основе ESP8266): 4 шага (с изображениями)
Генератор музыки на основе погоды (генератор MIDI на основе ESP8266): 4 шага (с изображениями)

Видео: Генератор музыки на основе погоды (генератор MIDI на основе ESP8266): 4 шага (с изображениями)

Видео: Генератор музыки на основе погоды (генератор MIDI на основе ESP8266): 4 шага (с изображениями)
Видео: Бананы, Огурцы, Arduino и Raspberry Pi. Музицирую на карантине 2024, Ноябрь
Anonim
Генератор музыки на основе погоды (генератор MIDI на основе ESP8266)
Генератор музыки на основе погоды (генератор MIDI на основе ESP8266)
Музыкальный генератор на основе погоды (генератор MIDI на основе ESP8266)
Музыкальный генератор на основе погоды (генератор MIDI на основе ESP8266)

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

Он основан на ESP8266, который похож на Arduino, и реагирует на температуру, дождь и интенсивность света.

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

Запасы

ESP8266 (я использую Feather Huzzah ESP8266 от Adafruit)

Датчик температуры, влажности и барометрического давления BME280 (версия I2C)

Датчик дождя Arduino

25K LDR (светозависимый резистор)

Некоторые резисторы (два 47, один 100, один 220 и один 1 кОм)

Женский Midi-разъем (5-контактный DIN), подходящий для монтажа на печатной плате

Провода перемычки

Макетная плата или какая-то макетная плата

Компьютер, я буду использовать один под управлением Windows 8.1, но, насколько мне известно, он должен работать на любой ОС.

Дополнительно: LiPo аккумулятор емкостью 1250 мАч с разъемом JST от Adafruit (совместим только с некоторыми ESP)

Шаг 1: Шаг 1: Программное обеспечение

Прежде всего вам понадобится IDE Arduino.

Затем вам понадобится драйвер SiLabs CP2104 и пакет платы ESP8266.

Это позволяет вашему компьютеру программировать ESP через встроенный UART и позволяет Arduino IDE программировать ESP.

Вы можете найти всю информацию о IDE, драйвере и пакете платы на этой странице веб-сайта Adafruit.

Вам также понадобится библиотека Arduino Midi, чтобы иметь возможность отправлять данные Midi. Без него можно обойтись, но так все становится намного проще.

Для связи с BME280 я использовал эту библиотеку BME280-I2C-ESP32. (Это для версии BME280 I2C)

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

Шаг 2: Шаг 2: Оборудование

Шаг 2: Оборудование
Шаг 2: Оборудование
Шаг 2: Оборудование
Шаг 2: Оборудование
Шаг 2: Оборудование
Шаг 2: Оборудование

Итак, мы наконец-то перешли к хорошему - оборудованию.

Как уже упоминалось, я использовал Adafruit ESP, но он должен нормально работать с NodeMCU. Я рекомендую версию V2, так как считаю, что она намного лучше подходит для макета, и вы можете получить их очень дешево на eBay или AliExpress. Мне нравится тот факт, что Adafruit ESP имеет более быстрый процессор, поставляется с гнездовым разъемом JST для LiPo и схемой зарядки. Также немного легче определить, какой пин вы используете. Я считаю, что на NodeMCU пин с пометкой D1 на самом деле является, например, GPIO5, поэтому вам всегда нужна диаграмма контактов. Совсем не большая проблема, но просто удобно для новичков, они так четко обозначили Adafruit.

Для начала подключим BME280, потому что в этой модели есть несколько вариаций. Как вы можете видеть на фотографиях, в шахте одна большая дыра, но есть и две дырочки. Вы можете видеть, что у него 4 входа и выхода, 1 для питания, один для земли, а также SCL и SDA. Это означает, что он общается через I2C. Я считаю, что другие модели общаются через SPI. А в некоторых можно выбрать SPI или I2C. Для SPI может потребоваться другая библиотека или, по крайней мере, другой код и другая проводка. Я также считаю, что S в SPI означает Serial, и я не могу сказать, будет ли это мешать работе Midi-части этого проекта, поскольку она также работает через последовательное соединение.

Подключить этот BME довольно просто. На ESP8266 вы можете видеть, что контакты 4 и 5 помечены как SDA и SCL соответственно. Просто подключите эти контакты непосредственно к контактам SDA и SCL на BME. Конечно, также подключите VIN к положительной шине макетной платы и GND к отрицательной шине. Они, в свою очередь, подключены к контактам 3V3 и GND ESP.

Далее мы подключим LDR. В примере с Fritzing вы можете увидеть, как через резистор проходит 3,3 вольта, затем он разделяется на LDR и еще один резистор. Затем, после LDR, он снова разделяется на резистор и АЦП.

Это сделано для того, чтобы защитить ESP от слишком высокого напряжения и убедиться, что он получает читаемые значения. АЦП может работать с напряжением 0–1 В, а 3V3 выдает 3,3 В. Вероятно, он ничего не взорвет, если вы поднимете напряжение выше 1 вольт, но он не будет работать хорошо.

Итак, сначала мы используем делитель напряжения с резисторами 220 и 100 Ом, чтобы снизить напряжение с 3,3 до 1,031 вольт. Затем LDR на 25 кОм и резистор на 1 кОм образуют еще один делитель напряжения, который понижает напряжение от 1,031 до 0 вольт в зависимости от количества света, которое получает LDR.

Затем у нас есть датчик дождя. В одной части написано FC-37, в другой - HW-103. Я только что купил первый, который нашел на Ebay, в котором говорилось, что он может выдерживать 3,3 и 5 вольт. (Я думаю, что все могут).

Это довольно просто, мы могли бы использовать аналоговый выход, но мы можем просто повернуть крошечный Trimpot, чтобы датчик был настолько чувствительным, насколько мы хотим (и мы уже использовали один аналоговый вывод на ESP). Как и в случае с другими датчиками, мы должны подавать питание на положительную шину и подключать ее к заземляющей шине. Однако иногда порядок контактов меняется. У меня это VCC, Ground, Digital, Analog, но на картинке Fritzing все по-другому. Но если вы просто обратите внимание, это должно быть легко исправить.

И, наконец, Midi Jack. На моей макетной плате он не может сидеть на краю макета, так как не все контакты совпадают. Если вас это беспокоит, я бы попытался купить макетную плату в обычном магазине. Или очень хорошо изучите картинки.

Как вы можете видеть на схеме, положительное напряжение и последовательный сигнал проходят через резистор 47 Ом.

Если вы делаете этот проект, например, с Arduino Uno, обязательно используйте резисторы 220 Ом !! Эти ESP работают с логикой 3,3 В, но большинство Arduino используют 5,0 В, поэтому вам нужно больше ограничивать ток, который проходит через кабель Midi.

И, наконец, подключите средний штифт к шине заземления. Остальные 2 контакта 5-контактного разъема Din не используются.

Шаг 3: Шаг 3: Код

И наконец у нас есть код!

В этом Zip файле я поместил 2 скетча. LightRainTemp просто проверяет все датчики и отправляет обратно их значения (обязательно откройте окно терминала!)

И, конечно же, у нас есть эскиз LRTGenerativeMidi (LRT означает «свет, дождь, температура»).

Внутри вы можете найти кучу комментариев к тому, что происходит. Я не собираюсь вдаваться в подробности того, как я все написал, это заняло бы часы. Если вы хотите знать, с чего начать, у меня есть несколько других проектов. Небольшой генератор Random Riff с несколькими кнопками и секвенсор с множеством функций, которые я не могу найти на других моделях.

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

Шаг 4: Шаг 4: Подключите и проверьте

А теперь пора его протестировать!

Просто подключите кабель Midi, убедитесь, что ваш синтезатор / клавиатура настроен на реагирование на канал 1, или измените канал в коде Arduino и посмотрите, работает ли он!

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

Мне также любопытно посмотреть, хорошо ли он работает со всеми синтезаторами. На моем Volca Bass он работает отлично, но на моем Neutron LFO застревает, как только я отправляю Midi Note. При перезагрузке нормально, но странно. Я не уверен, есть ли что-то в Midi Library или в моем коде, я могу попытаться сделать это без библиотеки в ближайшее время и посмотреть, станет ли что-то лучше.

Спасибо за чтение и просмотр и удачи !!

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