Indholdsfortegnelse:
- Trin 1: Ting du får brug for
- Trin 2: Abstrakt
- Trin 3: Grundidéen
- Trin 4: Walabot
- Trin 5: Kom godt i gang
- Trin 6: Opsætning af Raspberry Pi - 1
- Trin 7: Opsætning af Raspberry Pi - 2
- Trin 8: Opsætning af Raspberry Pi - 3
- Trin 9: Opsætning af Raspberry Pi - 4
- Trin 10: Python
- Trin 11: Til Walabot
- Trin 12: Til Servo -grænsefladen
- Trin 13: Til LCD
- Trin 14: Blynk
- Trin 15: Konfiguration af Blynk -appen
- Trin 16: Du kan bruge denne QR -kode med Blynk -appen til at klone mit projekt for at spare tid
- Trin 17: Kørsel af Blynk med Raspberry Pi og brug af Blynk HTTPS til Python
- Trin 18: Kør scriptet automatisk
- Trin 19: Hardware
- Trin 20: Kabinetdesign
- Trin 21: Guts Shots
- Trin 22: Skud til sidste samling
- Trin 23: Sådan fastgøres Walabot til stativet
- Trin 24: Hardware STL -filer til 3D -udskrivning
- Trin 25: Skemaer til tilslutning af tingene
- Trin 26: Kode
- Trin 27: Github -lagre, der skal bruges
- Trin 28: Konklusion
Video: Walabot FX - Guitar Effect Control: 28 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:31
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
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
Å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 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
Trin 16: 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
Første Breadboard prototype
Trin 20: Kabinetdesign
Kabinettet blev designet og gengivet i den fantastiske Fusion360
Trin 21: Guts Shots
Trin 22: Skud til sidste samling
Trin 23: Sådan fastgøres 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
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.
Runner Up i Raspberry Pi Contest 2017
Anbefalede:
Super FAST RC Ground Effect Vehicle (Ekranoplan): 5 trin (med billeder)
Super FAST RC Ground Effect Vehicle (Ekranoplan): Ved du, hvordan flyene under berøring svæver et par meter over jorden i et stykke tid, før deres hjul rent faktisk rammer landingsbanen? Dette er ikke kun for at give passagererne en jævn landing, men det er også det naturlige resultat af jordeffekt, hvor
Hall Effect USB Joystick: 7 trin (med billeder)
Hall Effect USB -joystick: Denne instruktør viser, hvordan du bruger et industrielt Hall Effect -joystick til at lave et USB -joystick med høj presision.Der er en anden relateret instruerbarhed Lille USB -joystick, der kan levere billige løsninger; >
DIY Interessant Love Heart Chasing Effect LED Lights: 8 trin (med billeder)
DIY Interessant Love Heart Chasing Effect LED Lights: Denne struktur dækker hvordan man laver fantastiske magiske jagtende effekt LED -lys til din kæreste, far, mor, klassekammerater og gode venner. Dette er ret let at bygge, så længe du har tålmodighed. Jeg anbefaler at have en loddeoplevelse, hvis du bygger
Sådan opbygges dit eget vindmåler ved hjælp af Reed Switches, Hall Effect Sensor og nogle rester på Nodemcu - Del 2 - Software: 5 trin (med billeder)
Sådan opbygger du dit eget vindmåler ved hjælp af Reed Switches, Hall Effect Sensor og nogle rester på Nodemcu - Del 2 - Software: Introduktion Dette er efterfølgeren til det første indlæg " Sådan bygger du dit eget vindmåler ved hjælp af Reed Switches, Hall Effect Sensor og nogle rester på Nodemcu - Del 1 - Hardware " - hvor jeg viser, hvordan man samler vindhastighed og retningsmåling
Sådan opbygger du dit eget vindmåler ved hjælp af Reed Switches, Hall Effect Sensor og nogle rester på Nodemcu. - Del 1 - Hardware: 8 trin (med billeder)
Sådan opbygger du dit eget vindmåler ved hjælp af Reed Switches, Hall Effect Sensor og nogle rester på Nodemcu. - Del 1 - Hardware: Introduktion Siden jeg startede med studierne af Arduino og Maker Culture, har jeg godt kunne lide at bygge nyttige enheder ved hjælp af uønskede og skrotstykker såsom flaskehætter, stykker PVC, drikke dåser osv. Jeg elsker at give et sekund liv til ethvert stykke eller en makker