Sadržaj:

Walabot FX - Upravljanje efektom gitare: 28 koraka (sa slikama)
Walabot FX - Upravljanje efektom gitare: 28 koraka (sa slikama)

Video: Walabot FX - Upravljanje efektom gitare: 28 koraka (sa slikama)

Video: Walabot FX - Upravljanje efektom gitare: 28 koraka (sa slikama)
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, Srpanj
Anonim
Walabot FX - Upravljanje efektima gitare
Walabot FX - Upravljanje efektima gitare

Upravljajte svojim omiljenim gitarskim efektom ne koristeći ništa osim sjajnih poza gitare!

Korak 1: Stvari koje će vam trebati

Hardverske komponente

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanalni 12-bitni PWM servo upravljački program za Arduino i Raspberry Pi

Servo (općenito) Nema veze

9V isječak za bateriju

Držač baterije 4xAA

AA baterije

Kratkospojne žice (općenito)

DPDT Latching Action Foot Switch

Korg SDD3000-PDL

Softverski OS, aplikacije i mrežne usluge

Autodesk Fusion360 -

Blynk -

Alati itd

3D pisač

Lemilica

Korak 2: Sažetak

Getting Started
Getting Started

Kako bi bilo kontrolirati glazbeni izraz ne koristeći ništa osim položaja svoje gitare u 3D prostoru? Pa, napravimo nešto po prototipu i saznajmo!

Korak 3: Osnovna ideja

Htio sam moći kontrolirati parametar 3 efekta u stvarnom vremenu, želio sam to učiniti koristeći način na koji sam postavio svoju gitaru. Dakle, jedno je bilo jasno, trebat će mi nekoliko stvari.

  • Senzor koji može vidjeti 3D prostor
  • Servo za okretanje gumba
  • LCD zaslon
  • Serverski upravljački program za I2C
  • Pivo od maline Pi
  • Za učenje Pythona

Korak 4: Walabot

Želite vidjeti kroz zidove? Osjetljivi objekti u 3D prostoru? Osjećate li da dišete s druge strane sobe? Pa, imaš sreće!

Walabot je potpuno novi način za otkrivanje prostora oko vas pomoću radara male snage.

To će biti ključno za ovaj projekt, mogao bih uzeti karteasanske (X-Y-Z) koordinate objekata u 3D prostoru i preslikati ih na servo položaje mijenjajući kako zvuči gitarski efekt, u stvarnom vremenu, bez dodirivanja pedale.

Pobijediti.

Više informacija o Walabotu možete pronaći ovdje

Korak 5: Početak

Prvo, trebat će vam računalo za pogon Walabota, za ovaj projekt koristim Raspberry Pi 3 (ovdje se spominje na RPi) zbog ugrađenog WiFi -a i općenitog dodatnog napora

Kupio sam SD karticu od 16 GB s unaprijed instaliranim NOOBS -om kako bi stvari bile lijepe i jednostavne, te sam odlučio instalirati Raspian kao svoj Linux OS po izboru

(ako niste upoznati s načinom instaliranja Raspiana, odvojite trenutak da ovo malo pročitate)

U redu, nakon što pokrenete Raspian na svom RPi -u, potrebno je poduzeti nekoliko koraka konfiguracije kako biste pripremili stvari za naš projekt

Korak 6: Postavljanje Raspberry Pi - 1

Prvo provjerite imate li najnoviju verziju kernela i provjerite ima li ažuriranja otvaranjem naredbene ljuske i upisivanjem

sudo apt-get ažuriranje

sudo apt-get dist-upgrade

(sudo je dodan kako biste bili sigurni da imate administrativne privilegije, npr. stvari će raditi)

Ovo može potrajati dok se ne završi pa idite i popijte šalicu čaja.

Korak 7: Postavljanje Raspberry Pi - 2

Morate instalirati Walabot SDK za RPi. Iz vašeg RPi web preglednika idite na https://www.walabot.com/gettingstarted i preuzmite Raspberry Pi Installer paket.

Iz naredbene ljuske:

cd preuzimanja

sudo dpkg -I walabotSDK_RasbPi.deb

Korak 8: Postavljanje Raspberry Pi - 3

Moramo početi konfigurirati RPi za korištenje sabirnice i2c. Iz naredbene ljuske:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

nakon što to učinite, morate dodati sljedeće u datoteku modula

Iz naredbene ljuske:

sudo nano /etc /moduli

dodajte ove 2 žice u zasebne redove:

i2c-dev

i2c-bcm2708

Korak 9: Postavljanje Raspberry Pi - 4

Walabot crpi priličnu količinu struje, a mi ćemo također koristiti GPIO -e za kontrolu stvari pa ih moramo postaviti

Iz naredbene ljuske:

sudo nano /boot/config.txt

dodajte sljedeće retke na kraj datoteke:

safe_mode_gpio = 4

max_usb_current = 1

RPi je izvrstan alat za proizvođače, ali je ograničen u struji koju može poslati Walabotu. Stoga dodajemo maksimalnu struju od 1Amp umjesto standardnijih 500mA

Korak 10: Python

Zašto Python? dobro, jer je vrlo jednostavno kodirati, brzo se pokrenuti i na raspolaganju je hrpa dobrih primjera pythona! nikad ga prije nisam koristio i uskoro je počeo raditi. Sada je RPi konfiguriran za ono što želimo, sljedeći korak je konfiguriranje Pythona za pristup Walabot API -ju, LCD servo sučeljima

Korak 11: Za Walabot

Iz naredbene ljuske

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

Korak 12: Za servo sučelje

Iz naredbene ljuske

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

cd ~

git klon

cd Adafruit_Python_PCA9685

sudo python setup.py install

Zašto moramo koristiti servo upravljački program? Pa, za RPi nekoliko razloga.

1. Struja koju vuče servo može biti vrlo velika, a taj broj postaje sve veći što imate više servomotora (naravno). Ako upravljate servo izravnim upravljanjem iz RPi -a, riskirate da mu pušete u izvor napajanja

2. Vrlo su važna vremena PWM -a (Pulse Width Modulation) koja kontrolira položaj servomotora. Budući da RPi ne koristi OS u stvarnom vremenu (može doći do prekida i slično) vrijeme nije točno i može učiniti da se servomotori nervozno trzaju. Namjenski upravljački program omogućuje preciznu kontrolu, ali također omogućuje dodavanje do 16 servo pogona, pa je to odlično za proširenje.

Korak 13: Za LCD

Blynk
Blynk

otvorite RPi web preglednik

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

preuzimanje datoteka

github.com/daveyclk/SunFounder_SensorKit_…

Iz naredbene ljuske:

sudo mkdir/usr/share/sunfounder

Pomoću grafičkog istraživača kopirajte mapu python iz zip datoteke u novu mapu sunfounder

LCD se koristi za upućivanje korisnika o tome što se točno događa. Prikaz procesa konfiguracije do vrijednosti x, y i z koje se mapiraju na svaki servo

Korak 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk je briljantna IoT usluga koja vam omogućuje stvaranje prilagođene aplikacije za kontrolu vaših stvari. Činilo se kao savršeno rješenje za daljinsko upravljanje walabotom za stvarno biranje u postavkama …

Jedan problem. Blynk trenutno nije podržan na platformi Python, bugger. Ali ne bojte se! uspio sam pronaći lijep mali posao koji omogućuje daljinsko upravljanje i daljinski unos parametara! malo je hacky

prvi korak je preuzimanje aplikacije Blynk iz vaše omiljene trgovine aplikacija

Drugo, prijavite se za račun

Nakon što to učinite, otvorite aplikaciju i pokrenite novi projekt, odabirom Raspberry Pi 3 kao hardvera.

Aplikacija će vam dodijeliti pristupni token (ovo će vam trebati za unos koda)

Nakon što ste to učinili. morat ćete postaviti aplikaciju kako je prikazano na slikama. Ovako će se spojiti s 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: Ovaj QR kôd možete koristiti s aplikacijom Blynk za kloniranje mog projekta kako biste uštedjeli vrijeme

Ovaj QR kôd možete koristiti s aplikacijom Blynk za kloniranje mog projekta kako biste uštedjeli vrijeme
Ovaj QR kôd možete koristiti s aplikacijom Blynk za kloniranje mog projekta kako biste uštedjeli vrijeme

U redu Sada kada je aplikacija sve postavljena, možemo konfigurirati Python i RPi da razgovaraju s njom putem Interneta. magija

Korak 17: Pokretanje Blynka s Raspberry Pi -om i korištenje Blynk HTTPS -a za Python

Prvo morate instalirati Blynk HTTPS omot za Python

Iz naredbene ljuske:

klon sudo git

sudo pip instalirajte blynkapi

Drugo, morate instalirati Blynk uslugu na RPi

Iz naredbene ljuske:

git klon

cd blynk-library/linux

očisti sve

za pokretanje usluge blynk

sudo./blynk --token = VašAuthToken

Kako biste osigurali da se usluga Blynk pokreće pri pokretanju, morate izmijeniti /etc/rc.local

radeći

sudo nano /etc/rc.local

dodaj ovo na kraju

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

(uključio sam kopiju moje /etc/rc.local datoteke u odjeljak koda za referencu)

Da biste provjerili radi li jednostavno upišite

sudo /etc/rc.lokalni početak

Usluga Blynk sada bi trebala biti pokrenuta

Korak 18: Automatsko pokretanje skripte

Sad kad je sve ovo postavljeno i konfigurirano te imamo spreman python kod. možemo postaviti stvari na automatsko pokretanje kako bismo odbacili tipkovnicu i monitore

Postoji nekoliko stvari koje treba učiniti

Izradite novu datoteku skripte za pokretanje programa Python

sudo nano guitareffect.sh

dodajte ove retke

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

svakako ga spremite

Zatim moramo dati dopuštenje skripti za pokretanje upisivanjem

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

I na kraju, moramo dodati ovu skriptu u datoteku /etc/rc.local s kojom smo ranije radili.

Sudo nano /etc/rc.local

Dodati

/home/pi/guitareffect.sh &

svakako uključite "&" koji omogućuje da se Python skripta izvodi u pozadini

Pravo! To je sve što je s konfiguracijom i softverom sortirano, sljedeće je vrijeme za povezivanje hardvera

Korak 19: Hardver

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

Prvi prototip Breadboard -a

Korak 20: Dizajn kućišta

Dizajn kućišta
Dizajn kućišta
Dizajn kućišta
Dizajn kućišta

Kućište je dizajnirano i izrađeno u izvrsnom Fusion360

Korak 21: Upuci utrobom

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

Korak 22: Snimci završne montaže

Snimci završne montaže
Snimci završne montaže
Snimci završne montaže
Snimci završne montaže
Snimci završne montaže
Snimci završne montaže

Korak 23: Postavljanje Walabota na postolje

Za pričvršćivanje Walabota na postolje
Za pričvršćivanje Walabota na postolje

Za pričvršćivanje upotrijebite samoljepljivi metalni disk koji dolazi s walabotom

Korak 24: Hardverske STL datoteke za 3D ispis

Korak 25: Sheme ožičenja

Korak 26: Kôd

Za svoj projekt upotrijebite priloženu Python skriptu

from _future_ import print_functionfys sys import platform from os import system from blynkapi import Blynk import WalabotAPI import import import RPi. GPIO kao GPIO

#postavi GPIO pomoću numeriranja ploča

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

#blynk auth token

auth_token = "your_auth_token_here"

# Uvezite modul PCA9685 za servo upravljanje.

uvoz Adafruit_PCA9685

#import LCD modula s lokacije

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

# Inicijalizirajte PCA9685 pomoću zadane adrese (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk objekta

zadane vrijednosti = 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 (adresa slave, pozadinsko svjetlo)

def numMap (x, in_min, in_max, out_min, out_max): "" "koristi se za mapiranje walabotovih očitanja u položaj servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + van_min)

# koristite ovo za zaokruživanje neobrađenih podataka na dodijeljenu vrijednost

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

#izvlači broj iz vraćenog blynk niza

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

# Postavite frekvenciju na 60Hz, dobro za servo pogone.

pwm.set_pwm_freq (60)

# Konfigurirajte zadane vrijednosti min i max duljine servo impulsa

SERVO_MIN = 175 # Minimalna duljina impulsa od 4096 SERVO_MAX = 575 # Maksimalna duljina impulsa od 4096

# walabot zadane vrijednosti

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

PRAG = 1

# varijable za blynk prebacivanje

on = "[u'1 ']"

klasa 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 () if str (load_defaults) == on: SERVO_MAX = ServoMax.get_val () SERVO_MAX = numberExtract (SERVO_MAX) ispis ("Servo Max =", SERVO_MAX)

SERVO_MIN = ServoMin.get_val ()

SERVO_MIN = broj Izvlačenje (SERVO_MIN) ispis ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = broj Izvlačenje (R_MAX) ispis ("R max =", R_MAX)

R_MIN = Rmin.get_val ()

R_MIN = broj Izvlačenje (R_MIN) ispis ("R Min =", R_MIN)

R_RES = Rres.get_val ()

R_RES = broj Izvlačenje (R_RES) ispis ("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: # ako ništa od aplikacije blynk, zadane postavke učitavanja SERVO_MIN = 175 # Minimalna duljina impulsa od 4096 SERVO_MAX = 575 # Maksimalna duljina impulsa od 4096

# walabot zadane vrijednosti

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 = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPEwMic) (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RESX) SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) osim self.wlbt. WalabotError kao pogreška: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' podići pogrešku

def start (samo):

self.wlbt. Start ()

def calibrate (self):

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () vrati self.wlbt. GetSensorTargets ()

def stop (samo):

self.wlbt. Stop ()

def prekid veze (self):

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, 'Pritisnite Start za') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # provjerite ima li blynk start tipku pritisnite if (GPIO.input (18) == 0): #check nožna sklopka = False

LCD1602.write (0, 0, "OK! Učinimo to")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () ako nije 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, 'Pokretanje Walabota')

appcheck = start_button.app_status () flag = True # zastavica za poništavanje glavne prog

while flag: # koristi se za stavljanje učinka u stanje pripravnosti (učinkovito)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check zastavica nožnog prekidača = False else: check = start_button.get_val () #check za gumb za pokretanje pritisnite appcheck = start_button.app_status ()

drugo:

if (GPIO.input (18)! = 0): #check nožna sklopka = False

xval = 0

yval = 0 zval = 0 prosjek = 2 delayTime = 0

ciljevi = wlbt.get_targets ()

ako je len (ciljevi)> 0:

za j u rasponu (prosjek):

ciljevi = wlbt.get_targets ()

ako je len (ciljevi)> 0: ispis (len (ciljevi)) ciljevi = ciljevi [0]

ispis (str (target.xPosCm))

xval += int (ciljevi.xPosCm) yval += int (ciljevi.yPosCm) zval += int (ciljevi.zPosCm) vrijeme.spavanje (vrijeme odgode) else: print ("nema ciljeva") xval = xval/prosjek

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

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

yval = yval/prosjek

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/prosjek

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

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

drugo:

print ("nema ciljeva") LCD1602.write (0, 0, "Gašenje") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

ako je _naziv_ == '_glavni_':

dok True: main ()

za efekt gitare.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

Kopija RC lokalne datoteke za referencu

#!/bin/sh -e # # rc.local # # Ova se skripta izvršava na kraju svake višekorisničke razine izvođenja. # Provjerite hoće li skripta "izaći 0" u slučaju uspjeha ili bilo koje druge # vrijednosti u slučaju pogreške. # # Da biste omogućili ili onemogućili ovu skriptu, samo promijenite # bita izvođenja. # # Prema zadanim postavkama, ova skripta ne radi ništa.

# Ispišite IP adresu

_IP = $ (naziv hosta -I) || true if ["$ _IP"]; zatim printf "Moja IP adresa je %s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "token ide ovamo" &

spavanje 10 sudo /home/pi/guitareffect.sh i izlaz 0

Korak 27: Github spremišta za upotrebu

Koristite ovo za LCD zaslon Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

Koristite ovo za upravljački program servo

github.com/daveyclk/Adafruit_Python_PCA968…

Koristite ovo za Blynk Python HTTPS omot

github.com/daveyclk/blynkapi

Korak 28: Zaključak

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

Pa ovo je bila strma krivulja učenja, ali vrijedilo je.

Moja oduzimanja su

  • Morao sam naučiti Python..ispostavilo se da je as
  • Povezao Python na Raspberry Pi s Blynk IoT uslugom. Ovo nije službeno podržano pa postoje neka ograničenja njegovih funkcija. Ipak radi odlično!
  • Pokazalo se da je Walabot odličan za glazbeni izraz. Koristio sam ga na Korgu SDD3000, ali možete koristiti bilo koji efekt koji vam se sviđa

Idite sami. Ovo nije ograničeno na efekte gitare, mogu se koristiti sa bilo kojim instrumentom s bilo kojim učinkom.

Raspberry Pi natjecanje 2017
Raspberry Pi natjecanje 2017
Raspberry Pi natjecanje 2017
Raspberry Pi natjecanje 2017

Drugoplasirani na natjecanju Raspberry Pi 2017

Preporučeni: