Obsah:
- Krok 1: Věci, které budete potřebovat
- Krok 2: Abstrakt
- Krok 3: Základní myšlenka
- Krok 4: Walabot
- Krok 5: Začínáme
- Krok 6: Nastavení Raspberry Pi - 1
- Krok 7: Nastavení Raspberry Pi - 2
- Krok 8: Nastavení Raspberry Pi - 3
- Krok 9: Nastavení Raspberry Pi - 4
- Krok 10: Python
- Krok 11: Pro Walabot
- Krok 12: Pro rozhraní Servo
- Krok 13: Pro LCD
- Krok 14: Blynk
- Krok 15: 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
- Krok 17: Spuštění Blynku s Raspberry Pi a použití Blynk HTTPS pro Python
- Krok 18: Automatické spuštění skriptu
- Krok 19: Hardware
- Krok 20: Návrh skříně
- Krok 21: Guts Shots
- Krok 22: Střely finální montáže
- Krok 23: Upevnění Walabota ke stojanu
- Krok 24: Hardwarové soubory STL pro 3D tisk
- Krok 25: Schémata zapojení zapojení do věci
- Krok 26: Kód
- Krok 27: Repozitáře Github k použití
- Krok 28: Závěr
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
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
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
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 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
Krok 16: 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
První prototyp Breadboardu
Krok 20: Návrh skříně
Skříň byla navržena a vykreslena v úžasné Fusion360
Krok 21: Guts Shots
Krok 22: Střely finální montáže
Krok 23: 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
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.
Runner Up in the Raspberry Pi Contest 2017