Оглавление:

Walabot FX - Управление гитарным эффектом: 28 шагов (с изображениями)
Walabot FX - Управление гитарным эффектом: 28 шагов (с изображениями)

Видео: Walabot FX - Управление гитарным эффектом: 28 шагов (с изображениями)

Видео: Walabot FX - Управление гитарным эффектом: 28 шагов (с изображениями)
Видео: Walabot FX- Guitar Effect Control. Full Demo 2024, Июль
Anonim
Walabot FX - Контроль гитарных эффектов
Walabot FX - Контроль гитарных эффектов

Управляйте своим любимым гитарным эффектом, используя только потрясающие позы гитары!

Шаг 1. Вещи, которые вам понадобятся

Компоненты оборудования

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3, модель B

Sunfounder LCD1602

SunFounder PCA9685 16-канальный 12-битный сервопривод PWM для Arduino и Raspberry Pi

Сервопривод (общий) Нет ссылки

Зажим для батареи 9 В

Держатель батареи 4xAA

Батарейки AA

Провода перемычки (общие)

Педальный переключатель DPDT с фиксацией

Korg SDD3000-PDL

Программные ОС, приложения и онлайн-сервисы

Autodesk Fusion360 -

Блинк -

Инструменты и т. Д

3д принтер

Паяльник

Шаг 2: абстракция

Getting Started
Getting Started

Каково было бы управлять музыкальным выражением, используя только положение вашей гитары в трехмерном пространстве? Что ж, давайте что-нибудь прототипируем и узнаем!

Шаг 3: основная идея

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

  • Датчик, который видит трехмерное пространство
  • Сервоприводы, чтобы повернуть ручки
  • ЖК-дисплей
  • Драйвер сервопривода I2C
  • Raspberry Pi
  • Чтобы изучить Python

Шаг 4: Валабот

Хотите видеть сквозь стены? Смысл объектов в трехмерном пространстве? Смысл, если дышишь через всю комнату? Что ж, тебе повезло!

Walabot - это совершенно новый способ измерения пространства вокруг вас с помощью радара малой мощности.

Это должно было стать ключевым в этом проекте, я смогу взять картографические (X-Y-Z) координаты объектов в трехмерном пространстве и сопоставить их с положениями сервопривода, изменяя звучание гитарного эффекта в реальном времени, не касаясь педали.

Победить.

Более подробную информацию о Walabot можно найти здесь

Шаг 5: начало работы

Перво-наперво, вам понадобится компьютер для управления Walabot, для этого проекта я использую Raspberry Pi 3 (здесь упоминается в RPi) из-за встроенного Wi-Fi и общей дополнительной мощности.

Я купил SD-карту на 16 ГБ с предустановленной NOOBS, чтобы все было красиво и просто, и решил установить Raspian в качестве моей ОС Linux.

(если вы не знакомы с тем, как установить Raspian, пожалуйста, найдите время, чтобы немного прочитать это)

Хорошо, как только у вас будет запущен Raspian на вашем RPi, есть несколько шагов по настройке, которые необходимо предпринять, чтобы подготовить все к нашему проекту.

Шаг 6: Настройка Raspberry Pi - 1

Сначала убедитесь, что у вас установлена последняя версия ядра, и проверьте наличие обновлений, открыв командную оболочку и набрав

sudo apt-get update

sudo apt-get dist-upgrade

(sudo добавлен, чтобы гарантировать, что у вас есть административные привилегии, например, все будет работать)

Это может занять некоторое время, так что пойдите и выпейте чашечку чая.

Шаг 7: Настройка Raspberry Pi - 2

Вам необходимо установить Walabot SDK для RPi. В веб-браузере RPi перейдите по адресу https://www.walabot.com/gettingstarted и загрузите установочный пакет Raspberry Pi.

Из командной оболочки:

cd загрузки

sudo dpkg -I walabotSDK_RasbPi.deb

Шаг 8: Настройка Raspberry Pi - 3

Нам нужно начать настройку RPi для использования шины i2c. Из командной оболочки:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

как только это будет сделано, вы должны добавить следующее в файл модулей

Из командной оболочки:

Судо нано / и т.д. / модули

добавьте эти 2 строки в отдельные строки:

i2c-dev

i2c-bcm2708

Шаг 9: Настройка Raspberry Pi - 4

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

Из командной оболочки:

судо нано /boot/config.txt

добавьте следующие строки в конец файла:

safe_mode_gpio = 4

max_usb_current = 1

RPi - отличный инструмент для производителей, но его возможности для отправки в Walabot ограничены. Поэтому мы добавляем максимальный ток 1 А, а не более стандартные 500 мА.

Шаг 10: Python

Почему Python? ну, так как его очень легко кодировать, быстро запускать и есть множество хороших примеров Python! Я никогда не использовал его раньше, и вскоре он заработал. Теперь RPi настроен для того, что мы хотим, следующим шагом будет настройка Python для доступа к Walabot API, интерфейсам LCD Servo.

Шаг 11: Для Валабота

Из командной оболочки

Sudo pip install «/usr/share/walabot/python/WalabotAPI-1.0.21.zip»

Шаг 12: для сервоинтерфейса

Из командной оболочки

sudo apt-get install git build-essential python-dev

cd ~

git clone

компакт-диск Adafruit_Python_PCA9685

sudo python setup.py установить

Зачем нужен сервопривод? Что ж, у RPi есть пара причин.

1. Ток, потребляемый сервоприводом, может быть очень высоким, и это число тем больше, чем больше у вас сервоприводов (конечно). Если вы управляете сервоприводом напрямую от RPi, вы рискуете взорвать его блок питания.

2. Синхронизация ШИМ (широтно-импульсной модуляции), которая управляет положением сервоприводов, очень важна. Поскольку RPi не использует ОС реального времени (могут быть прерывания и тому подобное), тайминги неточны и могут вызвать нервные подергивания сервоприводов. Специальный драйвер обеспечивает точное управление, но также позволяет добавить до 16 сервоприводов, так что это отлично подходит для расширения.

Шаг 13: для ЖК-дисплея

Блинк
Блинк

откройте свой веб-браузер RPi

www.sunfounder.com/learn/category/sensor-k…

скачать

github.com/daveyclk/SunFounder_SensorKit_…

Из командной оболочки:

судо mkdir / usr / share / sunfounder

Используя графический проводник, скопируйте папку python из zip-файла в новую папку sunfounder.

ЖК-дисплей используется для подсказки пользователю, что именно происходит. Отображение процесса настройки до значений x, y и z, отображаемых на каждом сервоприводе

Шаг 14: Блинк

Блинк
Блинк
Блинк
Блинк

Blynk - это великолепный IoT-сервис, который позволяет вам создавать собственные приложения для управления вашими вещами. Это показалось мне идеальным решением - дать мне дистанционное управление валаботом, чтобы по-настоящему набрать настройки…

Одна проблема. Blynk в настоящее время не поддерживается на платформе Python, буггер. Но не бойтесь! Мне удалось найти небольшую приятную работу, которая позволяет удаленное управление и удаленный ввод параметров! это немного взломано

Первый шаг - загрузить приложение Blynk из вашего любимого магазина приложений.

Во-вторых, зарегистрируйте аккаунт

Как только это будет сделано, откройте приложение и начните новый проект, выбрав Raspberry Pi 3 в качестве оборудования.

Приложение выделит вам токен доступа (он понадобится вам для ввода кода).

Как только вы это сделаете. вам нужно будет настроить приложение, как показано на изображениях. Вот как он будет взаимодействовать с walabot.

Шаг 15: Настройка приложения Blynk

Настройка приложения Blynk
Настройка приложения Blynk
Настройка приложения Blynk
Настройка приложения Blynk
Настройка приложения Blynk
Настройка приложения Blynk

Шаг 16. Вы можете использовать этот QR-код с приложением Blynk, чтобы клонировать мой проект, чтобы сэкономить время

Вы можете использовать этот QR-код с приложением Blynk для клонирования моего проекта, чтобы сэкономить ваше время
Вы можете использовать этот QR-код с приложением Blynk для клонирования моего проекта, чтобы сэкономить ваше время

Хорошо. Теперь, когда приложение настроено, мы можем настроить Python и RPi для взаимодействия с ним через Интернет. Магия

Шаг 17: Запуск Blynk с Raspberry Pi и использование Blynk HTTPS для Python

Во-первых, вам необходимо установить оболочку Blynk HTTPS для Python.

Из командной оболочки:

sudo git clone

sudo pip установить blynkapi

Во-вторых, вам нужно установить Blynk Service на RPi

Из командной оболочки:

git clone

cd blynk-библиотека / Linux

очистить все

запустить службу blynk

sudo./blynk --token = YourAuthToken

Чтобы служба Blynk запускалась при запуске, вам необходимо изменить файл /etc/rc.local

при выполнении

sudo nano /etc/rc.local

добавить это в конце

./blynk-library/linux/blynk --token = мой токен &

(я включил копию моего файла /etc/rc.local в раздел кода для справки)

Чтобы проверить, что он работает, просто введите

sudo /etc/rc.local start

Служба Blynk теперь должна работать

Шаг 18: автоматический запуск скрипта

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

Есть несколько вещей, которые нужно сделать

Создайте новый файл сценария для запуска программы Python

sudo nano guitareffect.sh

добавить эти строки

#! / bin / sh

python /home/pi/GuitarEffectCLI.py

не забудьте сохранить это

Затем нам нужно дать скрипту разрешение на запуск, набрав

Sudo chmod + x /home/pi/guitareffect.sh

И, наконец, нам нужно добавить этот скрипт в файл /etc/rc.local, с которым мы возились ранее.

Судо нано /etc/rc.local

Добавлять

/home/pi/guitareffect.sh &

не забудьте включить "&", это позволит скрипту Python работать в фоновом режиме.

Верно! Это все, что нужно для конфигурации и программного обеспечения, в следующий раз пора подключить оборудование.

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

Image
Image
Walabot guitar effects control proto1
Walabot guitar effects control proto1

Первый прототип макета

Шаг 20: Дизайн корпуса

Дизайн корпуса
Дизайн корпуса
Дизайн корпуса
Дизайн корпуса

Корпус был спроектирован и визуализирован на великолепном Fusion360.

Шаг 21: уколы кишок

Кишки выстрелы
Кишки выстрелы
Кишки выстрелы
Кишки выстрелы
Кишки выстрелы
Кишки выстрелы

Шаг 22: Окончательные сборочные снимки

Окончательные сборочные кадры
Окончательные сборочные кадры
Окончательная сборка
Окончательная сборка
Окончательная сборка
Окончательная сборка

Шаг 23: закрепить Walabot на подставке

Чтобы закрепить Walabot на подставке
Чтобы закрепить Walabot на подставке

Используйте самоклеющийся металлический диск, который идет в комплекте с walabot, чтобы закрепить его на месте.

Шаг 24: Аппаратные файлы STL для 3D-печати

Шаг 25: Схема подключения устройства

Шаг 26: Код

Используйте прилагаемый скрипт Python для своего проекта

from _future_ import print_functionfrom sys import platform from os import system from blynkapi import Blynk import WalabotAPI import time import RPi. GPIO as GPIO

# настроить GPIO с помощью нумерации плат

GPIO.setmode (GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)

#blynk auth token

auth_token = "your_auth_token_here"

# Импортируйте модуль PCA9685 для сервоуправления.

импорт Adafruit_PCA9685

# импорт ЖК-модуля из местоположения

из imp import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')

# Инициализировать PCA9685, используя адрес по умолчанию (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk объектов

defaults = Blynk (auth_token, pin = "V9") start_button = Blynk (auth_token, pin = "V3") Rmax = Blynk (auth_token, pin = "V0") Rmin = Blynk (auth_token, pin = "V1") Rres = Блинк (auth_token, pin = "V2")

ThetaMax = Blynk (auth_token, pin = "V4")

ThetaRes = Blynk (auth_token, pin = "V5")

PhiMax = Blynk (auth_token, pin = "V6")

PhiRes = Blynk (auth_token, pin = "V7")

Порог = Blynk (auth_token, pin = "V8")

ServoMin = Blynk (auth_token, pin = "V10")

ServoMax = Blynk (auth_token, pin = "V11")

def LCDsetup ():

LCD1602.init (0x27, 1) # init (адрес ведомого, фоновая подсветка)

def numMap (x, in_min, in_max, out_min, out_max): "" "используется для сопоставления показаний Walabot с положением сервопривода" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# используйте это для округления необработанных данных до назначенного значения

def myRound (x, base = 2): вернуть int (base * round (float (x) / base))

# извлекает число из возвращенной строки blynk

def numberExtract (val): val = str (val) return int (filter (str.isdigit, val))

# Установите частоту 60 Гц, подходит для сервоприводов.

pwm.set_pwm_freq (60)

# Настроить минимальную и максимальную длительность сервоимпульсов по умолчанию

SERVO_MIN = 175 # Мин. Длина импульса из 4096 SERVO_MAX = 575 # Макс. Длина импульса из 4096

# значения по умолчанию для walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

ПОРОГ = 1

# переменные для переключения blynk

on = "[u'1 ']"

класс Walabot:

def _init _ (сам):

self.wlbt = WalabotAPI self.wlbt. Init () self.wlbt. SetSettingsFolder () self.isConnected = False self.isTargets = False

def blynkConfig (сам):

load_defaults = defaults.get_val () if str (load_defaults) == on: SERVO_MAX = ServoMax.get_val () SERVO_MAX = numberExtract (SERVO_MAX) print ("Servo Max =", SERVO_MAX)

SERVO_MIN = ServoMin.get_val ()

SERVO_MIN = numberExtract (SERVO_MIN) print ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = numberExtract (R_MAX) print ("R max =", R_MAX)

R_MIN = Rmin.get_val ()

R_MIN = numberExtract (R_MIN) print ("R Min =", R_MIN)

R_RES = Rres.get_val ()

R_RES = numberExtract (R_RES) print ("R Res =", R_RES)

THETA_MAX = ThetaMax.get_val ()

THETA_MAX = numberExtract (THETA_MAX) print ("Theta Max =", THETA_MAX) THETA_RES = ThetaRes.get_val () THETA_RES = numberExtract (THETA_RES) print ("Theta Res =", THETA_RES)

PHI_MAX = PhiMax.get_val ()

PHI_MAX = numberExtract (PHI_MAX) print ("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val () PHI_RES = numberExtract (PHI_RES) print ("Phi Res =", PHI_RES)

ПОРОГ = Порог.get_val ()

ПОРОГ = numberExtract (THRESHOLD) print ("Threshold =", THRESHOLD)

else: # если ничего из приложения blynk, загрузить значения по умолчанию SERVO_MIN = 175 # Минимальная длина импульса из 4096 SERVO_MAX = 575 # Максимальная длина импульса из 4096

# значения по умолчанию для walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

ПОРОГ = 1

def connect (self): try: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_MTI) self.wlbt. SetProfile (self.wlbt. FILTER_TYPE_NONE) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RES, PHIRENA_MAX) self.wlbtESX) self.wlbtESX. SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD), кроме self.wlbt. WalabotError как err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' поднять ошибку

def start (self):

self.wlbt. Start ()

def калибровка (самостоятельно):

self.wlbt. StartCalibration ()

def get_targets (сам):

self.wlbt. Trigger () return self.wlbt. GetSensorTargets ()

def stop (self):

self.wlbt. Stop ()

def отключить (самостоятельно):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () while flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Press Start to') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # проверьте нажатие кнопки запуска blynk if (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, «ОК! Давай сделаем это»)

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear (), если не wlbt.isConnected: LCD1602.write (0, 0, 'Not Connected') else: LCD1602.write (0, 0, 'Connected') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating…..') time.sleep (3)) LCD1602.write (0, 0, 'Запуск Walabot')

appcheck = start_button.app_status () flag = True # сбросить флаг для основной программы

флаг while: # используется для перевода в режим ожидания (эффективно)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): # проверить флаг педального переключателя = False else: check = start_button.get_val () # проверить наличие нажмите кнопку запуска appcheck = start_button.app_status ()

еще:

if (GPIO.input (18)! = 0): # проверить флаг педального переключателя = False

xval = 0

yval = 0 zval = 0 среднее значение = 2 delayTime = 0

target = wlbt.get_targets ()

если len (цели)> 0:

для j в диапазоне (в среднем):

target = wlbt.get_targets ()

если len (цели)> 0: print (len (цели)) цели = цели [0]

печать (стр (targets.xPosCm))

xval + = int (targets.xPosCm) yval + = int (targets.yPosCm) zval + = int (targets.zPosCm) time.sleep (delayTime) else: print ("нет целей") xval = xval / average

xval = numMap (xval, -60, 60, SERVO_MIN, SERVO_MAX)

xval = myRound (xval), если xval SERVO_MAX: xval = SERVO_MAX LCD1602.write (0, 0, 'x =' + str (xval) + '') pwm.set_pwm (0, 0, xval)

yval = yval / среднее

yval = numMap (yval, -60, 60, SERVO_MIN, SERVO_MAX)

yval = myRound (yval), если yval SERVO_MAX: yval = SERVO_MAX LCD1602.write (0, 1, 'y =' + str (yval)) pwm.set_pwm (1, 0, yval)

zval = zval / среднее

zval = numMap (zval, R_MIN, R_MAX, SERVO_MIN, SERVO_MAX)

zval = myRound (zval), если zval SERVO_MAX: zval = SERVO_MAX LCD1602.write (8, 1, 'z =' + str (zval)) pwm.set_pwm (2, 0, zval)

еще:

print («нет целей») LCD1602.write (0, 0, «Завершение работы») LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

если _name_ == '_main_':

в то время как True: main ()

для guitareffect.sh

#! / bin / sh

cd / home / pi

sudo python GuitarEffectCLI.py

Копия локального файла RC для справки

#! / bin / sh -e # # rc.local # # Этот сценарий выполняется в конце каждого многопользовательского уровня выполнения. # Убедитесь, что сценарий "выйдет из 0" в случае успеха или # любое другое значение в случае ошибки. # # Чтобы включить или отключить этот скрипт, просто измените бит выполнения #. # # По умолчанию этот скрипт ничего не делает.

# Распечатать IP-адрес

_IP = $ (имя хоста -I) || истина, если ["$ _IP"]; затем printf "Мой IP-адрес% s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "сюда идет ваш токен" &

спать 10 sudo /home/pi/guitareffect.sh и выйти 0

Шаг 27: использование репозиториев Github

Используйте это для ЖК-дисплея Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

Используйте это для сервопривода

github.com/daveyclk/Adafruit_Python_PCA968…

Используйте это для оболочки Blynk Python

github.com/daveyclk/blynkapi

Шаг 28: Заключение

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Заключение
Заключение
Заключение
Заключение

Что ж, это была крутая кривая обучения, но она того стоила.

Мои выводы

  • Мне пришлось выучить Python … оказывается, это туз
  • Подключил Python на Raspberry Pi к службе Blynk IoT. Это официально не поддерживается, поэтому его функции имеют некоторые ограничения. Тем не менее, все еще отлично работает!
  • Оказывается, Walabot отлично подходит для музыкального самовыражения. Я использовал его на Korg SDD3000, но вы можете использовать любой эффект, который вам нравится.

Попробуй сам. Это не ограничивается гитарными эффектами, я могу использоваться с любым инструментом с любым эффектом.

Конкурс Raspberry Pi 2017
Конкурс Raspberry Pi 2017
Конкурс Raspberry Pi 2017
Конкурс Raspberry Pi 2017

Финалист Raspberry Pi Contest 2017

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