Innehållsförteckning:
- Steg 1: Saker du behöver
- Steg 2: Abstrakt
- Steg 3: Grundidén
- Steg 4: Walabot
- Steg 5: Komma igång
- Steg 6: Konfigurera Raspberry Pi - 1
- Steg 7: Konfigurera Raspberry Pi - 2
- Steg 8: Konfigurera Raspberry Pi - 3
- Steg 9: Konfigurera Raspberry Pi - 4
- Steg 10: Python
- Steg 11: För Walabot
- Steg 12: För Servo -gränssnittet
- Steg 13: För LCD -skärmen
- Steg 14: Blynk
- Steg 15: Konfigurera Blynk -appen
- Steg 16: Du kan använda den här QR -koden med Blynk -appen för att klona mitt projekt för att spara tid
- Steg 17: Köra Blynk med Raspberry Pi och använda Blynk HTTPS för Python
- Steg 18: Kör skriptet automatiskt
- Steg 19: Hårdvaran
- Steg 20: Kapslingsdesign
- Steg 21: Guts Shots
- Steg 22: Slutmonteringsbilder
- Steg 23: För att fixa Walabot till stativet
- Steg 24: Hårdvaru -STL -filer för 3D -utskrift
- Steg 25: Scheman för att koppla ihop saken
- Steg 26: Kod
- Steg 27: Github -förråd att använda
- Steg 28: Slutsats
Video: Walabot FX - Guitar Effect Control: 28 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:48
Styr din favoritgitarreffekt med bara fantastiska gitarrposer!
Steg 1: Saker du behöver
Hårdvarukomponenter
Walabot - Walabot
Raspberry Pi - Raspberry Pi 3 Model B
Sunfounder LCD1602
SunFounder PCA9685 16-kanals 12-bitars PWM-servodrivrutin för Arduino och Raspberry Pi
Servo (generisk) Ingen länk
9V batteriklämma
4xAA batterihållare
AA -batterier
Bygelkablar (generiska)
DPDT Latching Action Foot Switch
Korg SDD3000-PDL
Programvaru -operativsystem, appar och onlinetjänster
Autodesk Fusion360 -
Blynk -
Verktyg etc
3d skrivare
Lödkolv
Steg 2: Abstrakt
Hur skulle det vara att styra musikaliskt uttryck med bara din gitarrs position i 3D -rymden? Tja, låt oss protoypa något och ta reda på det!
Steg 3: Grundidén
Jag ville kunna styra 3 effektparametrar i realtid, jag ville göra detta med hjälp av hur jag placerade min gitarr. Så en sak var klar, jag skulle behöva några saker.
- En sensor som kan se 3D -utrymme
- Servos för att vrida vredet
- En LCD -skärm
- En I2C Servo -drivrutin
- En hallon Pi
- Att lära sig Python
Steg 4: Walabot
Vill du se genom väggar? Känna föremål i 3D -rymden? Känsla om du andas från andra sidan rummet? Tja, du har tur!
Walabot är ett helt nytt sätt att känna av utrymmet runt dig med hjälp av låg effektradar.
Detta skulle bli nyckeln till det här projektet, jag skulle kunna ta karteasan (X-Y-Z) -kodinaterna av objekt i 3D-rymden och kartlägga dem till servopositioner som förändrar hur en gitarreffekt låter i realtid utan att röra pedalen.
Vinna.
Mer information om Walabot hittar du här
Steg 5: Komma igång
Först och främst, du kommer att behöva en dator för att köra Walabot, för detta projekt använder jag en Raspberry Pi 3 (här refererad till på RPi) på grund av den inbyggda WiFi och allmänna extra oomph
Jag köpte ett 16 GB SD -kort med NOOBS förinstallerat för att hålla saker snygga och enkla och valde att installera Raspian som mitt valda Linux -operativsystem
(om du inte känner till hur du installerar Raspian, ta en stund för att läsa lite om detta)
OK, när du väl har kört Raspian på din RPi finns det några konfigurationssteg att ta för att göra saker redo för vårt projekt
Steg 6: Konfigurera Raspberry Pi - 1
Kontrollera först att du kör den senaste kärnversionen och leta efter uppdateringar genom att öppna ett kommandoskal och skriva
sudo apt-get uppdatering
sudo apt-get dist-upgrade
(sudo läggs till för att säkerställa att du har administrativa privilegier, t.ex. att saker kommer att fungera)
Detta kan ta ett tag att slutföra, så gå och ta en god kopp te.
Steg 7: Konfigurera Raspberry Pi - 2
Du måste installera Walabot SDK för RPi. Från din RPi -webbläsare går du till https://www.walabot.com/gettingstarted och laddar ner Raspberry Pi Installer Package.
Från ett kommandoskal:
nedladdning av cd
sudo dpkg -I walabotSDK_RasbPi.deb
Steg 8: Konfigurera Raspberry Pi - 3
Vi måste börja konfigurera RPi för att använda i2c -bussen. Från ett kommandoskal:
sudo apt-get install python-smbus
sudo apt-get install i2c-verktyg
när detta är gjort måste du lägga till följande i modulfilen
Från ett kommandoskal:
sudo nano /etc /modules
lägg till dessa 2 strängar på separata rader:
i2c-dev
i2c-bcm2708
Steg 9: Konfigurera Raspberry Pi - 4
Walabot drar en hel del ström, och vi kommer också att använda GPIO: er för att styra saker så vi måste ställa in dessa
Från ett kommandoskal:
sudo nano /boot/config.txt
lägg till följande rader i slutet av filen:
safe_mode_gpio = 4
max_usb_current = 1
RPi är ett utmärkt verktyg för tillverkare, men det är begränsat i strömmen det kan skicka till Walabot. Därför lägger vi till en max på 1Amp istället för den mer vanliga 500mA
Steg 10: Python
Varför Python? Tja, eftersom det är superenkelt att koda, snabbt att köra och det finns massor av bra python -exempel tillgängliga! Jag hade aldrig använt det förut och var snart igång på nolltid. Nu är RPi konfigurerad för vad vi vill, nästa steg är att konfigurera Python för att ha tillgång till Walabot API, LCD Servo -gränssnitt
Steg 11: För Walabot
Från ett kommandoskal
Sudo pip installera "/usr/share/walabot/python/WalabotAPI-1.0.21.zip"
Steg 12: För Servo -gränssnittet
Från ett kommandoskal
sudo apt-get install git build-essential python-dev
cd ~
git -klon
cd Adafruit_Python_PCA9685
sudo python setup.py installera
Varför behöver vi använda en servodrivrutin? Tja, av en RPi ett par skäl.
1. Strömmen som dras av en servo kan vara mycket hög, och det antalet blir större ju fler servon du har (naturligtvis). Om du kör servo direkt från en RPi riskerar du att blåsa från strömförsörjningen
2. Tidpunkterna för PWM (Pulse Width Modulation) som styr servopositionen är mycket viktiga. Eftersom RPi inte använder ett operativsystem i realtid (det kan finnas avbrott och så) är tidpunkterna inte korrekta och kan få servon att rycka nervöst. En dedikerad drivrutin möjliggör exakt kontroll, men tillåter också att upp till 16 servon läggs till, så det här är bra för expansion.
Steg 13: För LCD -skärmen
öppna din RPi -webbläsare
www.sunfounder.com/learn/category/sensor-k…
ladda ner
github.com/daveyclk/SunFounder_SensorKit_…
Från ett kommandoskal:
sudo mkdir/usr/share/sunfounder
Använd den grafiska utforskaren och kopiera python -mappen ur zip -filen till din nya sunfounder -mapp
LCD -skärmen används för att uppmana användaren om exakt vad som händer. Visar konfigurationsprocessen till x-, y- och z -värdena som mappas på varje servo
Steg 14: Blynk
Blynk är en lysande IoT -tjänst som låter dig skapa en anpassad app för att styra dina saker. Det verkade som den perfekta lösningen att ge mig fjärrkontroll av walaboten för att verkligen ringa i inställningarna …
Ett problem. Blynk stöds för närvarande inte på Python -plattformen, bugger. Men var inte rädd! Jag kunde hitta ett trevligt litet arbete som tillåter fjärrkontroll och fjärrparameteringång! det är lite hackigt
första steget är att ladda ner Blynk -appen från din favoritappbutik
För det andra, registrera dig för ett konto
När det är klart öppnar du appen och startar ett nytt projekt, väljer Raspberry Pi 3 som hårdvara.
Appen kommer att tilldela dig en åtkomsttoken (du behöver detta för att sätta in din kod)
När du väl har gjort det. du måste konfigurera appen som visas på bilderna. Så här kommer det att interagera med walaboten.
Steg 15: Konfigurera Blynk -appen
Steg 16: Du kan använda den här QR -koden med Blynk -appen för att klona mitt projekt för att spara tid
OK Nu när appen är klar kan vi konfigurera Python och RPi för att prata med den via internet. Magi
Steg 17: Köra Blynk med Raspberry Pi och använda Blynk HTTPS för Python
Först måste du installera Blynk HTTPS -omslaget för Python
Från ett kommandoskal:
sudo git klon
sudo pip installera blynkapi
För det andra måste du installera Blynk -tjänsten på RPi
Från ett kommandoskal:
git -klon
cd blynk-bibliotek/linux
göra rent allt
att köra blynk -tjänsten
sudo./blynk --token = YourAuthToken
För att säkerställa att Blynk -tjänsten körs vid start måste du ändra /etc/rc.local
genom att göra
sudo nano /etc/rc.local
lägg till detta i slutet
./blynk-library/linux/blynk --token = min token &
(jag har inkluderat en hantering av min /etc/rc.local -fil i kodsektionen för referens)
För att testa fungerar det helt enkelt
sudo /etc/rc.local start
Blynk -tjänsten ska nu köras
Steg 18: Kör skriptet automatiskt
Nu när allt är konfigurerat och konfigurerat och vi har pythonkoden redo. vi kan ställa in saker att köras automatiskt så att vi kan släppa tangentbordet och bildskärmarna
Det finns några saker att göra
Skapa en ny skriptfil för att köra Python -programmet
sudo nano guitareffect.sh
lägg till dessa rader
#!/bin/sh
python /home/pi/GuitarEffectCLI.py
se till att spara den
Därefter måste vi ge skriptet tillstånd att köra genom att skriva
Sudo chmod +x /home/pi/guitareffect.sh
Och slutligen måste vi lägga till det här skriptet i filen /etc/rc.local som vi pysslade med tidigare.
Sudo nano /etc/rc.local
Lägg till
/home/pi/guitareffect.sh &
Var noga med att inkludera "&" så att Python Script kan köras i bakgrunden
Höger! Det är all konfiguration och mjukvara som sorterats. Därefter är det dags att koppla ihop hårdvaran
Steg 19: Hårdvaran
Första brödbräda -prototypen
Steg 20: Kapslingsdesign
Höljet designades och gjordes i den fantastiska Fusion360
Steg 21: Guts Shots
Steg 22: Slutmonteringsbilder
Steg 23: För att fixa Walabot till stativet
Använd den självhäftande metallskivan som medföljer walaboten för att fixa den på plats
Steg 24: Hårdvaru -STL -filer för 3D -utskrift
Steg 25: Scheman för att koppla ihop saken
Steg 26: Kod
Använd det bifogade Python -skriptet för ditt projekt
från _future_ import print_functionfrom sys import plattform från os import system från blynkapi import Blynk import WalabotAPI import tid import RPi. GPIO som GPIO
#konfigurera GPIO med hjälp av kortnummer
GPIO.setmode (GPIO. BOARD) GPIO.setup (18, GPIO. IN, pull_up_down = GPIO. PUD_UP)
#blynk auth -token
auth_token = "your_auth_token_here"
# Importera PCA9685 -modulen för servokontroll.
importera Adafruit_PCA9685
#importera LCD -modul från plats
från imp import load_source LCD1602 = load_source ('LCD1602', '/usr/share/sunfounder/Python/LCD1602.py')
# Initiera PCA9685 med standardadressen (0x40).
pwm = Adafruit_PCA9685. PCA9685 ()
# blynk -objekt
standard = 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")
Tröskel = Blynk (auth_token, pin = "V8")
ServoMin = Blynk (auth_token, pin = "V10")
ServoMax = Blynk (auth_token, pin = "V11")
def LCDsetup ():
LCD1602.init (0x27, 1) # init (slavadress, bakgrundsbelysning)
def numMap (x, in_min, in_max, out_min, out_max): "" "används för att kartlägga walabotavläsningarna till servoposition" "" return int ((x- in_min) * (out_max - out_min) / (in_max - in_min) + ut_min)
# använd detta för att avrunda rådata till det tilldelade värdet
def myRound (x, bas = 2): return int (bas * rund (float (x)/bas))
#extraherar talet från den returnerade blynk -strängen
def numberExtract (val): val = str (val) return int (filter (str.isdigit, val))
# Ställ in frekvensen till 60 Hz, bra för servon.
pwm.set_pwm_freq (60)
# Konfigurera standardvärdena min och max servopulslängd
SERVO_MIN = 175 # Min pulslängd av 4096 SERVO_MAX = 575 # Max pulslängd av 4096
# walabot standardvärden
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
TRÄSKEL = 1
# variabler för blynk -växling
på = "[u'1 ']"
klass Walabot:
def _init _ (själv):
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 = nummerExtrakt (SERVO_MIN) utskrift ("Servo MIN =", SERVO_MIN) R_MAX = Rmax.get_val () R_MAX = nummerExtrakt (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) print ("Phi Res =", PHI_RES)
THRESHOLD = Threshold.get_val ()
THRESHOLD = numberExtract (THRESHOLD) -utskrift ("Threshold =", THRESHOLD)
annars: # om ingenting från blynk -appen, standardinställningar för belastning SERVO_MIN = 175 # Min pulslängd av 4096 SERVO_MAX = 575 # Max pulslängd av 4096
# walabot standardvärden
R_MAX = 60 R_MIN = 20 R_RES = 5
THETA_MAX = 20
THETA_RES = 5
PHI_MAX = 20
PHI_RES = 5
TRÄSKEL = 1
def connect (self): försök: 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) utom self.wlbt. WalabotError som err: if err.code! = 19: # 'WALABOT_INSTRUMENT_NOT_FOUND' höjningsfel
def start (själv):
self.wlbt. Start ()
def kalibrera (själv):
self.wlbt. StartCalibration ()
def get_targets (själv):
self.wlbt. Trigger () return self.wlbt. GetSensorTargets ()
def stopp (själv):
self.wlbt. Stop ()
def koppla från (själv):
self.wlbt. Disconnect ()
def main ():
flag = True check = "" LCDsetup () medan flagga: LCD1602.write (0, 0, 'gitarr') LCD1602.write (0, 1, 'Effect Control') time.sleep (2) LCD1602.write (0, 0, 'Tryck på Start för') LCD1602.write (0, 1, 'begin') time.sleep (2) if (str (check) == on): flag = False else: check = start_button.get_val () # kontrollera om blynk startknapp trycker på om (GPIO.input (18) == 0): #check footswitch flag = False
LCD1602.write (0, 0, "OK! Låt oss göra det")
LCD1602.write (0, 1, '') wlbt = Walabot () wlbt.blynkConfig () wlbt.connect () LCD1602.clear () om inte wlbt.is Ansluten: LCD1602.write (0, 0, 'Inte ansluten') annars: LCD1602.write (0, 0, 'Connected') time.sleep (2) wlbt.start () wlbt.calibrate () LCD1602.write (0, 0, 'Calibrating …..') time.sleep (3) LCD1602.write (0, 0, 'Starta Walabot')
appcheck = start_button.app_status () flagga = True # återställningsflagga för huvudprog
medan flagga: # används för att sätta effekt i vänteläge (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 tryck på appcheck = start_button.app_status ()
annan:
if (GPIO.input (18)! = 0): #check footswitch flagga = Falskt
xval = 0
yval = 0 zval = 0 genomsnitt = 2 fördröjningstid = 0
mål = wlbt.get_targets ()
om len (mål)> 0:
för j i intervall (genomsnitt):
mål = wlbt.get_targets ()
om len (mål)> 0: skriv ut (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 ("inga mål") xval = xval/genomsnitt
xval = numMap (xval, -60, 60, SERVO_MIN, SERVO_MAX)
xval = myRound (xval) om xval SERVO_MAX: xval = SERVO_MAX LCD1602.write (0, 0, 'x =' + str (xval) + '') pwm.set_pwm (0, 0, xval)
yval = yval/genomsnitt
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/genomsnitt
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)
annan:
skriv ut ("inga mål") LCD1602.write (0, 0, "Stänger av") LCD1602.write (0, 1, 'The Walabot') time.sleep (3) wlbt.stop () wlbt.disconnect ()
om _name_ == '_main_':
medan True: main ()
för gitarreffekten.sh
#!/bin/sh
cd /home /pi
sudo python GuitarEffectCLI.py
En kopia av den lokala RC -filen som referens
#!/bin/sh -e # # rc.local # # Detta skript körs i slutet av varje fleranvändarkörnivå. # Se till att skriptet "avslutar 0" vid framgång eller något annat # värde vid fel. # # För att aktivera eller inaktivera detta skript ändrar du bara körningen # bitar. # # Som standard gör detta skript ingenting.
# Skriv ut IP -adressen
_IP = $ (värdnamn -I) || sant om ["$ _IP"]; skriv sedan ut "Min IP -adress är %s / n" "$ _IP" fi
./blynk-library/linux/blynk --token = "din token går här" &
sova 10 sudo /home/pi/guitareffect.sh & avsluta 0
Steg 27: Github -förråd att använda
Använd detta för Sunfounder LCD
github.com/daveyclk/SunFounder_SensorKit_f…
Använd detta för servodrivrutinen
github.com/daveyclk/Adafruit_Python_PCA968…
Använd detta för Blynk Python HTTPS Wrapper
github.com/daveyclk/blynkapi
Steg 28: Slutsats
Det här har varit en brant inlärningskurva, men har varit så värt det.
Mina take away är
- Jag var tvungen att lära mig Python..visar att det är ess
- Gränssnitt Python på Raspberry Pi med Blynk IoT -tjänsten. Detta stöds inte officiellt så det finns vissa gränser för dess funktioner. Fungerar ändå jättebra!
- Det visar sig att Walabot är bra för musikaliskt uttryck. Jag använde den på en Korg SDD3000, men du kan använda vilken effekt du vill
Kör själv. Detta är inte begränsat till gitarreffekter, jag kan användas med alla instrument med vilken effekt som helst.
Tvåa i Raspberry Pi -tävlingen 2017
Rekommenderad:
Super FAST RC Ground Effect Vehicle (Ekranoplan): 5 steg (med bilder)
Super FAST RC Ground Effect Vehicle (Ekranoplan): Du vet hur flygplan svävar några meter ovanför marken under en touch innan de rullar på landningsbanan? Detta är inte bara för att ge passagerarna en smidig landning utan det är också det naturliga resultatet av markeffekt, där
Hall Effect USB -joystick: 7 steg (med bilder)
Hall Effect USB -joystick: Den här instruktionsboken visar hur du använder en industriell Hall Effect -joystick för att göra en USB -joystick med hög presision. Det finns en annan relaterad instruerbarhet Liten USB -joystick som kan erbjuda billiga lösningar; >
Hur man bygger din egen vindmätare med hjälp av Reed Switches, Hall Effect Sensor och några rester på Nodemcu - Del 2 - Programvara: 5 steg (med bilder)
Hur man bygger din egen vindmätare med hjälp av Reed Switches, Hall Effect Sensor och några rester på Nodemcu - Del 2 - Programvara: Introduktion Detta är uppföljaren till det första inlägget " Hur man bygger din egen vindmätare med Reed Switches, Hall Effect Sensor och några rester på Nodemcu - Del 1 - Hårdvara " - där jag visar hur man monterar vindhastighet och riktningsmätning
Hur man bygger en egen vindmätare med hjälp av Reed Switches, Hall Effect Sensor och några rester på Nodemcu. - Del 1 - Hårdvara: 8 steg (med bilder)
Hur man bygger en egen vindmätare med hjälp av Reed Switches, Hall Effect Sensor och några rester på Nodemcu. - Del 1 - Hårdvara: Introduktion Sedan jag började med studierna av Arduino och Maker -kulturen har jag gärna byggt användbara enheter med skräp- och skrotdelar som flasklock, bitar av PVC, dryckburkar, etc. Jag älskar att ge en sekund liv för någon bit eller någon kompis
Hall Effect Sensor på Arduino med Fidget Spinner: 3 steg (med bilder)
Hall Effect Sensor på Arduino Använda Fidget Spinner: Abstrakt I detta projekt förklarar jag om hur hall effect sensor fungerar för att mäta fidget spinner hastighet med arduino board. fungerar: -En Hall-effektsensor är en givare som varierar sin utspänning som svar på ett magnetfält. Hall effekt