Obsah:

Walabot FX - ovládání kytarových efektů: 28 kroků (s obrázky)
Walabot FX - ovládání kytarových efektů: 28 kroků (s obrázky)

Video: Walabot FX - ovládání kytarových efektů: 28 kroků (s obrázky)

Video: Walabot FX - ovládání kytarových efektů: 28 kroků (s obrázky)
Video: Walabot FX- Guitar Effect Control. Full Demo 2024, Červenec
Anonim
Walabot FX - ovládání kytarových efektů
Walabot FX - ovládání kytarových efektů

Ovládejte svůj oblíbený kytarový efekt pouze pomocí úžasných kytarových póz!

Krok 1: Věci, které budete potřebovat

Hardwarové komponenty

Walabot - Walabot

Raspberry Pi - Raspberry Pi 3 Model B

Sunfounder LCD1602

SunFounder PCA9685 16kanálový 12bitový PWM servo ovladač pro Arduino a Raspberry Pi

Servo (obecné) Žádný odkaz

Klip na 9V baterii

Držák baterie 4xAA

Baterie AA

Propojovací vodiče (obecné)

Nožní spínač DPDT Latching Action

Korg SDD3000-PDL

Softwarové operační systémy, aplikace a online služby

Autodesk Fusion360 -

Blynk -

Nástroje atd

3D tiskárna

Páječka

Krok 2: Abstrakt

Getting Started
Getting Started

Jaké by to bylo ovládat hudební výraz pomocí ničeho jiného než polohy vaší kytary ve 3D prostoru? Pojďme tedy něco napsat a zjistit!

Krok 3: Základní myšlenka

Chtěl jsem mít možnost ovládat 3 efektové parametry v reálném čase, chtěl jsem to udělat pomocí umístění kytary. Jedna věc tedy byla jasná, potřeboval bych pár věcí.

  • Senzor, který je schopen vidět 3D prostor
  • Serva k otočení knoflíků
  • LCD displej
  • Servo ovladač I2C
  • Raspberry Pi
  • Naučit se Python

Krok 4: Walabot

Chcete vidět skrz zdi? Cítíte objekty ve 3D prostoru? Máte pocit, že dýcháte z celé místnosti? No, máte štěstí!

Walabot je zcela nový způsob snímání prostoru kolem vás pomocí radaru s nízkým výkonem.

To bude klíčové pro tento projekt, byl bych schopen pořídit coodináty objektů carteasan (X-Y-Z) ve 3D prostoru a zmapovat je na pozice serv, které v reálném čase mění zvuk kytarového efektu, aniž byste se museli dotknout pedálu.

Vyhrát.

Více informací o Walabotovi najdete zde

Krok 5: Začínáme

Nejprve budete potřebovat počítač k řízení Walabota, pro tento projekt používám Raspberry Pi 3 (zde odkazováno na RPi) kvůli vestavěnému WiFi a obecnému extra oomph

Koupil jsem 16 GB SD kartu s předinstalovaným NOOBS, aby věci byly hezké a jednoduché, a rozhodl jsem se nainstalovat Raspian jako můj Linux OS, který jsem si vybral

(pokud nevíte, jak nainstalovat Raspian, věnujte prosím chvilku tomu, abyste si to trochu přečetli)

Dobře, jakmile máte Raspian spuštěný na vašem RPi, je třeba provést několik konfiguračních kroků, aby byly věci připraveny pro náš projekt

Krok 6: Nastavení Raspberry Pi - 1

Nejprve se ujistěte, že používáte nejnovější verzi jádra, a vyhledejte aktualizace otevřením příkazového shellu a zadáním

sudo apt-get update

sudo apt-get dist-upgrade

(sudo je přidáno, aby se zajistilo, že máte oprávnění správce, např. věci budou fungovat)

Dokončení může chvíli trvat, takže si zajděte na šálek čaje.

Krok 7: Nastavení Raspberry Pi - 2

Musíte nainstalovat Walabot SDK pro RPi. Z webového prohlížeče RPi přejděte na https://www.walabot.com/gettingstarted a stáhněte si instalační balíček Raspberry Pi.

Z příkazového prostředí:

stahování cd

sudo dpkg -I walabotSDK_RasbPi.deb

Krok 8: Nastavení Raspberry Pi - 3

Musíme začít konfigurovat RPi pro použití sběrnice i2c. Z příkazového shellu:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

jakmile to bude hotové, musíte do souboru modulů přidat následující

Z příkazového prostředí:

sudo nano /etc /modules

přidejte tyto 2 řetězce na samostatné řádky:

i2c-dev

i2c-bcm2708

Krok 9: Nastavení Raspberry Pi - 4

Walabot čerpá značnou část proudu a budeme také používat GPIO k ovládání věcí, takže je musíme nastavit

Z příkazového prostředí:

sudo nano /boot/config.txt

přidejte následující řádky na konec souboru:

safe_mode_gpio = 4

max_usb_current = 1

RPi je vynikající nástroj pro tvůrce, ale je omezen proudem, který lze odeslat Walabotovi. Proto přidáváme max. Proud 1 Amp místo standardnějších 500mA

Krok 10: Python

Proč Python? No, protože je velmi snadné kódovat, rychle spustit a je k dispozici spousta dobrých příkladů pythonu! Nikdy jsem to nepoužil a brzy jsem byl v provozu. Nyní je RPi nakonfigurován na to, co chceme, dalším krokem je nakonfigurovat Python tak, aby měl přístup k rozhraním Walabot API a LCD Servo.

Krok 11: Pro Walabot

Z příkazového shellu

Sudo pip install „/usr/share/walabot/python/WalabotAPI-1.0.21.zip“

Krok 12: Pro rozhraní Servo

Z příkazového shellu

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

cd ~

klon git

cd Adafruit_Python_PCA9685

instalace sudo python setup.py

Proč potřebujeme použít servo ovladač? No, pro RPi několik důvodů.

1. Proud odebíraný servem může být velmi vysoký a toto číslo se zvyšuje, čím více serva máte (samozřejmě). Pokud řídíte servo directky z RPi, riskujete vyfouknutí jeho napájecího zdroje

2. Načasování PWM (Pulse Width Modulation), které řídí polohu serva, je velmi důležité. Protože RPi nepoužívá OS v reálném čase (může dojít k přerušení a podobně), časování není přesné a může nervózně cukat servy. Vyhrazený ovladač umožňuje přesné ovládání, ale také umožňuje přidání až 16 serv, takže je to skvělé pro rozšíření.

Krok 13: Pro LCD

Blynk
Blynk

otevřete svůj webový prohlížeč RPi

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

stažení

github.com/daveyclk/SunFounder_SensorKit_…

Z příkazového prostředí:

sudo mkdir/usr/share/sunfounder

Pomocí grafického průzkumníku zkopírujte složku python ze souboru zip do nové složky sunfounder

Displej LCD slouží uživateli k upozornění, co se přesně děje. Ukazuje proces konfigurace až po hodnoty x, y a z mapované na každé servo

Krok 14: Blynk

Blynk
Blynk
Blynk
Blynk

Blynk je skvělá služba IoT, která vám umožní vytvořit vlastní aplikaci pro ovládání vašich věcí. Vypadalo to jako dokonalé řešení, které mi poskytne dálkové ovládání walabota, abych skutečně vytočil nastavení…

Jeden problém. Blynk aktuálně není podporován na platformě Python, bugger. Ale nebojte se! byl jsem schopen najít pěknou malou práci, která umožňuje dálkové ovládání a dálkové zadávání parametrů! je to trochu hacky

prvním krokem je stažení aplikace Blynk z vašeho oblíbeného obchodu s aplikacemi

Za druhé, zaregistrujte si účet

Jakmile to bude hotové, otevřete aplikaci a spusťte nový projekt a jako hardware vyberte Raspberry Pi 3.

Aplikace vám přidělí přístupový token (budete jej potřebovat k vložení kódu)

Jakmile to uděláte. budete muset nastavit aplikaci, jak je znázorněno na obrázcích. Takto bude komunikovat s walabotem.

Krok 15: Konfigurace aplikace Blynk

Konfigurace aplikace Blynk
Konfigurace aplikace Blynk
Konfigurace aplikace Blynk
Konfigurace aplikace Blynk
Konfigurace aplikace Blynk
Konfigurace aplikace Blynk

Krok 16: Tento QR kód můžete použít s aplikací Blynk ke klonování mého projektu, abyste ušetřili čas

Tento QR kód můžete použít s aplikací Blynk ke klonování mého projektu, abyste ušetřili čas
Tento QR kód můžete použít s aplikací Blynk ke klonování mého projektu, abyste ušetřili čas

Dobře, teď, když je aplikace nastavena, můžeme nakonfigurovat Python a RPi, aby s ní mluvily přes internet. Kouzlo

Krok 17: Spuštění Blynku s Raspberry Pi a použití Blynk HTTPS pro Python

Nejprve je třeba nainstalovat wrapper Blynk HTTPS pro Python

Z příkazového prostředí:

klon sudo git

sudo pip install blynkapi

Za druhé, musíte si na RPi nainstalovat službu Blynk

Z příkazového prostředí:

klon git

cd blynk-knihovna/linux

vše vyčistit

provozovat službu blynk

sudo./blynk --token = YourAuthToken

Abyste zajistili spuštění služby Blynk při spuštění, musíte upravit /etc/rc.local

tím, že dělá

sudo nano /etc/rc.local

přidej to na konec

./blynk-library/linux/blynk --token = můj token &

(Do sekce kódu jsem vložil odkaz na soubor mé /etc/rc.local)

Chcete -li vyzkoušet, zda funguje, jednoduše zadejte

sudo /etc/rc.local start

Nyní by měla být spuštěna služba Blynk

Krok 18: Automatické spuštění skriptu

Nyní, když je toto vše nastaveno a nakonfigurováno, a máme připravený kód pythonu. můžeme nastavit automatické spouštění věcí, abychom mohli vyřadit klávesnici a monitory

Je třeba udělat několik věcí

Vytvořte nový soubor skriptu pro spuštění programu Python

sudo nano guitareffect.sh

přidejte tyto řádky

#!/bin/sh

python /home/pi/GuitarEffectCLI.py

určitě to ulož

Dále musíme dát skriptu povolení ke spuštění zadáním

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

A nakonec musíme tento skript přidat do souboru /etc/rc.local, se kterým jsme si dříve pohrávali.

Sudo nano /etc/rc.local

Přidat

/home/pi/guitareffect.sh &

nezapomeňte zahrnout znak „&“, což umožňuje spuštění skriptu Python na pozadí

Že jo! To je veškerá konfigurace a software seřazený, dále je čas zapojit hardware

Krok 19: Hardware

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

První prototyp Breadboardu

Krok 20: Návrh skříně

Design skříně
Design skříně
Design skříně
Design skříně

Skříň byla navržena a vykreslena v úžasné Fusion360

Krok 21: Guts Shots

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

Krok 22: Střely finální montáže

Střely finální montáže
Střely finální montáže
Střely finální montáže
Střely finální montáže
Střely finální montáže
Střely finální montáže

Krok 23: Upevnění Walabota ke stojanu

Upevnění Walabota ke stojanu
Upevnění Walabota ke stojanu

K upevnění na místo použijte samolepicí kovový disk, který je dodáván s walabotem

Krok 24: Hardwarové soubory STL pro 3D tisk

Krok 25: Schémata zapojení zapojení do věci

Krok 26: Kód

Pro svůj projekt použijte přiložený skript Python

from _future_ import print_functionfrom sys import platform from os import system from blynkapi import Blynk import WalabotAPI import time import RPi. GPIO as GPIO

#nastavte GPIO pomocí číslování desek

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

#blynk ověřovací token

auth_token = "your_auth_token_here"

# Importujte modul PCA9685 pro ovládání serva.

import Adafruit_PCA9685

#importujte LCD modul z místa

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

# Inicializujte PCA9685 pomocí výchozí adresy (0x40).

pwm = Adafruit_PCA9685. PCA9685 ()

# blynk objektů

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

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

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

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

def LCDsetup ():

LCD1602.init (0x27, 1) # init (podřízená adresa, podsvícení)

def numMap (x, in_min, in_max, out_min, out_max): "" "slouží k mapování naměřených hodnot walabotů do polohy servo" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# použijte k zaokrouhlení nezpracovaných dat na přiřazenou hodnotu

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

#extracts the number from the returned blynk string

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

# Nastavte frekvenci na 60 Hz, vhodné pro serva.

pwm.set_pwm_freq (60)

# Konfigurujte výchozí a minimální a maximální délku pulzu serva

SERVO_MIN = 175 # Minimální délka pulzu z 4096 SERVO_MAX = 575 # Maximální délka pulzu ze 4096

# výchozí hodnoty walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

THRESHOLD = 1

# proměnné pro přepínání blynk

on = "[u'1 ']"

třída 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) tisk ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = numberExtract (R_MAX) tisk ("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) tisk ("R Res =", R_RES)

THETA_MAX = ThetaMax.get_val ()

THETA_MAX = numberExtract (THETA_MAX) tisk ("Theta Max =", THETA_MAX) THETA_RES = ThetaRes.get_val () THETA_RES = numberExtract (THETA_RES) tisk ("Theta Res =", THETA_RES)

PHI_MAX = PhiMax.get_val ()

Tisk PHI_MAX = numberExtract (PHI_MAX) ("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val () PHI_RES = numberExtract (PHI_RES) tisk ("Phi Res =", PHI_RES)

THRESHOLD = Threshold.get_val ()

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

else: # pokud nic z aplikace blynk, načíst výchozí nastavení SERVO_MIN = 175 # minimální délka pulzu z 4096 SERVO_MAX = 575 # maximální délka pulzu ze 4096

# výchozí hodnoty walabot

R_MAX = 60 R_MIN = 20 R_RES = 5

THETA_MAX = 20

THETA_RES = 5

PHI_MAX = 20

PHI_RES = 5

THRESHOLD = 1

def connect (self): try: self.wlbt. ConnectAny () self.isConnected = True self.wlbt. SetProfile (self.wlbt. PROF_SENSOR) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPEmobile.tm (self.wlbt. FILTER_TYPE_NONE) #self.wlbt. SetDynamicImageFilter (self.wlbt. FILTER_TYPE_DERIVATIVE) self.wlbt. SetArenaTheta (PHI_XMA) SetArenaR (R_MIN, R_MAX, R_RES) self.wlbt. SetThreshold (THRESHOLD) kromě self.wlbt. WalabotError as err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' raise err

def start (vlastní):

self.wlbt. Start ()

def calibrate (self):

self.wlbt. StartCalibration ()

def get_targets (self):

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

def stop (vlastní):

self.wlbt. Stop ()

def odpojit (vlastní):

self.wlbt. Disconnect ()

def main ():

flag = True check = "" LCDsetup () while flag: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Press Start to') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # zkontrolujte startovací tlačítko blynk stiskněte if (GPIO.input (18) == 0): #check footswitch flag = False

LCD1602.write (0, 0, „OK! Jdeme na to“)

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

appcheck = start_button.app_status () příznak = True # reset příznak pro hlavní prog

while flag: # slouží k přepnutí do pohotovostního režimu (efektivně)

if (appcheck == True): if (str (check)! = on): if (GPIO.input (18)! = 0): #check footswitch flag = False else: check = start_button.get_val () #check for tlačítko start stiskněte appcheck = start_button.app_status ()

jiný:

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

xval = 0

yval = 0 zval = 0 průměr = 2 zpoždění Čas = 0

Targets = wlbt.get_targets ()

pokud len (cíle)> 0:

pro j v rozsahu (průměr):

Targets = wlbt.get_targets ()

pokud len (cíle)> 0: print (len (cíle)) targets = targets [0]

tisk (str (targets.xPosCm))

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

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/průměr

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/průměr

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)

jiný:

tisk ("žádné cíle") LCD1602.write (0, 0, "Vypínání") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()

if _name_ == '_main_':

while True: main ()

pro guitareffect.sh

#!/bin/sh

cd /home /pi

sudo python GuitarEffectCLI.py

Kopie místního souboru RC pro referenci

#!/bin/sh -e # # rc.local # # Tento skript je spuštěn na konci každé víceuživatelské úrovně běhu. # Ujistěte se, že skript při úspěchu „opustí 0“nebo jakákoli jiná # hodnota při chybě. # # Chcete -li povolit nebo zakázat tento skript, změňte pouze počet bitů provádění #. # # Ve výchozím nastavení tento skript nedělá nic.

# Vytiskněte IP adresu

_IP = $ (hostname -I) || true if ["$ _IP"]; pak vytiskněte „Moje IP adresa je %s / n“„$ _IP“fi

./blynk-library/linux/blynk --token = "token jde sem" &

spát 10 sudo /home/pi/guitareffect.sh & ukončit 0

Krok 27: Repozitáře Github k použití

Použijte to pro Sunfounder LCD

github.com/daveyclk/SunFounder_SensorKit_f…

Použijte to pro ovladač servo

github.com/daveyclk/Adafruit_Python_PCA968…

Použijte to pro Blynk Python HTTPS Wrapper

github.com/daveyclk/blynkapi

Krok 28: Závěr

Image
Image
Walabot FX- Guitar Effect Control. Full Demo
Walabot FX- Guitar Effect Control. Full Demo
Závěr
Závěr
Závěr
Závěr

Byla to strmá křivka učení, ale stálo to za to.

Můj odběr je

  • Musel jsem se naučit Python.. Ukazuje se, že je to eso
  • Propojil Python na Raspberry Pi se službou Blynk IoT. Toto není oficiálně podporováno, takže jeho funkce mají určitá omezení. Přesto funguje skvěle!
  • Ukazuje se, že Walabot je skvělý pro hudební výraz. Použil jsem to na Korg SDD3000, ale můžete použít jakýkoli efekt, který se vám líbí

Vyrazte si sami. Toto není omezeno na kytarové efekty, lze je použít s jakýmkoli nástrojem s jakýmkoli efektem.

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

Runner Up in the Raspberry Pi Contest 2017

Doporučuje: