Innholdsfortegnelse:

Walabot FX - Gitareffektkontroll: 28 trinn (med bilder)
Walabot FX - Gitareffektkontroll: 28 trinn (med bilder)

Video: Walabot FX - Gitareffektkontroll: 28 trinn (med bilder)

Video: Walabot FX - Gitareffektkontroll: 28 trinn (med bilder)
Video: Closeup Walabot Tracking 2024, Juli
Anonim
Walabot FX - Gitareffektkontroll
Walabot FX - Gitareffektkontroll

Kontroller favorittgitareffekten din med bare gitarposer!

Trinn 1: Ting du trenger

Maskinvarekomponenter

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanals 12-biters PWM-servodriver for Arduino og Raspberry Pi

Servo (generisk) Ingen lenke

9V batteriklemme

4xAA batteriholder

AA -batterier

Hoppertråder (generisk)

DPDT Latching Action Foot Switch

Korg SDD3000-PDL

Programvare -operativsystemer, apper og online -tjenester

Autodesk Fusion360 -

Blynk -

Verktøy osv

3D -skriver

Loddejern

Trinn 2: Abstrakt

Getting Started
Getting Started

Hvordan ville det være å kontrollere det musikalske uttrykket uten å bruke posisjonen til gitaren din i 3D -rom? Vel, la oss protoype noe og finne ut!

Trinn 3: Grunnideen

Jeg ønsket å kunne kontrollere 3 effektparameteren i sanntid, jeg ville gjøre dette ved å bruke hvordan jeg plasserte gitaren min. Så en ting var klart, jeg skulle trenge et par ting.

  • En sensor som kan se 3D -plass
  • Servoer for å vri på knappene
  • En LCD -skjerm
  • En I2C Servo driver
  • En bringebær Pi
  • For å lære Python

Trinn 4: Walabot

Vil du se gjennom vegger? Sanseobjekter i 3D -rom? Følelse hvis du puster fra andre siden av rommet? Vel, du har lykke til!

Walabot er en helt ny måte å kjenne på rommet rundt deg ved å bruke lav effektradar.

Dette kom til å være nøkkelen til dette prosjektet, jeg ville kunne ta karteasan (XY-Z) -kodinatene til objekter i 3D-rom, og kartlegge dem til servoposisjoner som endrer hvordan en gitareffekt høres ut, i sanntid, uten å berøre pedalen.

Vinne.

Mer informasjon om Walabot finner du her

Trinn 5: Komme i gang

Første ting først, du trenger en datamaskin for å kjøre Walabot, for dette prosjektet bruker jeg en Raspberry Pi 3 (her referert til på RPi) på grunn av den innebygde WiFi og generelle ekstra oomph

Jeg kjøpte et 16 GB SD -kort med NOOBS forhåndsinstallert for å holde ting fint og enkelt, og valgte å installere Raspian som mitt foretrukne Linux -operativsystem

(hvis du ikke er kjent med hvordan du installerer Raspian, vennligst ta deg tid til å lese litt om dette)

OK, når du har kjørt Raspian på RPi -en din, er det noen få konfigurasjonstrinn du må ta for å gjøre tingene klare for prosjektet vårt

Trinn 6: Sette opp Raspberry Pi - 1

Kontroller først at du kjører den nyeste kjerneversjonen, og se etter oppdateringer ved å åpne et kommandoskall og skrive

sudo apt-get oppdatering

sudo apt-get dist-upgrade

(sudo er lagt til for å sikre at du har administrative rettigheter, f.eks. ting vil fungere)

Dette kan ta en stund å fullføre, så gå og ta en god kopp te.

Trinn 7: Konfigurere Raspberry Pi - 2

Du må installere Walabot SDK for RPi. Gå til RPi -nettleseren til https://www.walabot.com/gettingstarted og last ned Raspberry Pi Installer Package.

Fra et kommandoskall:

nedlasting av cd

sudo dpkg -I walabotSDK_RasbPi.deb

Trinn 8: Sette opp Raspberry Pi - 3

Vi må begynne å konfigurere RPi for å bruke i2c -bussen. Fra et kommandoskall:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

Når dette er gjort, må du legge til følgende i modulfilen

Fra et kommandoskall:

sudo nano /etc /modules

legg til disse 2 strengene på separate linjer:

i2c-dev

i2c-bcm2708

Trinn 9: Konfigurere Raspberry Pi - 4

Walabot trekker en god del strøm, og vi vil også bruke GPIO til å kontrollere ting, så vi må sette dem opp

Fra et kommandoskall:

sudo nano /boot/config.txt

legg til følgende linjer på slutten av filen:

safe_mode_gpio = 4

max_usb_current = 1

RPi er et utmerket verktøy for produsenter, men det er begrenset i strømmen det kan sende til Walabot. Derfor legger vi til en maksimal strøm på 1 ampere i stedet for den mer vanlige 500mA

Trinn 10: Python

Hvorfor Python? vel, siden det er superenkelt å kode, raskt å komme i gang og det er mange gode python -eksempler tilgjengelig! Jeg hadde aldri brukt det før og var snart i gang på kort tid. Nå er RPi konfigurert for det vi ønsker, neste trinn er å konfigurere Python til å ha tilgang til Walabot API, LCD Servo -grensesnitt

Trinn 11: For Walabot

Fra et kommandoskall

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

Trinn 12: For servo -grensesnittet

Fra et kommandoskall

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

cd ~

git -klon

cd Adafruit_Python_PCA9685

sudo python setup.py installere

Hvorfor trenger vi å bruke en servodriver? Vel, av en RPi et par grunner.

1. Strømmen trukket av en servo kan være veldig høy, og det tallet blir større jo flere servoer du har (selvfølgelig). Hvis du kjører servoen direkte fra en RPi, risikerer du å blåse strømforsyningen

2. Tidspunktene for PWM (Pulse Width Modulation) som styrer servoposisjonen er svært viktige. Siden RPi ikke bruker et sanntids -operativsystem (det kan være avbrudd og lignende), er timingen ikke nøyaktig og kan få servoene til å rykke nervøst. En dedikert driver tillater nøyaktig kontroll, men gir også mulighet for å legge til opptil 16 servoer, så dette er flott for utvidelse.

Trinn 13: For LCD -skjermen

Blynk
Blynk

åpne RPi -nettleseren din

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

nedlasting

github.com/daveyclk/SunFounder_SensorKit_…

Fra et kommandoskall:

sudo mkdir/usr/share/sunfounder

Bruk den grafiske utforskeren til å kopiere python -mappen ut av zip -filen til den nye sunfounder -mappen

LCD -skjermen brukes til å spørre brukeren om hva som skjer. Viser konfigurasjonsprosessen til x-, y- og z -verdiene som blir kartlagt på hver servo

Trinn 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk er en strålende IoT -tjeneste som lar deg lage en tilpasset app for å kontrollere tingene dine. Det virket som den perfekte løsningen å gi meg fjernkontroll av walaboten for å virkelig ringe innstillingene …

Ett problem. Blynk støttes foreløpig ikke på Python -plattformen, bugger. Men ikke frykt! Jeg klarte å finne et fint lite arbeid som tillater fjernkontroll og fjernparameterinngang! det er litt hacky

første trinn er å laste ned Blynk -appen fra din favorittappbutikk

For det andre, registrer deg for en konto

Når det er gjort, åpner du appen og starter et nytt prosjekt, og velger Raspberry Pi 3 som maskinvare.

Appen vil tildele deg et tilgangstoken (du trenger dette for å sette inn koden din)

Når du har gjort det. du må konfigurere appen som vist på bildene. Slik vil det grensesnittet med walaboten.

Trinn 15: Konfigurering av Blynk -appen

Konfigurering av Blynk -appen
Konfigurering av Blynk -appen
Konfigurering av Blynk -appen
Konfigurering av Blynk -appen
Konfigurering av Blynk -appen
Konfigurering av Blynk -appen

Trinn 16: Du kan bruke denne QR -koden med Blynk -appen til å klone prosjektet mitt for å spare tid

Du kan bruke denne QR -koden med Blynk -appen til å klone prosjektet mitt for å spare tid
Du kan bruke denne QR -koden med Blynk -appen til å klone prosjektet mitt for å spare tid

OK Nå som appen er konfigurert, kan vi konfigurere Python og RPi til å snakke med den over internett. Magi

Trinn 17: Kjøre Blynk med Raspberry Pi og bruke Blynk HTTPS for Python

Først må du installere Blynk HTTPS wrapper for Python

Fra et kommandoskall:

sudo git klon

sudo pip installer blynkapi

For det andre må du installere Blynk -tjenesten på RPi

Fra et kommandoskall:

git -klon

cd blynk-bibliotek/linux

gjøre rent alt

å kjøre blynk -tjenesten

sudo./blynk --token = YourAuthToken

For å sikre at Blynk -tjenesten kjører ved oppstart, må du endre /etc/rc.local

ved å gjøre

sudo nano /etc/rc.local

legg til dette på slutten

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

(jeg har inkludert en håndtering av min /etc/rc.local -fil i kodeseksjonen for referanse)

For å teste at den fungerer, bare skriv

sudo /etc/rc.lokal start

Blynk -tjenesten skal nå kjøre

Trinn 18: Kjør skriptet automatisk

Nå som alt er konfigurert og konfigurert, og vi har python -koden klar. vi kan sette ting til å kjøre automatisk, slik at vi kan slippe tastaturet og skjermene

Det er et par ting å gjøre

Opprett en ny skriptfil for å kjøre ut Python -programmet

sudo nano gitareffekt.sh

legg til disse linjene

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

sørg for å lagre den

Deretter må vi gi skriptet tillatelse til å kjøre ved å skrive

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

Og til slutt må vi legge til dette skriptet i /etc/rc.local -filen som vi tinker med tidligere.

Sudo nano /etc/rc.local

Legge til

/home/pi/guitareffect.sh &

Sørg for å inkludere "&" som gjør at Python Script kan kjøres i bakgrunnen

Ikke sant! Det er all konfigurasjon og programvare som er sortert, neste gang er det på tide å koble til maskinvaren

Trinn 19: Maskinvaren

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

Første Breadboard -prototype

Trinn 20: Kapslingsdesign

Kapslingsdesign
Kapslingsdesign
Kapslingsdesign
Kapslingsdesign

Kapslingen ble designet og gjengitt i den fantastiske Fusion360

Trinn 21: Guts Shots

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

Trinn 22: Sluttmonteringsskudd

Sluttmonteringsskudd
Sluttmonteringsskudd
Sluttmonteringsskudd
Sluttmonteringsskudd
Sluttmonteringsskudd
Sluttmonteringsskudd

Trinn 23: For å fikse Walabot til stativet

For å feste Walabot til stativet
For å feste Walabot til stativet

Bruk den selvklebende metallskiven som følger med walaboten for å fikse den på plass

Trinn 24: Maskinvare STL -filer for 3D -utskrift

Trinn 25: Skjemaer for kabling av ting

Trinn 26: Kode

Bruk det vedlagte Python -skriptet for prosjektet ditt

fra _future_ import print_functionfrom sys importplattform fra os import system fra blynkapi import Blynk import WalabotAPI import tid import RPi. GPIO som GPIO

#sett opp GPIO ved hjelp av tavlenummerering

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

#blynk auth -token

auth_token = "your_auth_token_here"

# Importer PCA9685 -modulen for servokontroll.

importer Adafruit_PCA9685

#import LCD -modul fra stedet

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

# Initialiser PCA9685 ved å bruke standardadressen (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk objekter

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

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

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

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

def LCDsetup ():

LCD1602.init (0x27, 1) # init (slave -adresse, bakgrunnslys)

def numMap (x, in_min, in_max, out_min, out_max): "" "brukes til å kartlegge walabotavlesningene til servoposisjon" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + ut_min)

# bruk dette for å avrunde rådataene til den tildelte verdien

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

#trekker ut tallet fra den returnerte blynk -strengen

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

# Sett frekvensen til 60hz, bra for servoer.

pwm.set_pwm_freq (60)

# Konfigurer standardverdier for min og maks. Servopulslengde

SERVO_MIN = 175 # Min pulslengde ut av 4096 SERVO_MAX = 575 # Maks pulslengde ut av 4096

# walabot standardverdier

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TRESHOLD = 1

# variabler for blynk -bytte

på = "[u'1 ']"

klasse Walabot:

def _init _ (self):

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 = numberExtract (SERVO_MIN) utskrift ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = numberExtract (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) utskrift ("Phi Res =", PHI_RES)

THRESHOLD = Threshold.get_val ()

THRESHOLD = numberExtract (THRESHOLD) utskrift ("Threshold =", THRESHOLD)

annet: # hvis ingenting fra blynk -appen, standardinnstillinger for belastning SERVO_MIN = 175 # Min pulslengde ut av 4096 SERVO_MAX = 575 # Maks pulslengde ut av 4096

# walabot standardverdier

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TRESHOLD = 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. SetDyn. SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) unntatt self.wlbt. WalabotError som feil: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' hevefeil

def start (self):

self.wlbt. Start ()

def kalibrere (selv):

self.wlbt. StartCalibration ()

def get_targets (self):

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

def stopp (selv):

self.wlbt. Stop ()

def frakobling (selv):

self.wlbt. Koble fra ()

def main ():

flag = True check = "" LCDsetup () mens flagg: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Trykk Start for') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # sjekk for blynk startknapp trykk hvis (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, "OK! La oss gjøre det")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () hvis ikke wlbt.isConnected: LCD1602.write (0, 0, 'Not Connected') annet: LCD1602.skriv (0, 0, 'Tilkoblet') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating …..') time.sleep (3) LCD1602.write (0, 0, 'Starter Walabot')

appcheck = start_button.app_status () flag = True # reset flagg for hovedprog

mens flagg: # brukes til å sette effekt i standby (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 trykk appcheck = start_button.app_status ()

ellers:

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

xval = 0

yval = 0 zval = 0 gjennomsnitt = 2 delayTime = 0

mål = wlbt.get_targets ()

hvis len (mål)> 0:

for j i området (gjennomsnitt):

mål = wlbt.get_targets ()

hvis len (mål)> 0: print (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 ("ingen mål") xval = xval/gjennomsnitt

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

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

yval = yval/gjennomsnitt

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

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

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

ellers:

print ("ingen mål") LCD1602.write (0, 0, "Shutting Down") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

hvis _name_ == '_main_':

while True: main ()

for gitareffekten.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

En kopi av den lokale RC -filen som referanse

#!/bin/sh -e # # rc.local # # Dette skriptet kjøres på slutten av hvert flerbruker -nivå. # Sørg for at skriptet vil "avslutte 0" ved suksess eller annen # verdi ved feil. # # For å aktivere eller deaktivere dette skriptet, bare endre kjøringen # bits. # # Som standard gjør dette skriptet ingenting.

# Skriv ut IP -adressen

_IP = $ (vertsnavn -I) || true if ["$ _IP"]; deretter printf "Min IP -adresse er %s / n" "$ _IP" fi

./blynk-library/linux/blynk --token = "du token går her" &

sove 10 sudo /home/pi/guitareffect.sh og avslutt 0

Trinn 27: Github -lagre som skal brukes

Bruk dette til Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Bruk dette til servodriveren

github.com/daveyclk/Adafruit_Python_PCA968…

Bruk dette til Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Trinn 28: Konklusjon

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

Dette har vel vært en bratt læringskurve, men det har vært så verdt det.

Mine takeaways er

  • Jeg måtte lære Python..vises at det er ess
  • Grensesnittet mellom Python på Raspberry Pi og Blynk IoT -tjenesten. Dette støttes ikke offisielt, så det er noen grenser for funksjonene. Fungerer fortsatt bra!
  • Det viser seg at Walabot er flott for musikalsk uttrykk. Jeg brukte den på en Korg SDD3000, men du kan bruke hvilken som helst effekt du liker

Ta en tur selv. Dette er ikke begrenset til gitareffekter, jeg kan brukes med ethvert instrument med hvilken som helst effekt.

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

Runner Up i Raspberry Pi Contest 2017

Anbefalt: