Съдържание:
- Стъпка 1: Неща, от които ще се нуждаете
- Стъпка 2: Резюме
- Стъпка 3: Основната идея
- Стъпка 4: Walabot
- Стъпка 5: Първи стъпки
- Стъпка 6: Настройка на Raspberry Pi - 1
- Стъпка 7: Настройване на Raspberry Pi - 2
- Стъпка 8: Настройка на Raspberry Pi - 3
- Стъпка 9: Настройка на Raspberry Pi - 4
- Стъпка 10: Python
- Стъпка 11: За Walabot
- Стъпка 12: За серво интерфейса
- Стъпка 13: За LCD
- Стъпка 14: Blynk
- Стъпка 15: Конфигуриране на приложението Blynk
- Стъпка 16: Можете да използвате този QR код с приложението Blynk, за да клонирате моя проект, за да ви спести време
- Стъпка 17: Стартиране на Blynk с Raspberry Pi и използване на Blynk HTTPS за Python
- Стъпка 18: Автоматично стартиране на скрипта
- Стъпка 19: Хардуерът
- Стъпка 20: Дизайн на корпуса
- Стъпка 21: Изстрели на червата
- Стъпка 22: Последни монтажни снимки
- Стъпка 23: За да фиксирате Walabot към стойката
- Стъпка 24: Хардуерни STL файлове за 3D печат
- Стъпка 25: Схеми за свързване на нещата
- Стъпка 26: Код
- Стъпка 27: Github хранилища за използване
- Стъпка 28: Заключение
Видео: Walabot FX - Управление на китарен ефект: 28 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:56
Контролирайте любимия си ефект на китара, като използвате само страхотни пози на китара!
Стъпка 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: Резюме
Какво би било да контролираш музикалния израз, използвайки само позицията на китарата си в 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
Стъпка 16: Можете да използвате този 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: Хардуерът
Първи прототип на Breadboard
Стъпка 20: Дизайн на корпуса
Корпусът е проектиран и изобразен в страхотния Fusion360
Стъпка 21: Изстрели на червата
Стъпка 22: Последни монтажни снимки
Стъпка 23: За да фиксирате 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: Заключение
Е, това беше стръмна крива на обучение, но си заслужаваше.
Моите заведения са
- Трябваше да науча Python..оказа се, че е асо
- Свърза Python на Raspberry Pi с услугата Blynk IoT. Това не се поддържа официално, така че има някои ограничения за неговите функции. Все пак работи чудесно!
- Оказва се, че Walabot е чудесен за музикален израз. Използвах го на Korg SDD3000, но можете да използвате всеки ефект, който харесвате
Отидете сами. Това не се ограничава до китарни ефекти, мога да се използва с всеки инструмент с всякакъв ефект.
Вицешампион в конкурса Raspberry Pi 2017
Препоръчано:
Прототип на кюфтен китарен усилвател: 6 стъпки (със снимки)
Прототип на кюфтен китарен усилвател: Поздрави, общност за инструктори! Разработил съм много специален усилвател за китара и бих искал да споделя с вас как го построих. Преди да започнем, бих искал да споделя с вас всички материали, необходими за изграждането на този усилвател. Материал лист
Направи си сам китарен ефект: 8 стъпки
DIY Guitar Effect: Реших да създам ефект на електрическа китара. В интернет има много схеми, заедно с кратките видеоклипове, показващи как работят, така че ако някой иска да избере една - има от какво да избира. Реших да отида с " Кийл
Верига за преследване на LED ефект с хубав ефект, използваща BC547: 11 стъпки
Верига за преследване на светодиоди с хубав ефект с помощта на BC547: Здравей, приятелю, днес ще направя верига за преследване на светодиоди. Ефектът му е невероятен. Тази схема ще направя с помощта на транзистор BC547. Нека започнем
Анимирана Led лампа Dusty Wall Arduino със светлинен ефект: 11 стъпки (със снимки)
Анимирана Led лампа Dusty Wall Arduino със светлинен ефект: Току -що имах бебе и след като направих спалнята му, имах нужда от светлина на стена. Тъй като много обичам LED, реших да създам нещо. Харесвам и самолета като цяло, така че защо да не поставям самолет от карикатура на стената, тук, когато започва и как направих. Надявам се
OpenChord.org V0 - Създайте истински китарен китарен герой/контролер на рок група: 10 стъпки
OpenChord.org V0 - Създайте истински китарен китарен герой/контролер на рок група: Всички обичаме Guitar Hero и Rock Band. Знаем също, че никога няма да се научим как всъщност да свирим на китара, играейки тези игри. Но какво ще стане, ако поне можем да изградим контролер Guitar Hero, който да ни позволи да използваме истинска китара? Това сме ние в OpenChord