Sadržaj:

Walabot FX - Kontrola efekata gitare: 28 koraka (sa slikama)
Walabot FX - Kontrola efekata gitare: 28 koraka (sa slikama)

Video: Walabot FX - Kontrola efekata gitare: 28 koraka (sa slikama)

Video: Walabot FX - Kontrola efekata gitare: 28 koraka (sa slikama)
Video: Почему игра на музыкальном инструменте полезна для мозга — Анита Коллинс 2024, Juli
Anonim
Walabot FX - Kontrola efekata gitare
Walabot FX - Kontrola efekata 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

Premosnice (općenito)

DPDT nožni prekidač za blokiranje

Korg SDD3000-PDL

Softverski OS, aplikacije i mrežne usluge

Autodesk Fusion360 -

Blynk -

Alati itd

3D štampač

Lemilica

Korak 2: Sažetak

Getting Started
Getting Started

Kako bi bilo kontrolirati muzički izraz ne koristeći ništa osim položaja svoje gitare u 3D prostoru? Pa, hajde da prototipiramo nešto i saznamo!

Korak 3: Osnovna ideja

Htio sam moći kontrolirati parametar 3 efekta u stvarnom vremenu, želio sam to učiniti koristeći položaj gitare. Dakle, jedna stvar je bila jasna, trebat će mi nekoliko stvari.

  • Senzor koji može vidjeti 3D prostor
  • Servo za okretanje dugmadi
  • LCD ekran
  • Serverski upravljački program za I2C
  • A Raspberry Pi
  • Da biste naučili Python

Korak 4: Walabot

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

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

Ovo ć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 zvuk gitarskog efekta, u stvarnom vremenu, bez dodirivanja pedale.

Win.

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

Korak 5: Početak

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

Kupio sam SD karticu od 16 GB sa 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 za konfiguraciju 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 komandne ljuske i upisivanjem

sudo apt-get update

sudo apt-get dist-upgrade

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

Ovo može potrajati neko vrijeme da završite, 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 komandne ljuske:

cd preuzimanja

sudo dpkg -I walabotSDK_RasbPi.deb

Korak 8: Postavljanje Raspberry Pi - 3

Moramo početi konfigurirati RPi za korištenje i2c sabirnice. 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 komandne ljuske:

sudo nano /etc /modules

dodajte ove 2 žice u odvojene 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 komandne ljuske:

sudo nano /boot/config.txt

dodajte sljedeće redove na kraj datoteke:

safe_mode_gpio = 4

max_usb_current = 1

RPi je odličan 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? Pa, kako je super lako kodirati, brzo se pokrenuti i na raspolaganju je hrpa dobrih primjera pythona! nikad ga prije nisam koristio i uskoro sam 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 komandne ljuske

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

Korak 12: Za servo sučelje

Iz komandne ljuske

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

cd ~

git clone

cd Adafruit_Python_PCA9685

sudo python setup.py install

Zašto moramo koristiti servo upravljački program? Pa, iz 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 direktno iz RPi -a, riskirate da mu eksplodirate

2. Vremena PWM -a (Pulse Width Modulation) koja kontroliraju položaj servomotora su vrlo važna. Kako 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 i dopušta dodavanje do 16 servo pogona, tako da je ovo odlično za proširenje.

Korak 13: Za LCD

Blynk
Blynk

otvorite svoj RPi web preglednik

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

skinuti

github.com/daveyclk/SunFounder_SensorKit_…

Iz komandne ljuske:

sudo mkdir/usr/share/sunfounder

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

LCD se koristi da upozori korisnika šta se tačno dešava. 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 da mi date daljinski upravljač walabota da zaista biram u postavkama …

Jedan problem. Blynk trenutno nije podržan na Python platformi, bugger. Ali ne bojte se! uspio sam pronaći zgodan mali posao koji omogućava 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)

Kada to učinite. morat ćete postaviti aplikaciju kako je prikazano na slikama. Ovako će se povezati 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 komandne ljuske:

sudo git clone

sudo pip install blynkapi

Drugo, morate instalirati Blynk uslugu na RPi

Iz komandne ljuske:

git clone

cd blynk-library/linux

očisti sve

da biste pokrenuli uslugu blynk

sudo./blynk --token = VašAuthToken

Da biste osigurali da Blynk usluga radi 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.local početak

Blynk servis bi sada trebao biti pokrenut

Korak 18: Automatsko pokretanje skripte

Sada kada je sve ovo postavljeno i konfigurirano i imamo spreman python kod. možemo postaviti stvari na automatsko pokretanje kako bismo odbacili tastaturu i monitore

Postoji nekoliko stvari koje treba učiniti

Napravite novu datoteku skripte za pokretanje Python programa

sudo nano guitareffect.sh

dodajte ove redove

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

obavezno ga sačuvajte

Zatim moramo dati dozvolu 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 &

obavezno uključite "&" koji omogućava da se Python skripta izvodi u pozadini

Tačno! To je sve što se tiče konfiguracije i softvera, 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 odličnom Fusion360

Korak 21: Upuci

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 koristite samoljepljivi metalni disk koji dolazi s walabotom

Korak 24: Hardverske STL datoteke za 3D štampanje

Korak 25: Sheme ožičenja

Korak 26: Šifra

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 PCA9685 modul za servo kontrolu.

import Adafruit_PCA9685

#import LCD modul s lokacije

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

# Inicijalizirajte PCA9685 koristeći zadanu adresu (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 walabot očitanja na 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))

#extract number from the return blynk string

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 minimalne i maksimalne duljine servo impulsa

SERVO_MIN = 175 # Minimalna dužina impulsa od 4096 SERVO_MAX = 575 # Maksimalna dužina 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 = Netačno 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čenja (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 = 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: # ako ništa od blynk aplikacije, zadane postavke učitavanja SERVO_MIN = 175 # Minimalna dužina impulsa od 4096 SERVO_MAX = 575 # Maksimalna dužina 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_TYPDymic_md) (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 greška: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' podići greš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 (samo):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () dok je 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 tipke ako je (GPIO.input (18) == 0): #check nožna sklopka = False

LCD1602.write (0, 0, "U redu! Uradimo 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 = Tačno # zastavica za resetovanje za glavni prog

while flag: # koristi se za stavljanje efekta u stanje pripravnosti (efikasno)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check zastavica za nožni prekidač = False else: check = start_button.get_val () #check za dugme 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) time.sleep (delayTime) 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/prosek

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

if _name_ == '_main_':

dok True: main ()

za guitareffect.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

Kopija RC lokalne datoteke za referencu

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

# Odštampajte IP adresu

_IP = $ (ime hosta -I) || true ako ["$ _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 servo upravljački program

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 se toliko isplatilo.

Moja oduzimanja su

  • Morao sam naučiti Python..ispostavilo se da je as
  • Povezao Python na Raspberry Pi sa Blynk IoT uslugom. Ovo nije službeno podržano pa postoje neka ograničenja njegovih funkcija. Ipak i dalje odlično funkcionira!
  • Ispostavilo se da je Walabot odličan za muzičko izražavanje. Koristio sam ga na Korgu SDD3000, ali možete koristiti bilo koji efekt koji želite

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

Raspberry Pi takmičenje 2017
Raspberry Pi takmičenje 2017
Raspberry Pi takmičenje 2017
Raspberry Pi takmičenje 2017

Drugoplasirani na takmičenju Raspberry Pi 2017

Preporučuje se: