Från labbet

Digital gitarrpedal med pedalSHIELD

En digital gitarrpedal byggd från grunden med hjälp av pedalSHIELD från Arduino.

Tech used

  • Arduino Guitar Pedal
  • PedalSHIELD MEGA
  • PedalSHIELD UNO

Press to view video

Backgrund

Vi hittade Arduino-projektet pedalSHIELD som innehåller alla komponenter för att kunna löda ihop en Arduino-kontrollerad gitarrpedal. Det var ett perfekt sätt att lära sig mer om digital signalbehandling och att bygga fysiska och elektroniska enheter samtidigt som vi kunde skapa något användbart (ja, många av oss är skickliga musiker) och ha roligt på vägen.

Vår grundidé var att använda en ljudingång, t.ex. en gitarr eller en synt, och sedan använda en Arduino för att bearbeta ljudet och skicka den digitalt förändrade signalen till en analog utgång, exempelvis en förstärkare eller en högtalare.

Processen

När det gäller hårdvaruutveckling är det en utmaning att dela upp arbetet på samma sätt som man vanligtvis gör i ett mjukvaruprojekt. Först måste du få en prototyp att fungera innan du kan prova någon av den kod du har utvecklat. Därför var vårt huvudfokus att få hårdvaran att fungera så snabbt som möjligt.

En del av teamet fokuserade på att löda komponenterna till kretskortet som tillhandahölls med pedalSHIELD-kitet. Detta kretskort var sedan tänkt att paras ihop med ett Arduino MEGA-kort.

En annan del av teamet började med att ta fram prototyper av kretsarna med Arduinos kopplingsdäck och pedalShield UNO, i enlighet med exemplena från pedalSHIELDs GitHub-repo. Målet med det var att säkra upp processen och få åtminstone ett av exemplen att fungera så att vi kunde köra signalen från ett instrument genom kretsen och ut i en förstärkare och höra den förändrade signalen. Exemplena i GitHub-repot innehöll många "vanliga" effekter och koder för att testa delar av kretsen.

pedalSHIELD MEGA

Vi delade upp vissa delar av kretsarna på olika kopplingsdäck för att i slutändan kombinera dem till en hel krets. Vi testade sedan den färdigställda kretsen genom att ladda upp Arduinos kodexempel från pedalSHIELDs GitHub-repo (eller något modifierade versioner av dem) samt spela gitarr och syntar genom ingången, kopplat till en gitarrförstärkare.

Som ett sista steg testade vi den lödda kretskortspedalen med kretskortets brytare och en liten skärm. Lysdioden blinkade (som det var tänkt att den skulle göra) och vi fick den lilla skärmen att åtminstone visa upp något. Ingenting (tack och lov) gick sönder på vårt första försök, men vi hade varierande erfarenheter av ljudet. Antingen var bypass-omkopplaren ansluten på fel sätt, vilket inte gav oss en ljudutgång från pedalen, eller så fungerade inte ingångssteget eftersom ingen signal skickades till Arduinon.

Utmaningar

Vår största utmaning under projektet var förstå varför den skickade signalen lät så dåligt och i vilket skede problemet uppstod. Vi fick pedalens utgång att fungera ganska tidigt men det fanns många problem med ljudingångssteget (eller något däremellan):

  • Vi fick reda på att potentiometern som skulle styra gitarrens ingångsförstärkning inte gjorde något när man vred den från 0 till maxvärde.
  • Vi kunde inte få ingångssteget från pedalSHIELDs kretsschema att fungera korrekt så vi förenklade denna krets lite, vilket resulterade i att vi åtminstone kunde höra något från ingångssteget.
  • Vi hade problem med låg ingångsvolym och höga brusljud. Det var svårt att räkna ut i vilket steg i kretsen detta hände. En del av det kan ha berott på förenklingen av kretsarna som ev. tog bort en del lågpassfilter (low-pass-filter).
  • Det fanns också vissa överbelastningproblem (clipping-problem) när man slog på gitarren lite hårdare, detta även då vi använde det "rena" exemplet från GitHub-repon. Vi hittade några bloggartiklar där vi förstod att andra upplevde clipping-problem med det chip som användes för förstärkaren.
  • Ibland när vi rörde kopplingsdäcken kunde det uppstå glapp som gjorde att pedalen endast lät bra i cirka tre sekunder eller inte alls.

Vi hittade senare en förenklad ingångskrets som fungerade ganska bra när den var ansluten till UNO:s utgångssteg. Detta blev helt klart vårt bästa bygge när det kom till ljudkvalitet. Ändå var prototypen känslig, vilket ofta resulterade i en bullrig utgång. Vi anslöt senare ett low-pass-filter som reducerade högre frekvenser och det gjorde skillnad. Vi lärde oss att några små komponentförändringar kunde innebära en hörbar skillnad, något vi tyckte var en häftig upplevelse under projektet.

Resulat / Lärdomar

En lärdom vi tar med oss är det mödosamma arbete som krävs för att bygga hårdvaruenheter och den stora skillnaden gentemot utveckling av mjukvara. Att arbeta med hårdvara är en mycket mer “brutal” upplevelse. Ett större misstag kan förstöra flera timmars arbete på en krets. Detta faktum kan vara både nedslående och skrämmande för en mjukvaruutvecklare som är van vid att göra misstag och att det allt som oftast inte innebär några stora förseningar. I hårdvaruutveckling får man lägga mycket större vikt vid att vara 100% säker på varje beslut som tas eftersom det blir besvärligt att rätta till det senare.

Det kan ha funnits en förväntan i gruppen om att vi inte skulle ha så många problem som vi hade med de olika kretsarna. Vi följde färdiga instruktioner om hur vi skulle sätta ihop det och det verkade så enkelt. När saker och ting inte fungerade korrekt efter att ha följt alla instruktioner var det svårt att komma på ett bra sätt att hitta felet eftersom vi inte hade kunskapen och erfarenheten av att ha gjort det förut.

Att arbeta med digital ljudsignalbehandling kräver kod som inte på något sätt är överflödig och ineffektiv. Det är till exempel endast acceptabelt för musiker att ha upp till 5-10 millisekunders fördröjning vid bearbetning av ljudsignalen. Lågnivåprogrammering (low-level programming) är därför väldigt hjälpsamt i den här typen av projekt.

I en eventuell fortsättning av vårt projekt skulle vi:

  • Byta ut eller lägga till komponenter som ger ett bättre ljud. Chippen som används för ingångs-/utgångssteget gav upphov till en viss förvrängning som vi helst hade undvikit.
  • Lägga till fler kontroller för att kunna styra ljudeffekten med mer känsla.
  • Lägga till fler effekter eller “multi-effekter” och fokusera mer på signalbehandlingen i projektet.
  • Generera ett syntljud baserat på ljudinmatning från en gitarr/mikrofon.