Innholdsfortegnelse:
- Trinn 1: Ting du trenger
- Trinn 2: Abstrakt
- Trinn 3: Grunnideen
- Trinn 4: Walabot
- Trinn 5: Komme i gang
- Trinn 6: Sette opp Raspberry Pi - 1
- Trinn 7: Konfigurere Raspberry Pi - 2
- Trinn 8: Sette opp Raspberry Pi - 3
- Trinn 9: Konfigurere Raspberry Pi - 4
- Trinn 10: Python
- Trinn 11: For Walabot
- Trinn 12: For servo -grensesnittet
- Trinn 13: For LCD -skjermen
- Trinn 14: Blynk
- Trinn 15: Konfigurering av Blynk -appen
- Trinn 16: Du kan bruke denne QR -koden med Blynk -appen til å klone prosjektet mitt for å spare tid
- Trinn 17: Kjøre Blynk med Raspberry Pi og bruke Blynk HTTPS for Python
- Trinn 18: Kjør skriptet automatisk
- Trinn 19: Maskinvaren
- Trinn 20: Kapslingsdesign
- Trinn 21: Guts Shots
- Trinn 22: Sluttmonteringsskudd
- Trinn 23: For å fikse Walabot til stativet
- Trinn 24: Maskinvare STL -filer for 3D -utskrift
- Trinn 25: Skjemaer for kabling av ting
- Trinn 26: Kode
- Trinn 27: Github -lagre som skal brukes
- Trinn 28: Konklusjon
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Kontroller favorittgitareffekten din med bare gitarposer!
Trinn 1: Ting du trenger
Maskinvarekomponenter
Walabot - Walabot
Raspberry Pi - Raspberry Pi 3 Model B
Sunfounder LCD1602
SunFounder PCA9685 16-kanals 12-biters PWM-servodriver for Arduino og Raspberry Pi
Servo (generisk) Ingen lenke
9V batteriklemme
4xAA batteriholder
AA -batterier
Hoppertråder (generisk)
DPDT Latching Action Foot Switch
Korg SDD3000-PDL
Programvare -operativsystemer, apper og online -tjenester
Autodesk Fusion360 -
Blynk -
Verktøy osv
3D -skriver
Loddejern
Trinn 2: Abstrakt
Hvordan ville det være å kontrollere det musikalske uttrykket uten å bruke posisjonen til gitaren din i 3D -rom? Vel, la oss protoype noe og finne ut!
Trinn 3: Grunnideen
Jeg ønsket å kunne kontrollere 3 effektparameteren i sanntid, jeg ville gjøre dette ved å bruke hvordan jeg plasserte gitaren min. Så en ting var klart, jeg skulle trenge et par ting.
- En sensor som kan se 3D -plass
- Servoer for å vri på knappene
- En LCD -skjerm
- En I2C Servo driver
- En bringebær Pi
- For å lære Python
Trinn 4: Walabot
Vil du se gjennom vegger? Sanseobjekter i 3D -rom? Følelse hvis du puster fra andre siden av rommet? Vel, du har lykke til!
Walabot er en helt ny måte å kjenne på rommet rundt deg ved å bruke lav effektradar.
Dette kom til å være nøkkelen til dette prosjektet, jeg ville kunne ta karteasan (XY-Z) -kodinatene til objekter i 3D-rom, og kartlegge dem til servoposisjoner som endrer hvordan en gitareffekt høres ut, i sanntid, uten å berøre pedalen.
Vinne.
Mer informasjon om Walabot finner du her
Trinn 5: Komme i gang
Første ting først, du trenger en datamaskin for å kjøre Walabot, for dette prosjektet bruker jeg en Raspberry Pi 3 (her referert til på RPi) på grunn av den innebygde WiFi og generelle ekstra oomph
Jeg kjøpte et 16 GB SD -kort med NOOBS forhåndsinstallert for å holde ting fint og enkelt, og valgte å installere Raspian som mitt foretrukne Linux -operativsystem
(hvis du ikke er kjent med hvordan du installerer Raspian, vennligst ta deg tid til å lese litt om dette)
OK, når du har kjørt Raspian på RPi -en din, er det noen få konfigurasjonstrinn du må ta for å gjøre tingene klare for prosjektet vårt
Trinn 6: Sette opp Raspberry Pi - 1
Kontroller først at du kjører den nyeste kjerneversjonen, og se etter oppdateringer ved å åpne et kommandoskall og skrive
sudo apt-get oppdatering
sudo apt-get dist-upgrade
(sudo er lagt til for å sikre at du har administrative rettigheter, f.eks. ting vil fungere)
Dette kan ta en stund å fullføre, så gå og ta en god kopp te.
Trinn 7: Konfigurere Raspberry Pi - 2
Du må installere Walabot SDK for RPi. Gå til RPi -nettleseren til https://www.walabot.com/gettingstarted og last ned Raspberry Pi Installer Package.
Fra et kommandoskall:
nedlasting av cd
sudo dpkg -I walabotSDK_RasbPi.deb
Trinn 8: Sette opp Raspberry Pi - 3
Vi må begynne å konfigurere RPi for å bruke i2c -bussen. Fra et kommandoskall:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Når dette er gjort, må du legge til følgende i modulfilen
Fra et kommandoskall:
sudo nano /etc /modules
legg til disse 2 strengene på separate linjer:
i2c-dev
i2c-bcm2708
Trinn 9: Konfigurere Raspberry Pi - 4
Walabot trekker en god del strøm, og vi vil også bruke GPIO til å kontrollere ting, så vi må sette dem opp
Fra et kommandoskall:
sudo nano /boot/config.txt
legg til følgende linjer på slutten av filen:
safe_mode_gpio = 4
max_usb_current = 1
RPi er et utmerket verktøy for produsenter, men det er begrenset i strømmen det kan sende til Walabot. Derfor legger vi til en maksimal strøm på 1 ampere i stedet for den mer vanlige 500mA
Trinn 10: Python
Hvorfor Python? vel, siden det er superenkelt å kode, raskt å komme i gang og det er mange gode python -eksempler tilgjengelig! Jeg hadde aldri brukt det før og var snart i gang på kort tid. Nå er RPi konfigurert for det vi ønsker, neste trinn er å konfigurere Python til å ha tilgang til Walabot API, LCD Servo -grensesnitt
Trinn 11: For Walabot
Fra et kommandoskall
Sudo pip installer "/usr/share/walabot/python/WalabotAPI-1.0.21.zip"
Trinn 12: For servo -grensesnittet
Fra et kommandoskall
sudo apt-get install git build-essential python-dev
cd ~
git -klon
cd Adafruit_Python_PCA9685
sudo python setup.py installere
Hvorfor trenger vi å bruke en servodriver? Vel, av en RPi et par grunner.
1. Strømmen trukket av en servo kan være veldig høy, og det tallet blir større jo flere servoer du har (selvfølgelig). Hvis du kjører servoen direkte fra en RPi, risikerer du å blåse strømforsyningen
2. Tidspunktene for PWM (Pulse Width Modulation) som styrer servoposisjonen er svært viktige. Siden RPi ikke bruker et sanntids -operativsystem (det kan være avbrudd og lignende), er timingen ikke nøyaktig og kan få servoene til å rykke nervøst. En dedikert driver tillater nøyaktig kontroll, men gir også mulighet for å legge til opptil 16 servoer, så dette er flott for utvidelse.
Trinn 13: For LCD -skjermen
åpne RPi -nettleseren din
www.sunfounder.com/learn/category/sensor-k…
nedlasting
github.com/daveyclk/SunFounder_SensorKit_…
Fra et kommandoskall:
sudo mkdir/usr/share/sunfounder
Bruk den grafiske utforskeren til å kopiere python -mappen ut av zip -filen til den nye sunfounder -mappen
LCD -skjermen brukes til å spørre brukeren om hva som skjer. Viser konfigurasjonsprosessen til x-, y- og z -verdiene som blir kartlagt på hver servo
Trinn 14: Blynk
Blynk er en strålende IoT -tjeneste som lar deg lage en tilpasset app for å kontrollere tingene dine. Det virket som den perfekte løsningen å gi meg fjernkontroll av walaboten for å virkelig ringe innstillingene …
Ett problem. Blynk støttes foreløpig ikke på Python -plattformen, bugger. Men ikke frykt! Jeg klarte å finne et fint lite arbeid som tillater fjernkontroll og fjernparameterinngang! det er litt hacky
første trinn er å laste ned Blynk -appen fra din favorittappbutikk
For det andre, registrer deg for en konto
Når det er gjort, åpner du appen og starter et nytt prosjekt, og velger Raspberry Pi 3 som maskinvare.
Appen vil tildele deg et tilgangstoken (du trenger dette for å sette inn koden din)
Når du har gjort det. du må konfigurere appen som vist på bildene. Slik vil det grensesnittet med walaboten.
Trinn 15: Konfigurering av Blynk -appen
Trinn 16: Du kan bruke denne QR -koden med Blynk -appen til å klone prosjektet mitt for å spare tid
OK Nå som appen er konfigurert, kan vi konfigurere Python og RPi til å snakke med den over internett. Magi
Trinn 17: Kjøre Blynk med Raspberry Pi og bruke Blynk HTTPS for Python
Først må du installere Blynk HTTPS wrapper for Python
Fra et kommandoskall:
sudo git klon
sudo pip installer blynkapi
For det andre må du installere Blynk -tjenesten på RPi
Fra et kommandoskall:
git -klon
cd blynk-bibliotek/linux
gjøre rent alt
å kjøre blynk -tjenesten
sudo./blynk --token = YourAuthToken
For å sikre at Blynk -tjenesten kjører ved oppstart, må du endre /etc/rc.local
ved å gjøre
sudo nano /etc/rc.local
legg til dette på slutten
./blynk-library/linux/blynk --token = mitt token &
(jeg har inkludert en håndtering av min /etc/rc.local -fil i kodeseksjonen for referanse)
For å teste at den fungerer, bare skriv
sudo /etc/rc.lokal start
Blynk -tjenesten skal nå kjøre
Trinn 18: Kjør skriptet automatisk
Nå som alt er konfigurert og konfigurert, og vi har python -koden klar. vi kan sette ting til å kjøre automatisk, slik at vi kan slippe tastaturet og skjermene
Det er et par ting å gjøre
Opprett en ny skriptfil for å kjøre ut Python -programmet
sudo nano gitareffekt.sh
legg til disse linjene
#!/bin/sh
python /home/pi/GuitarEffectCLI.py
sørg for å lagre den
Deretter må vi gi skriptet tillatelse til å kjøre ved å skrive
Sudo chmod +x /home/pi/guitareffect.sh
Og til slutt må vi legge til dette skriptet i /etc/rc.local -filen som vi tinker med tidligere.
Sudo nano /etc/rc.local
Legge til
/home/pi/guitareffect.sh &
Sørg for å inkludere "&" som gjør at Python Script kan kjøres i bakgrunnen
Ikke sant! Det er all konfigurasjon og programvare som er sortert, neste gang er det på tide å koble til maskinvaren
Trinn 19: Maskinvaren
Første Breadboard -prototype
Trinn 20: Kapslingsdesign
Kapslingen ble designet og gjengitt i den fantastiske Fusion360
Trinn 21: Guts Shots
Trinn 22: Sluttmonteringsskudd
Trinn 23: For å fikse Walabot til stativet
Bruk den selvklebende metallskiven som følger med walaboten for å fikse den på plass
Trinn 24: Maskinvare STL -filer for 3D -utskrift
Trinn 25: Skjemaer for kabling av ting
Trinn 26: Kode
Bruk det vedlagte Python -skriptet for prosjektet ditt
fra _future_ import print_functionfrom sys importplattform fra os import system fra blynkapi import Blynk import WalabotAPI import tid import RPi. GPIO som GPIO
#sett opp GPIO ved hjelp av tavlenummerering
GPIO.setmode (GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)
#blynk auth -token
auth_token = "your_auth_token_here"
# Importer PCA9685 -modulen for servokontroll.
importer Adafruit_PCA9685
#import LCD -modul fra stedet
fra imp import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')
# Initialiser PCA9685 ved å bruke standardadressen (0x40).
pwm = Adafruit_PCA9685. PCA9685 ()
# blynk objekter
standardinnstillinger = 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")
Terskel = 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 -adresse, bakgrunnslys)
def numMap (x, in_min, in_max, out_min, out_max): "" "brukes til å kartlegge walabotavlesningene til servoposisjon" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + ut_min)
# bruk dette for å avrunde rådataene til den tildelte verdien
def myRound (x, base = 2): return int (base * round (float (x)/base))
#trekker ut tallet fra den returnerte blynk -strengen
def numberExtract (val): val = str (val) return int (filter (str.isdigit, val))
# Sett frekvensen til 60hz, bra for servoer.
pwm.set_pwm_freq (60)
# Konfigurer standardverdier for min og maks. Servopulslengde
SERVO_MIN = 175 # Min pulslengde ut av 4096 SERVO_MAX = 575 # Maks pulslengde ut av 4096
# walabot standardverdier
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
TRESHOLD = 1
# variabler for blynk -bytte
på = "[u'1 ']"
klasse 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) utskrift ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = numberExtract (R_MAX) utskrift ("R max =", R_MAX)
R_MIN = Rmin.get_val ()
R_MIN = numberExtract (R_MIN) utskrift ("R Min =", R_MIN)
R_RES = Rres.get_val ()
R_RES = numberExtract (R_RES) -utskrift ("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) utskrift ("Phi Max =", PHI_MAX) PHI_RES = PhiRes.get_val () PHI_RES = numberExtract (PHI_RES) utskrift ("Phi Res =", PHI_RES)
THRESHOLD = Threshold.get_val ()
THRESHOLD = numberExtract (THRESHOLD) utskrift ("Threshold =", THRESHOLD)
annet: # hvis ingenting fra blynk -appen, standardinnstillinger for belastning SERVO_MIN = 175 # Min pulslengde ut av 4096 SERVO_MAX = 575 # Maks pulslengde ut av 4096
# walabot standardverdier
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
TRESHOLD = 1
def connect (self): try: 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) unntatt self.wlbt. WalabotError som feil: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' hevefeil
def start (self):
self.wlbt. Start ()
def kalibrere (selv):
self.wlbt. StartCalibration ()
def get_targets (self):
self.wlbt. Trigger () return self.wlbt. GetSensorTargets ()
def stopp (selv):
self.wlbt. Stop ()
def frakobling (selv):
self.wlbt. Koble fra ()
def main ():
flag = True check = "" LCDsetup () mens flagg: LCD1602.write (0, 0, 'Guitar') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Trykk Start for') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # sjekk for blynk startknapp trykk hvis (GPIO.input (18) == 0): #check footswitch flag = False
LCD1602.write (0, 0, "OK! La oss gjøre det")
LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () hvis ikke wlbt.isConnected: LCD1602.write (0, 0, 'Not Connected') annet: LCD1602.skriv (0, 0, 'Tilkoblet') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating …..') time.sleep (3) LCD1602.write (0, 0, 'Starter Walabot')
appcheck = start_button.app_status () flag = True # reset flagg for hovedprog
mens flagg: # brukes til å sette 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 startknapp trykk appcheck = start_button.app_status ()
ellers:
if (GPIO.input (18)! = 0): #check footswitch flag = False
xval = 0
yval = 0 zval = 0 gjennomsnitt = 2 delayTime = 0
mål = wlbt.get_targets ()
hvis len (mål)> 0:
for j i området (gjennomsnitt):
mål = wlbt.get_targets ()
hvis len (mål)> 0: print (len (mål)) mål = mål [0]
print (str (goals.xPosCm))
xval += int (goals.xPosCm) yval += int (goals.yPosCm) zval += int (goals.zPosCm) time.sleep (delayTime) else: print ("ingen mål") xval = xval/gjennomsnitt
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/gjennomsnitt
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/gjennomsnitt
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)
ellers:
print ("ingen mål") LCD1602.write (0, 0, "Shutting Down") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()
hvis _name_ == '_main_':
while True: main ()
for gitareffekten.sh
#!/bin/sh
cd /home /pi
sudo python GuitarEffectCLI.py
En kopi av den lokale RC -filen som referanse
#!/bin/sh -e # # rc.local # # Dette skriptet kjøres på slutten av hvert flerbruker -nivå. # Sørg for at skriptet vil "avslutte 0" ved suksess eller annen # verdi ved feil. # # For å aktivere eller deaktivere dette skriptet, bare endre kjøringen # bits. # # Som standard gjør dette skriptet ingenting.
# Skriv ut IP -adressen
_IP = $ (vertsnavn -I) || true if ["$ _IP"]; deretter 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 avslutt 0
Trinn 27: Github -lagre som skal brukes
Bruk dette til Sunfounder LCD
github.com/daveyclk/SunFounder_SensorKit_f…
Bruk dette til servodriveren
github.com/daveyclk/Adafruit_Python_PCA968…
Bruk dette til Blynk Python HTTPS Wrapper
github.com/daveyclk/blynkapi
Trinn 28: Konklusjon
Dette har vel vært en bratt læringskurve, men det har vært så verdt det.
Mine takeaways er
- Jeg måtte lære Python..vises at det er ess
- Grensesnittet mellom Python på Raspberry Pi og Blynk IoT -tjenesten. Dette støttes ikke offisielt, så det er noen grenser for funksjonene. Fungerer fortsatt bra!
- Det viser seg at Walabot er flott for musikalsk uttrykk. Jeg brukte den på en Korg SDD3000, men du kan bruke hvilken som helst effekt du liker
Ta en tur selv. Dette er ikke begrenset til gitareffekter, jeg kan brukes med ethvert instrument med hvilken som helst effekt.
Runner Up i Raspberry Pi Contest 2017