Obsah:
- Krok 1: Veci, ktoré budete potrebovať
- Krok 2: Abstrakt
- Krok 3: Základná myšlienka
- Krok 4: Walabot
- Krok 5: Začíname
- Krok 6: Nastavenie Raspberry Pi - 1
- Krok 7: Nastavenie Raspberry Pi - 2
- Krok 8: Nastavenie Raspberry Pi - 3
- Krok 9: Nastavenie Raspberry Pi - 4
- Krok 10: Python
- Krok 11: Pre Walabot
- Krok 12: Pre servo rozhranie
- Krok 13: Pre LCD
- Krok 14: Blynk
- Krok 15: Konfigurácia aplikácie Blynk
- Krok 16: Tento QR kód môžete použiť v aplikácii Blynk na klonovanie môjho projektu, aby ste ušetrili čas
- Krok 17: Spustenie Blynku s Raspberry Pi a používanie Blynku HTTPS pre Python
- Krok 18: Automatické spustenie skriptu
- Krok 19: Hardvér
- Krok 20: Dizajn krytu
- Krok 21: Guts Shots
- Krok 22: Zábery finálnej montáže
- Krok 23: Upevnenie Walabota k stojanu
- Krok 24: Hardvérové súbory STL pre 3D tlač
- Krok 25: Schémy zapojenia veci hore
- Krok 26: Kód
- Krok 27: Repozitáre Github na použitie
- Krok 28: Záver
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Ovládajte svoj obľúbený gitarový efekt iba pomocou úžasných gitarových póz!
Krok 1: Veci, ktoré budete potrebovať
Hardvérové komponenty
Walabot - Walabot
Raspberry Pi - Raspberry Pi 3 Model B
Sunfounder LCD1602
SunFounder PCA9685 16-kanálový 12-bitový servopohon PWM pre Arduino a Raspberry Pi
Servo (všeobecné) Žiadny odkaz
Klip na 9V batériu
Držiak batérie 4xAA
Batérie AA
Prepojovacie káble (všeobecné)
Nožný spínač západky DPDT
Korg SDD3000-PDL
Softvérové operačné systémy, aplikácie a online služby
Autodesk Fusion360 -
Blynk -
Nástroje atď
3D tlačiareň
Spájkovačka
Krok 2: Abstrakt
Aké by to bolo ovládať hudobný prejav pomocou iba polohy vašej gitary v 3D priestore? Poďme teda niečo napísať a zistiť!
Krok 3: Základná myšlienka
Chcel som mať možnosť ovládať 3 efektové parametre v reálnom čase, chcel som to urobiť pomocou umiestnenia gitary. Jedna vec bola teda jasná, budem potrebovať niekoľko vecí.
- Senzor, ktorý je schopný vidieť 3D priestor
- Servá na otáčanie gombíkov
- LCD displej
- Ovládač serva I2C
- Malinový Pi
- Naučiť sa Python
Krok 4: Walabot
Chcete vidieť cez steny? Cítite objekty v 3D priestore? Máte pocit, že dýchate z celej miestnosti? Tak to máte šťastie!
Walabot je úplne nový spôsob snímania priestoru okolo vás pomocou radaru s nízkym výkonom.
Toto bude pre tento projekt kľúčové, bol by som schopný prevziať kodexy predmetov v X-Y-Z (3D) v 3D priestore a mapovať ich na polohy serva a meniť tak, ako znie gitarový efekt, v reálnom čase, bez toho, aby ste sa museli dotknúť pedála.
Vyhrať.
Viac informácií o Walabotovi nájdete tu
Krok 5: Začíname
Najprv však budete potrebovať počítač na riadenie Walabota, pretože na tento projekt používam Raspberry Pi 3 (tu sa odkazuje na RPi) kvôli vstavanej WiFi a všeobecnému extra oomph
Kúpil som si 16 GB kartu SD s predinštalovaným NOOBS, aby boli veci pekné a jednoduché, a rozhodol som sa nainštalovať Raspian ako svoj zvolený operačný systém Linux.
(Ak neviete, ako nainštalovať Raspian, nájdite si chvíľu na prečítanie.)
Dobre, akonáhle spustíte Raspian na vašom RPi, urobíte niekoľko konfiguračných krokov, aby ste pripravili veci pre náš projekt
Krok 6: Nastavenie Raspberry Pi - 1
Najprv sa uistite, že používate najnovšiu verziu jadra, a skontrolujte dostupnosť aktualizácií otvorením príkazového plášťa a zadaním textu
sudo apt-get aktualizácia
sudo apt-get dist-upgrade
(sudo je pridané, aby sa zabezpečilo, že máte administrátorské oprávnenia, napr. veci budú fungovať)
Dokončenie môže chvíľu trvať, preto si dajte šálku čaju.
Krok 7: Nastavenie Raspberry Pi - 2
Musíte si nainštalovať Walabot SDK pre RPi. Z webového prehliadača RPi prejdite na stránku https://www.walabot.com/gettingstarted a stiahnite si inštalačný balík Raspberry Pi.
Z príkazového shellu:
sťahovanie CD
sudo dpkg -I walabotSDK_RasbPi.deb
Krok 8: Nastavenie Raspberry Pi - 3
Musíme začať konfigurovať RPi, aby používal zbernicu i2c. Z príkazového shellu:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
akonáhle to urobíte, musíte do súboru modulov pridať nasledujúce
Z príkazového shellu:
sudo nano /etc /modules
pridajte tieto 2 reťazce na samostatné riadky:
i2c-dev
i2c-bcm2708
Krok 9: Nastavenie Raspberry Pi - 4
Walabot čerpá značnú časť prúdu a budeme tiež používať GPIO na ovládanie vecí, takže ich musíme nastaviť.
Z príkazového shellu:
sudo nano /boot/config.txt
na koniec súboru pridajte nasledujúce riadky:
safe_mode_gpio = 4
max_usb_current = 1
RPi je vynikajúci nástroj pre tvorcov, ale má obmedzený prúd, ktorý je možné odoslať Walabotovi. Preto pridávame max. Prúd 1Amp namiesto štandardnejších 500mA
Krok 10: Python
Prečo Python? Pretože je kódovanie veľmi jednoduché, rýchle spustenie a je k dispozícii množstvo dobrých príkladov pythonu! Nikdy predtým som to nepoužil a čoskoro som bol v prevádzke. Teraz je RPi nakonfigurovaný na to, čo chceme, ďalším krokom je konfigurácia Pythonu tak, aby mal prístup k rozhraniam Walabot API a LCD Servo.
Krok 11: Pre Walabot
Z príkazového shellu
Sudo pip install „/usr/share/walabot/python/WalabotAPI-1.0.21.zip“
Krok 12: Pre servo rozhranie
Z príkazového shellu
sudo apt-get install git build-essential python-dev
CD ~
git klon
cd Adafruit_Python_PCA9685
sudo python setup.py install
Prečo musíme používať servo ovládač? Pre RPi niekoľko dôvodov.
1. Prúd ťahaný servomotorom môže byť veľmi vysoký a toto číslo sa zvyšuje, čím viac serva máte (samozrejme). Ak jazdíte na servo directky z RPi, riskujete sfúknutie jeho zdroja
2. Načasovanie PWM (Pulse Width Modulation), ktoré riadi polohu serva, je veľmi dôležité. Pretože RPi nepoužíva operačný systém v reálnom čase (môžu existovať prerušenia a podobne), časovanie nie je presné a môže spôsobiť nervózne zášklby serva. Vyhradený ovládač umožňuje presné ovládanie, ale tiež umožňuje pridať až 16 serv, takže je to skvelé na rozšírenie.
Krok 13: Pre LCD
otvorte webový prehliadač RPi
www.sunfounder.com/learn/category/sensor-k…
Stiahnuť ▼
github.com/daveyclk/SunFounder_SensorKit_…
Z príkazového shellu:
sudo mkdir/usr/share/sunfounder
Pomocou grafického prieskumníka skopírujte priečinok python zo súboru zip do nového priečinka sunfounder
Displej LCD slúži na upozornenie používateľa, čo sa presne deje. Zobrazuje proces konfigurácie až po hodnoty x, y a z mapované na každé servo
Krok 14: Blynk
Blynk je vynikajúca služba IoT, ktorá vám umožňuje vytvoriť vlastnú aplikáciu na ovládanie vašich vecí. Zdá sa, že je to perfektné riešenie, aby mi diaľkové ovládanie walabota skutočne vytočilo nastavenia…
Jeden problém. Blynk momentálne nie je podporovaný na platforme Python, bugger. Ale neboj sa! našiel som peknú malú prácu, ktorá umožňuje diaľkové ovládanie a zadávanie parametrov na diaľku! je to trochu hackerské
prvým krokom je stiahnutie aplikácie Blynk z vášho obľúbeného obchodu s aplikáciami
Za druhé, zaregistrujte si účet
Akonáhle to urobíte, otvorte aplikáciu a spustite nový projekt, pričom ako hardvér zvoľte Raspberry Pi 3.
Aplikácia vám pridelí prístupový token (budete ho potrebovať na vloženie kódu)
Akonáhle to urobíte. budete musieť nastaviť aplikáciu tak, ako je to znázornené na obrázkoch. Takto bude komunikovať s walabotom.
Krok 15: Konfigurácia aplikácie Blynk
Krok 16: Tento QR kód môžete použiť v aplikácii Blynk na klonovanie môjho projektu, aby ste ušetrili čas
OK Teraz, keď je aplikácia nastavená, môžeme nakonfigurovať Python a RPi, aby s ňou hovorili cez internet. Mágia
Krok 17: Spustenie Blynku s Raspberry Pi a používanie Blynku HTTPS pre Python
Najprv musíte nainštalovať wrapper Blynk HTTPS pre Python
Z príkazového shellu:
klon sudo git
sudo pip install blynkapi
Za druhé, musíte si nainštalovať službu Blynk na RPi
Z príkazového shellu:
klon git
cd blynk-knižnica/linux
všetko vyčistiť
na spustenie služby blynk
sudo./blynk --token = YourAuthToken
Aby ste zaistili spustenie služby Blynk pri štarte, musíte upraviť /etc/rc.local
vykonávaním
sudo nano /etc/rc.local
pridaj to na koniec
./blynk-library/linux/blynk --token = môj token &
(V sekcii kódu som vložil odkaz na súbor môjho súboru /etc/rc.local)
Ak chcete otestovať, či funguje, stačí napísať
sudo /etc/rc.local start
Teraz by mala byť spustená služba Blynk
Krok 18: Automatické spustenie skriptu
Teraz, keď je všetko nastavené a nakonfigurované, a máme pripravený kód pythonu. môžeme nastaviť automatické spustenie vecí, aby sme mohli zbaviť klávesnice a monitorov
Je potrebné urobiť niekoľko vecí
Vytvorte nový súbor skriptu na spustenie programu Python
sudo nano guitareffect.sh
pridajte tieto riadky
#!/bin/sh
python /home/pi/GuitarEffectCLI.py
určite to ulož
Ďalej musíme skriptu udeliť povolenie na spustenie zadaním
Sudo chmod +x /home/pi/guitareffect.sh
A nakoniec musíme tento skript pridať do súboru /etc/rc.local, s ktorým sme sa predtým pohrávali.
Sudo nano /etc/rc.local
Pridať
/home/pi/guitareffect.sh &
Uistite sa, že zadáte znak „&“, čo umožní spusteniu skriptu Python na pozadí
Správny! To je všetka konfigurácia a softvér vyriešený. Ďalej je čas zapojiť hardvér
Krok 19: Hardvér
Prvý prototyp Breadboardu
Krok 20: Dizajn krytu
Kryt bol navrhnutý a vykreslený v úžasnom Fusion360
Krok 21: Guts Shots
Krok 22: Zábery finálnej montáže
Krok 23: Upevnenie Walabota k stojanu
Na upevnenie na miesto použite samolepiaci kovový disk, ktorý je súčasťou walabotu
Krok 24: Hardvérové súbory STL pre 3D tlač
Krok 25: Schémy zapojenia veci hore
Krok 26: Kód
Na svoj projekt použite prilož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 pomocou číslovania tabúľ
GPIO.setmode (GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)
Autorizačný token #blynk
auth_token = "your_auth_token_here"
# Importujte modul PCA9685 na ovládanie serva.
importovať Adafruit_PCA9685
#importujte LCD modul z miesta
from imp import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')
# Inicializujte počítač PCA9685 pomocou predvolenej adresy (0x40).
pwm = Adafruit_PCA9685. PCA9685 ()
# blynk predmetov
predvolené hodnoty = 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")
defin LCDsetup ():
LCD1602.init (0x27, 1) # init (adresa slave, osvetlenie pozadia)
def numMap (x, in_min, in_max, out_min, out_max): "" "slúži na mapovanie čítaní walabotov do polohy servo" "" návrat int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# použite na zaokrúhľovanie nespracovaných údajov na priradenú hodnotu
def myRound (x, base = 2): return int (base * round (float (x)/base))
#extrahuje číslo z vráteného reťazca blynk
def numberExtract (val): val = str (val) return int (filter (str.isdigit, val))
# Nastavte frekvenciu na 60 Hz, vhodné pre servá.
pwm.set_pwm_freq (60)
# Konfigurujte predvolené dĺžky min. A max. Impulzu serva
SERVO_MIN = 175 # Minimálna dĺžka impulzu zo 4096 SERVO_MAX = 575 # Maximálna dĺžka impulzu zo 4096
# predvolené 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
# premenné na prepnutie na blynk
on = "[u'1 ']"
trieda 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) 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 ()
Tlač PHI_MAX = numberExtract (PHI_MAX) ("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val () PHI_RES = numberExtract (PHI_RES) tlač ("Phi Res =", PHI_RES)
THRESHOLD = Threshold.get_val ()
THRESHOLD = numberExtract (THRESHOLD) print ("Threshold =", THRESHOLD)
else: # ak nič z aplikácie blynk, načítať predvolené hodnoty SERVO_MIN = 175 # minimálna dĺžka impulzu zo 4096 SERVO_MAX = 575 # maximálna dĺžka impulzu zo 4096
# predvolené 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_TYPElic.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) okrem self.wlbt. WalabotError as err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' raise err
def štart (sám):
self.wlbt. Start ()
def kalibrovať (vlastné):
self.wlbt. StartCalibration ()
def get_targets (self):
self.wlbt. Trigger () vrátiť self.wlbt. GetSensorTargets ()
def stop (vlastné):
self.wlbt. Stop ()
odpojiť (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 () # skontrolujte, či nie je spustené tlačidlo blynk, stlačte (GPIO.input (18) == 0): #check flag footswitch flag = False
LCD1602.write (0, 0, „OK! Poďme 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, 'Spustenie programu Walabot')
appcheck = štart_button.app_status () príznak = Skutočný # resetovací príznak pre hlavný prog
zatiaľ čo príznak: # slúži na prepnutie do pohotovostného režimu (efektívne)
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čidlo štart stlačte appcheck = start_button.app_status ()
inak:
if (GPIO.input (18)! = 0): #check flag footswitch flag = False
xval = 0
yval = 0 zval = 0 priemer = 2 oneskorenieČas = 0
ciele = wlbt.get_targets ()
ak len (ciele)> 0:
pre j v rozsahu (priemer):
ciele = wlbt.get_targets ()
ak len (ciele)> 0: print (len (ciele)) ciele = ciele [0]
print (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) ak xval SERVO_MAX: xval = SERVO_MAX LCD1602.write (0, 0, 'x =' + str (xval) + '') pwm.set_pwm (0, 0, xval)
yval = yval/priemer
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/priemer
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)
inak:
vytlačiť („žiadne ciele“) LCD1602.write (0, 0, „Vypínanie“) LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()
if _name_ == '_main_':
zatiaľ čo pravda: hlavné ()
pre guitareffect.sh
#!/bin/sh
cd /domov /pi
sudo python GuitarEffectCLI.py
Kópia lokálneho súboru RC ako referencia
#!/bin/sh -e # # rc.local # # Tento skript sa spustí na konci každého viacúrovňového behu. # Uistite sa, že skript pri úspechu skončí „0“alebo pri chybe akékoľvek iné # hodnoty. # # Ak chcete povoliť alebo zakázať tento skript, zmeňte iba počet bitov vykonania. # # Štandardne tento skript nerobí nič.
# Vytlačte IP adresu
_IP = $ (názov hostiteľa -I) || true if ["$ _IP"]; potom vytlačte „Moja IP adresa je %s / n“„$ _IP“fi
./blynk-library/linux/blynk --token = "váš token ide sem" &
spať 10 sudo /home/pi/guitareffect.sh a ukončiť 0
Krok 27: Repozitáre Github na použitie
Použite to pre Sunfounder LCD
github.com/daveyclk/SunFounder_SensorKit_f…
Použite to pre ovládač serva
github.com/daveyclk/Adafruit_Python_PCA968…
Použite to pre modul Blynk Python HTTPS Wrapper
github.com/daveyclk/blynkapi
Krok 28: Záver
Toto bola strmá krivka vzdelávania, ale stálo to za to.
Moje take away sú
- Musel som sa naučiť Python.. Ukazuje sa, že je to eso
- Rozhranie Python na Raspberry Pi so službou Blynk IoT. Toto nie je oficiálne podporované, takže jeho funkcie majú určité obmedzenia. Napriek tomu funguje skvele!
- Ukazuje sa, že Walabot je skvelý na hudobné vyjadrenie. Použil som to na Korg SDD3000, ale môžete použiť akýkoľvek efekt, ktorý sa vám páči
Vyrazte si sami. Nie je to obmedzené na gitarové efekty, môžem ich použiť s akýmkoľvek nástrojom s akýmkoľvek efektom.
Druhé miesto v súťaži Raspberry Pi Contest 2017