Indholdsfortegnelse:

Walabot FX - Guitar Effect Control: 28 trin (med billeder)
Walabot FX - Guitar Effect Control: 28 trin (med billeder)

Video: Walabot FX - Guitar Effect Control: 28 trin (med billeder)

Video: Walabot FX - Guitar Effect Control: 28 trin (med billeder)
Video: Walabot Power to the Makers! 2024, Juli
Anonim
Walabot FX - Kontrol af guitareffekt
Walabot FX - Kontrol af guitareffekt

Styr din yndlings guitareffekt ved kun at bruge fantastiske guitarposer!

Trin 1: Ting du får brug for

Hardware -komponenter

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16-kanals 12 bit PWM servodriver til Arduino og Raspberry Pi

Servo (generisk) Intet link

9V batteriklip

4xAA batteriholder

AA -batterier

Jumpertråde (generisk)

DPDT Latching Action Foot Switch

Korg SDD3000-PDL

Software -operativsystemer, apps og onlinetjenester

Autodesk Fusion360 -

Blynk -

Værktøjer osv

3D printer

Loddekolbe

Trin 2: Abstrakt

Getting Started
Getting Started

Hvordan ville det være at kontrollere musikalsk udtryk ved kun at bruge din guitar i 3D -rummet? Lad os protoype noget og find ud af det!

Trin 3: Grundidéen

Jeg ville være i stand til at styre 3 effektparameteren i realtid, jeg ville gøre dette ved hjælp af hvordan jeg placerede min guitar. Så en ting var klar, jeg skulle bruge et par ting.

  • En sensor, der kan se 3D -rum
  • Servoer til at dreje på knapperne
  • Et LCD -display
  • En I2C Servo driver
  • En hindbær Pi
  • At lære Python

Trin 4: Walabot

Vil du se gennem vægge? Følsomme objekter i 3D -rum? Følelse, hvis du trækker vejret fra hele rummet? Nå, du er heldig!

Walabot er en helt ny måde at mærke rummet omkring dig ved hjælp af laveffektradar.

Dette skulle være nøglen til dette projekt, jeg ville være i stand til at tage carteasan (XY-Z) -kodinaterne af objekter i 3D-rum og kortlægge dem til servopositioner, der ændrer hvordan en guitareffekt lyder i realtid uden at røre ved pedalen.

Vinde.

Flere oplysninger om Walabot findes her

Trin 5: Kom godt i gang

Første ting først, du skal bruge en computer til at køre Walabot, til dette projekt bruger jeg en Raspberry Pi 3 (her refereret til på RPi) på grund af den indbyggede WiFi og generelle ekstra oomph

Jeg købte et 16 GB SD -kort med NOOBS forudinstalleret for at holde tingene pæne og enkle, og valgte at installere Raspian som mit foretrukne Linux -operativsystem

(hvis du ikke er bekendt med, hvordan du installerer Raspian, skal du bruge et øjeblik på at læse lidt om dette)

OK, når du først har fået Raspian til at køre på din RPi, er der et par konfigurationstrin, der skal tages for at gøre tingene klar til vores projekt

Trin 6: Opsætning af Raspberry Pi - 1

Sørg for det første for at køre den nyeste Kernel -version og se efter opdateringer ved at åbne en kommandoskal og skrive

sudo apt-get opdatering

sudo apt-get dist-upgrade

(sudo tilføjes for at sikre, at du har administrative privilegier, f.eks. ting vil fungere)

Dette kan tage et stykke tid at fuldføre, så tag en god kop te.

Trin 7: Opsætning af Raspberry Pi - 2

Du skal installere Walabot SDK til RPi. Gå til din RPi -webbrowser til https://www.walabot.com/gettingstarted og download Raspberry Pi Installer Package.

Fra en kommandoskal:

cd downloads

sudo dpkg -I walabotSDK_RasbPi.deb

Trin 8: Opsætning af Raspberry Pi - 3

Vi skal begynde at konfigurere RPi'en til at bruge i2c -bussen. Fra en kommandoskal:

sudo apt-get install python-smbus

sudo apt-get install i2c-værktøjer

når dette er gjort, skal du tilføje følgende til modulfilen

Fra en kommandoskal:

sudo nano /etc /modules

tilføj disse 2 strenge på separate linjer:

i2c-dev

i2c-bcm2708

Trin 9: Opsætning af Raspberry Pi - 4

Walabot trækker en del strøm, og vi vil også bruge GPIO'er til at kontrollere ting, så vi skal konfigurere disse

Fra en kommandoskal:

sudo nano /boot/config.txt

tilføj følgende linjer i slutningen af filen:

safe_mode_gpio = 4

max_usb_current = 1

RPi er et glimrende værktøj til beslutningstagere, men det er begrænset i den strøm, det kan sende til Walabot. Derfor tilføjer vi en maks. 1Amp strøm i stedet for den mere standard 500mA

Trin 10: Python

Hvorfor Python? godt, da det er super let at kode, hurtigt at komme i gang, og der er masser af gode python -eksempler til rådighed! Jeg havde aldrig brugt det før og var hurtigt i gang på ingen tid. Nu er RPi konfigureret til det, vi ønsker, det næste trin er at konfigurere Python til at have adgang til Walabot API, LCD Servo -grænseflader

Trin 11: Til Walabot

Fra en kommandoskal

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

Trin 12: Til Servo -grænsefladen

Fra en kommandoskal

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

cd ~

git -klon

cd Adafruit_Python_PCA9685

sudo python setup.py installation

Hvorfor skal vi bruge en servodriver? Godt, af en RPi et par grunde.

1. Strømmen trukket af en servo kan være meget høj, og det tal bliver større, jo flere servoer du har (selvfølgelig). Hvis du kører servoen direkte fra en RPi, risikerer du at blæse strømforsyningen

2. Tidspunkter for PWM (Pulse Width Modulation), der styrer servospositionen, er meget vigtige. Da RPi ikke bruger et operativsystem i realtid (der kan være afbrydelser og sådan), er timingen ikke nøjagtig og kan få servoerne til at rykke nervøst. En dedikeret driver tillader præcis kontrol, men giver også mulighed for at tilføje op til 16 servoer, så dette er fantastisk til udvidelse.

Trin 13: Til LCD

Blynk
Blynk

Åbn din RPi -webbrowser

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

Hent

github.com/daveyclk/SunFounder_SensorKit_…

Fra en kommandoskal:

sudo mkdir/usr/share/sunfounder

Brug den grafiske explorer til at kopiere python -mappen ud af zip -filen til din nye sunfounder -mappe

LCD'et bruges til at bede brugeren om, hvad der præcist foregår. Viser konfigurationsprocessen til de x-, y- og z -værdier, der mappes på hver servo

Trin 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk er en genial IoT -service, der giver dig mulighed for at oprette en brugerdefineret app til at styre dine ting. Det virkede som den perfekte løsning til at give mig fjernbetjening af walaboten for virkelig at ringe i indstillingerne …

Et problem. Blynk understøttes i øjeblikket ikke på Python -platformen, bugger. Men frygt ikke! jeg var i stand til at finde et dejligt lille arbejde, der tillader fjernbetjening og fjernparameterindgang! det er lidt hacket

første trin er at downloade Blynk -appen fra din foretrukne appbutik

For det andet skal du tilmelde dig en konto

Når det er gjort, skal du åbne appen og starte et nyt projekt og vælge Raspberry Pi 3 som hardware.

Appen tildeler dig et adgangstoken (du skal bruge dette for at indsætte din kode)

Når du har gjort det. skal du konfigurere appen som vist på billederne. Sådan vil det interagere med walaboten.

Trin 15: Konfiguration af Blynk -appen

Konfiguration af Blynk -appen
Konfiguration af Blynk -appen
Konfiguration af Blynk -appen
Konfiguration af Blynk -appen
Konfiguration af Blynk -appen
Konfiguration af Blynk -appen

Trin 16: Du kan bruge denne QR -kode med Blynk -appen til at klone mit projekt for at spare tid

Du kan bruge denne QR -kode med Blynk -appen til at klone mit projekt for at spare tid
Du kan bruge denne QR -kode med Blynk -appen til at klone mit projekt for at spare tid

OK Nu hvor appen er klar, kan vi konfigurere Python og RPi til at tale med den via internets. Magi

Trin 17: Kørsel af Blynk med Raspberry Pi og brug af Blynk HTTPS til Python

For det første skal du installere Blynk HTTPS wrapper til Python

Fra en kommandoskal:

sudo git klon

sudo pip installer blynkapi

For det andet skal du installere Blynk -tjenesten på RPi

Fra en kommandoskal:

git -klon

cd blynk-bibliotek/linux

gøre rent alle

at køre blynk -tjenesten

sudo./blynk --token = YourAuthToken

For at sikre, at Blynk -tjenesten kører ved opstart, skal du ændre /etc/rc.local

ved at gøre

sudo nano /etc/rc.local

tilføj dette til sidst

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

(jeg har inkluderet en håndtering af min /etc/rc.local -fil i kodesektionen til reference)

For at teste det virker, skal du blot skrive

sudo /etc/rc.lokal start

Blynk -tjenesten skulle nu køre

Trin 18: Kør scriptet automatisk

Nu hvor det hele er konfigureret og konfigureret, og vi har python -koden klar. vi kan indstille tingene til at køre automatisk, så vi kan droppe tastaturet og skærme

Der er et par ting at gøre

Opret en ny scriptfil for at køre Python -programmet

sudo nano guitareffect.sh

tilføj disse linjer

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

sørg for at gemme det

Dernæst skal vi give scriptet tilladelse til at køre ved at skrive

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

Og endelig er vi nødt til at tilføje dette script til den /etc/rc.local -fil, som vi tidligere har puslet med.

Sudo nano /etc/rc.local

Tilføje

/home/pi/guitareffect.sh &

Sørg for at inkludere "&", hvilket gør det muligt for Python Script at køre i baggrunden

Ret! Det er al konfiguration og software sorteret, næste gang er det tid til at koble hardwareen til

Trin 19: Hardware

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

Første Breadboard prototype

Trin 20: Kabinetdesign

Skabets design
Skabets design
Skabets design
Skabets design

Kabinettet blev designet og gengivet i den fantastiske Fusion360

Trin 21: Guts Shots

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

Trin 22: Skud til sidste samling

Afslutningsskud
Afslutningsskud
Afslutningsskud
Afslutningsskud
Afslutningsskud
Afslutningsskud

Trin 23: Sådan fastgøres Walabot til stativet

At fastgøre Walabot til stativet
At fastgøre Walabot til stativet

Brug den selvklæbende metalskive, der følger med walaboten, til at fastgøre den på plads

Trin 24: Hardware STL -filer til 3D -udskrivning

Trin 25: Skemaer til tilslutning af tingene

Trin 26: Kode

Brug det vedhæftede Python -script til dit projekt

fra _future_ import print_function fra sys import platform fra os import system fra blynkapi import Blynk import WalabotAPI import tid import RPi. GPIO som GPIO

#opsæt GPIO ved hjælp af Board Numbering

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

#blynk auth -token

auth_token = "din_auth_token_her"

# Importer PCA9685 -modulet til servostyring.

import Adafruit_PCA9685

#import LCD -modul fra placering

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

# Initialiser PCA9685 ved hjælp af standardadressen (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk objekter

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

Tærskel = Blynk (auth_token, pin = "V8")

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

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

def LCD -opsætning ():

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

def numMap (x, in_min, in_max, out_min, out_max): "" "bruges til at kortlægge walabot -aflæsningerne til servoposition" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + ud_min)

# brug dette til at afrunde rådataene til den tildelte værdi

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

#ekstraherer tallet fra den returnerede blynk -streng

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

# Indstil frekvensen til 60hz, god til servoer.

pwm.set_pwm_freq (60)

# Konfigurer standardindstillinger for min og maks. Servopulslængde

SERVO_MIN = 175 # Min pulslængde ud af 4096 SERVO_MAX = 575 # Maksimal pulslængde ud af 4096

# walabot standardværdier

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TÆRKNING = 1

# variabler til blynk -skift

on = "[u'1 ']"

klasse Walabot:

def _init _ (selv):

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

ellers: # hvis intet fra blynk -appen, indlæs standardindstillinger SERVO_MIN = 175 # Min pulslængde ud af 4096 SERVO_MAX = 575 # Maksimal pulslængde ud af 4096

# walabot standardværdier

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

TÆRKEL = 1

def connect (self): prøv: 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) undtagen self.wlbt. WalabotError som err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' stigning fejl

def start (selv):

self.wlbt. Start ()

def kalibrer (selv):

self.wlbt. StartCalibration ()

def get_targets (selv):

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

def stop (selv):

self.wlbt. Stop ()

def frakobling (selv):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () mens flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Tryk på Start for') LCD1602.skriv (0, 1, 'begynd') time.sleep (2) hvis (str (check) == on): flag = Falsk andet: check = start_button.get_val () # tjek for blynk startknappen tryk hvis (GPIO.input (18) == 0): #tjek fodkontaktflag = Falsk

LCD1602.write (0, 0, "OK! Lad os gøre det")

LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () hvis ikke wlbt.isConnected: LCD1602.write (0, 0, 'Not Connected') andet: LCD1602.skriv (0, 0, 'Tilsluttet') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Kalibrering …..') time.sleep (3) LCD1602.write (0, 0, 'Start Walabot')

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

mens flag: # bruges til at sætte 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 start -knappen tryk på appcheck = start_button.app_status ()

andet:

hvis (GPIO.input (18)! = 0): #tjek fodkontaktflag = Falsk

xval = 0

yval = 0 zval = 0 gennemsnit = 2 delayTime = 0

mål = wlbt.get_targets ()

hvis len (mål)> 0:

for j i området (gennemsnit):

mål = wlbt.get_targets ()

hvis len (mål)> 0: print (len (mål)) mål = mål [0]

print (str (targets.xPosCm))

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

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

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

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

zval = zval/gennemsnit

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)

andet:

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

hvis _name_ == '_main_':

mens True: main ()

for guitareffect.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

En kopi af den lokale RC -fil til reference

#!/bin/sh -e # # rc.local # # Dette script udføres i slutningen af hvert flerbruger -runlevel. # Sørg for, at scriptet vil "afslutte 0" ved succes eller en anden # værdi ved fejl. # # For at aktivere eller deaktivere dette script skal du bare ændre udførelsen # bits. # # Som standard gør dette script ingenting.

# Udskriv IP -adressen

_IP = $ (værtsnavn -I) || true if ["$ _IP"]; derefter 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 afslut 0

Trin 27: Github -lagre, der skal bruges

Brug dette til Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Brug dette til servodriveren

github.com/daveyclk/Adafruit_Python_PCA968…

Brug dette til Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Trin 28: Konklusion

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

Dette har godt været en stejl indlæringskurve, men det har været det hele værd.

Mine take away er

  • Jeg var nødt til at lære Python..vises det er ess
  • Interfaces Python på Raspberry Pi med Blynk IoT -tjenesten. Dette understøttes ikke officielt, så der er nogle grænser for dets funktioner. Det fungerer dog stadig godt!
  • Det viser sig, at Walabot er fantastisk til musikalsk udtryk. Jeg brugte det på en Korg SDD3000, men du kan bruge enhver effekt, du kan lide

Prøv selv. Dette er ikke begrænset til guitareffekter, jeg kan bruges med ethvert instrument med enhver effekt.

Raspberry Pi konkurrence 2017
Raspberry Pi konkurrence 2017
Raspberry Pi konkurrence 2017
Raspberry Pi konkurrence 2017

Runner Up i Raspberry Pi Contest 2017

Anbefalede: