Inhoudsopgave:

Walabot FX - Guitar Effect Control - Ajarnpa
Walabot FX - Guitar Effect Control - Ajarnpa

Video: Walabot FX - Guitar Effect Control - Ajarnpa

Video: Walabot FX - Guitar Effect Control - Ajarnpa
Video: Walabot FX- Guitar Effect Control. Full Demo 2024, Juli-
Anonim
Walabot FX - Gitaareffectregeling
Walabot FX - Gitaareffectregeling

Bedien je favoriete gitaareffect met niets anders dan geweldige gitaarhoudingen!

Stap 1: Dingen die je nodig hebt

Hardware onderdelen

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16 Kanaals 12 Bit PWM Servo Driver voor Arduino en Raspberry Pi

Servo (generiek) Geen link

9V batterijclip

4xAA batterijhouder

AA-batterijen

Jumperdraden (generiek)

DPDT Vergrendelbare voetschakelaar

Korg SDD3000-PDL

Software-besturingssystemen, apps en online services

Autodesk Fusion360 -

Blynk -

Gereedschap enz

3D-printer

Soldeerbout

Stap 2: Samenvatting

Getting Started
Getting Started

Hoe zou het zijn om de muzikale expressie te beheersen met alleen de positie van je gitaar in de 3D-ruimte? Laten we een prototype van iets maken en erachter komen!

Stap 3: Het basisidee

Ik wilde 3 effectparameters in realtime kunnen regelen, ik wilde dit doen met behulp van hoe ik mijn gitaar positioneerde. Dus één ding was duidelijk, ik zou een paar dingen nodig hebben.

  • Een sensor die 3D-ruimte kan zien
  • Servo's om aan de knoppen te draaien
  • Een LCD-scherm
  • Een I2C Servo-stuurprogramma
  • Een Raspberry Pi
  • Python leren

Stap 4: Walabot

Wil je door muren heen kijken? Zintuiglijke objecten in 3D-ruimte? Voel je of je aan de andere kant van de kamer ademt? Nou, je hebt geluk!

De Walabot is een geheel nieuwe manier om de ruimte om je heen te voelen met behulp van radar met laag vermogen.

Dit zou de sleutel tot dit project worden, ik zou in staat zijn om de carteasan (X-Y-Z) coodinaten van objecten in de 3D-ruimte te nemen en deze toe te wijzen aan servoposities, waardoor de manier waarop een gitaareffect klinkt, in realtime verandert, zonder het pedaal aan te raken.

Winnen.

Meer informatie over de Walabot vind je hier

Stap 5: Aan de slag

Allereerst heb je een computer nodig om de Walabot aan te sturen, voor dit project gebruik ik een Raspberry Pi 3 (hier in genoemd bij RPi) vanwege de ingebouwde WiFi en algemene extra uitstraling

Ik kocht een SD-kaart van 16 GB waarop NOOBS vooraf was geïnstalleerd om het leuk en eenvoudig te houden, en koos ervoor om Raspian te installeren als mijn Linux-besturingssysteem naar keuze

(als je niet bekend bent met het installeren van Raspian, neem dan even de tijd om dit een beetje te lezen)

OK, als je Raspian eenmaal op je RPi hebt, zijn er een paar configuratiestappen die je moet nemen om dingen klaar te maken voor ons project

Stap 6: De Raspberry Pi instellen - 1

Zorg er eerst voor dat u de nieuwste kernelversie gebruikt en controleer op updates door een opdrachtshell te openen en te typen

sudo apt-get update

sudo apt-get dist-upgrade

(sudo is toegevoegd om er zeker van te zijn dat je administratieve rechten hebt, dingen zullen bijvoorbeeld werken)

Dit kan even duren, dus ga lekker een kopje thee drinken.

Stap 7: De Raspberry Pi instellen - 2

U moet de Walabot SDK voor RPi installeren. Ga vanuit uw RPi-webbrowser naar https://www.walabot.com/gettingstarted en download het Raspberry Pi-installatiepakket.

Vanuit een opdrachtshell:

cd-downloads

sudo dpkg -I walabotSDK_RasbPi.deb

Stap 8: De Raspberry Pi instellen - 3

We moeten beginnen met het configureren van de RPi om de i2c-bus te gebruiken. Vanuit een opdrachtshell:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

zodra dit is gebeurd, moet u het volgende toevoegen aan het modulebestand:

Vanuit een opdrachtshell:

sudo nano /etc/modules

voeg deze 2 strings op aparte regels toe:

i2c-dev

i2c-bcm2708

Stap 9: De Raspberry Pi instellen - 4

De Walabot trekt behoorlijk wat stroom, en we zullen ook GPIO's gebruiken om dingen te regelen, dus we moeten deze instellen

Vanuit een opdrachtshell:

sudo nano /boot/config.txt

voeg de volgende regels toe aan het einde van het bestand:

safe_mode_gpio=4

max_usb_current=1

De RPi is een uitstekend hulpmiddel voor makers, maar het is beperkt in de stroom die het naar de Walabot kan sturen. Daarom voegen we een max. stroom van 1A toe in plaats van de meer standaard 500mA

Stap 10: Python

Waarom Python? Nou, omdat het super eenvoudig te coderen is, snel aan de slag te gaan en er zijn heel veel goede python-voorbeelden beschikbaar! ik had het nog nooit eerder gebruikt en was al snel in een mum van tijd up and running. Nu de RPi is geconfigureerd voor wat we willen, is de volgende stap om Python te configureren om toegang te krijgen tot de Walabot API, LCD Servo-interfaces

Stap 11: Voor de Walabot

Vanuit een opdrachtshell

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

Stap 12: Voor de servo-interface

Vanuit een opdrachtshell

sudo apt-get install git build-essentiële python-dev

cd ~

git kloon

cd Adafruit_Python_PCA9685

sudo python setup.py installeren

Waarom moeten we een servodriver gebruiken? Nou, voor een RPi een paar redenen.

1. De stroom die door een servo wordt getrokken, kan erg hoog zijn, en dat aantal wordt groter naarmate je meer servo's hebt (natuurlijk). Als je de servo rechtstreeks vanuit een RPi bestuurt, loop je het risico dat de stroomtoevoer wordt opgeblazen

2. Timings van de PWM (Pulse Width Modulation) die de positie van de servo's regelen, zijn erg belangrijk. Omdat de RPi geen realtime besturingssysteem gebruikt (er kunnen onderbrekingen en dergelijke zijn), zijn de timings niet nauwkeurig en kunnen de servo's nerveus gaan trillen. Een speciale driver maakt nauwkeurige besturing mogelijk, maar maakt het ook mogelijk om maximaal 16 servo's toe te voegen, dus dit is geweldig voor uitbreiding.

Stap 13: Voor het LCD-scherm

Blynk
Blynk

open uw RPi-webbrowser

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

downloaden

github.com/daveyclk/SunFounder_SensorKit_…

Vanuit een opdrachtshell:

sudo mkdir /usr/share/sunfounder

Gebruik de grafische verkenner om de python-map uit het zipbestand naar je nieuwe sunfounder-map te kopiëren

Het LCD-scherm wordt gebruikt om de gebruiker te informeren over wat er precies aan de hand is. Toont het configuratieproces tot en met de x-, y- en z-waarden die op elke servo worden toegewezen

Stap 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk is een briljante IoT-service waarmee je een app op maat kunt maken om je spullen te beheren. Het leek de perfecte oplossing om me de afstandsbediening van de walabot te geven om echt de instellingen in te voeren …

Een probleem. Blynk wordt momenteel niet ondersteund op het Python-platform, bugger. Maar vrees niet! ik heb een leuk werkje kunnen vinden dat afstandsbediening en invoer van parameters op afstand mogelijk maakt! het is een beetje hacky

de eerste stap is om de Blynk-app te downloaden van je favoriete app store

Ten tweede, meld u aan voor een account

Zodra dat is gebeurd, opent u de app en start u een nieuw project, waarbij u Raspberry Pi 3 als hardware kiest.

De app wijst je een toegangstoken toe (dit heb je nodig om je code in te voeren)

Als je dat eenmaal hebt gedaan. u moet de app instellen zoals weergegeven in de afbeeldingen. Dit is hoe het zal communiceren met de walabot.

Stap 15: De Blynk-app configureren

De Blynk-app configureren
De Blynk-app configureren
De Blynk-app configureren
De Blynk-app configureren
De Blynk-app configureren
De Blynk-app configureren

Stap 16: U kunt deze QR-code gebruiken met de Blynk-app om mijn project te klonen om u tijd te besparen

U kunt deze QR-code gebruiken met de Blynk-app om mijn project te klonen om u tijd te besparen
U kunt deze QR-code gebruiken met de Blynk-app om mijn project te klonen om u tijd te besparen

OK Nu de app helemaal is ingesteld, kunnen we Python en de RPi configureren om er via internet mee te praten. Magie

Stap 17: Blynk uitvoeren met de Raspberry Pi en de Blynk HTTPS voor Python gebruiken

Ten eerste moet u de Blynk HTTPS-wrapper voor Python installeren

Vanuit een opdrachtshell:

sudo git clone

sudo pip install blynkapi

Ten tweede moet u de Blynk-service op de RPi. installeren

Vanuit een opdrachtshell:

git kloon

cd blynk-bibliotheek/linux

maak alles schoon

om de blynk-service uit te voeren

sudo./blynk --token=YourAuthToken

Om ervoor te zorgen dat de Blynk-service bij het opstarten wordt uitgevoerd, moet u de /etc/rc.local. wijzigen

door te doen

sudo nano /etc/rc.local

voeg dit aan het einde toe

./blynk-bibliotheek/linux/blynk --token=mijn token &

(ik heb ter referentie een kopie van mijn /etc/rc.local-bestand in de codesectie opgenomen)

Om te testen of het werkt, typ je gewoon

sudo /etc/rc.local start

De Blynk-service zou nu moeten werken

Stap 18: het script automatisch uitvoeren

Nu dit allemaal is ingesteld en geconfigureerd, en we de python-code gereed hebben. we kunnen dingen zo instellen dat ze automatisch worden uitgevoerd, zodat we het toetsenbord en de monitors kunnen dumpen

Er zijn een paar dingen te doen

Maak een nieuw scriptbestand om het Python-programma uit te voeren

sudo nano guitareffect.sh

voeg deze regels toe

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

zorg ervoor dat je het opslaat

Vervolgens moeten we het script toestemming geven om te draaien door te typen

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

En tot slot moeten we dit script toevoegen aan het bestand /etc/rc.local waar we eerder aan hebben gesleuteld.

Sudo nano /etc/rc.local

Toevoegen

/home/pi/guitareffect.sh &

zorg ervoor dat u de "&" opneemt, zodat het Python-script op de achtergrond kan worden uitgevoerd

Rechts! Dat is alle configuratie en software gesorteerd, daarna is het tijd om de hardware aan te sluiten

Stap 19: De hardware

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

Eerste Breadboard-prototype

Stap 20: Behuizingsontwerp

Behuizingsontwerp
Behuizingsontwerp
Behuizingsontwerp
Behuizingsontwerp

De behuizing is ontworpen en weergegeven in de geweldige Fusion360

Stap 21: Guts Shots

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

Stap 22: Final Assembly Shots

Laatste montage foto's
Laatste montage foto's
Laatste montage foto's
Laatste montage foto's
Laatste montage foto's
Laatste montage foto's

Stap 23: De Walabot aan de standaard bevestigen

De Walabot aan de standaard bevestigen
De Walabot aan de standaard bevestigen

Gebruik de zelfklevende metalen schijf die bij de walabot wordt geleverd om hem op zijn plaats te bevestigen

Stap 24: Hardware STL-bestanden voor 3D-printen

Stap 25: Schema's voor het bedraden van het ding

Stap 26: Coderen

Gebruik het bijgevoegde Python-script voor uw project

van _future_ import print_functionvan sys import platform van os import systeem van blynkpi import Blynk import WalabotAPI import tijd import RPi. GPIO als GPIO

#GPIO instellen met bordnummering

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

#blynk auth token

auth_token = "uw_auth_token_hier"

# Importeer de PCA9685-module voor servobesturing.

importeer Adafruit_PCA9685

#LCD-module importeren vanaf locatie

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

# Initialiseer de PCA9685 met het standaardadres (0x40).

pwm = Adafruit_PCA9685. PCA9685()

# blynk-objecten

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

Drempel = 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-adres, achtergrondlicht)

def numMap(x, in_min, in_max, out_min, out_max): """ gebruikt voor het in kaart brengen van de walabot-uitlezingen naar servopositie """ return int((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# gebruik dit voor het afronden van de onbewerkte gegevens naar de toegewezen waarde

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

#extraheert het nummer van de geretourneerde blynk-tekenreeks

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

# Stel de frequentie in op 60 Hz, goed voor servo's.

pwm.set_pwm_freq(60)

# Configureer min en max servo puls lengtes defaults

SERVO_MIN = 175 # Min. pulslengte van 4096 SERVO_MAX = 575 # Max. pulslengte van 4096

# walabot standaardwaarden

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

DREMPEL = 1

# variabelen voor blynk-switching

on = "[u'1']"

klasse Walabot:

def _init_(zelf):

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

def blynkConfig(zelf):

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

R_RES = Rres.get_val()

R_RES = nummerExtract(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 = Drempel.get_val()

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

anders: # als er niets van de blynk-app is, laad de standaardwaarden SERVO_MIN = 175 # Min pulslengte van 4096 SERVO_MAX = 575 # Max pulslengte van 4096

# walabot standaardwaarden

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

DREMPEL = 1

def connect(self): probeer: self.wlbt. ConnectAny() self.isConnected = True self.wlbt. SetProfile(self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter(self.wlbt. FILTER_TYPE_MTI) self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter(self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta(-THETA_MAX, THETA_MAX, THETA_RES) zelf.wlbt. SetArenaPhi(-HIPHI_MAX. SetArenaR(R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold(THRESHOLD) behalve self.wlbt. WalabotError as err: if err.code != 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' verhoog fout

def start(zelf):

zelf.wlbt. Start()

def kalibreren (zelf):

zelf.wlbt. StartCalibration()

def get_targets(zelf):

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

def stop(zelf):

zelf.wlbt. Stop()

def loskoppelen (zelf):

zelf.wlbt. Verbinding verbreken()

def hoofd():

flag = True check = "" LCDsetup() while flag: LCD1602.write(0, 0, 'Guitar') LCD1602.write(0, 1, 'Effect Control') time.sleep(2) LCD1602.write(0, 0, 'Druk op Start om ') LCD1602.write(0, 1, 'begin') time.sleep(2) if (str(check) == on): flag = False else: check = start_button.get_val() # controleer op blynk startknop druk op if (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write(0, 0, "OK! laten we het doen")

LCD1602.write(0, 1, ' ') wlbt = Walabot() wlbt.blynkConfig() wlbt.connect() LCD1602.clear() if not wlbt.isConnected: LCD1602.write(0, 0, 'Not Connected') anders: LCD1602.write(0, 0, 'Verbonden') time.sleep(2) wlbt.start() wlbt.calibrate() LCD1602.write(0, 0, 'Kalibratie…..') time.sleep(3) LCD1602.write(0, 0, 'Walabot starten')

appcheck = start_button.app_status() vlag = True # reset vlag voor hoofdprogramma

while-vlag: # gebruikt om effect in stand-by te zetten (effectief)

if (appcheck == True): if (str(check) != on): if (GPIO.input(18) != 0): #check footswitch flag = False else: check = start_button.get_val() #check for startknop druk op appcheck = start_button.app_status()

anders:

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

xval = 0

yval = 0 zval = 0 gemiddelde = 2 vertragingstijd = 0

doelen = wlbt.get_targets()

indien len(doelen) > 0:

voor j binnen bereik (gemiddeld):

doelen = wlbt.get_targets()

if len(targets) > 0: print(len(targets)) targets = targets[0]

print(str(targets.xPosCm))

xval += int(targets.xPosCm) yval += int(targets.yPosCm) zval += int(targets.zPosCm) time.sleep(delayTime) else: print("geen doelen") xval = xval/gemiddelde

xval = aantalMap(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/gemiddelde

yval = aantalMap(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/gemiddelde

zval = aantalMap(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)

anders:

print("geen doelen") LCD1602.write(0, 0, "Afsluiten") LCD1602.write(0, 1, 'The Walabot') time.sleep(3) wlbt.stop() wlbt.disconnect()

if _name_ == '_main_':

terwijl True: main()

voor het gitaareffect.sh

#!/bin/sh

cd /home/pi

sudo python GuitarEffectCLI.py

Een kopie van het lokale RC-bestand ter referentie

#!/bin/sh -e# # rc.local # # Dit script wordt uitgevoerd aan het einde van elk runlevel voor meerdere gebruikers. # Zorg ervoor dat het script "0" verlaat bij succes of een andere # waarde bij een fout. # # Om dit script in of uit te schakelen, verandert u gewoon de # uitvoeringsbits. # # Dit script doet standaard niets.

# Print het IP-adres

_IP=$(hostnaam -I) || waar als ["$_IP"]; dan printf "Mijn IP-adres is %s\n" "$_IP" fi

./blynk-library/linux/blynk --token="je token komt hier" &

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

Stap 27: Github-opslagplaatsen om te gebruiken

Gebruik dit voor de Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Gebruik dit voor de servo-driver:

github.com/daveyclk/Adafruit_Python_PCA968…

Gebruik dit voor de Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Stap 28: Conclusie

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

Nou, dit was een steile leercurve, maar het was het zo waard.

Mijn afhaalrestaurants zijn

  • Ik moest Python leren..het blijkt een aas te zijn
  • Koppelde de Python op de Raspberry Pi met de Blynk IoT-service. Dit wordt niet officieel ondersteund, dus er zijn enkele beperkingen aan de functies. Werkt echter nog steeds super!
  • Het blijkt dat de Walabot geweldig is voor muzikale expressie. Ik heb het gebruikt op een Korg SDD3000, maar je kunt elk effect gebruiken dat je wilt

Ga zelf aan de slag. Dit is niet beperkt tot gitaareffecten, ik kan met elk instrument met elk effect worden gebruikt.

Raspberry Pi-wedstrijd 2017
Raspberry Pi-wedstrijd 2017
Raspberry Pi-wedstrijd 2017
Raspberry Pi-wedstrijd 2017

Tweede plaats in de Raspberry Pi-wedstrijd 2017

Aanbevolen: