Cuprins:

Walabot FX - Controlul efectului de chitară: 28 de pași (cu imagini)
Walabot FX - Controlul efectului de chitară: 28 de pași (cu imagini)

Video: Walabot FX - Controlul efectului de chitară: 28 de pași (cu imagini)

Video: Walabot FX - Controlul efectului de chitară: 28 de pași (cu imagini)
Video: Walabot FX- Guitar Effect Control. Full Demo 2024, Noiembrie
Anonim
Walabot FX - Controlul efectului de chitară
Walabot FX - Controlul efectului de chitară

Controlați efectul dvs. preferat de chitară folosind altceva decât posturi minunate de chitară!

Pasul 1: Lucruri de care vei avea nevoie

Componente hardware

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16 canale PWM Servo Driver pentru Arduino și Raspberry Pi

Servo (generic) Fără legătură

Clema bateriei de 9V

Suport baterie 4xAA

Baterii AA

Sârme jumper (generice)

Comutator de picior cu acțiune DPDT

Korg SDD3000-PDL

Sisteme de operare software, aplicații și servicii online

Autodesk Fusion360 -

Blynk -

Instrumente etc

imprimantă 3d

Ciocan de lipit

Pasul 2: Rezumat

Getting Started
Getting Started

Cum ar fi să controlați expresia muzicală folosind altceva decât poziția chitarei dvs. în spațiul 3D? Ei bine, hai să protejăm ceva și să aflăm!

Pasul 3: Ideea de bază

Am vrut să pot controla parametrii cu 3 efecte în timp real, am vrut să fac asta folosind modul în care mi-am poziționat chitara. Deci, un lucru era clar, aveam să am nevoie de câteva lucruri.

  • Un senzor care poate vedea spațiul 3D
  • Servo pentru rotirea butoanelor
  • Un ecran LCD
  • Un driver Servo I2C
  • Un Raspberry Pi
  • Pentru a învăța Python

Pasul 4: Walabot

Vrei să vezi prin pereți? Obiecte de simț în spațiul 3D? Ai sens dacă respiri de peste cameră? Ei bine, ai noroc!

Walabot este un mod cu totul nou de a detecta spațiul din jurul tău folosind radar de mică putere.

Aceasta va fi cheia acestui proiect, aș putea să iau carteasan (X-Y-Z) coodinate de obiecte în spațiul 3D și să le mapez în poziții servo schimbând modul în care sună un efect de chitară, în timp real, fără a atinge pedala.

Victorie.

Mai multe informații despre Walabot pot fi găsite aici

Pasul 5: Introducere

Mai întâi, veți avea nevoie de un computer pentru a conduce Walabot, pentru acest proiect folosesc un Raspberry Pi 3 (aici, la care se face referire la RPi) datorită WiFi-ului încorporat și a extraordinarului

Am cumpărat un card SD de 16 GB cu NOOBS preinstalat pentru a păstra lucrurile frumoase și simple și am ales să instalez Raspian ca sistemul meu de operare Linux la alegere

(dacă nu sunteți familiarizați cu modul de instalare a Raspian, vă rugăm să luați un moment pentru a citi puțin despre aceasta)

OK, după ce Raspian rulează pe RPi, trebuie parcurși câțiva pași de configurare pentru a pregăti lucrurile pentru proiectul nostru

Pasul 6: Configurarea Raspberry Pi - 1

În primul rând, asigurați-vă că rulați cea mai recentă versiune de kernel și verificați dacă există actualizări deschizând un shell de comandă și tastând

sudo apt-get update

sudo apt-get dist-upgrade

(sudo este adăugat pentru a vă asigura că aveți privilegii administrative de ex. lucrurile vor funcționa)

Acest lucru poate dura ceva timp, așa că mergeți și luați o ceașcă frumoasă de ceai.

Pasul 7: Configurarea Raspberry Pi - 2

Trebuie să instalați Walabot SDK pentru RPi. Din browserul dvs. web RPi accesați https://www.walabot.com/gettingstarted și descărcați pachetul de instalare Raspberry Pi.

Dintr-un shell de comandă:

descărcări de CD-uri

sudo dpkg -I walabotSDK_RasbPi.deb

Pasul 8: Configurarea Raspberry Pi - 3

Trebuie să începem să configurăm RPi pentru a utiliza magistrala i2c. Dintr-un shell de comandă:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

după ce ați făcut acest lucru, trebuie să adăugați următoarele în fișierul de module

Dintr-un shell de comandă:

sudo nano / etc / modules

adăugați aceste 2 șiruri pe linii separate:

i2c-dev

i2c-bcm2708

Pasul 9: Configurarea Raspberry Pi - 4

Walabot atrage un pic de curent și vom folosi, de asemenea, GPIO-urile pentru a controla lucrurile, așa că trebuie să le configurăm

Dintr-un shell de comandă:

sudo nano /boot/config.txt

adăugați următoarele rânduri la sfârșitul fișierului:

safe_mode_gpio = 4

max_usb_current = 1

RPi este un instrument excelent pentru producători, dar este limitat în curent pe care îl poate trimite la Walabot. De aceea, adăugăm un curent maxim de 1Amp, mai degrabă decât 500mA mai standard

Pasul 10: Python

De ce Python? Ei bine, deoarece este foarte ușor de codat, este rapid să funcționeze și există o mulțime de exemple bune de python disponibile! Nu l-am mai folosit până acum și am fost în curând funcțional în cel mai scurt timp. Acum, RPi este configurat pentru ceea ce dorim, următorul pas este să configurați Python pentru a avea acces la API Walabot, interfețe LCD Servo

Pasul 11: Pentru Walabot

Dintr-un shell de comandă

Sudo pip instalează „/usr/share/walabot/python/WalabotAPI-1.0.21.zip”

Pasul 12: Pentru interfața Servo

Dintr-un shell de comandă

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

cd ~

git clone

cd Adafruit_Python_PCA9685

sudo python setup.py instalare

De ce trebuie să folosim un servo-driver? Ei bine, pentru un RPi, câteva motive.

1. Curentul tras de un servo poate fi foarte mare, iar acest număr devine mai mare cu cât aveți mai multe servo (desigur). Dacă conduceți servo directky de la un RPi, riscați să suflați sursa de alimentare

2. Timpurile PWM (Pulse Width Modulation) care controlează poziția servo sunt foarte importante. Deoarece RPi nu folosește un sistem de operare în timp real (pot exista întreruperi și altele), temporizările nu sunt exacte și pot face ca servo-urile să se zvârcolească nervos. Un driver dedicat permite un control precis, dar permite, de asemenea, adăugarea a până la 16 servo-uri, deci este excelent pentru extindere.

Pasul 13: Pentru ecranul LCD

Blynk
Blynk

deschideți browserul web RPi

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

Descarca

github.com/daveyclk/SunFounder_SensorKit_…

Dintr-un shell de comandă:

sudo mkdir / usr / share / sunfounder

Folosind exploratorul grafic, copiați folderul python din fișierul zip în noul dvs. folder sunfounder

Ecranul LCD este utilizat pentru a solicita utilizatorului ce anume se întâmplă. Afișarea procesului de configurare până la valorile x, y și z care sunt mapate pe fiecare servo

Pasul 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk este un serviciu IoT genial care vă permite să creați o aplicație personalizată pentru a vă controla lucrurile. Mi s-a părut soluția perfectă pentru a-mi oferi controlul de la distanță al walabotului pentru a forma într-adevăr în setări …

O problema. Blynk nu este acceptat în prezent pe platforma Python, bugger. Dar nu vă temeți! Am reușit să găsesc un mic lucru frumos care permite controlul de la distanță și introducerea parametrilor de la distanță! este un pic ciudat

primul pas este să descărcați aplicația Blynk din magazinul dvs. de aplicații preferat

În al doilea rând, înscrieți-vă pentru un cont

Odată ce ați terminat, deschideți aplicația și începeți un nou proiect, alegând Raspberry Pi 3 ca hardware.

Aplicația vă va aloca un jeton de acces (veți avea nevoie de acesta pentru a introduce codul)

Odată ce ai făcut asta. va trebui să configurați aplicația așa cum se arată în imagini. Acesta este modul în care va interacționa cu walabotul.

Pasul 15: Configurarea aplicației Blynk

Configurarea aplicației Blynk
Configurarea aplicației Blynk
Configurarea aplicației Blynk
Configurarea aplicației Blynk
Configurarea aplicației Blynk
Configurarea aplicației Blynk

Pasul 16: Puteți utiliza acest cod QR cu aplicația Blynk pentru a clona proiectul meu pentru a vă economisi timp

Puteți utiliza acest cod QR cu aplicația Blynk pentru a clona proiectul meu pentru a vă economisi timp
Puteți utiliza acest cod QR cu aplicația Blynk pentru a clona proiectul meu pentru a vă economisi timp

OK Acum, că aplicația este configurată, putem configura Python și RPi pentru a vorbi cu ea prin internet. Magie

Pasul 17: Rularea Blynk cu Raspberry Pi și utilizarea Blynk HTTPS pentru Python

În primul rând, trebuie să instalați împachetatorul Blynk HTTPS pentru Python

Dintr-un shell de comandă:

clona sudo git

sudo pip instala blynkapi

În al doilea rând, trebuie să instalați serviciul Blynk pe RPi

Dintr-un shell de comandă:

git clone

cd blynk-library / linux

curăță totul

pentru a rula serviciul blynk

sudo./blynk --token = YourAuthToken

Pentru a vă asigura că serviciul Blynk rulează la pornire, trebuie să modificați /etc/rc.local

facand

sudo nano /etc/rc.local

adăugați acest lucru la sfârșit

./blynk-library/linux/blynk --token = tokenul meu &

(Am inclus o copie a fișierului meu /etc/rc.local în secțiunea cod pentru referință)

Pentru a testa funcționează, pur și simplu tastați

sudo /etc/rc.local start

Serviciul Blynk ar trebui să ruleze acum

Pasul 18: Rularea automată a scriptului

Acum, că totul este configurat și configurat și avem codul python gata. putem seta lucrurile să ruleze automat, astfel încât să putem renunța la tastatură și monitoare

Sunt câteva lucruri de făcut

Creați un fișier script nou pentru a rula programul Python

sudo nano guitareffect.sh

adăugați aceste rânduri

#! / bin / sh

python /home/pi/GuitarEffectCLI.py

asigurați-vă că îl salvați

În continuare, trebuie să acordăm scriptului permisiunea de a rula prin tastare

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

Și, în cele din urmă, trebuie să adăugăm acest script în fișierul /etc/rc.local cu care am jucat mai devreme.

Sudo nano /etc/rc.local

Adăuga

/home/pi/guitareffect.sh &

asigurați-vă că includeți „&” acest lucru permite scriptului Python să ruleze în fundal

Dreapta! Aceasta este toată configurația și software-ul sortat, apoi este timpul să conectați hardware-ul

Pasul 19: Hardware-ul

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

Primul prototip Breadboard

Pasul 20: Proiectarea incintei

Proiectarea incintei
Proiectarea incintei
Proiectarea incintei
Proiectarea incintei

Carcasa a fost proiectată și redată în minunatul Fusion360

Pasul 21: Guts Shots

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

Pasul 22: Imagini finale de asamblare

Fotografii de asamblare finală
Fotografii de asamblare finală
Imagini de asamblare finale
Imagini de asamblare finale
Imagini de asamblare finale
Imagini de asamblare finale

Pasul 23: Pentru a fixa Walabot pe suport

Pentru a fixa Walabot pe suport
Pentru a fixa Walabot pe suport

Folosiți discul metalic autoadeziv care vine cu walabot pentru a-l fixa în poziție

Pasul 24: Fișiere hardware STL pentru imprimare 3D

Pasul 25: Scheme pentru cablarea lucrului în sus

Pasul 26: Cod

Utilizați scriptul Python atașat pentru proiectul dvs.

din _future_ import print_functionde la sys import platform din sistemul de import os de la blynkapi import Blynk import WalabotAPI import timp import RPi. GPIO ca GPIO

# configurați GPIO folosind numerotarea plăcilor

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

#blynk auth token

auth_token = "your_auth_token_here"

# Importați modulul PCA9685 pentru servo control.

import Adafruit_PCA9685

#import modul LCD din locație

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

# Inițializați PCA9685 folosind adresa implicită (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# obiecte blynk

implicit = 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 (adresă sclavă, lumină de fundal)

def numMap (x, in_min, in_max, out_min, out_max): "" "utilizat pentru maparea citirilor walabot la poziția servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# folosiți acest lucru pentru rotunjirea datelor brute la valoarea alocată

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

# extrage numărul din șirul blynk returnat

număr defExtract (val): val = str (val) return int (filtru (str.isdigit, val))

# Setați frecvența la 60 Hz, bun pentru servomotoare.

pwm.set_pwm_freq (60)

# Configurați valorile implicite ale lungimii impulsurilor min și max

SERVO_MIN = 175 # Lungimea minimă a impulsului din 4096 SERVO_MAX = 575 # Lungimea maximă a impulsului din 4096

# valori implicite walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

PRAT = 1

# variabile pentru comutarea blynk

on = "[u'1 ']"

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

altfel: # dacă nu este nimic din aplicația blynk, încărcați valorile implicite SERVO_MIN = 175 # Lungimea minimă a impulsului din 4096 SERVO_MAX = 575 # Lungimea maximă a impulsului din 4096

# valori implicite walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

PRAT = 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.wlbter (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) cu excepția self.wlbt. WalabotError ca err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND'

start def (auto):

self.wlbt. Start ()

calibrare def (auto):

self.wlbt. StartCalibration ()

def get_targets (self):

self.wlbt. Trigger () returnează self.wlbt. GetSensorTargets ()

oprire def (auto):

self.wlbt. Stop ()

def deconectare (auto):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () while flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Control efect') time.sleep (2) LCD1602.write (0, 0, „Apăsați Start pentru”) LCD1602.write (0, 1, „begin”) time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # verificați dacă butonul de pornire blynk apăsați dacă (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, „OK! Hai să o facem”)

LCD1602.write (0, 1, ") wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () dacă nu wlbt.isConectat: LCD1602.write (0, 0," Nu este conectat ") else: LCD1602.write (0, 0, „Conectat”) time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, „Calibrating…..”) time.sleep (3)) LCD1602.write (0, 0, „Pornind Walabot”)

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

while flag: # folosit pentru a pune efectul în standby (efectiv)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for butonul Start apăsați appcheck = start_button.app_status ()

altceva:

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

xval = 0

yval = 0 zval = 0 medie = 2 delayTime = 0

ținte = wlbt.get_targets ()

dacă len (ținte)> 0:

pentru j în interval (medie):

ținte = wlbt.get_targets ()

dacă len (ținte)> 0: print (len (ținte)) ținte = ținte [0]

print (str (target.xPosCm))

xval + = int (ținte.xPosCm) yval + = int (ținte.yPosCm) zval + = int (ținte.zPosCm) time.sleep (delayTime) else: print („fără ținte”) xval = xval / medie

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

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

yval = yval / medie

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

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

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

altceva:

print ("fără ținte") LCD1602.write (0, 0, "Închiderea") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

dacă _name_ == '_main_':

în timp ce True: main ()

pentru guitareffect.sh

#! / bin / sh

cd / home / pi

sudo python GuitarEffectCLI.py

O copie a fișierului local RC pentru referință

#! / bin / sh -e # # rc.local # # Acest script este executat la sfârșitul fiecărui nivel de rulare multi-utilizator. # Asigurați-vă că scriptul va „ieși de la 0” la succes sau orice altă valoare # la eroare. # # Pentru a activa sau dezactiva acest script, trebuie doar să schimbați # de biți de execuție. # # În mod implicit, acest script nu face nimic.

# Imprimați adresa IP

_IP = $ (hostname -I) || adevărat dacă ["$ _IP"]; apoi printf "Adresa mea IP este% s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "simbolul tău merge aici" &

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

Pasul 27: Depozite Github de utilizat

Utilizați acest lucru pentru ecranul LCD Sunfounder

github.com/daveyclk/SunFounder_SensorKit_f…

Utilizați acest lucru pentru servo-driver

github.com/daveyclk/Adafruit_Python_PCA968…

Utilizați acest lucru pentru Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Pasul 28: Concluzie

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Concluzie
Concluzie
Concluzie
Concluzie

Ei bine, aceasta a fost o curbă de învățare abruptă, dar a meritat atât de mult.

Luarea mea este

  • A trebuit să învăț Python … rezultă că este as
  • Interfață Python pe Raspberry Pi cu serviciul Blynk IoT. Acest lucru nu este acceptat oficial, deci există anumite limite ale funcțiilor sale. Totuși funcționează minunat!
  • Se pare că Walabot este minunat pentru expresia muzicală. L-am folosit pe un Korg SDD3000, dar puteți utiliza orice efect doriți

Mergeți singur. Acest lucru nu se limitează la efectele de chitară, pot fi folosit cu orice instrument cu orice efect.

Concursul Raspberry Pi 2017
Concursul Raspberry Pi 2017
Concursul Raspberry Pi 2017
Concursul Raspberry Pi 2017

Locul doi în concursul Raspberry Pi 2017

Recomandat: