Съдържание:

Walabot FX - Управление на китарен ефект: 28 стъпки (със снимки)
Walabot FX - Управление на китарен ефект: 28 стъпки (със снимки)

Видео: Walabot FX - Управление на китарен ефект: 28 стъпки (със снимки)

Видео: Walabot FX - Управление на китарен ефект: 28 стъпки (със снимки)
Видео: ALL BOSS KATANA MODULATIONS AND FX effects (review of all modulation guitar pedals) 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

Серво (родово) Няма връзка

9V щипка за батерия

4xAA държач на батерията

AA батерии

Кабелни проводници (родови)

Крачен превключвател за действие за затваряне на DPDT

Korg SDD3000-PDL

Софтуерни операционни системи, приложения и онлайн услуги

Autodesk Fusion360 -

Blynk -

Инструменти и др

3D принтер

Поялник

Стъпка 2: Резюме

Getting Started
Getting Started

Какво би било да контролираш музикалния израз, използвайки само позицията на китарата си в 3D пространството? Е, нека да направим прототип на нещо и да разберем!

Стъпка 3: Основната идея

Исках да мога да контролирам параметъра на 3 ефекта в реално време, исках да направя това, използвайки начина, по който позиционирах китарата си. Така че едно нещо беше ясно, щях да се нуждая от няколко неща.

  • Сензор, който може да вижда 3D пространство
  • Сервомоторите за завъртане на копчетата
  • LCD дисплей
  • I2C Servo драйвер
  • Малина Пи
  • За да научите Python

Стъпка 4: Walabot

Искате ли да видите през стените? Чувствате обекти в 3D пространство? Чувствате ли се, че дишате от другата страна на стаята? Е, имате късмет!

Walabot е изцяло нов начин за усещане на пространството около вас с помощта на радар с ниска мощност.

Това щяло да бъде ключово за този проект, щях да мога да взема картотезановите (X-Y-Z) координати на обекти в 3D пространството и да ги картографирам към серво позиции, променящи звука на китарния ефект, в реално време, без да докосвам педала.

Печеля.

Повече информация за Walabot можете да намерите тук

Стъпка 5: Първи стъпки

Първо на първо място, ще ви е необходим компютър, за да управлявате Walabot, за този проект използвам Raspberry Pi 3 (тук по -нататък в RPi) поради вградения WiFi и общия допълнителен oomph

Купих 16GB SD карта с предварително инсталирани NOOBS, за да поддържам нещата хубави и прости, и избрах да инсталирам Raspian като моя Linux OS по избор

(ако не сте запознати с това как да инсталирате 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 инсталирайте i2c-tools

след като това стане, трябва да добавите следното към файла с модули

От командната обвивка:

sudo nano /etc /модули

добавете тези 2 низа на отделни редове:

i2c-dev

i2c-bcm2708

Стъпка 9: Настройка на Raspberry Pi - 4

Walabot черпи доста ток и ние също ще използваме GPIO за контрол на нещата, така че трябва да ги настроим

От командната обвивка:

sudo nano /boot/config.txt

добавете следните редове в края на файла:

safe_mode_gpio = 4

max_usb_current = 1

RPi е отличен инструмент за производителите, но е ограничен в тока, който може да изпрати до Walabot. Ето защо добавяме максимален ток от 1Amp, а не по -стандартните 500mA

Стъпка 10: Python

Защо Python? Е, тъй като е много лесно да се кодира, бързо да се стартира и има много добри примери за python! никога не съм го използвал преди и скоро започна да работи за нула време. Сега RPi е конфигуриран за това, което искаме, следващата стъпка е да конфигурирате Python да има достъп до API на Walabot, LCD Servo интерфейси

Стъпка 11: За Walabot

От командната обвивка

Sudo pip инсталирайте „/usr/share/walabot/python/WalabotAPI-1.0.21.zip“

Стъпка 12: За серво интерфейса

От командната обвивка

sudo apt-get install git build-съществен python-dev

cd ~

git clone

cd Adafruit_Python_PCA9685

sudo python setup.py install

Защо трябва да използваме серво драйвер? Е, за RPi няколко причини.

1. Токът, извлечен от серво, може да бъде много голям и този брой става по -голям, колкото повече сервоустройства имате (разбира се). Ако управлявате серво директно от RPi, рискувате да издухате захранването му

2. Времената на PWM (Pulse Width Modulation), които контролират позицията на сервомоторите, са много важни. Тъй като RPi не използва операционна система в реално време (може да има прекъсвания и други такива), времето не е точно и може да накара сервоприводите да се потрепват нервно. Специален драйвер позволява точен контрол, но също така позволява добавяне на до 16 серво, така че това е чудесно за разширяване.

Стъпка 13: За LCD

Блинк
Блинк

отворете вашия уеб браузър RPi

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

Изтегли

github.com/daveyclk/SunFounder_SensorKit_…

От командната обвивка:

sudo mkdir/usr/share/sunfounder

С помощта на графичния изследовател копирайте папката python от zip файла във вашата нова папка sunfounder

LCD дисплеят се използва, за да подкани потребителя какво точно се случва. Показване на процеса на конфигуриране до стойностите x, y и z, картографирани на всяко серво

Стъпка 14: Blynk

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

Blynk е брилянтна IoT услуга, която ви позволява да създадете персонализирано приложение за контрол на вашите неща. Изглеждаше като идеалното решение да ми дадете дистанционно управление на walabot, за да набера наистина настройките …

Един проблем. Blynk в момента не се поддържа на платформата Python, bugger. Но не се страхувайте! успях да намеря хубава малка работа, която позволява дистанционно управление и дистанционно въвеждане на параметри! малко е хакерско

първата стъпка е да изтеглите приложението Blynk от любимия си магазин за приложения

Второ, регистрирайте се за акаунт

След като това стане, отворете приложението и започнете нов проект, като изберете Raspberry Pi 3 като хардуер.

Приложението ще ви разпредели маркер за достъп (това ще ви е необходимо, за да поставите кода си)

След като сте направили това. ще трябва да настроите приложението, както е показано на изображенията. Ето как той ще взаимодейства с walabot.

Стъпка 15: Конфигуриране на приложението Blynk

Конфигуриране на приложението Blynk
Конфигуриране на приложението Blynk
Конфигуриране на приложението Blynk
Конфигуриране на приложението Blynk
Конфигуриране на приложението Blynk
Конфигуриране на приложението Blynk

Стъпка 16: Можете да използвате този QR код с приложението Blynk, за да клонирате моя проект, за да ви спести време

Можете да използвате този QR код с приложението Blynk, за да клонирате моя проект, за да ви спести време
Можете да използвате този QR код с приложението Blynk, за да клонирате моя проект, за да ви спести време

OK Сега, когато приложението е настроено, можем да конфигурираме 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-library/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 старт

Услугата 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, с който се занимавахме по -рано.

Sudo nano /etc/rc.local

Добавяне

/home/pi/guitareffect.sh &

не забравяйте да включите „&“, което позволява на Python Script да работи във фонов режим

Точно така! Това е цялата конфигурация и софтуер, подредени, следващият момент е да свържете хардуера

Стъпка 19: Хардуерът

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

Първи прототип на Breadboard

Стъпка 20: Дизайн на корпуса

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

Корпусът е проектиран и изобразен в страхотния Fusion360

Стъпка 21: Изстрели на червата

Кишки Изстрели
Кишки Изстрели
Кишки Изстрели
Кишки Изстрели
Кишки Изстрели
Кишки Изстрели

Стъпка 22: Последни монтажни снимки

Последни монтажни кадри
Последни монтажни кадри
Последни монтажни кадри
Последни монтажни кадри
Последни монтажни кадри
Последни монтажни кадри

Стъпка 23: За да фиксирате Walabot към стойката

За фиксиране на Walabot към стойката
За фиксиране на Walabot към стойката

Използвайте самозалепващия се метален диск, който се доставя с walabot, за да го фиксирате на място

Стъпка 24: Хардуерни STL файлове за 3D печат

Стъпка 25: Схеми за свързване на нещата

Стъпка 26: Код

Използвайте прикачения скрипт на Python за вашия проект

от _future_ импортиране print_function от sys платформа за импортиране от os система за импортиране от blynkapi внос Blynk внос WalabotAPI време за импортиране импортиране RPi. GPIO като GPIO

#настройте GPIO с номерация на борда

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

#blynk маркер за удостоверяване

auth_token = "your_auth_token_here"

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

внос Adafruit_PCA9685

#import LCD модул от местоположението

от imp import import_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')

# Инициализирайте PCA9685, като използвате адреса по подразбиране (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk обекта

по подразбиране = 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 = Blynk (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")

Threshold = 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 към позицията на серво" "" връщане int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# използвайте това за закръгляване на необработените данни до зададената стойност

def myRound (x, base = 2): return int (base * round (float (x)/base))

#извлича номера от върнатия blynk низ

def numberExtract (val): val = str (val) връщане int (филтър (str.isdigit, val))

# Задайте честота на 60Hz, подходяща за серво.

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) печат ("Servo Max =", SERVO_MAX)

SERVO_MIN = ServoMin.get_val ()

SERVO_MIN = numberExtract (SERVO_MIN) печат ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = numberExtract (R_MAX) печат ("R max =", R_MAX)

R_MIN = Rmin.get_val ()

R_MIN = numberExtract (R_MIN) печат ("R Min =", R_MIN)

R_RES = Rres.get_val ()

R_RES = numberExtract (R_RES) печат ("R Res =", R_RES)

THETA_MAX = ThetaMax.get_val ()

THETA_MAX = numberExtract (THETA_MAX) печат ("Theta Max =", THETA_MAX) THETA_RES = ThetaRes.get_val () THETA_RES = numberExtract (THETA_RES) печат ("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)

THRESHOLD = Threshold.get_val ()

THRESHOLD = 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 = Истински self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYDYMyTyLM) (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RMAX) SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) с изключение на self.wlbt. WalabotError като грешка: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' повишаване на грешка

def start (самостоятелно):

self.wlbt. Start ()

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

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () връщане self.wlbt. GetSensorTargets ()

def stop (самостоятелно):

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, 'Натиснете Старт до') LCD1602.write (0, 1, 'start') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # проверете за натискане на стартовия бутон, ако (GPIO.input (18) == 0): #проверете флаг за крачен превключвател = невярно

LCD1602.write (0, 0, "OK! Нека го направим")

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 () флаг = Вярно # флаг за нулиране за основната програма

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

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

иначе:

if (GPIO.input (18)! = 0): #check флаг за крачен превключвател = False

xval = 0

yval = 0 zval = 0 средно = 2 delayTime = 0

цели = wlbt.get_targets ()

ако len (цели)> 0:

за j в обхвата (средно):

цели = wlbt.get_targets ()

ако len (цели)> 0: отпечатайте (len (цели)) цели = цели [0]

print (str (target.xPosCm))

xval += int (целеви.xPosCm) yval += int (целеви.yPosCm) zval += int (целеви.zPosCm) time.sleep (delayTime) else: print ("няма цели") xval = xval/средно

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 хранилища за използване

Използвайте това за LCD екрана на Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

Използвайте това за серво драйвера

github.com/daveyclk/Adafruit_Python_PCA968…

Използвайте това за Blynk Python HTTPS Wrapper

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 2017

Препоръчано: