Sisukord:

Walabot FX - kitarriefekti juhtimine: 28 sammu (koos piltidega)
Walabot FX - kitarriefekti juhtimine: 28 sammu (koos piltidega)

Video: Walabot FX - kitarriefekti juhtimine: 28 sammu (koos piltidega)

Video: Walabot FX - kitarriefekti juhtimine: 28 sammu (koos piltidega)
Video: Walabot FX- Guitar Effect Control. Full Demo 2024, Juuli
Anonim
Walabot FX - kitarriefekti juhtimine
Walabot FX - kitarriefekti juhtimine

Kontrollige oma lemmik kitarri efekti, kasutades ainult vingeid kitarriposeid!

Samm: asjad, mida vajate

Riistvara komponendid

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 mudel B

Sunfounder LCD1602

SunFounder PCA9685 16 kanaliga 12-bitine PWM servo draiver Arduino ja Raspberry Pi jaoks

Servo (üldine) Link puudub

9V akuklamber

4xAA patareipesa

AA patareid

Jumper juhtmed (üldine)

DPDT lukustusmeetodiga lüliti

Korg SDD3000-PDL

Tarkvara OS -id, rakendused ja võrguteenused

Autodesk Fusion360 -

Blynk -

Tööriistad jne

3D printer

Jootekolb

Samm: kokkuvõte

Getting Started
Getting Started

Mis tunne oleks muusikalist väljendust juhtida, kasutades ainult oma kitarri positsiooni 3D -ruumis? No kirjutame midagi ja uurime!

3. samm: põhiidee

Tahtsin juhtida reaalajas kolme efekti parameetrit, tahtsin seda teha, kasutades oma kitarri paigutust. Nii et üks asi oli selge, mul oli vaja mõnda asja.

  • Andur, mis suudab näha 3D -ruumi
  • Servod nuppude keeramiseks
  • LCD ekraan
  • I2C servo draiver
  • Vaarika Pi
  • Pythoni õppimiseks

Samm: Walabot

Kas soovite näha läbi seinte? Kas tunnete objekte 3D -ruumis? Kas tunnete, kui hingate kogu toast? Noh, teil on õnne!

Walabot on täiesti uus viis ümbritseva ruumi tundmiseks väikese võimsusega radari abil.

See oli selle projekti võtmeks, ma saaksin 3D-ruumis objektide karteasani (X-Y-Z) koodinaadid ja kaardistada need servoasenditesse, muutes reaalajas kitarriefekti, ilma pedaali puudutamata.

Võida.

Lisateavet Walaboti kohta leiate siit

5. samm: alustamine

Kõigepealt vajate Walaboti juhtimiseks arvutit, selle projekti jaoks kasutan sisseehitatud WiFi ja üldise lisavõimaluse tõttu Raspberry Pi 3 (siin viidatakse RPi -le)

Ostsin 16 GB SD -kaardi, millele oli eelinstallitud NOOBS, et asjad oleksid kenad ja lihtsad, ning otsustasin oma valitud Linuxi operatsioonisüsteemiks installida Raspiani

(kui te ei tea, kuidas Raspiani installida, siis palun võtke natuke aega, et seda veidi lugeda)

OK, kui olete oma RPi -ga Raspiani käivitanud, peate tegema mõned konfigureerimisetapid, et meie projekti jaoks asjad valmis saada

Samm: Raspberry Pi seadistamine - 1

Esiteks veenduge, et kasutate kerneli uusimat versiooni, ja kontrollige värskendusi, avades käsukesta ja tippides

sudo apt-get update

sudo apt-get dist-upgrade

(lisatakse sudo, et tagada administraatoriõigused, nt asjad töötavad)

Selle lõpuleviimiseks võib kuluda natuke aega, nii et minge ja jooge mõnus tass teed.

Samm: Raspberry Pi seadistamine - 2

RPi jaoks peate installima Walaboti SDK. Minge oma RPi veebibrauserist aadressile https://www.walabot.com/gettingstarted ja laadige alla Raspberry Pi installipakett.

Käskude kestast:

cd allalaadimine

sudo dpkg -I walabotSDK_RasbPi.deb

8. samm: Raspberry Pi seadistamine - 3

Peame alustama RPi konfigureerimist i2c -siini kasutamiseks. Käsukestast:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

kui see on tehtud, peate lisama moodulifaili järgmise

Käskude kestast:

sudo nano /etc /modules

lisage need kaks stringi eraldi ridadele:

i2c-dev

i2c-bcm2708

Samm: Raspberry Pi seadistamine - 4

Walabot tõmbab üsna palju voolu ja me kasutame ka GPIO -sid, et juhtida asju, nii et peame need seadistama

Käskude kestast:

sudo nano /boot/config.txt

lisage faili lõppu järgmised read:

safe_mode_gpio = 4

max_usb_current = 1

RPi on suurepärane tööriist tegijatele, kuid see on piiratud Walabotile saadetava vooluga. Seetõttu lisame standardse 500 mA asemel 1A maksimaalse voolu

Samm: Python

Miks just Python? Noh, kuna seda on väga lihtne kodeerida, kiire käivitada ja saadaval on palju häid pythoninäiteid! ma pole seda kunagi varem kasutanud ja hakkasin kiiresti tööle. Nüüd on RPi konfigureeritud nii, nagu me tahame, järgmine samm on konfigureerida Pythoni juurdepääs Walabot API -le, LCD Servo liidestele

Samm: Walaboti jaoks

Käskude kestast

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

12. samm: servoliidese jaoks

Käskude kestast

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

cd ~

git kloon

cd Adafruit_Python_PCA9685

sudo python setup.py install

Miks me peame kasutama servo draiverit? Noh, RPi paaril põhjusel.

1. Servo tõmmatud vool võib olla väga suur ja see arv läheb suuremaks, seda rohkem servosid teil on (muidugi). Kui sõidate RPi -st servo -otsejaama, on oht, et see puhub toiteallika

2. Servoasendit reguleeriva PWM -i (impulsi laiuse modulatsiooni) ajastus on väga oluline. Kuna RPi ei kasuta reaalajas operatsioonisüsteemi (võib esineda katkestusi jms), pole ajastus täpne ja võib servod närviliselt tõmblema panna. Spetsiaalne draiver võimaldab täpset juhtimist, kuid võimaldab lisada ka kuni 16 servot, seega on see suurepärane laiendamiseks.

Samm 13: LCD -ekraani jaoks

Blynk
Blynk

avage oma RPi veebibrauser

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

lae alla

github.com/daveyclk/SunFounder_SensorKit_…

Käskude kestast:

sudo mkdir/usr/share/sunfounder

Kopeerige graafilise uurija abil kaust python zip -failist uude sunfounderi kausta

LCD -ekraani kasutatakse kasutajalt küsimiseks, mis täpselt toimub. Konfigureerimisprotsessi kuvamine kuni x, y ja z väärtusteni, mis on kaardistatud igale servole

14. samm: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk on suurepärane IoT -teenus, mis võimaldab teil oma asjade juhtimiseks luua kohandatud rakenduse. See tundus olevat ideaalne lahendus, kui anda mulle walaboti kaugjuhtimispult, et seadistusi tõesti valida …

Üks probleem. Blynk ei ole praegu Pythoni platvormil toetatud. Aga ärge kartke! mul õnnestus leida kena väike töö, mis võimaldab kaugjuhtimist ja parameetrite kaugjuhtimist! see on natuke hack

esimene samm on alla laadida rakendus Blynk oma lemmikrakenduste poest

Teiseks registreeruge kontole

Kui see on tehtud, avage rakendus ja alustage uut projekti, valides riistvaraks Raspberry Pi 3.

Rakendus eraldab teile juurdepääsuloa (seda vajate koodi sisestamiseks)

Kui olete seda teinud. peate rakenduse seadistama, nagu piltidel näidatud. Nii saab see liituda walabotiga.

Samm: rakenduse Blynk konfigureerimine

Rakenduse Blynk seadistamine
Rakenduse Blynk seadistamine
Rakenduse Blynk seadistamine
Rakenduse Blynk seadistamine
Rakenduse Blynk seadistamine
Rakenduse Blynk seadistamine

Samm: saate selle QR -koodi abil rakenduse Blynk abil minu projekti kloonida, et säästa aega

Saate selle QR -koodi abil rakenduse Blynk abil minu projekti kloonida, et säästa aega
Saate selle QR -koodi abil rakenduse Blynk abil minu projekti kloonida, et säästa aega

OK Nüüd, kui rakendus on kõik seadistatud, saame konfigureerida Pythoni ja RPi sellega Interneti kaudu rääkima. Maagia

Samm 17: Blynk'i käivitamine Raspberry Pi -ga ja Blynk HTTPS -i kasutamine Pythoni jaoks

Esiteks peate Pythonile installima Blynk HTTPS ümbrise

Käskude kestast:

sudo git kloon

sudo pip install blynkapi

Teiseks peate RPi -sse installima teenuse Blynk

Käskude kestast:

git kloon

cd blynk-library/linux

tee kõik puhtaks

blynk -teenuse käivitamiseks

sudo./blynk --token = YourAuthToken

Tagamaks, et Blynk Service käivitamisel töötab, peate muutma /etc/rc.local

tehes

sudo nano /etc/rc.local

lisage see lõpus

./blynk-library/linux/blynk --token = minu märk &

(olen lisanud viide viimiseks koodi sektsiooni oma /etc/rc.local faili)

Selle töö kontrollimiseks sisestage lihtsalt

sudo /etc/rc.local start

Blynk -teenus peaks nüüd töötama

18. samm: skripti automaatne käivitamine

Nüüd, kui see kõik on seadistatud ja konfigureeritud ning meil on püütoni kood valmis. saame seadistada asjad automaatseks käivitamiseks, et saaksime klaviatuuri ja kuvarid ära visata

Tuleb teha paar asja

Looge uus skriptifail, et Pythoni programm otsa saada

sudo nano kitariefekt.sh

lisage need read

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

salvestage see kindlasti

Järgmisena peame andma skriptile trükkimiseks loa

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

Ja lõpuks peame selle skripti lisama faili /etc/rc.local, millega me varem nokitsesime.

Sudo nano /etc/rc.local

Lisama

/home/pi/guitareffect.sh &

lisage kindlasti "&", mis võimaldab Pythoni skripti taustal käivitada

Õige! See on kõik konfiguratsioon ja tarkvara sorteeritud, järgmiseks on aeg riistvara ühendada

19. samm: riistvara

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

Esimene leivaplaadi prototüüp

20. samm: korpuse kujundus

Korpuse disain
Korpuse disain
Korpuse disain
Korpuse disain

Korpus on kujundatud ja renderdatud suurepärases Fusion360 -s

21. samm: sisikond

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

22. etapp: lõplik kokkupanek

Lõplik kokkupanek
Lõplik kokkupanek
Lõplik kokkupanek
Lõplik kokkupanek
Lõplik kokkupanek
Lõplik kokkupanek

Samm 23: Walaboti kinnitamine alusele

Walaboti kinnitamiseks alusele
Walaboti kinnitamiseks alusele

Selle kinnitamiseks kasutage walabotiga kaasasolevat isekleepuvat metallketast

Samm: riistvara STL -failid 3D -printimiseks

25. samm. Skeemid juhtme ühendamiseks

26. samm: kood

Kasutage oma projekti jaoks lisatud Pythoni skripti

from _future_ import print_functionfys sys impordiplatvormilt os impordisüsteemist blynkapi import Blynk import WalabotAPI impordi aja import RPi. GPIO kui GPIO

#seadistage GPIO, kasutades pardanumbrit

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

#blynk autentimismärk

auth_token = "sinu_autoh_token_siin"

# Importige servojuhtimiseks PCA9685 moodul.

import Adafruit_PCA9685

#import LCD -moodul asukohast

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

# Vormindage PCA9685 vaikimisi aadressi (0x40) kasutades.

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk -objekti

vaikimisi = 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")

Lävi = Blynk (auth_token, pin = "V8")

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

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

def LCD seadistamine ():

LCD1602.init (0x27, 1) # init (alam aadress, taustvalgus)

def numMap (x, in_min, in_max, out_min, out_max): "" "kasutatakse walaboti näitude kaardistamiseks servoasendisse" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# kasutage seda algandmete ümardamiseks määratud väärtusele

def myRound (x, base = 2): return int (baas * ümmargune (ujuk (x)/alus))

#ekstraheerib numbri tagastatud blynk -stringist

def numberEkstrakt (val): val = str (val) return int (filter (str. digitaalne, val))

# Seadke sageduseks 60 Hz, sobib hästi servodele.

pwm.set_pwm_freq (60)

# Minimaalse ja maksimaalse servopulsi pikkuste vaikeseadete seadistamine

SERVO_MIN = 175 # Minimpulsi pikkus 4096 -st SERVO_MAX = 575 # Maksimaalne impulsi pikkus 4096 -st

# walaboti vaikeväärtused

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

THRESHOLD = 1

# muutujat blynk lülitamiseks

on = "[u'1 ']"

Walaboti klass:

def _init _ (ise):

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

def blynkConfig (ise):

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)

THRESHOLD = Threshold.get_val ()

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

else: # kui midagi blynk -rakendusest pole, laaditakse vaikimisi SERVO_MIN = 175 # Minimpulsi pikkus 4096 -st SERVO_MAX = 575 # Maksimaalne impulsi pikkus 4096 -st

# walaboti vaikeväärtused

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 (ise): try: self.wlbt. ConnectAny () self.isConnected = Tõeline ise.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_MTI) self.wlbt. FILTER_TYPE_MTI (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RES) self.et.wlbt.html. SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD), välja arvatud self.wlbt. WalabotError as err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' tõsta viga

def start (ise):

self.wlbt. Start ()

def kalibreeri (ise):

self.wlbt. StartCalibration ()

def get_targets (ise):

self.wlbt. Trigger () tagastab self.wlbt. GetSensorTargets ()

def stop (ise):

self.wlbt. Stop ()

katkesta ühendus (ise):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDseadistamine () samas kui lipp: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Vajutage nuppu Start') LCD1602. Kirjutage (0, 1, 'algus') time.sleep (2), kui (str (check) == on): flag = False else: check = start_button.get_val () # kontrollige blynk -käivitusnupu vajutamist, kui (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, "OK! Teeme ära")

LCD1602.write (0, 1, ") wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () kui pole wlbt.isÜhendatud: LCD1602.write (0, 0," Ei ole ühendatud ") 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, 'Walaboti käivitamine')

appcheck = start_button.app_status () lipp = True # reset lipp põhiprogrammi jaoks

samas lipp: # kasutatakse efekti ooterežiimi lülitamiseks (tõhusalt)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for käivitusnupp vajutage appcheck = start_button.app_status ()

muidu:

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

xval = 0

yval = 0 zval = 0 keskmine = 2 delayTime = 0

target = wlbt.get_targets ()

kui len (sihtmärgid)> 0:

j vahemikus (keskmine):

target = wlbt.get_targets ()

kui len (sihtmärgid)> 0: prindi (len (sihtmärgid)) sihtmärgid = sihtmärgid [0]

print (str (target.xPosCm))

xval += int (target.xPosCm) yval += int (target.yPosCm) zval += int (target.zPosCm) time.sleep (delayTime) else: print ("ilma sihtmärkideta") xval = xval/keskmine

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

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

yval = yval/keskmine

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

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

zval = zval/keskmine

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

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

muidu:

print ("ilma sihtmärkideta") LCD1602.write (0, 0, "Seiskamine") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

kui _name_ == '_main_':

kuigi tõsi: main ()

kitariefekti jaoks.sh

#!/bin/sh

cd /kodu /pi

sudo python GuitarEffectCLI.py

RC kohaliku faili koopia viitamiseks

#!/bin/sh -e # # rc.local # # See skript käivitatakse iga mitme kasutaja taseme lõpus. # Veenduge, et skript "väljub 0" edu korral või mõni muu # väärtus vea korral. # # Selle skripti lubamiseks või keelamiseks muutke lihtsalt täitmisbitte #. # # Vaikimisi ei tee see skript midagi.

# Printige IP -aadress

_IP = $ (hostinimi -I) || tõsi, kui ["$ _IP"]; seejärel printf "Minu IP -aadress on %s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "sa lähed siia" &

magama 10 sudo /home/pi/guitareffect.sh & exit 0

Samm: Githubi hoidlad kasutamiseks

Kasutage seda Sunfounderi LCD -ekraani jaoks

github.com/daveyclk/SunFounder_SensorKit_f…

Kasutage seda servo draiveri jaoks

github.com/daveyclk/Adafruit_Python_PCA968…

Kasutage seda Blynk Python HTTPS ümbrise jaoks

github.com/daveyclk/blynkapi

28. samm: järeldus

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Järeldus
Järeldus
Järeldus
Järeldus

See on olnud järsk õppimiskõver, kuid on seda väärt.

Minu äravõtmised on

  • Ma pidin Pythoni õppima..tuli välja, et see on äss
  • Ühendas Raspberry Pi Pythoni teenusega Blynk IoT. Seda ei toetata ametlikult, seega on selle funktsioonidel teatud piirangud. Töötab siiski suurepäraselt!
  • Selgub, et Walabot sobib suurepäraselt muusikaliseks väljenduseks. Ma kasutasin seda Korg SDD3000 peal, kuid saate kasutada mis tahes efekti, mis teile meeldib

Minge ise järele. See ei piirdu kitarriefektidega, mind saab kasutada mis tahes efektiga instrumentidega.

Vaarika Pi võistlus 2017
Vaarika Pi võistlus 2017
Vaarika Pi võistlus 2017
Vaarika Pi võistlus 2017

Võistlus Raspberry Pi 2017

Soovitan: