Kazalo:

Walabot FX - Upravljanje učinka kitare: 28 korakov (s slikami)
Walabot FX - Upravljanje učinka kitare: 28 korakov (s slikami)

Video: Walabot FX - Upravljanje učinka kitare: 28 korakov (s slikami)

Video: Walabot FX - Upravljanje učinka kitare: 28 korakov (s slikami)
Video: The Choice is Ours (2016) Official Full Version 2024, November
Anonim
Walabot FX - Upravljanje učinka kitare
Walabot FX - Upravljanje učinka kitare

Nadzirajte svoj najljubši učinek kitare z uporabo le čudovitih kitarskih pozi!

Korak: Stvari, ki jih boste potrebovali

Komponente strojne opreme

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanalni 12-bitni PWM servo gonilnik za Arduino in Raspberry Pi

Servo (generično) Brez povezave

9V sponka za baterijo

Nosilec baterije 4xAA

AA baterije

Mostične žice (splošne)

Nožno stikalo za zaklepanje DPDT

Korg SDD3000-PDL

OS programske opreme, aplikacije in spletne storitve

Autodesk Fusion360 -

Blynk -

Orodja itd

3D tiskalnik

Spajkalnik

2. korak: Povzetek

Getting Started
Getting Started

Kako bi bilo nadzorovati glasbeno izražanje samo s položajem svoje kitare v 3D prostoru? No, naredimo nekaj prototipa in ugotovimo!

3. korak: Osnovna ideja

Želel sem imeti možnost nadzorovanja parametra 3 učinka v realnem času, želel sem to narediti s tem, kako sem postavil svojo kitaro. Torej je bila ena stvar jasna, potreboval bom nekaj stvari.

  • Senzor, ki lahko vidi 3D prostor
  • Servomotorji za obračanje gumbov
  • LCD zaslon
  • Servo gonilnik I2C
  • Malina Pi
  • Naučiti se Pythona

4. korak: Walabot

Želite videti skozi stene? Občutljivi predmeti v 3D prostoru? Ali čutite, če dihate z druge strani sobe? No, imaš srečo!

Walabot je povsem nov način zaznavanja prostora okoli vas z radarjem z nizko močjo.

To bi bilo ključno za ta projekt, lahko bi vzel karteasanske (X-Y-Z) koordinate predmetov v 3D prostoru in jih preslikal na servo položaje, ki v realnem času spremenijo zvok učinka kitare, ne da bi se morali dotakniti pedala.

Zmaga.

Več informacij o Walabotu najdete tukaj

5. korak: Začnite

Najprej boste potrebovali računalnik za pogon Walabota, za ta projekt uporabljam Raspberry Pi 3 (tukaj omenjen na RPi) zaradi vgrajenega WiFi in splošnega dodatnega oomph

Kupil sem 16 GB kartico SD z vnaprej nameščenim NOOBS -om, da so stvari lepe in preproste, in se odločil, da namestim Raspian kot svoj izbrani OS Linux

(če niste seznanjeni s tem, kako namestiti Raspian, si vzemite trenutek, da si to malo preberete)

V redu, ko na svojem RPi zaženete Raspian, morate narediti nekaj korakov za konfiguracijo, da pripravite stvari za naš projekt

6. korak: Nastavitev Raspberry Pi - 1

Najprej se prepričajte, da uporabljate najnovejšo različico jedra in preverite, ali so na voljo posodobitve, tako da odprete ukazno lupino in vnesete

sudo apt-get posodobitev

sudo apt-get dist-upgrade

(dodano je sudo, da zagotovite, da imate administrativne privilegije, npr. stvari bodo delovale)

To lahko traja nekaj časa, zato pojdite na skodelico čaja.

7. korak: Nastavitev Raspberry Pi - 2

Namestiti morate Walabot SDK za RPi. V spletnem brskalniku RPi pojdite na https://www.walabot.com/gettingstarted in prenesite namestitveni paket Raspberry Pi.

Iz ukazne lupine:

cd prenosi

sudo dpkg -I walabotSDK_RasbPi.deb

8. korak: Nastavitev Raspberry Pi - 3

Za začetek konfiguracije RPi za uporabo vodila i2c moramo iz ukazne lupine:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

ko to storite, morate v datoteko modulov dodati naslednje

Iz ukazne lupine:

sudo nano /etc /moduli

ta dva niza dodajte v ločene vrstice:

i2c-dev

i2c-bcm2708

9. korak: Nastavitev Raspberry Pi - 4

Walabot črpa precej aktualnosti, za nadzor stvari pa bomo uporabili tudi GPIO, zato jih moramo nastaviti

Iz ukazne lupine:

sudo nano /boot/config.txt

na konec datoteke dodajte naslednje vrstice:

safe_mode_gpio = 4

max_usb_current = 1

RPi je odlično orodje za izdelovalce, vendar je omejen v toku, ki ga lahko pošlje Walabotu. Zato dodajamo največji tok 1Amp namesto bolj standardnih 500mA

10. korak: Python

Zakaj Python? No, saj je zelo enostavno kodirati, hitro zagnati in na voljo je veliko dobrih primerov pythona! nikoli prej ga nisem uporabljal in kmalu je začel delovati. Zdaj je RPi konfiguriran za tisto, kar želimo, naslednji korak je konfiguriranje Pythona za dostop do vmesnikov Walabot API, LCD Servo

11. korak: Za Walabot

Iz ukazne lupine

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

12. korak: Za servo vmesnik

Iz ukazne lupine

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

cd ~

git clone

cd Adafruit_Python_PCA9685

sudo python setup.py install

Zakaj moramo uporabiti servo gonilnik? No, za RPi nekaj razlogov.

1. Tok, ki ga porabi servomotor, je lahko zelo visok in to število se poveča, več ko imate servomotorjev (seveda). Če vozite servo directky iz RPi -ja, tvegate, da bo razstrelil napajalnik

2. Časi PWM (Pulse Width Modulation), ki nadzorujejo položaj servomotorjev, so zelo pomembni. Ker RPi ne uporablja operacijskega sistema v realnem času (lahko pride do prekinitev in podobno), časovni razporedi niso natančni in se lahko servomotorji živčno trzajo. Namenski gonilnik omogoča natančen nadzor, hkrati pa omogoča dodajanje do 16 servomotorjev, zato je to odlično za razširitev.

13. korak: Za LCD

Blynk
Blynk

odprite spletni brskalnik RPi

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

Prenesi

github.com/daveyclk/SunFounder_SensorKit_…

Iz ukazne lupine:

sudo mkdir/usr/share/sunfounder

Z grafičnim raziskovalcem kopirajte mapo python iz datoteke zip v novo mapo Sunfounder

Zaslon LCD se uporabniku prikaže, kaj točno se dogaja. Prikaz procesa konfiguracije do vrednosti x, y in z, preslikanih na vsak servo

14. korak: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk je briljantna storitev interneta stvari, ki vam omogoča ustvarjanje aplikacije po meri za nadzor vaših stvari. Zdelo se mi je kot popolna rešitev, da mi omogoči daljinski upravljalnik walabota, da resnično pokličem v nastavitvah …

En problem. Blynk trenutno ni podprt na platformi Python, bugger. Ampak ne bojte se! uspelo mi je najti lepo delo, ki omogoča daljinsko upravljanje in daljinski vnos parametrov! malo je hecno

prvi korak je prenos aplikacije Blynk iz vaše najljubše trgovine z aplikacijami

Drugič, prijavite se za račun

Ko to storite, odprite aplikacijo in začnite nov projekt, za strojno opremo izberite Raspberry Pi 3.

Aplikacija vam bo dodelila žeton za dostop (to boste potrebovali za vnos kode)

Ko to storite. aplikacijo boste morali nastaviti, kot je prikazano na slikah. Tako se bo povezal z walabotom.

Korak 15: Konfiguriranje aplikacije Blynk

Konfiguriranje aplikacije Blynk
Konfiguriranje aplikacije Blynk
Konfiguriranje aplikacije Blynk
Konfiguriranje aplikacije Blynk
Konfiguriranje aplikacije Blynk
Konfiguriranje aplikacije Blynk

Korak 16: To kodo QR lahko uporabite z aplikacijo Blynk za kloniranje mojega projekta, da prihranite čas

To kodo QR lahko uporabite z aplikacijo Blynk za kloniranje mojega projekta, da prihranite čas
To kodo QR lahko uporabite z aplikacijo Blynk za kloniranje mojega projekta, da prihranite čas

V redu Zdaj, ko je aplikacija vse nastavljena, lahko konfiguriramo Python in RPi, da se z njimi pogovarjajo prek interneta. Magija

Korak 17: Zagon programa Blynk z Raspberry Pi in uporaba protokola Blynk HTTPS za Python

Najprej morate namestiti ovoj Blynk HTTPS za Python

Iz ukazne lupine:

klon sudo git

sudo pip namestite blynkapi

Drugič, na RPi morate namestiti storitev Blynk

Iz ukazne lupine:

git clone

cd blynk-library/linux

vse očisti

za zagon storitve blynk

sudo./blynk --token = YourAuthToken

Če želite, da se storitev Blynk zažene ob zagonu, morate spremeniti /etc/rc.local

z početjem

sudo nano /etc/rc.local

to dodaj na koncu

./blynk-library/linux/blynk --token = moj žeton &

(v sklepni odsek za referenco sem vključil kopijo svoje datoteke /etc/rc.local)

Če želite preveriti, ali deluje, preprosto vnesite

sudo /etc/rc.local start

Storitev Blynk bi se morala zdaj zagnati

18. korak: Samodejni zagon skripta

Zdaj, ko je vse to nastavljeno in konfigurirano ter imamo pripravljeno kodo python. stvari lahko nastavimo na samodejno izvajanje, tako da lahko umaknemo tipkovnico in monitorje

Nekaj stvari je treba narediti

Ustvarite novo datoteko skripta za izvajanje programa Python

sudo nano guitareffect.sh

dodajte te vrstice

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

shranite ga

Nato moramo skriptu dati dovoljenje za izvajanje s tipkanjem

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

In nazadnje moramo ta skript dodati v datoteko /etc/rc.local, s katero smo se prej poigrali.

Sudo nano /etc/rc.local

Dodaj

/home/pi/guitareffect.sh &

obvezno vključite "&", ki omogoča izvajanje skripta Python v ozadju

Prav! To je vse konfiguracija in programska oprema razvrščena, naslednjič je čas, da priključite strojno opremo

19. korak: Strojna oprema

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

Prvi prototip Breadboard

20. korak: Oblikovanje ohišja

Zasnova ohišja
Zasnova ohišja
Zasnova ohišja
Zasnova ohišja

Ohišje je bilo oblikovano in izdelano v čudovitem Fusion360

21. korak: Črevesni streli

Črevesni streli
Črevesni streli
Črevesni streli
Črevesni streli
Črevesni streli
Črevesni streli

Korak: Zadnji posnetki montaže

Posnetki končne montaže
Posnetki končne montaže
Posnetki končne montaže
Posnetki končne montaže
Posnetki končne montaže
Posnetki končne montaže

23. korak: pritrdite Walabot na stojalo

Za pritrditev Walabota na stojalo
Za pritrditev Walabota na stojalo

Za pritrditev uporabite samolepilni kovinski disk, ki je priložen walabotu

Korak: Strojne datoteke STL za 3D tiskanje

Korak 25: Sheme za ožičenje stvari

Korak 26: Koda

Za svoj projekt uporabite priloženi skript Python

od _future_ uvoz print_functionfrom uvozne platforme sys iz uvoznega sistema os iz uvoznega sistema blynkapi uvoz Blynk uvoz WalabotAPI uvozni čas uvoz RPi. GPIO kot GPIO

#nastavite GPIO z oštevilčenjem plošč

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

#blynk avten žeton

auth_token = "your_auth_token_ tukaj"

# Uvozite modul PCA9685 za servo krmiljenje.

uvoz Adafruit_PCA9685

#import LCD modula z lokacije

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

# Inicializirajte PCA9685 s privzetim naslovom (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk predmetov

privzete vrednosti = 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")

Prag = Blynk (auth_token, pin = "V8")

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

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

def LCDsetup ():

LCD1602.init (0x27, 1) # init (podrejeni naslov, osvetlitev ozadja)

def numMap (x, in_min, in_max, out_min, out_max): "" "se uporablja za preslikavo odčitkov walabota v položaj servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# uporabite za zaokroževanje surovih podatkov na dodeljeno vrednost

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

#izvleče številko iz vrnjenega niza nizov

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

# Nastavite frekvenco na 60Hz, dobro za servomotorje.

pwm.set_pwm_freq (60)

# Konfigurirajte privzete vrednosti dolžine in dolžine servo impulzov

SERVO_MIN = 175 # Najmanjša dolžina impulza od 4096 SERVO_MAX = 575 # Največja dolžina impulza od 4096

# privzete vrednosti walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

PRAG = 1

# spremenljivka za preklop blynk

on = "[u'1 ']"

razred Walabot:

def _init _ (samo):

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

def blynkConfig (self):

load_defaults = defaults.get_val () če je str (load_defaults) == vklopljeno: SERVO_MAX = ServoMax.get_val () SERVO_MAX = numberExtract (SERVO_MAX) print ("Servo Max =", SERVO_MAX)

SERVO_MIN = ServoMin.get_val ()

SERVO_MIN = številka Extract (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)

THRESHOLD = Threshold.get_val ()

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

else: # če nič od aplikacije blynk, privzete nastavitve obremenitve SERVO_MIN = 175 # Najmanjša dolžina impulza od 4096 SERVO_MAX = 575 # Največja dolžina impulza od 4096

# privzete vrednosti walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

PRAG = 1

def connect (self): try: self.wlbt. ConnectAny () self.isConnected = Resnično self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_micge) (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RES) SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) razen self.wlbt. WalabotError as err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' dvig napake

def start (samostojno):

self.wlbt. Start ()

def umerjanje (samo):

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () vrne self.wlbt. GetSensorTargets ()

def stop (samo):

self.wlbt. Stop ()

def prekinitev povezave (samo):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () medtem ko zastava: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Pritisnite Start to') LCD1602.write (0, 1, 'start') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # preverite, ali je gumb za zagon blynk pritisnjen, če (GPIO.input (18) == 0): #check zastavica stopalke = False

LCD1602.write (0, 0, "OK! Naredimo to")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear (), če ni wlbt.isConnected: LCD1602.write (0, 0, 'Not Connected') drugo: LCD1602.write (0, 0, 'Connected') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating…..') time.sleep (3) LCD1602.write (0, 0, 'Zagon Walabota')

appcheck = start_button.app_status () zastava = True # zastavica za ponastavitev za glavni prog

medtem ko zastavica: # se uporablja za stanje v pripravljenosti (učinkovito)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check nožna stikalna zastavica = False else: check = start_button.get_val () #check for gumb za zagon pritisnite appcheck = start_button.app_status ()

drugače:

if (GPIO.input (18)! = 0): #preverite zastavico stopalke = False

xval = 0

yval = 0 zval = 0 povprečje = 2 delayTime = 0

cilji = wlbt.get_targets ()

če je len (cilji)> 0:

za j v razponu (povprečje):

cilji = wlbt.get_targets ()

če je len (cilji)> 0: natisni (len (cilji)) cilji = cilji [0]

print (str (target.xPosCm))

xval += int (cilji.xPosCm) yval += int (cilji.yPosCm) zval += int (cilji.zPosCm) time.sleep (delayTime) drugo: print ("brez ciljev") xval = xval/povprečje

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

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

yval = yval/povprečje

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

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

zval = zval/povprečje

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

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

drugače:

print ("brez ciljev") LCD1602.write (0, 0, "Zaustavitev") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

če _name_ == '_main_':

medtem ko True: main ()

za guitareffect.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

Kopija lokalne datoteke RC za referenco

#!/bin/sh -e # # rc.local # # Ta skript se izvede na koncu vsake ravni uporabe za več uporabnikov. # Prepričajte se, da bo skript "izstopil 0" ob uspehu ali kateri koli drugi # vrednosti ob napaki. # # Če želite omogočiti ali onemogočiti ta skript, samo spremenite # bitove izvajanja. # # Ta skript privzeto ne naredi nič.

# Natisnite naslov IP

_IP = $ (ime gostitelja -I) || res, če ["$ _IP"]; nato printf "Moj naslov IP je %s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "vaš žeton gre sem" &

spanje 10 sudo /home/pi/guitareffect.sh & izhod 0

Korak 27: Uporabite skladišča Github

To uporabite za LCD zaslon Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

To uporabite za servo gonilnik

github.com/daveyclk/Adafruit_Python_PCA968…

Uporabite to za Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

28. korak: Zaključek

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Zaključek
Zaključek
Zaključek
Zaključek

No, to je bila strma krivulja učenja, vendar je bilo tako vredno.

Moje jemanje je

  • Moral sem se naučiti Python..izkazalo se je, da je as
  • Vmesnik Python na Raspberry Pi s storitvijo Blynk IoT. To ni uradno podprto, zato obstajajo nekatere omejitve njegovih funkcij. Še vedno deluje odlično!
  • Izkazalo se je, da je Walabot odličen za glasbeno izražanje. Uporabil sem ga na Korgu SDD3000, vendar lahko uporabite kateri koli učinek, ki vam je všeč

Odpravite se sami. To ni omejeno na učinke kitare, lahko se uporablja s katerim koli instrumentom s katerim koli učinkom.

Natečaj Raspberry Pi 2017
Natečaj Raspberry Pi 2017
Natečaj Raspberry Pi 2017
Natečaj Raspberry Pi 2017

Podprvak na tekmovanju Raspberry Pi 2017

Priporočena: