Innehållsförteckning:

Walabot FX - Guitar Effect Control: 28 steg (med bilder)
Walabot FX - Guitar Effect Control: 28 steg (med bilder)

Video: Walabot FX - Guitar Effect Control: 28 steg (med bilder)

Video: Walabot FX - Guitar Effect Control: 28 steg (med bilder)
Video: Walabot FX- Guitar Effect Control. Full Demo 2024, Juli
Anonim
Walabot FX - Gitarreffektkontroll
Walabot FX - Gitarreffektkontroll

Styr din favoritgitarreffekt med bara fantastiska gitarrposer!

Steg 1: Saker du behöver

Hårdvarukomponenter

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanals 12-bitars PWM-servodrivrutin för Arduino och Raspberry Pi

Servo (generisk) Ingen länk

9V batteriklämma

4xAA batterihållare

AA -batterier

Bygelkablar (generiska)

DPDT Latching Action Foot Switch

Korg SDD3000-PDL

Programvaru -operativsystem, appar och onlinetjänster

Autodesk Fusion360 -

Blynk -

Verktyg etc

3d skrivare

Lödkolv

Steg 2: Abstrakt

Getting Started
Getting Started

Hur skulle det vara att styra musikaliskt uttryck med bara din gitarrs position i 3D -rymden? Tja, låt oss protoypa något och ta reda på det!

Steg 3: Grundidén

Jag ville kunna styra 3 effektparametrar i realtid, jag ville göra detta med hjälp av hur jag placerade min gitarr. Så en sak var klar, jag skulle behöva några saker.

  • En sensor som kan se 3D -utrymme
  • Servos för att vrida vredet
  • En LCD -skärm
  • En I2C Servo -drivrutin
  • En hallon Pi
  • Att lära sig Python

Steg 4: Walabot

Vill du se genom väggar? Känna föremål i 3D -rymden? Känsla om du andas från andra sidan rummet? Tja, du har tur!

Walabot är ett helt nytt sätt att känna av utrymmet runt dig med hjälp av låg effektradar.

Detta skulle bli nyckeln till det här projektet, jag skulle kunna ta karteasan (X-Y-Z) -kodinaterna av objekt i 3D-rymden och kartlägga dem till servopositioner som förändrar hur en gitarreffekt låter i realtid utan att röra pedalen.

Vinna.

Mer information om Walabot hittar du här

Steg 5: Komma igång

Först och främst, du kommer att behöva en dator för att köra Walabot, för detta projekt använder jag en Raspberry Pi 3 (här refererad till på RPi) på grund av den inbyggda WiFi och allmänna extra oomph

Jag köpte ett 16 GB SD -kort med NOOBS förinstallerat för att hålla saker snygga och enkla och valde att installera Raspian som mitt valda Linux -operativsystem

(om du inte känner till hur du installerar Raspian, ta en stund för att läsa lite om detta)

OK, när du väl har kört Raspian på din RPi finns det några konfigurationssteg att ta för att göra saker redo för vårt projekt

Steg 6: Konfigurera Raspberry Pi - 1

Kontrollera först att du kör den senaste kärnversionen och leta efter uppdateringar genom att öppna ett kommandoskal och skriva

sudo apt-get uppdatering

sudo apt-get dist-upgrade

(sudo läggs till för att säkerställa att du har administrativa privilegier, t.ex. att saker kommer att fungera)

Detta kan ta ett tag att slutföra, så gå och ta en god kopp te.

Steg 7: Konfigurera Raspberry Pi - 2

Du måste installera Walabot SDK för RPi. Från din RPi -webbläsare går du till https://www.walabot.com/gettingstarted och laddar ner Raspberry Pi Installer Package.

Från ett kommandoskal:

nedladdning av cd

sudo dpkg -I walabotSDK_RasbPi.deb

Steg 8: Konfigurera Raspberry Pi - 3

Vi måste börja konfigurera RPi för att använda i2c -bussen. Från ett kommandoskal:

sudo apt-get install python-smbus

sudo apt-get install i2c-verktyg

när detta är gjort måste du lägga till följande i modulfilen

Från ett kommandoskal:

sudo nano /etc /modules

lägg till dessa 2 strängar på separata rader:

i2c-dev

i2c-bcm2708

Steg 9: Konfigurera Raspberry Pi - 4

Walabot drar en hel del ström, och vi kommer också att använda GPIO: er för att styra saker så vi måste ställa in dessa

Från ett kommandoskal:

sudo nano /boot/config.txt

lägg till följande rader i slutet av filen:

safe_mode_gpio = 4

max_usb_current = 1

RPi är ett utmärkt verktyg för tillverkare, men det är begränsat i strömmen det kan skicka till Walabot. Därför lägger vi till en max på 1Amp istället för den mer vanliga 500mA

Steg 10: Python

Varför Python? Tja, eftersom det är superenkelt att koda, snabbt att köra och det finns massor av bra python -exempel tillgängliga! Jag hade aldrig använt det förut och var snart igång på nolltid. Nu är RPi konfigurerad för vad vi vill, nästa steg är att konfigurera Python för att ha tillgång till Walabot API, LCD Servo -gränssnitt

Steg 11: För Walabot

Från ett kommandoskal

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

Steg 12: För Servo -gränssnittet

Från ett kommandoskal

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

cd ~

git -klon

cd Adafruit_Python_PCA9685

sudo python setup.py installera

Varför behöver vi använda en servodrivrutin? Tja, av en RPi ett par skäl.

1. Strömmen som dras av en servo kan vara mycket hög, och det antalet blir större ju fler servon du har (naturligtvis). Om du kör servo direkt från en RPi riskerar du att blåsa från strömförsörjningen

2. Tidpunkterna för PWM (Pulse Width Modulation) som styr servopositionen är mycket viktiga. Eftersom RPi inte använder ett operativsystem i realtid (det kan finnas avbrott och så) är tidpunkterna inte korrekta och kan få servon att rycka nervöst. En dedikerad drivrutin möjliggör exakt kontroll, men tillåter också att upp till 16 servon läggs till, så det här är bra för expansion.

Steg 13: För LCD -skärmen

Blynk
Blynk

öppna din RPi -webbläsare

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

ladda ner

github.com/daveyclk/SunFounder_SensorKit_…

Från ett kommandoskal:

sudo mkdir/usr/share/sunfounder

Använd den grafiska utforskaren och kopiera python -mappen ur zip -filen till din nya sunfounder -mapp

LCD -skärmen används för att uppmana användaren om exakt vad som händer. Visar konfigurationsprocessen till x-, y- och z -värdena som mappas på varje servo

Steg 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk är en lysande IoT -tjänst som låter dig skapa en anpassad app för att styra dina saker. Det verkade som den perfekta lösningen att ge mig fjärrkontroll av walaboten för att verkligen ringa i inställningarna …

Ett problem. Blynk stöds för närvarande inte på Python -plattformen, bugger. Men var inte rädd! Jag kunde hitta ett trevligt litet arbete som tillåter fjärrkontroll och fjärrparameteringång! det är lite hackigt

första steget är att ladda ner Blynk -appen från din favoritappbutik

För det andra, registrera dig för ett konto

När det är klart öppnar du appen och startar ett nytt projekt, väljer Raspberry Pi 3 som hårdvara.

Appen kommer att tilldela dig en åtkomsttoken (du behöver detta för att sätta in din kod)

När du väl har gjort det. du måste konfigurera appen som visas på bilderna. Så här kommer det att interagera med walaboten.

Steg 15: Konfigurera Blynk -appen

Konfigurera Blynk -appen
Konfigurera Blynk -appen
Konfigurera Blynk -appen
Konfigurera Blynk -appen
Konfigurera Blynk -appen
Konfigurera Blynk -appen

Steg 16: Du kan använda den här QR -koden med Blynk -appen för att klona mitt projekt för att spara tid

Du kan använda den här QR -koden med Blynk -appen för att klona mitt projekt för att spara tid
Du kan använda den här QR -koden med Blynk -appen för att klona mitt projekt för att spara tid

OK Nu när appen är klar kan vi konfigurera Python och RPi för att prata med den via internet. Magi

Steg 17: Köra Blynk med Raspberry Pi och använda Blynk HTTPS för Python

Först måste du installera Blynk HTTPS -omslaget för Python

Från ett kommandoskal:

sudo git klon

sudo pip installera blynkapi

För det andra måste du installera Blynk -tjänsten på RPi

Från ett kommandoskal:

git -klon

cd blynk-bibliotek/linux

göra rent allt

att köra blynk -tjänsten

sudo./blynk --token = YourAuthToken

För att säkerställa att Blynk -tjänsten körs vid start måste du ändra /etc/rc.local

genom att göra

sudo nano /etc/rc.local

lägg till detta i slutet

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

(jag har inkluderat en hantering av min /etc/rc.local -fil i kodsektionen för referens)

För att testa fungerar det helt enkelt

sudo /etc/rc.local start

Blynk -tjänsten ska nu köras

Steg 18: Kör skriptet automatiskt

Nu när allt är konfigurerat och konfigurerat och vi har pythonkoden redo. vi kan ställa in saker att köras automatiskt så att vi kan släppa tangentbordet och bildskärmarna

Det finns några saker att göra

Skapa en ny skriptfil för att köra Python -programmet

sudo nano guitareffect.sh

lägg till dessa rader

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

se till att spara den

Därefter måste vi ge skriptet tillstånd att köra genom att skriva

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

Och slutligen måste vi lägga till det här skriptet i filen /etc/rc.local som vi pysslade med tidigare.

Sudo nano /etc/rc.local

Lägg till

/home/pi/guitareffect.sh &

Var noga med att inkludera "&" så att Python Script kan köras i bakgrunden

Höger! Det är all konfiguration och mjukvara som sorterats. Därefter är det dags att koppla ihop hårdvaran

Steg 19: Hårdvaran

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

Första brödbräda -prototypen

Steg 20: Kapslingsdesign

Kapslingsdesign
Kapslingsdesign
Kapslingsdesign
Kapslingsdesign

Höljet designades och gjordes i den fantastiska Fusion360

Steg 21: Guts Shots

Tarmskott
Tarmskott
Tarmskott
Tarmskott
Tarmskott
Tarmskott

Steg 22: Slutmonteringsbilder

Slutmonteringsbilder
Slutmonteringsbilder
Slutmonteringsbilder
Slutmonteringsbilder
Slutmonteringsbilder
Slutmonteringsbilder

Steg 23: För att fixa Walabot till stativet

För att fixa Walabot till stativet
För att fixa Walabot till stativet

Använd den självhäftande metallskivan som medföljer walaboten för att fixa den på plats

Steg 24: Hårdvaru -STL -filer för 3D -utskrift

Steg 25: Scheman för att koppla ihop saken

Steg 26: Kod

Använd det bifogade Python -skriptet för ditt projekt

från _future_ import print_functionfrom sys import plattform från os import system från blynkapi import Blynk import WalabotAPI import tid import RPi. GPIO som GPIO

#konfigurera GPIO med hjälp av kortnummer

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

#blynk auth -token

auth_token = "your_auth_token_here"

# Importera PCA9685 -modulen för servokontroll.

importera Adafruit_PCA9685

#importera LCD -modul från plats

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

# Initiera PCA9685 med standardadressen (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk -objekt

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

Tröskel = Blynk (auth_token, pin = "V8")

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

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

def LCDsetup ():

LCD1602.init (0x27, 1) # init (slavadress, bakgrundsbelysning)

def numMap (x, in_min, in_max, out_min, out_max): "" "används för att kartlägga walabotavläsningarna till servoposition" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + ut_min)

# använd detta för att avrunda rådata till det tilldelade värdet

def myRound (x, bas = 2): return int (bas * rund (float (x)/bas))

#extraherar talet från den returnerade blynk -strängen

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

# Ställ in frekvensen till 60 Hz, bra för servon.

pwm.set_pwm_freq (60)

# Konfigurera standardvärdena min och max servopulslängd

SERVO_MIN = 175 # Min pulslängd av 4096 SERVO_MAX = 575 # Max pulslängd av 4096

# walabot standardvärden

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TRÄSKEL = 1

# variabler för blynk -växling

på = "[u'1 ']"

klass Walabot:

def _init _ (själv):

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) print ("Servo Max =", SERVO_MAX)

SERVO_MIN = ServoMin.get_val ()

SERVO_MIN = nummerExtrakt (SERVO_MIN) utskrift ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = nummerExtrakt (R_MAX) utskrift ("R max =", R_MAX)

R_MIN = Rmin.get_val ()

R_MIN = numberExtract (R_MIN) -utskrift ("R Min =", R_MIN)

R_RES = Rres.get_val ()

R_RES = numberExtract (R_RES) -utskrift ("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) utskrift ("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) -utskrift ("Threshold =", THRESHOLD)

annars: # om ingenting från blynk -appen, standardinställningar för belastning SERVO_MIN = 175 # Min pulslängd av 4096 SERVO_MAX = 575 # Max pulslängd av 4096

# walabot standardvärden

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TRÄSKEL = 1

def connect (self): försök: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_MTI) self.wlbt. SetDyn … SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) utom self.wlbt. WalabotError som err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' höjningsfel

def start (själv):

self.wlbt. Start ()

def kalibrera (själv):

self.wlbt. StartCalibration ()

def get_targets (själv):

self.wlbt. Trigger () return self.wlbt. GetSensorTargets ()

def stopp (själv):

self.wlbt. Stop ()

def koppla från (själv):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () medan flagga: LCD1602.write (0, 0, 'gitarr') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Tryck på Start för') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # kontrollera om blynk startknapp trycker på om (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, "OK! Låt oss göra det")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () om inte wlbt.is Ansluten: LCD1602.write (0, 0, 'Inte ansluten') annars: LCD1602.write (0, 0, 'Connected') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating …..') time.sleep (3) LCD1602.write (0, 0, 'Starta Walabot')

appcheck = start_button.app_status () flagga = True # återställningsflagga för huvudprog

medan flagga: # används för att sätta effekt i vänteläge (effektivt)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for startknapp tryck på appcheck = start_button.app_status ()

annan:

if (GPIO.input (18)! = 0): #check footswitch flagga = Falskt

xval = 0

yval = 0 zval = 0 genomsnitt = 2 fördröjningstid = 0

mål = wlbt.get_targets ()

om len (mål)> 0:

för j i intervall (genomsnitt):

mål = wlbt.get_targets ()

om len (mål)> 0: skriv ut (len (mål)) mål = mål [0]

print (str (goals.xPosCm))

xval += int (goals.xPosCm) yval += int (goals.yPosCm) zval += int (goals.zPosCm) time.sleep (delayTime) else: print ("inga mål") xval = xval/genomsnitt

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

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

yval = yval/genomsnitt

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

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)

annan:

skriv ut ("inga mål") LCD1602.write (0, 0, "Stänger av") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

om _name_ == '_main_':

medan True: main ()

för gitarreffekten.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

En kopia av den lokala RC -filen som referens

#!/bin/sh -e # # rc.local # # Detta skript körs i slutet av varje fleranvändarkörnivå. # Se till att skriptet "avslutar 0" vid framgång eller något annat # värde vid fel. # # För att aktivera eller inaktivera detta skript ändrar du bara körningen # bitar. # # Som standard gör detta skript ingenting.

# Skriv ut IP -adressen

_IP = $ (värdnamn -I) || sant om ["$ _IP"]; skriv sedan ut "Min IP -adress är %s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "din token går här" &

sova 10 sudo /home/pi/guitareffect.sh & avsluta 0

Steg 27: Github -förråd att använda

Använd detta för Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Använd detta för servodrivrutinen

github.com/daveyclk/Adafruit_Python_PCA968…

Använd detta för Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Steg 28: Slutsats

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

Det här har varit en brant inlärningskurva, men har varit så värt det.

Mina take away är

  • Jag var tvungen att lära mig Python..visar att det är ess
  • Gränssnitt Python på Raspberry Pi med Blynk IoT -tjänsten. Detta stöds inte officiellt så det finns vissa gränser för dess funktioner. Fungerar ändå jättebra!
  • Det visar sig att Walabot är bra för musikaliskt uttryck. Jag använde den på en Korg SDD3000, men du kan använda vilken effekt du vill

Kör själv. Detta är inte begränsat till gitarreffekter, jag kan användas med alla instrument med vilken effekt som helst.

Raspberry Pi Contest 2017
Raspberry Pi Contest 2017
Raspberry Pi Contest 2017
Raspberry Pi Contest 2017

Tvåa i Raspberry Pi -tävlingen 2017

Rekommenderad: