Trädvy Permalänk
Medlem
Plats
Falkenberg
Registrerad
Dec 2013

Arduino styrd LED Gitarr

Har påbörjat ett projekt med brorsan @DanielTech. (tjuvstartade innan projektloggen för att kunna ge en lite matigare start) Både jag och brorsan kan spela flera instrument och är givetvis super-nördar. Jag spelar bla. gitarr, elbas och saxophone. Dannemannen spelar främst gitarr och piano.

Observera den bäddade sängen

Dold text

Tillsammans så ska vi bygga en elgitarr av typen "flying V". Gitarren är en "Kitguitar". Tillsammans har vi fräst ut en färdigskårad greppbräda till rätt storlek och antal band. Vi har sedan borrat och försänkt varje hål för att kunna montera lysdioder. (lysdioderna har en fot på 4mm) Den numera före detta greppbrädan som satt på från början fick tas bort helt och kunde inte användas då den hade inlägg av mjukare material vilket hade gjort det omöjligt att borra i.

LED-lamporna ska vara styrda indeviduellt och är placerade så att det motsvarar en för varje band och sträng. Då gitarren har 22 band så kommer den ha 132 LEDs i Halsen. LED lamporna är av 3mm typ och lyser vitt.

Dold text

En Arduino i form av ett ATMEGA328P chip kommer att styra lysdioderna genom fyra stycken 74HC595N shift-register. Lysdioderna är till för att bla. visa skalor eller animationer på hela greppbrädan. För alla SweClockare som inte är så musikaliskt begåvade så betyder det helt enkelt att till och med dom som har som närmst kommit en gitarr när dom spelat Guitarhero borde kunna spela hyfsat otroliga solon. För dom som är musikaliskt begåvade så är Lysdioderna främst ett inlärningsverktyg eller show-off grej. För att bläddra mellan olika skalor och animationer så kommer det styras via (förhoppningsvis) en rotary-encoder och en vit-bakbelyst lcd kommer ge bekräftelse om vad vi pillar med.

LCD skärmen är av alfanumerisk typ och är 2x16 tecken stor. Till vänster om skärmen kommer även en Voltmeter sitta för att kunna hålla koll på batteristatusen.

Gamle Carl Gustav för storleks-jämförelse

Dold text

-Gitarrsnack-
Vad gäller själva gitarrkomponenter så kommer den att ha en HSH (humbucker-Singelcoil-Humbucker) pickup uppsättning. Den övre Humbucker pickuppen kommer jag att löda om så att den är kopplad i parallell istället för i serie som den undre och som alla vanliga humbucker är kopplade. Anledningen till Att jag vill ha en parallellkopplad humbucker är därför det ger ett annat ljud som är lite mer likt en singelcoil. Alla pickups kommer vara kopplade till enskilda volymkontroller. Allihopa kommer använda push-pull-500KΩ potentiometrar. I vanliga fall så skulle man använda en 250KΩ potentiometer till en singelcoil men med en 500KΩ Pot får singelcoilen en "diskant-boost" och kommer ge ett fränt och skrikigt ljud.

Dold text

Har även planerat att experimentera med olika sorts uppsättningar av "treble-bleed" på volymrattarna. Ett "treble-bleed" system betyder att med hjälp av en kondensator och alternativt en resistor så kommer man få tillbaka den diskanten man förlorar när man vrider ner volymen vilket skapar en mer balanserad volymratt. För tonkontroll eller (eventuellt) ljudeffekts-kontroll så hade vi tänkt använda oss av två skjutpotentiometrar på 50KΩ. Eventuella ljudeffekter kommer att avslöjas i framtiden.

Intel Core I5 4690k, Gigabyte Geforce 970 W3, Asus z97 PRO WiFi, 32GB Kingston HyperX 4x8, Corsair Obsidian 750D, Corsair RM750, 3x bromsljus från tyska bilar.

Trädvy Permalänk
Medlem
Plats
Falkenberg
Registrerad
Nov 2013

Update 1 - kod och elektronik

Halloj! Här kommer en liten uppdatering om koden och hur vi tänkt styra LEDsen i mer detalj.

Vi kommer styra lysdioderna likt en LED-matris där du har input för x och y axeln, så du har en rad, i detta fallet banden där du tänder lysdioderna genom positiv matning av ström in i anoderna och sedan via NPN transistorer styra dess koppling från katod till jord/minus som y axel. Genom att sedan då "tända" en transistor i taget (en sträng) och motsvarande band så kan man styra individuella lysdioder utan individuell kontroll av deras anod (eller katod).

gjord i PS av @Snygga_Jocke efter mina instruktioner, (jag har/kan inte PS)

Dold text

Som sammanfattning kan man säga att det enbart krävs ett output per band och sträng så sammanlagt 22 band + 6 strängar = 28 output, och som alla arduino fanatiker redan vet så har en arduino enbart 14 digitala pinnar + 6 analoga därav har vi valt att använda shift register (ett chip som tar inputen; data input, data-storage clock samt shift register clock, så ett data till output chip)

KOD
Om vi nu ska prata lite mer specifikt hur jag kodat det. ni får ursäkta att vissa kommentarer är på engelska och vissa på svenska, har redigerat koden en del (bantat bort annars onödigt många sidor) och lagt till då mer kommentarer som då är på svenska, kan lägga ut den hela koden om så önskas.

int Page; // what page to show int Counter; // Makes sure that the button wont register several times in a row int Knapp; // Logs the state of the UP button int Knopp; // logs the state of the DOWN button // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(7, 8, 9, 10, 11, 12); void setup() {   // set up the LCD's number of columns and rows:   lcd.begin(16, 2);   lcd.print("Skala:");   lcd.setCursor(0, 1);   lcd.print("Null");      //Inputs and Outputs   pinMode(6, INPUT); // Sets pin 6 as a input, är inputen för rotary encodern   pinMode(13, INPUT); // Sets pin 13 as a input, --^   pinMode(4, OUTPUT); // dataline, shift registern   pinMode(3, OUTPUT); // DataClock, --^   pinMode(2, OUTPUT); // Outputclock, --^   Serial.begin(1200); // For debug only   Counter = 0; // Resets int, har denna counter för att förhindra en konstig bug //där den lyckades dubbel räkna inputen utan att fortsätta neråt, i princip onödig //då delay(); borde ha fixat det vid det här laget.   Page = 0; // Resets int   Knapp = 0; // Resets int   Knopp = 0; // Resets int } void loop() {      Knapp = digitalRead(6);   Knopp = digitalRead(13);   if (Counter == 0) {     if (Knapp == 0 && Knopp ==1) {       Counter = 1;       if (Page == 2) {         // set ^ this number to the amount of frames/pages         Page = 0;         }       else {         Page = Page+1;         }       Update(); // updates the pages on the lcd       delay(50); // delay för att vi använder en " //rotary-encoder" och de har två pinnar output //och en jord där de skickar beroende på hållet //du vrider den en signal på pinne A och sedan //en till pinne B och om man då enbart fångar //den första signalen och sedan sätter en delay //och på så sätt ignorerar den andra så kan du //på ett lätt sätt veta vilket håll du vrider. //(kom på det helt själv, #känner_mig_stolt)       }     if (Knopp == 0 && Knapp == 1) {       Counter = 1;       if (Page == 0) {         Page = 1;         // set ^ this number to the amount of frames/pages - 1 ( one cuz it begins with 0 )         }       else {         Page = Page-1;         }       Update(); // updates the pages on the lcd       delay(50); //delay av samma anledning som ovanstående       }        }   if (Page == 0) {     Null(); // Null     } if (Page == 1) { Null2(); // är vad funktionen heter se spoilern nedan för att se hur de fungerar } //   else  { är bort kommenterad då den serial-printade //    Serial.print(Page); hela tiden och gjorde uppdaterings //    } frekvensen sämre på så sätt     Counter = 0;    } void Update() {      if (Page == 0) {     lcd.clear();     lcd.print("Skala:");     lcd.setCursor(0, 1);     lcd.print("Null");     delay(200); //delay för att förhindra annars lite väl exalterade //och ivriga sidobyten. Justerar alltså hur snabbt man ska kunna byta sida, //ska prova ta bort den nu när vi har en rotary encoder istället för 2 knappar if (Page == 1) { lcd.clear(); lcd.print("Skala:"); lcd.setCursor(0, 1); lcd.print("Null 2"); delay(200);   }

Dold text

och för er som undrar hur jag skickar datan så har jag gjort ett väldigt enkelt men likvärdigt fungerande sätt

void Null() { // själva funktionen som sedan kallas av programmet i loopen

String6(); // e , se funktionen nedan, --------------------------------v
StoreLow(); // Band : 1 ,tänder de band på ^ strängen,
StoreLow(); // Band : 2 , i detta fallet inga
StoreLow(); // Band : 3
StoreLow(); // Band : 4
StoreLow(); // Band : 5
StoreLow(); // Band : 6
StoreLow(); // Band : 7
StoreLow(); // Band : 8
StoreLow(); // Band : 9
StoreLow(); // Band : 10
StoreLow(); // Band : 11
StoreLow(); // Band : 12
StoreLow(); // Band : 13
StoreLow(); // Band : 14
StoreLow(); // Band : 15
StoreLow(); // Band : 16
StoreLow(); // Band : 17
StoreLow(); // Band : 18
StoreLow(); // Band : 19
StoreLow(); // Band : 20
StoreLow(); // Band : 21
StoreLow(); // Band : 22
Clock();

void String6() {

StoreLow(); // <empty> , 4 stycken shift register som ger 8 output styck = 4*8=32 och vi behöver enbart 28 = 4 över
StoreLow(); // <empty> --^
StoreLow(); // <empty> -- ^
StoreLow(); // <empty> -- ^
StoreHigh(); // e // tänder transistorn som motsvarar strängen; ljusa e på en gitarr
StoreLow(); // B
StoreLow(); // G
StoreLow(); // D
StoreLow(); // A
StoreLow(); // E

}

void StoreHigh() {
digitalWrite(4, HIGH); //datainput - hög (vad för data den lagrar- hög eller låg)
digitalWrite(3, HIGH); //datastorage clock - hög att den lagrar inputet i minnet)
digitalWrite(3, LOW); // sätter --^ låg för att på så sätt slutgöra signalen
digitalWrite(4, LOW); // --^
}

void StoreLow() {
digitalWrite(3, HIGH); // då datainput hela tiden återställs till låg i den övriga koden behövs inte det här-
digitalWrite(3, LOW); // -utan dataclock bara går hög och sedan låg igen för att spara en låg signal
}

void Clock() {
digitalWrite(2, HIGH); // klockar vad jag skulle kalla output clock
digitalWrite(2, LOW);
delay(0); // har en delay bara för att kunna se genom att ändra numret, gränsen vart synbart blinkande är
// ifall något går fel och lysdioderna tänds konstigt så ska man kunna sakta ner det till en mer mänsklig nivå av debugging.
}

Dold text

får väl till sist punktera att vi planerar på att byta över och använda ett SD-kort som lagring. Koden är ju inte skriven så optimalt som det går men det är för att vi vill att även gitarrister ska kunna skriva in animationer och skalor, (förlåt alla gitarrister men majoriteten är teknik-okunniga) därav krävs mera lagring för att man ska kunna expandera till ett stort bibliotek av skalor.

idéer? posta en kommentar, vi uppskattar feedback!

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2011

Riktigt roligt att se ett sådant här projekt!
Jag har själv en el-gitarr i beståndsdelar. Dock är greppbrädan redan fastlimmad. Gitarren där dock ingen kitgitarr, jag har funderat på att pyssla ihop något med den men det har aldrig kommit tillskott. :/

Men detta projektet kommer ge inspiration!

Jag jobbade en del med Arduino på högskolan men det är rostigt för min del. Matriser var aldrig heller min starka sida.

Ser fram emot att se mer.

Main: Ncase M1, MSI Z170 mITX, Intel i7 6700, GTX 980 Ti, 16 GB 2400 Mhz, Samsung 850 Evo 500GB, Silverstone SFX 600watt
Portable: Microsoft Surface Pro 4, i7, 8 GB, 256 GB

Trädvy Permalänk
Medlem
Plats
Falkenberg
Registrerad
Dec 2013
Skrivet av Arazand:

Riktigt roligt att se ett sådant här projekt!
Jag har själv en el-gitarr i beståndsdelar. Dock är greppbrädan redan fastlimmad. Gitarren där dock ingen kitgitarr, jag har funderat på att pyssla ihop något med den men det har aldrig kommit tillskott. :/

Men detta projektet kommer ge inspiration!

Jag jobbade en del med Arduino på högskolan men det är rostigt för min del. Matriser var aldrig heller min starka sida.

Ser fram emot att se mer.

Vad kul att du gillar vårt projekt. Vill nämna att våran kitgitarr kom inte med greppbrädan lös. Vi var tvungna att ta bort den först. Då vi inte hade tillgång till verktyg för att göra så, så bad vi om hjälp till vår lokala musikaffär. Dom särade på greppbrädan med hjälp av en bandsåg. Har dock sett att det kan gå att göra det hemma med hjälp av ett strykjärn och lite tålamod. Om du skulle göra något liknande så rekommenderar jag att pröva strykjärnet först. Det funkar inte på alla gitarrer då man använder olika limm men med den metoden kan du i alla fall inte förstöra halsen. Finns mer information på nätet.

Här är några bilder på när vi fräste till den nya greppbrädan till rätt storlek.

för alla er som inte tycker om PS, så finns det några #nofilter bilder

Ganska tydligt vem snyggingen är va? ;P

Dold text
Dold text

Intel Core I5 4690k, Gigabyte Geforce 970 W3, Asus z97 PRO WiFi, 32GB Kingston HyperX 4x8, Corsair Obsidian 750D, Corsair RM750, 3x bromsljus från tyska bilar.

Trädvy Permalänk
Medlem
Plats
Falkenberg
Registrerad
Dec 2013

Uppdatering 2 - Nytt stuff och fräsning

Efter en vecka med fix så kommer en ny uppdatering. Till en början med har vi köpt lite grejer. Det mesta var verktyg och är därav inte värt nämnas. Men däremot värt att nämna är att vi har nu ett hav av kondensatorer för att kunna testa olika Treble bleed system och tonkontroller. Har också kondensatorer för att kunna prova ev. olika filter som låg- och hög-passfilter.

Tror att Electro:kit gjorde en förlust på denna affär med tanke på att påsarna kostade nog sammanlagt mer än kondensatorerna.

Dold text

Vad gäller fräsning som nämns i rubriken så jag först gjort en CAD-modell av hålet som vi skulle fräsa. Av CAD-modellen kunde jag sedan göra en exakt och bra ritning över både storleken av mallens hål och storleken av hålet som själva gitarren skulle ha.

Efter att ha fräst och finjusterat en mall med fil och sandpapper så var det dags för gitarren. Fick först mäta ut en massa och dra streck som guidelinjer för att kunna vara säker på att mallen låg rakt och på rätt ställe. Efter lite puts så var det dags för foto.

här är en bild när vi testat vår mall första gången.

En bild på hur gitarren såg ut före.

är inte sponsrade så logotypen fick åka bort i PS.

En bild innan puts.

Så här är tanken att pickupperna ska sitta.

Att ha på sig skydd när man bygger är viktigt, i detta fall ett par shorts. Givetvis finns en bild utan PS också.

viktigast är ändå att ha en ren arbetsbänk.

Dold text
Dold text

Kan passa på att avslöja varför det finns ytterligare ett hölje för en till singelcoil jämte mittenpickuppen. Det är nämligen så att det planeras att ha en inbyggd stämapparat. Vi tänkte smyga in några 5mm flat toppade lysdioder genom hålen på höljet för att skapa en sleeper-stämapparat om man kan kalla det så. Har därav också köpt en stämapparat med rätt krav för att kunna demonteras. Kommer dock bli svårt, då det är Surface-mount och vi inte har någon vidare bra lödpenna/ lödstation.

Dold text

Idéer? Posta en kommentar, vi uppskattar feedback!

Intel Core I5 4690k, Gigabyte Geforce 970 W3, Asus z97 PRO WiFi, 32GB Kingston HyperX 4x8, Corsair Obsidian 750D, Corsair RM750, 3x bromsljus från tyska bilar.