Obsah:

Walabot FX - Ovládanie gitarových efektov: 28 krokov (s obrázkami)
Walabot FX - Ovládanie gitarových efektov: 28 krokov (s obrázkami)

Video: Walabot FX - Ovládanie gitarových efektov: 28 krokov (s obrázkami)

Video: Walabot FX - Ovládanie gitarových efektov: 28 krokov (s obrázkami)
Video: Учебники | MiniFuse 2 – Обзор 2024, Júl
Anonim
Walabot FX - Ovládanie gitarových efektov
Walabot FX - Ovládanie gitarových efektov

Ovládajte svoj obľúbený gitarový efekt iba pomocou úžasných gitarových póz!

Krok 1: Veci, ktoré budete potrebovať

Hardvérové komponenty

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanálový 12-bitový servopohon PWM pre Arduino a Raspberry Pi

Servo (všeobecné) Žiadny odkaz

Klip na 9V batériu

Držiak batérie 4xAA

Batérie AA

Prepojovacie káble (všeobecné)

Nožný spínač západky DPDT

Korg SDD3000-PDL

Softvérové operačné systémy, aplikácie a online služby

Autodesk Fusion360 -

Blynk -

Nástroje atď

3D tlačiareň

Spájkovačka

Krok 2: Abstrakt

Getting Started
Getting Started

Aké by to bolo ovládať hudobný prejav pomocou iba polohy vašej gitary v 3D priestore? Poďme teda niečo napísať a zistiť!

Krok 3: Základná myšlienka

Chcel som mať možnosť ovládať 3 efektové parametre v reálnom čase, chcel som to urobiť pomocou umiestnenia gitary. Jedna vec bola teda jasná, budem potrebovať niekoľko vecí.

  • Senzor, ktorý je schopný vidieť 3D priestor
  • Servá na otáčanie gombíkov
  • LCD displej
  • Ovládač serva I2C
  • Malinový Pi
  • Naučiť sa Python

Krok 4: Walabot

Chcete vidieť cez steny? Cítite objekty v 3D priestore? Máte pocit, že dýchate z celej miestnosti? Tak to máte šťastie!

Walabot je úplne nový spôsob snímania priestoru okolo vás pomocou radaru s nízkym výkonom.

Toto bude pre tento projekt kľúčové, bol by som schopný prevziať kodexy predmetov v X-Y-Z (3D) v 3D priestore a mapovať ich na polohy serva a meniť tak, ako znie gitarový efekt, v reálnom čase, bez toho, aby ste sa museli dotknúť pedála.

Vyhrať.

Viac informácií o Walabotovi nájdete tu

Krok 5: Začíname

Najprv však budete potrebovať počítač na riadenie Walabota, pretože na tento projekt používam Raspberry Pi 3 (tu sa odkazuje na RPi) kvôli vstavanej WiFi a všeobecnému extra oomph

Kúpil som si 16 GB kartu SD s predinštalovaným NOOBS, aby boli veci pekné a jednoduché, a rozhodol som sa nainštalovať Raspian ako svoj zvolený operačný systém Linux.

(Ak neviete, ako nainštalovať Raspian, nájdite si chvíľu na prečítanie.)

Dobre, akonáhle spustíte Raspian na vašom RPi, urobíte niekoľko konfiguračných krokov, aby ste pripravili veci pre náš projekt

Krok 6: Nastavenie Raspberry Pi - 1

Najprv sa uistite, že používate najnovšiu verziu jadra, a skontrolujte dostupnosť aktualizácií otvorením príkazového plášťa a zadaním textu

sudo apt-get aktualizácia

sudo apt-get dist-upgrade

(sudo je pridané, aby sa zabezpečilo, že máte administrátorské oprávnenia, napr. veci budú fungovať)

Dokončenie môže chvíľu trvať, preto si dajte šálku čaju.

Krok 7: Nastavenie Raspberry Pi - 2

Musíte si nainštalovať Walabot SDK pre RPi. Z webového prehliadača RPi prejdite na stránku https://www.walabot.com/gettingstarted a stiahnite si inštalačný balík Raspberry Pi.

Z príkazového shellu:

sťahovanie CD

sudo dpkg -I walabotSDK_RasbPi.deb

Krok 8: Nastavenie Raspberry Pi - 3

Musíme začať konfigurovať RPi, aby používal zbernicu i2c. Z príkazového shellu:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

akonáhle to urobíte, musíte do súboru modulov pridať nasledujúce

Z príkazového shellu:

sudo nano /etc /modules

pridajte tieto 2 reťazce na samostatné riadky:

i2c-dev

i2c-bcm2708

Krok 9: Nastavenie Raspberry Pi - 4

Walabot čerpá značnú časť prúdu a budeme tiež používať GPIO na ovládanie vecí, takže ich musíme nastaviť.

Z príkazového shellu:

sudo nano /boot/config.txt

na koniec súboru pridajte nasledujúce riadky:

safe_mode_gpio = 4

max_usb_current = 1

RPi je vynikajúci nástroj pre tvorcov, ale má obmedzený prúd, ktorý je možné odoslať Walabotovi. Preto pridávame max. Prúd 1Amp namiesto štandardnejších 500mA

Krok 10: Python

Prečo Python? Pretože je kódovanie veľmi jednoduché, rýchle spustenie a je k dispozícii množstvo dobrých príkladov pythonu! Nikdy predtým som to nepoužil a čoskoro som bol v prevádzke. Teraz je RPi nakonfigurovaný na to, čo chceme, ďalším krokom je konfigurácia Pythonu tak, aby mal prístup k rozhraniam Walabot API a LCD Servo.

Krok 11: Pre Walabot

Z príkazového shellu

Sudo pip install „/usr/share/walabot/python/WalabotAPI-1.0.21.zip“

Krok 12: Pre servo rozhranie

Z príkazového shellu

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

CD ~

git klon

cd Adafruit_Python_PCA9685

sudo python setup.py install

Prečo musíme používať servo ovládač? Pre RPi niekoľko dôvodov.

1. Prúd ťahaný servomotorom môže byť veľmi vysoký a toto číslo sa zvyšuje, čím viac serva máte (samozrejme). Ak jazdíte na servo directky z RPi, riskujete sfúknutie jeho zdroja

2. Načasovanie PWM (Pulse Width Modulation), ktoré riadi polohu serva, je veľmi dôležité. Pretože RPi nepoužíva operačný systém v reálnom čase (môžu existovať prerušenia a podobne), časovanie nie je presné a môže spôsobiť nervózne zášklby serva. Vyhradený ovládač umožňuje presné ovládanie, ale tiež umožňuje pridať až 16 serv, takže je to skvelé na rozšírenie.

Krok 13: Pre LCD

Blynk
Blynk

otvorte webový prehliadač RPi

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

Stiahnuť ▼

github.com/daveyclk/SunFounder_SensorKit_…

Z príkazového shellu:

sudo mkdir/usr/share/sunfounder

Pomocou grafického prieskumníka skopírujte priečinok python zo súboru zip do nového priečinka sunfounder

Displej LCD slúži na upozornenie používateľa, čo sa presne deje. Zobrazuje proces konfigurácie až po hodnoty x, y a z mapované na každé servo

Krok 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk je vynikajúca služba IoT, ktorá vám umožňuje vytvoriť vlastnú aplikáciu na ovládanie vašich vecí. Zdá sa, že je to perfektné riešenie, aby mi diaľkové ovládanie walabota skutočne vytočilo nastavenia…

Jeden problém. Blynk momentálne nie je podporovaný na platforme Python, bugger. Ale neboj sa! našiel som peknú malú prácu, ktorá umožňuje diaľkové ovládanie a zadávanie parametrov na diaľku! je to trochu hackerské

prvým krokom je stiahnutie aplikácie Blynk z vášho obľúbeného obchodu s aplikáciami

Za druhé, zaregistrujte si účet

Akonáhle to urobíte, otvorte aplikáciu a spustite nový projekt, pričom ako hardvér zvoľte Raspberry Pi 3.

Aplikácia vám pridelí prístupový token (budete ho potrebovať na vloženie kódu)

Akonáhle to urobíte. budete musieť nastaviť aplikáciu tak, ako je to znázornené na obrázkoch. Takto bude komunikovať s walabotom.

Krok 15: Konfigurácia aplikácie Blynk

Konfigurácia aplikácie Blynk
Konfigurácia aplikácie Blynk
Konfigurácia aplikácie Blynk
Konfigurácia aplikácie Blynk
Konfigurácia aplikácie Blynk
Konfigurácia aplikácie Blynk

Krok 16: Tento QR kód môžete použiť v aplikácii Blynk na klonovanie môjho projektu, aby ste ušetrili čas

Tento QR kód môžete použiť s aplikáciou Blynk na klonovanie môjho projektu, aby ste ušetrili čas
Tento QR kód môžete použiť s aplikáciou Blynk na klonovanie môjho projektu, aby ste ušetrili čas

OK Teraz, keď je aplikácia nastavená, môžeme nakonfigurovať Python a RPi, aby s ňou hovorili cez internet. Mágia

Krok 17: Spustenie Blynku s Raspberry Pi a používanie Blynku HTTPS pre Python

Najprv musíte nainštalovať wrapper Blynk HTTPS pre Python

Z príkazového shellu:

klon sudo git

sudo pip install blynkapi

Za druhé, musíte si nainštalovať službu Blynk na RPi

Z príkazového shellu:

klon git

cd blynk-knižnica/linux

všetko vyčistiť

na spustenie služby blynk

sudo./blynk --token = YourAuthToken

Aby ste zaistili spustenie služby Blynk pri štarte, musíte upraviť /etc/rc.local

vykonávaním

sudo nano /etc/rc.local

pridaj to na koniec

./blynk-library/linux/blynk --token = môj token &

(V sekcii kódu som vložil odkaz na súbor môjho súboru /etc/rc.local)

Ak chcete otestovať, či funguje, stačí napísať

sudo /etc/rc.local start

Teraz by mala byť spustená služba Blynk

Krok 18: Automatické spustenie skriptu

Teraz, keď je všetko nastavené a nakonfigurované, a máme pripravený kód pythonu. môžeme nastaviť automatické spustenie vecí, aby sme mohli zbaviť klávesnice a monitorov

Je potrebné urobiť niekoľko vecí

Vytvorte nový súbor skriptu na spustenie programu Python

sudo nano guitareffect.sh

pridajte tieto riadky

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

určite to ulož

Ďalej musíme skriptu udeliť povolenie na spustenie zadaním

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

A nakoniec musíme tento skript pridať do súboru /etc/rc.local, s ktorým sme sa predtým pohrávali.

Sudo nano /etc/rc.local

Pridať

/home/pi/guitareffect.sh &

Uistite sa, že zadáte znak „&“, čo umožní spusteniu skriptu Python na pozadí

Správny! To je všetka konfigurácia a softvér vyriešený. Ďalej je čas zapojiť hardvér

Krok 19: Hardvér

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

Prvý prototyp Breadboardu

Krok 20: Dizajn krytu

Dizajn skrine
Dizajn skrine
Dizajn skrine
Dizajn skrine

Kryt bol navrhnutý a vykreslený v úžasnom Fusion360

Krok 21: Guts Shots

Guts Shots
Guts Shots
Guts Shots
Guts Shots
Guts Shots
Guts Shots

Krok 22: Zábery finálnej montáže

Výstrely finálnej montáže
Výstrely finálnej montáže
Výstrely finálnej montáže
Výstrely finálnej montáže
Výstrely finálnej montáže
Výstrely finálnej montáže

Krok 23: Upevnenie Walabota k stojanu

Upevnenie Walabota na stojan
Upevnenie Walabota na stojan

Na upevnenie na miesto použite samolepiaci kovový disk, ktorý je súčasťou walabotu

Krok 24: Hardvérové súbory STL pre 3D tlač

Krok 25: Schémy zapojenia veci hore

Krok 26: Kód

Na svoj projekt použite priložený skript 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

#nastavte GPIO pomocou číslovania tabúľ

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

Autorizačný token #blynk

auth_token = "your_auth_token_here"

# Importujte modul PCA9685 na ovládanie serva.

importovať Adafruit_PCA9685

#importujte LCD modul z miesta

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

# Inicializujte počítač PCA9685 pomocou predvolenej adresy (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk predmetov

predvolené hodnoty = 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")

defin LCDsetup ():

LCD1602.init (0x27, 1) # init (adresa slave, osvetlenie pozadia)

def numMap (x, in_min, in_max, out_min, out_max): "" "slúži na mapovanie čítaní walabotov do polohy servo" "" návrat int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# použite na zaokrúhľovanie nespracovaných údajov na priradenú hodnotu

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

#extrahuje číslo z vráteného reťazca blynk

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

# Nastavte frekvenciu na 60 Hz, vhodné pre servá.

pwm.set_pwm_freq (60)

# Konfigurujte predvolené dĺžky min. A max. Impulzu serva

SERVO_MIN = 175 # Minimálna dĺžka impulzu zo 4096 SERVO_MAX = 575 # Maximálna dĺžka impulzu zo 4096

# predvolené hodnoty walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

THRESHOLD = 1

# premenné na prepnutie na blynk

on = "[u'1 ']"

trieda Walabot:

def _init _ (self):

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

def blynkConfig (self):

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 ()

Tlač PHI_MAX = numberExtract (PHI_MAX) ("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val () PHI_RES = numberExtract (PHI_RES) tlač ("Phi Res =", PHI_RES)

THRESHOLD = Threshold.get_val ()

THRESHOLD = numberExtract (THRESHOLD) print ("Threshold =", THRESHOLD)

else: # ak nič z aplikácie blynk, načítať predvolené hodnoty SERVO_MIN = 175 # minimálna dĺžka impulzu zo 4096 SERVO_MAX = 575 # maximálna dĺžka impulzu zo 4096

# predvolené hodnoty walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

THRESHOLD = 1

def connect (self): try: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPElic.tm (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (PHI_XMA) SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) okrem self.wlbt. WalabotError as err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' raise err

def štart (sám):

self.wlbt. Start ()

def kalibrovať (vlastné):

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () vrátiť self.wlbt. GetSensorTargets ()

def stop (vlastné):

self.wlbt. Stop ()

odpojiť (vlastné):

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 () # skontrolujte, či nie je spustené tlačidlo blynk, stlačte (GPIO.input (18) == 0): #check flag footswitch flag = False

LCD1602.write (0, 0, „OK! Poďme na to“)

LCD1602.write (0, 1, ) wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () if not 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, 'Spustenie programu Walabot')

appcheck = štart_button.app_status () príznak = Skutočný # resetovací príznak pre hlavný prog

zatiaľ čo príznak: # slúži na prepnutie do pohotovostného režimu (efektívne)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for tlačidlo štart stlačte appcheck = start_button.app_status ()

inak:

if (GPIO.input (18)! = 0): #check flag footswitch flag = False

xval = 0

yval = 0 zval = 0 priemer = 2 oneskorenieČas = 0

ciele = wlbt.get_targets ()

ak len (ciele)> 0:

pre j v rozsahu (priemer):

ciele = wlbt.get_targets ()

ak len (ciele)> 0: print (len (ciele)) ciele = ciele [0]

print (str (targets.xPosCm))

xval += int (targets.xPosCm) yval += int (targets.yPosCm) zval += int (targets.zPosCm) time.sleep (delayTime) else: print ("no targets") xval = xval/average

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

xval = myRound (xval) ak xval SERVO_MAX: xval = SERVO_MAX LCD1602.write (0, 0, 'x =' + str (xval) + '') pwm.set_pwm (0, 0, xval)

yval = yval/priemer

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

yval = myRound (yval) if yval SERVO_MAX: yval = SERVO_MAX LCD1602.write (0, 1, 'y =' + str (yval)) pwm.set_pwm (1, 0, yval)

zval = zval/priemer

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

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

inak:

vytlačiť („žiadne ciele“) LCD1602.write (0, 0, „Vypínanie“) LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

if _name_ == '_main_':

zatiaľ čo pravda: hlavné ()

pre guitareffect.sh

#!/bin/sh

cd /domov /pi

sudo python GuitarEffectCLI.py

Kópia lokálneho súboru RC ako referencia

#!/bin/sh -e # # rc.local # # Tento skript sa spustí na konci každého viacúrovňového behu. # Uistite sa, že skript pri úspechu skončí „0“alebo pri chybe akékoľvek iné # hodnoty. # # Ak chcete povoliť alebo zakázať tento skript, zmeňte iba počet bitov vykonania. # # Štandardne tento skript nerobí nič.

# Vytlačte IP adresu

_IP = $ (názov hostiteľa -I) || true if ["$ _IP"]; potom vytlačte „Moja IP adresa je %s / n“„$ _IP“fi

./blynk-library/linux/blynk --token = "váš token ide sem" &

spať 10 sudo /home/pi/guitareffect.sh a ukončiť 0

Krok 27: Repozitáre Github na použitie

Použite to pre Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Použite to pre ovládač serva

github.com/daveyclk/Adafruit_Python_PCA968…

Použite to pre modul Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Krok 28: Záver

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Záver
Záver
Záver
Záver

Toto bola strmá krivka vzdelávania, ale stálo to za to.

Moje take away sú

  • Musel som sa naučiť Python.. Ukazuje sa, že je to eso
  • Rozhranie Python na Raspberry Pi so službou Blynk IoT. Toto nie je oficiálne podporované, takže jeho funkcie majú určité obmedzenia. Napriek tomu funguje skvele!
  • Ukazuje sa, že Walabot je skvelý na hudobné vyjadrenie. Použil som to na Korg SDD3000, ale môžete použiť akýkoľvek efekt, ktorý sa vám páči

Vyrazte si sami. Nie je to obmedzené na gitarové efekty, môžem ich použiť s akýmkoľvek nástrojom s akýmkoľvek efektom.

Súťaž Raspberry Pi 2017
Súťaž Raspberry Pi 2017
Súťaž Raspberry Pi 2017
Súťaž Raspberry Pi 2017

Druhé miesto v súťaži Raspberry Pi Contest 2017

Odporúča: