Taula de continguts:

Walabot FX - Control d'efectes de guitarra: 28 passos (amb imatges)
Walabot FX - Control d'efectes de guitarra: 28 passos (amb imatges)

Vídeo: Walabot FX - Control d'efectes de guitarra: 28 passos (amb imatges)

Vídeo: Walabot FX - Control d'efectes de guitarra: 28 passos (amb imatges)
Vídeo: Electrones ingresando al cuerpo - Electricidad estática 2024, Juliol
Anonim
Walabot FX - Control d'efectes de guitarra
Walabot FX - Control d'efectes de guitarra

Controleu el vostre efecte de guitarra favorit sense fer res més que postures de guitarra impressionants.

Pas 1: coses que necessitareu

Components de maquinari

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

Controlador de servidor PWM de 16 canals SunFounder PCA9685 de 16 bits per a Arduino i Raspberry Pi

Servo (genèric) Sense enllaç

Clip de bateria de 9V

Suport de bateria 4xAA

Bateries AA

Cables de pont (genèric)

Interruptor de peu d'acció de bloqueig DPDT

Korg SDD3000-PDL

Sistemes operatius de programari, aplicacions i serveis en línia

Autodesk Fusion360 -

Blynk:

Eines, etc

Impressora 3D

Soldador

Pas 2: resum

Getting Started
Getting Started

Com seria controlar l’expressió musical fent servir només la posició de la vostra guitarra a l’espai 3D? Bé, prototipem alguna cosa i ho descobrim!

Pas 3: la idea bàsica

Volia ser capaç de controlar el paràmetre de 3 efectes en temps real, volia fer-ho fent servir com posicionava la meva guitarra. Per tant, una cosa estava clara: necessitaria algunes coses.

  • Un sensor capaç de veure espai en 3D
  • Servos per girar els poms
  • Una pantalla LCD
  • Un controlador de servo I2C
  • Un Raspberry Pi
  • Per aprendre Python

Pas 4: Walabot

Voleu veure a través de les parets? Teniu objectes de sentit a l’espai 3D? Tens sentit si respires des de l’habitació? Doncs estàs de sort!

El Walabot és una forma totalment nova de detectar l’espai que us envolta mitjançant un radar de baixa potència.

Això seria clau per a aquest projecte, seria capaç d’agafar els coodinats d’objectes de l’espai 3D (X-Y-Z) i mapar-los a posicions servo canviant el so d’un efecte de guitarra, en temps real, sense tocar el pedal.

Guanya.

Podeu trobar més informació sobre el Walabot aquí

Pas 5: Introducció

Primer de tot, necessitareu un ordinador per conduir el Walabot, per a aquest projecte estic fent servir un Raspberry Pi 3 (aquí es fa referència a RPi) a causa del WiFi integrat i de l’omph extra general

Vaig comprar una targeta SD de 16 GB amb NOOBS preinstal·lat per mantenir les coses simples i simples i vaig optar per instal·lar Raspian com el meu sistema operatiu Linux que trieu.

(si no esteu familiaritzat amb com instal·lar Raspian, preneu-vos un moment per llegir-ne una mica)

D'acord, un cop tingueu Raspian executat al vostre RPi, hi ha uns quants passos de configuració que cal fer per preparar les coses per al nostre projecte

Pas 6: Configuració del Raspberry Pi - 1

En primer lloc, assegureu-vos que esteu executant la versió més recent del nucli i comproveu si hi ha actualitzacions obrint un intèrpret d'ordres i escrivint

sudo apt-get update

sudo apt-get dist-upgrade

(s'afegeix sudo per assegurar-vos que teniu privilegis administratius, per exemple, les coses funcionaran)

Això pot trigar una estona a completar-se, així que aneu a prendre una bona tassa de te.

Pas 7: Configuració del Raspberry Pi - 2

Heu d’instal·lar l’SDK de Walabot per a RPi. Des del navegador web RPi, aneu a https://www.walabot.com/gettingstarted i descarregueu el paquet d’instal·lació de Raspberry Pi.

Des d'un intèrpret d'ordres:

descàrregues de CD

sudo dpkg -I walabotSDK_RasbPi.deb

Pas 8: Configuració del Raspberry Pi - 3

Hem de començar a configurar el RPi per utilitzar el bus i2c. Des d’un intèrpret d’ordres:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

un cop fet això, heu d'afegir el següent al fitxer de mòduls

Des d'un intèrpret d'ordres:

sudo nano / etc / modules

afegiu aquestes 2 cadenes en línies separades:

i2c-dev

i2c-bcm2708

Pas 9: Configuració del Raspberry Pi - 4

El Walabot treu una mica de corrent i també utilitzarem GPIO per controlar les coses, de manera que hem de configurar-les

Des d'un intèrpret d'ordres:

sudo nano /boot/config.txt

afegiu les línies següents al final del fitxer:

safe_mode_gpio = 4

max_usb_current = 1

El RPi és una eina excel·lent per als fabricants, però és limitat en el moment actual que pot enviar al Walabot. Per això, afegim un corrent màxim d’1Amp en lloc dels 500mA més estàndard

Pas 10: Python

Per què Python? bé, com que és molt fàcil de codificar, es pot executar ràpidament i hi ha un munt de bons exemples de python disponibles. Mai l'havia utilitzat abans i aviat vaig començar a funcionar en un tres i no res. Ara el RPi està configurat per al que volem, el següent pas és configurar Python perquè tingui accés a l'API Walabot, interfícies LCD Servo

Pas 11: pel Walabot

Des d'un intèrpret d'ordres

Instal·lar Sudo pip “/usr/share/walabot/python/WalabotAPI-1.0.21.zip”

Pas 12: per a la interfície de servo

Des d'un intèrpret d'ordres

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

cd ~

git clon

cd Adafruit_Python_PCA9685

sudo python setup.py install

Per què hem d’utilitzar un servo controlador? Bé, per un RPi hi ha un parell de raons.

1. El corrent extret per un servo pot ser molt elevat i aquest nombre augmenta quan més servos tingueu (és clar). Si conduïu el servo directky des d'un RPi, corre el risc de bufar la font d'alimentació

2. Els temps del PWM (Pulse Width Modulation) que controlen la posició dels servos són molt importants. Com que el RPi no utilitza un sistema operatiu en temps real (pot haver-hi interrupcions), els temps no són precisos i poden fer que els servos es trenquin nerviosament. Un controlador dedicat permet un control precís, però també permet afegir fins a 16 servos, de manera que és ideal per a la seva expansió.

Pas 13: per a la pantalla LCD

Blynk
Blynk

obriu el navegador web RPi

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

descarregar

github.com/daveyclk/SunFounder_SensorKit_…

Des d'un intèrpret d'ordres:

sudo mkdir / usr / share / sunfounder

Amb l'explorador gràfic, copieu la carpeta Python del fitxer zip a la nova carpeta Sunfounder

La pantalla LCD s’utilitza per demanar a l’usuari què passa exactament. Es mostra el procés de configuració fins als valors x, y i z que s’assignen a cada servo

Pas 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk és un servei de IoT brillant que us permet crear una aplicació personalitzada per controlar les vostres coses. Em va semblar la solució perfecta per donar-me control remot del walabot per marcar realment a la configuració …

Un problema. Blynk actualment no és compatible amb la plataforma Python, bugger. Però no tingueu por! He pogut trobar un petit treball que permet el control remot i l'entrada de paràmetres remots. és una mica complicat

el primer pas és descarregar l’aplicació Blynk des de la vostra botiga d’aplicacions preferida

En segon lloc, registreu-vos per obtenir un compte

Un cop fet això, obriu l'aplicació i inicieu un nou projecte, escollint Raspberry Pi 3 com a maquinari.

L'aplicació us assignarà un testimoni d'accés (ho necessitareu per introduir el vostre codi)

Un cop ho hàgiu fet. haureu de configurar l'aplicació tal com es mostra a les imatges. És així com interactuarà amb el walabot.

Pas 15: Configuració de l'aplicació Blynk

Configuració de l'aplicació Blynk
Configuració de l'aplicació Blynk
Configuració de l'aplicació Blynk
Configuració de l'aplicació Blynk
Configuració de l'aplicació Blynk
Configuració de l'aplicació Blynk

Pas 16: Podeu utilitzar aquest codi QR amb l'aplicació Blynk per clonar el meu projecte per estalviar-vos temps

Podeu utilitzar aquest codi QR amb l’aplicació Blynk per clonar el meu projecte per estalviar-vos temps
Podeu utilitzar aquest codi QR amb l’aplicació Blynk per clonar el meu projecte per estalviar-vos temps

D'acord Ara que l'aplicació està configurada, podem configurar Python i el RPi perquè hi parlin a través de les xarxes internes. Màgia

Pas 17: Execució de Blynk amb el Raspberry Pi i ús de Blynk HTTPS per a Python

En primer lloc, heu d’instal·lar l’embolcall Blynk HTTPS per a Python

Des d'un intèrpret d'ordres:

clon sudo git

sudo pip instal·lar blynkapi

En segon lloc, cal instal·lar el servei Blynk al RPi

Des d'un intèrpret d'ordres:

git clone

cd blynk-library / linux

netejar-ho tot

per executar el servei blynk

sudo./blynk --token = YourAuthToken

Per assegurar-vos que el servei de Blynk s’executa en iniciar, heu de modificar el fitxer /etc/rc.local

fent

sudo nano /etc/rc.local

afegiu-ho al final

./blynk-library/linux/blynk --token = el meu testimoni &

(He inclòs una còpia del meu fitxer /etc/rc.local a la secció de codis per a referència)

Per provar que funciona, simplement escriviu

sudo /etc/rc.local start

Ara el servei Blynk hauria d’estar en funcionament

Pas 18: execució automàtica de l'script

Ara que tot està configurat i configurat, ja tenim a punt el codi python. podem configurar les coses perquè s’executin automàticament per poder abandonar el teclat i els monitors

Hi ha algunes coses a fer

Creeu un fitxer de seqüència d'ordres nou per executar el programa Python

sudo nano guitareffect.sh

afegiu aquestes línies

#! / bin / sh

python /home/pi/GuitarEffectCLI.py

assegureu-vos de desar-lo

A continuació, hem de donar permís al script per executar-lo escrivint

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

I, finalment, hem d’afegir aquest script al fitxer /etc/rc.local amb el qual hem canviat anteriorment.

Sudo nano /etc/rc.local

Afegeix

/home/pi/guitareffect.sh &

assegureu-vos d'incloure el "&" això permet que Python Script s'executi en segon pla

Dret! Aquesta és tota la configuració i el programari ordenats, el següent és el moment de connectar el maquinari

Pas 19: el maquinari

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

Primer prototip de Breadboard

Pas 20: disseny del recinte

Disseny de tancaments
Disseny de tancaments
Disseny de tancaments
Disseny de tancaments

El recinte es va dissenyar i representar a l’impressionant Fusion360

Pas 21: Guts Shots

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

Pas 22: Tirs finals de l'assemblea

Tirs de muntatge final
Tirs de muntatge final
Tirs de muntatge final
Tirs de muntatge final
Tirs de muntatge final
Tirs de muntatge final

Pas 23: Fixar el Walabot al suport

Per fixar el Walabot al suport
Per fixar el Walabot al suport

Utilitzeu el disc de metall autoadhesiu que ve amb la walabot per fixar-lo al seu lloc

Pas 24: fitxers STL de maquinari per a la impressió 3D

Pas 25: Esquemes per connectar la cosa

Pas 26: Codi

Utilitzeu l’escriptura Python adjunta per al vostre projecte

des de _future_ importació print_functionde la plataforma d’importació sys des del sistema d’importació d’os des de la importació blynkapi importació Blynk importació WalabotAPI importació RPi. GPIO en temps d’importació

#Configurar GPIO mitjançant la numeració de la placa

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

#blynk token d'autenticació

auth_token = "vostre_auth_token_aquí"

# Importeu el mòdul PCA9685 per al control servo.

importació Adafruit_PCA9685

#import mòdul LCD des de la ubicació

des de la importació d'import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')

# Inicialitzeu el PCA9685 mitjançant l'adreça predeterminada (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# objectes blynk

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

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

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

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

def LCDsetup ():

LCD1602.init (0x27, 1) # init (adreça esclava, llum de fons)

def numMap (x, in_min, in_max, out_min, out_max): "" "s'utilitza per assignar les lectures walabot a la posició servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# utilitzeu això per arrodonir les dades brutes al valor assignat

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

#extreu el número de la cadena blynk retornada

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

# Estableix la freqüència a 60 Hz, és bo per als servos.

pwm.set_pwm_freq (60)

# Configureu els valors predeterminats de longituds de polsos mínims i màxims

SERVO_MIN = 175 # Longitud de pols mínima de 4096 SERVO_MAX = 575 # Longitud de pols màxima de 4096

# valors predeterminats de walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

LLIMI = 1

# variables per al canvi de blynk

on = "[u'1 ']"

classe Walabot:

def _init _ (auto):

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

def blynkConfig (auto):

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) imprimir ("R Min =", R_MIN)

R_RES = Rres.get_val ()

Impressió R_RES = numberExtract (R_RES) ("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 = Llindar.get_val ()

SORTIU = número Extreure (SORTIU) imprimir ("Llindar =", SORTIU)

else: # si no hi ha res de l'aplicació blynk, carregueu els valors predeterminats SERVO_MIN = 175 # Longitud de pols mínima de 4096 SERVO_MAX = 575 # Longitud de pols màxima de 4096

# valors predeterminats de walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

LLIMI = 1

def connect (self): try: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_MTI) self.wlbt (self.wlbt. FILTER_TYPE_NONE) # self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (-THETA_MAX, THETA_MAX, THETA_RES) self.wlMAX. SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) excepte self.wlbt. WalabotError com a error: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' augmenta error

inici per defecte (auto):

self.wlbt. Start ()

calibració per defecte (auto):

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () retorna self.wlbt. GetSensorTargets ()

parada per defecte (auto):

self.wlbt. Stop ()

desconnectar (auto):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () while flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Control d'efectes') time.sleep (2) LCD1602.write (0, 0, "Premeu Inici per") LCD1602.write (0, 1, "begin") time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # comproveu si hi ha el botó d'inici de blynk, premeu si (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, "D'acord! Fem-ho")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () si no wlbt.is Connectat: LCD1602.write (0, 0, 'No connectat') 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, "Inici de Walabot")

appcheck = start_button.app_status () flag = True # reset flag per prog principal

mentre es marca: # s'utilitza per posar efecte en espera (efectivament)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for botó d'inici premeu appcheck = start_button.app_status ()

en cas contrari:

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

xval = 0

yval = 0 zval = 0 mitjana = 2 delayTime = 0

targetes = wlbt.get_targets ()

si len (objectius)> 0:

per a j en el rang (mitjana):

targetes = wlbt.get_targets ()

si len (objectius)> 0: imprimir (len (objectius)) objectius = objectius [0]

print (str (target.xPosCm))

xval + = int (target.xPosCm) yval + = int (target.yPosCm) zval + = int (target.zPosCm) time.sleep (delayTime) else: print ("sense objectius") xval = xval / mitjana

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

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

yval = yval / mitjana

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

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

zval = zval / mitjana

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

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

en cas contrari:

imprimir ("sense objectius") LCD1602.write (0, 0, "Apagar") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

si _nom_ == '_principal_':

mentre que True: main ()

per al guitareffect.sh

#! / bin / sh

cd / home / pi

sudo python GuitarEffectCLI.py

Una còpia del fitxer local RC com a referència

#! / bin / sh -e # # rc.local # # Aquest script s'executa al final de cada nivell d'execució multiusuari. # Assegureu-vos que l'script "sortirà de 0" en cas d'èxit o de qualsevol altre # valor en cas d'error. # # Per habilitar o desactivar aquest script, canvieu l'execució # bits. # # Per defecte, aquest script no fa res.

# Imprimiu l'adreça IP

_IP = $ (nom d’amfitrió -I) || cert si ["$ _IP"]; després printf "La meva adreça IP és% s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "el teu token va aquí" &

dormir 10 sudo /home/pi/guitareffect.sh i sortir de 0

Pas 27: repositoris de Github a utilitzar

Utilitzeu això per a la pantalla LCD de Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

Utilitzeu això per al controlador de servo

github.com/daveyclk/Adafruit_Python_PCA968…

Utilitzeu-lo per a l'embolcall HTTPS Blynk Python

github.com/daveyclk/blynkapi

Pas 28: Conclusió

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Conclusió
Conclusió
Conclusió
Conclusió

Bé, ha estat una corba d'aprenentatge pronunciada, però ha valgut la pena.

Els meus take away són

  • Vaig haver d'aprendre Python … resulta que és l'as
  • Interfície de Python al Raspberry Pi amb el servei IoT de Blynk. Això no s'admet oficialment, de manera que hi ha alguns límits a les seves funcions. Tot i així, funciona molt bé.
  • Resulta que el Walabot és ideal per a l’expressió musical. L'he utilitzat en un Korg SDD3000, però podeu utilitzar qualsevol efecte que vulgueu

Proveu-ho vosaltres mateixos. Això no es limita als efectes de guitarra, es pot utilitzar amb qualsevol instrument amb qualsevol efecte.

Concurs de gerds Pi 2017
Concurs de gerds Pi 2017
Concurs de gerds Pi 2017
Concurs de gerds Pi 2017

Accèssit al concurs Raspberry Pi 2017

Recomanat: