Innholdsfortegnelse:

Hvordan bygge en opplyst ukulele !: 21 trinn
Hvordan bygge en opplyst ukulele !: 21 trinn

Video: Hvordan bygge en opplyst ukulele !: 21 trinn

Video: Hvordan bygge en opplyst ukulele !: 21 trinn
Video: How to Study the Bible | Dwight L Moody | Free Christian Audiobook 2024, Juli
Anonim
Image
Image
Lag en plan
Lag en plan

Jeg spiller Ukulele. Litt middelmådig (hvis det er et ord) så jeg tenkte, "hvis du virkelig vil imponere damene, trenger du et middel for å distrahere dem fra katastrofen som spiller på scenen." Derfor ble "Light-up Ukulele" født.

Dette prosjektet tar et Concert Ukulele -sett og legger til en Arduino -kontrollert LED i hver streng og båndposisjon. Det legger også til et fancy OLED -display og et roterende koderbasert brukergrensesnitt for å velge modus og intensitet på LED -strengen.

De ferdige uke maskinvarefunksjonene:

  1. Arduino MICRO til grensesnitt til LED -strengen, skjermen og inndataenheten.
  2. 48 individuelt programmerbare LED -er i full farge
  3. En OLED -skjerm
  4. En roterende encoder for brukerinngang
  5. USB -grensesnitt for ekstern strøm og Arduino -programmering

Uke -programvaren har:

  1. Grunnleggende lysstyringsmoduser som kjører lysdiodene gjennom tempoene
  2. En fin teaterteltmodus (veldig praktisk for forestillinger!)
  3. LED -intensitetskontroll
  4. Et fullt akkordbibliotek med alle første posisjon Ukulele -akkorder (akkordverdi og karakter)
  5. Mulighet for å vise løpende tekst (vertikalt) ved hjelp av et unikt tegnsett på 4 x 6 piksler

Denne instruksen beskriver den ferdige prototypen. Hele utviklingssagaen er tilgjengelig HER, inkludert noen pedagogiske (smertefulle) feil og en verdifull leksjon i hvorfor du MÅ fullføre ditt første design til ferdigstillelse (uansett hvor stygg ting blir). Du vet aldri alle tingene du egentlig ikke vet før du kommer til slutten (og så vet du det fortsatt ikke!), Men du er mye bedre og mye smartere for neste design.

Jeg bygde prototypen rundt et Grizzly Concert Ukulele -sett. Å begynne med et sett lindrer bekymringen for ukeens kropp (vel, for det meste), og eliminerer det meste av det virkelige luthier-typen arbeidet. Disse settene er ganske komplette og ikke så dyre i det store opplegget (og mindre smertefulle siden du vil gjøre feil).

Trinn 1: Lag en plan

Lag en plan
Lag en plan

Gripebrettet (eller gripebrettet) som er inkludert i noen sett har allerede båndene festet. Det er bra/dårlig. Det er fint som tidsbesparende, men når det gjelder å legge ut et boremønster og holde det på plass mens du freser, er det litt vondt. Etter å ha ødelagt den som følger med i settet, valgte jeg (vel, jeg hadde ikke noe annet valg enn å kjøpe et annet sett) for å kjøpe et nytt gripebrett.

Når vi designer gripebrettet, må vi beregne økningen i tykkelsen som kreves for å legge inn kretskortet og lysdiodene (og ikke glem de passive komponentene), men ikke så mye at lysdiodene er for langt fra gripebrettoverflaten.

LED -kretskortet (PCB) er designet som et enkelt 2 -lags bord. Dette hjelper mye med håndmontering av LED -strengen og gir litt mekanisk styrke (det er glassfiber og epoxy) til Ukulele -halsen. Jeg startet oppsettet i Eagle, men endte opp med å bruke Altium Designer på grunn av begrensninger i brettstørrelse. Altium -skjematiske og PCB -filer er her.

Gripebrettet til settet var bare 0,125 tommer tykt. Så forutsatt en 0,062 tommers tykk PCB og tillatelse av en ytterligere 0,062 tommer for lysdiodene, betyr det at vi må kutte mye ut (som i alt) av gripebrettet. For å kompensere kan vi enten delvis kutte lommer for lysdiodene i gripebrettet med en tilsvarende lomme i nakken for kretskortet, eller vi kan erstatte hele gripebrettet (alternativet jeg gikk med) med en tykkere versjon fra Luther Mercantile International (LMII), som er 0,25 tommer å starte.

MEN, husk at du fremdeles må bearbeide nakken for å kompensere for økningen i tykkelsen i gripebrettet. Den andre fordelen du får er kosmetisk, siden kretskortet nå er helt innebygd inne i gripebrettet, noe som gjør kantene langt lettere å fullføre (og ser mye bedre ut!) Og forenkler fresing av nakken.

Ingeniørfag (ignorer hvis du vil):

Forresten, dette kompromitterer ikke stivheten i nakken så mye. PCB -materialet er langt stivere enn det originale gripetavetreet (mahogni -modul: 10,6 GPa kontra FR4 -modul: 24 GPa), pluss siden vi bygger en Ukulele, er det ikke en stor mengde strengspenning som ellers kan forvride (vri eller varp) nakken.

En veldig interessant vurdering (som jeg sannsynligvis fortsatt burde beregne) er hva som skjer over temperatur. Generelt for tre, parallelt med kornet, er den termiske ekspansjonskoeffisienten omtrent 3 x 10^-6/K, og for FR4 er den 14 × 10^−6/K. Så det er en ganske betydelig forskjell. Bekymringen er at det oppstår spenning i nakken når temperaturen varierer, noe som igjen avstemmer strengene. Det er noe som kan kompenseres ved å påføre et lignende lag på motsatt side av nøytralaksen eller ved å få FR4 så nær nøytralaksen som mulig. Men det blir igjen til 2.0 … Noe å modellere og evaluere.

Elektronikken er plassert i Ukens kropp. Hull er kuttet i sideveggen (ikke lydbordet!) I UKE for å gi plass til displayet og roterende encoder, pluss en tilgangsplate for å holde Arduino Micro og gi tilgang til USB -grensesnittet. Tilgangsplaten/monteringsdesignet og plasseringen kan trolig bli forbedret for å få USB -tilkoblingen til å komme ut på et mer praktisk sted, men slik det er, er det ikke så ille, siden det ikke er i veien når du spiller.

Oversikten over trinnene er som følger:

  1. Samle materialer
  2. Få verktøyene du trenger
  3. Fres halsen for å imøtekomme det tykkere gripebrettet
  4. Fres gripebrettet for å lage hull på de nødvendige stedene og for å lage lommer for brettet og lysdioder
  5. Skaff og konstruer kretskortet som holder lysdiodene
  6. Fres tilgangshull i Ukulele -kroppen for OLED -skjermen, Rotary encoder og tilgangspanel
  7. Lag dekkplater
  8. Fest ledninger til kretskortet; koble til og teste elektronikken
  9. Fest halsen til Ukulele -kroppen
  10. Bor et tilgangshull for å føre PCB -ledningene inn i kroppen
  11. Juster og lim PCB og gripebrett til halsen
  12. Juster gripebrettets kanter til nakken (fjern overflødig materiale)
  13. Installer båndtrådene
  14. Påfør maskering og påfør finish på Ukulele
  15. Juster og fest broen
  16. Installer elektronikk og test.
  17. Installer tunere og streng instrumentet
  18. Programmer Uke -kontrolleren
  19. Overrask verden med Ukulele -fantastiskheten din!

Trinn 2: Samle materialer

Materialelisten vår ser slik ut:

  1. Ukulele kit - Jeg brukte et Grizzly Concert Ukulele kit (Grizzly Uke Kit på Amazon), men det ser ut til å bli avviklet. Zimo lager en lignende modell (Zimo Uke Kit @ Amazon) som ser ut til å gjøre jobben
  2. Ukulele gripebrett, pre-slotted (LMII Uke Fingerboards). De vil plassere gripebrettet til din skala, noe som sparer et rot med problemer
  3. Epoxy - for liming av gripebrettet til nakken. Jeg valgte epoxy siden det er kompatibelt med PCB -materialet. Se etter noe med minst 60 minutters arbeidsliv. IKKE bruk 5 minutters typer, du trenger tid til å gjøre justeringer
  4. Båndledninger - også tilgjengelig fra LMII
  5. Egendefinert PCB - Altium -filer er her. Jeg valgte vanlig FR4 -materiale. Flex (polyimid) -plater ville være et interessant (om det er mer dyrt) alternativ, siden de kan være mye tynnere
  6. 48x Neopixel (SK6812) lysdioder. Tilgjengelig fra Adafruit og Digikey
  7. 48x 0.1uF 0402 caps - større er akseptabelt, men du må se på plassering
  8. Tilkoblingstråd - minst 4 til 6 farger for å unngå forvirring, jeg brukte hovedsakelig 28 gauge wire. Se likestrømmen falle på LED -strømtilkoblingene (både VCC og GROUND … at strømmen må tilbake til kilden!)
  9. Roterende encoder-PEC16-4220F-S0024
  10. Fancy treknapp - for den roterende omkoderen (jeg fikk min fra LMII)
  11. OLED -skjerm - fra 4D -systemer OLED -skjermer
  12. Eksternt USB -batteri - billigere hele tiden, pluss at du kan bære reservedeler!
  13. Arduino MIKRO
  14. Ark messing - for å lage tallerkenen for å holde arduinoen og rammen til skjermen
  15. Diverse forbruksvarer, inkludert: sandpapir, uretanfinish, popsicle -pinner, gummibånd, loddetinn, flux, børster, dobbeltsidig tape (jeg liker UHC -båndet med 3M) og små skruer i messing (til tallerkenen)
  16. Valgfri Ukulele -forbedringer - bedre tunere, bedre strenger, bedre mutter og sal, innlegg hvis du vil vise frem din luthier dyktighet)

Trinn 3: Få verktøyene du trenger

Før eller siden trenger du å skaffe eller få tilgang til disse:

Verktøylisten vår inneholder:

  1. Fresemaskin - CNC foretrukket, men du kan til og med klare deg med en ruter og mye hell. Jeg brukte en kombinert CNC -fres/ruter
  2. Freser - karbid foretrukket. Rutebits valgt over endfreser siden vi bearbeider tre, ikke metall
  3. Klemmer - mange av dem. Mest nødvendig for å holde deler mens du limer
  4. Loddejern - liten spiss for overflatemontering
  5. Mikroskop eller forstørrelsesglass - du kan prøve å lodde med bare øynene dine, men jeg vil ikke anbefale det, minst 10x
  6. Pincett (for å sette deler på plass)
  7. Fretting -verktøy (se riktige verktøy på LMII her, men jeg brukte det jeg hadde hjemme og gjorde det; hamre, filer og kuttere)
  8. Assorterte håndverktøy som trebeitler, skrutrekkere, mykt slag eller råhudhammer (for fretting), etc.
  9. Slipemidler - forskjellige sandpapirkorn

Våre programvareverktøy inkluderer (noen er valgfrie avhengig av budsjett/oppfinnsomhet):

  1. Arduino programvare
  2. Ukulele -kildekoden (https://github.com/conrad26/Ukulele)
  3. PCB -layoutpakke - Jeg brukte Altium fordi gratisversjonen av Eagle ikke støttet brettstørrelsen jeg ønsket. Altium er en fullstendig layoutpakke og egentlig ikke i en prisklasse for hobbyister. Jeg har inkludert Gerber -filene på nettstedet mitt for prototypen, men disse trenger definitivt en oppdatering
  4. 3D -modelleringsprogramvare - jeg brukte SolidWorks, men ett gratis alternativ er FreeCAD (https://www.freecadweb.org/)
  5. CAM -programvare - som FeatureCAM fra Autodesk for å lage NC mill -filen.

Kombinasjonen av 3D -trinns fileksport fra Altium sammen med en 3D -modell av gripebrettet eliminerer mye av vanskeligheten med å sørge for at alt står på linje, men det er ikke et krav. Omhyggelig layout vil oppnå det samme resultatet.

Nå som vi vet hva vi vil gjøre, og hva vi trenger for å gjøre det, la oss bygge en Ukulele.

Trinn 4: Fres halsen for å imøtekomme det tykkere gripebrettet

Fres nakken for å passe til det tykkere gribebrettet
Fres nakken for å passe til det tykkere gribebrettet

Før du freser, må du merke deg at den originale flatbrettet på gribebrettet MÅ opprettholdes, eller at du kommer til å ha en vridd tavle, noe som fører til alle slags problemer med båndutjevning.

Bare ikke gå dit, ta deg tid og klem nakken forsiktig og stivt og sjekk justeringen til ruterbiten over hele halsen før du skjærer. Tiden du bruker her, vil spare deg for mye sorg senere.

En av grunnene til at jeg valgte et tykkere gripebrett over et innlegg i nakken var det økte monteringsoverflaten (limingen). En annen grunn er at det forenkler fresingen av nakken. Du summerer ganske enkelt hele overflaten til ønsket høyde.

Trinn 5: Skaff og konstruer kretskortet som holder lysdiodene

Skaff og konstruer kretskortet som holder lysdiodene
Skaff og konstruer kretskortet som holder lysdiodene
Skaff og konstruer kretskortet som holder lysdiodene
Skaff og konstruer kretskortet som holder lysdiodene

Jeg loddet hele forsamlingen for hånd. LED -pakkene er spesielt enkle å smelte, så vær forsiktig så du ikke skader dem. Jeg foreslår at du bruker en statisk stropp, siden strengen er avhengig av at hver LED fungerer.

Gripebrettdesignet er basert på lysdiodene WS2812B. Jeg bestemte meg for å bare gjøre den første oktaven på gripebrettet (48 lysdioder !!). Hver LED kan betraktes som en bit i et skiftregister. Skiftregisteret er klokket til 800 kHz. Jeg brukte Adafruit -biblioteket (se programmeringsdelen) for å få ting i gang raskt.

Jeg startet designet i Eagle, men brettstørrelsen er begrenset til 4 x 5 tommer, så jeg måtte (eller mer riktig, jeg valgte) bytte til Altium. Jeg bruker Altium på jobben, så i virkeligheten gjorde det ting raskere for meg. Altium -prosjektet, skjematiske filer og PCB -filer (og biblioteksdeler) er på nettstedet mitt. Brettet er trapesformet og omtrent 10 tommer langt. Jeg tror jeg burde ha prøvd å komprimere omrisset litt mer (neste spinn!) Montering var ikke dårlig, men hvis du har råd, anbefaler jeg virkelig et anstendig loddejern (JBC Loddejern) og et godt mikroskop. Ja, jeg er bortskjemt og nei, jeg har ikke slike ting i hjemmelaboratoriet mitt. Jeg er billig.

Jeg fikk brettene laget på Sunstone. $ 129 for to brett. Garantert en ukes sving. Ikke krym på forsendelsen skjønt. Jeg la ikke merke til at jeg brukte UPS bakken, og jeg endte med å vente en uke ekstra for at brettene mine skulle komme. Total monteringstid var ca 2 timer (98 deler).

Trinn 6: Fres gripebrettet

Image
Image
Mill Access Holes i Ukulele Body
Mill Access Holes i Ukulele Body

Vi må frese gripebrettet for å lage hull på de nødvendige stedene og for å lage lommer for brettet og lysdioder.

Jeg opprettet en 3D -modell av det ferdige gripebrettet i Solidworks og opprettet CNC -freserutinen ved hjelp av FeatureCAM.

Den nedre delen av gripebrettet (nærmest lydhullet) må gjøres tynnere for å ta hensyn til trinnendringen i høyden mellom nakke og kropp. Absolutt verdt å teste flere ganger for å være sikker på at det er en rimelig god passform.

I ettertid burde jeg ha kuttet av de ubrukte delene av gribebrettet for å få det til å passe møllen bedre (min billige mølle hadde bare en 12 X-akse-reise). Driftsrekkefølgen skulle settes opp til første fresestykkelsejusteringer før freselommer, noe som bør føre til færre utbrudd mellom lommene.

Gjør manuelle justeringer etter behov for å legge til plass for ledninger. En viktig ting å merke seg er at i noen av lommene brøt jeg gjennom sporet hvor båndtråden vil gå. Gitt at det er en konduktør, må du sørge for at det ikke ender opp med å korte ned noe viktig. Det reduserer også styrken til materialet som holder båndet på plass. Designet bør modifiseres slik at det aldri krysser et spor.

Trinn 7: Fresetilgangshull i Ukulele -kroppen

Mill Access Holes i Ukulele Body
Mill Access Holes i Ukulele Body

Jeg freset manuelt tilgangshullene i karosseriet. Det vanskeligste er å finne den "flateste" regionen på det som er en veldig buet overflate. Merk omrisset med blyant og fres vekk materialet gradvis til du får en passende passform til OLED -skjermen. Jeg skaffet meg en maskinert messingramme og festet den med 3M VHB limingstape.

Siden ingen av dem krever stor presisjon, er den roterende encoderen og tilgangspanelhullene langt lettere å lage.

Trinn 8: Lag dekkplater

Lag dekkplater
Lag dekkplater
Lag dekkplater
Lag dekkplater
Lag dekkplater
Lag dekkplater

Du må også lage dekkplatene for skjermrammen og tilgangspanelet. Tilgangspanelet trenger et hull (rektangulært) for USB -kontakten (mikro). Bare bruk den eksisterende kontakten på Arduino, siden det ikke er mange alternativer for panelmontering for mikro -USB. (selv om jeg skulle designe fra bunnen av, så ville jeg tatt en titt på en av disse)

For å holde brettet på plass må du feste L -braketter av messing og lodde dem på baksiden av tilgangsplaten. Dette gir deg litt breddegrad i posisjonering. For å få posisjoneringen riktig, må du først lage et perfboard-monteringsbrett (med monteringshull) for Arduino MICRO og feste L-brakettene til det ved hjelp av 2-56 maskinskruer. Du kan deretter justere plasseringen for å stille opp usb -porten og nøyaktig merke plasseringene for brakettene på platen. Fjern brakettene fra perfboardet og lodd dem på plass. Monter til slutt perfboard -enheten.

Jeg brukte fire små messing tre skruer for å holde messing tilgangspanel på plass.

På dette tidspunktet anbefaler jeg en testtilpasning før den siste monteringen begynner. Dette trinnet er valgfritt, men anbefales. Det er langt lettere å gjøre justeringer før liming.

Trinn 9: Fest ledninger til kretskortet; Koble til og test elektronikken

Image
Image
Fest halsen til Ukulele -kroppen
Fest halsen til Ukulele -kroppen

Ikke fest elektronikken permanent. Fest ledninger til kretskortet, og sørg for at du har nok slakk til å rute ut tilgangshullet. Disse må til slutt festes permanent til Arduino MICRO -kortet (bildene viser en Arduino UNO, som jeg brukte til kodeutvikling)

Trinn 10: Fest halsen til Ukulele -kroppen

Fest halsen til Ukulele -kroppen etter instruksjonene som følger med Ukulele -settet. Se spesielt på justeringen av gripebrettoverflaten til Ukens kropp.

Trinn 11: Bor et tilgangshull for å føre PCB -ledningene inn i kroppen

Bor et tilgangshull for å føre PCB -ledningene inn i kroppen
Bor et tilgangshull for å føre PCB -ledningene inn i kroppen

Når limet er tørt, borer du et hull på ca.

Du må kanskje også lage en liten lomme for å tillate tykkelsen på ledningene under brettet (eller eventuelt sette tilkoblingene på toppen og inkludere avlastning i gripebrettet.)

En annen testtilpasning ville ikke skade på dette tidspunktet.

Trinn 12: Juster og lim PCB og gribebrett til nakken

Juster og lim PCB og gripebrett til halsen
Juster og lim PCB og gripebrett til halsen

Jeg foreslår at du tenker gjennom klemmen (og prøver den!) Før du limer den. Det kan være lurt å lage en blokk formet på undersiden av nakken for å gi deg en flat klemmeflate. Gripebrettet er større enn nakken på dette tidspunktet, så du må tillate det.

Vær veldig forsiktig så du ikke får epoxy på overflater du vil gjøre ferdig senere. Enda bedre påfør maskering på alle ikke-limte overflater før du limer for å sikre at den bare går der du hadde tenkt.

Bruk epoksy med minst 60 minutters arbeidstid … du trenger alt.

Lim PCB -en på plass først, og pass på at overflødig lim ikke ekstruderes inn i gripeflaten. Dette gir en metode for å justere gripebrettet til nakken. Kretskortet har en glatt loddemaske, så jeg grov det opp med litt sandpapir for å gi epoksyen en litt forbedret overflatebehandling.

Juster og lim gripebrettet til nakken. Vær forsiktig så du ikke etterlater lommer som senere kan få resonans (buzz!). Vær også forsiktig så du ikke får lim på LED -overflatene.

Når limet er tørt, vil du kanskje koble til og teste elektronikken en gang til. En dårlig LED vil få deg til å hate livet. Jeg hadde en dårlig LED (den første!) På prototypen, og jeg måtte gjøre litt kreativt treverk for å få tilgang til den defekte LED -en og la den ren.

Trinn 13: Nivå gribebrettskantene til nakken og legg til båndtråder

Når limet er tørt, kan du begynne å fullføre kantene. Jeg skar forsiktig bort overflødig gummiplate (ved hjelp av en kvern) og avsluttet den siste millimeteren med håndsliping.

Å legge til båndtrådene kan enkelt gjøres med en hammer (med et plastflate for å unngå å rive seg). Bare ikke hamre for hardt. Hvis du har matchet båndtråden til sporene, bør de gå inn uten store problemer.

Det du må se etter er å bryte den tynne overflaten på LED -lommen. På prototypen lot jeg noen LED -lommer (nær den 12. båndet, der det blir trangt om plassen) strekke seg inn i båndsporet. Det er en dårlig idé, siden det skaper et svakt sted som kan (og gjorde) sprekker når båndtråden er satt inn.

Trinn 14: Påfør maskering og påfør Finish på Ukulele

Masker gripebrettet (det blir ikke ferdig) og broens limområde og begynn å påføre finish.

Når du maskerer broområdet, må du lese instruksjonene med settet ditt, og deretter sjekke skalalengden for å være sikker. Settet jeg brukte til prototypen brukte feil skala lengde og ga derfor feil dimensjoner for å finne broen (men den hadde et notat for å sjekke nettstedet for de siste instruksjonene!). Magen min sa at det var feil, men jeg aksepterte blindt autoritet.

Det er alltid bedre å forstå HVORFOR du gjør noe, i stedet for å følge instruksjonene blindt.

Til slutt er det mange opplæringsprogrammer fra Luthiers som vet hva de gjør på nettet, så jeg anbefaler å konsultere dem før du hopper inn i etterbehandlingsprosessen.

Jeg gjorde selvfølgelig ikke det, så jeg endte med å bruke feil forsegler, noe som resulterte i en veldig kornet overflate. Ikke gjør det.

Gjør leksene dine.

Trinn 15: Juster og fest broen

Juster og fest broen
Juster og fest broen

Dette trinnet er ganske enkelt, men igjen, planlegg klemmemetoden og prøv den på forhånd før du limer den. Jeg brukte et vanlig trelim for å feste broen.

Trinn 16: Installer elektronikk og test

Installer elektronikk og test
Installer elektronikk og test

Nå er det på tide å gjøre ledningen pen. Pluss at du ikke vil at den skal floppe rundt i kroppen og lage summende lyder eller verre, men likevel bryte på scenen.

Arduino -koden kan oppdateres via USB -porten, så det er virkelig ikke nødvendig å ta den fra hverandre med mindre du vil tukle.

Trinn 17: Installer tunere og streng instrumentet

Image
Image
Programmering av Uke
Programmering av Uke

Du vil sannsynligvis også trenge å utjevne båndene og leke litt med oppsettet, men hvorfor bekymre deg nå, når du er så nær slutten?

Jeg oppgraderte tunerne og brukte fine Aquila -strenger, noe som ikke hjalp lyden overhodet. Så husk det mens du skal betale penger til et prosjekt ukulele …

Trinn 18: Programmering av Uke

Den siste Arduino -koden er på Github. Det er noen linjer i koden som støtter fremtidige forbedringer (som en metronomfunksjon og "glidebrytere" for displayet (et UI -element som ser ut som en glidebryter)

Denne koden bruker et Rotary Encoder Library (Rotary Encoder Arduino Library) for å håndtere brukerinndata fra Rotary Encoder.

Den bruker også Adafruit Neopixel -biblioteket og eksempelkoden som ligger her. Teater- og regnbue -modusene er hentet fra eksempler som følger med biblioteket. (se strandtest.ino).

Skjermdriveren leveres av 4D -systemer og finnes på Github her.

Det er to unike funksjoner implementert for Ukulele -prosjektet. Den første implementerer akkordbiblioteket, og den andre viser en rullende tekstmelding ved hjelp av et tilpasset tegnsett.

Det vedlagte diagrammet viser gripebrettets LED -plasseringer og hvordan de er tilkoblet. LED 0 er plassert i øvre høyre hjørne.

Trinn 19: Hvordan vise et akkord

Hvordan vise et akkord
Hvordan vise et akkord

DisplayChord -funksjonen viser fingerposisjonene (bare første posisjon for nå) for hvert akkord. Akkorder valgt av brukeren (rotnote og kvalitet) lagres som et par indekser. Disse brukes igjen for å slå opp fingerringene for hver akkord.

Jeg brukte "GCEA" -notasjon for å lagre akkorder (f.eks. "A" er "2100"). Akkordene er forhåndsberegnet for hver rotnote og lagret i en variabel som tilsvarer akkordens kvalitet. (så, A -dur, er lagret på den første plasseringen av matrisen "majorChords", tilsvarende "2100").

char* majorChords = {"2100 / n", "3211 / n", "4322 / n", "0003 / n", "1114 / n", "2220 / n", "3331 / n", " 4442 / n "," 2010 / n "," 3121 / n "," 0232 / n "," 5343 / n "};

Vær oppmerksom på at siden dette er en tekststreng, kan hvert siffer også representere en hex -verdi for å ta hensyn til båndposisjoner større enn 9. Det vil si at A og B representerer lysdioder 10 og 11. For akkorder med første posisjon var dette ikke et problem).

LED -strengen er kablet på langs i rader med 12 (en oktav) langs hver streng (starter med A -strengen), den påfølgende kjøringen på 12 starter ved den første båndet i den neste strengen (se diagrammet i trinn 18). Dette er viktig for algoritmen for å bestemme hvilke lamper som skal slås på for et gitt akkord. Det betyr at piksler 0 til 11 er A -streng -lysdioder, 12 til 23 er E -streng -lysdioder, og så videre. Når vi analyserer en A = "2100" (lagret som en streng, det er også en null -terminator "\ n" i koden), tolker vi den som: ingen piksler på A -strengen lyser, og heller ikke på E -strengen, piksel 0 (bånd 1) på C -strengen lyser og piksel 1 (bånd 2) på G -strengen. Vær oppmerksom på at en "0" er av, ikke den første lysdioden. Basert på ledningene, ønsker vi å lyse opp lysdioder 24 og 37. Koden for å vise et akkord er vist nedenfor.

for (int i = 0; i <4; i ++) {if (int (akkord - '0')) {// algoritme for å analysere akkordstrengen int ledNumber = int (akkord - '0') + (3 - i) * 12 - 1; // se diskusjonen ovenfor, (3-i) er å reversere indekslisten.setPixelColor (ledNumber, 0, 125, 125); // setPixelColor (ledNumber, rød verdi, grønn verdi, blå verdi)}}

If -setningen sjekker om led er slått av. Hvis det ikke er det, tar det ascii -verdien til tegnet, akkord , og trekker ascii -verdien for '0' for å få ledNumber til å lyse.

strip er en forekomst av Adafruit_NeoPixel -klassen. SetPixelColor -funksjonen angir fargen for den beregnede pikslen (fast på (0, 125, 125) i dette tilfellet.

Trinn 20: Slik viser du en rullende melding

Slik viser du en rullende melding
Slik viser du en rullende melding

Så vi har et 12 x 4 utvalg av lysdioder … hvorfor ikke la den vise noe annet enn ganske tilfeldige lysmønstre!

Det første problemet er at skjermhøyden (4) er ganske begrenset på grunn av antall strenger på en Uke. Horisontal rulling vil for det meste være uleselig, men i vertikale retninger kan vi støtte 4 x 5 tegn som kjører vertikalt.

Å organisere tegn som fem "vertikale" rader betyr at to tegn kan vises samtidig, slik at det er ett mellomrom mellom hvert tegn.

Vanskeligheten var at det ikke var noe standard 4 x 5 tegnsett. Jeg lagde min egen ved hjelp av det vedlagte regnearket. Jeg tildelte hver rad en enkelt hex -verdi (4 biter som representerer hvilken piksel som er på eller av). Kombinasjonen av de fem hex -verdiene utgjør et tegn (f.eks. "0" er 0x69996).

Verdiene for hvert tegn lagres i en matrise i ASCII -rekkefølge. Tegnsettet gjør noen kompromisser med visse bokstaver, men de fleste er rimelig klare. (skriften nederst i regnearket er ideer jeg lekte med siden vi har farge som et alternativ, vi kan legge "dybde" til karakteren og muligens få litt tilleggsoppløsning.

Strengen som skal vises, finnes i strengvariabelen, melding.

En buffer blir opprettet for å representere tegnvisningen. Jeg antar at jeg ganske enkelt kunne ha opprettet en stor buffer med hele den oversatte meldingssekvensen, spesielt siden de fleste meldinger vil være mindre enn 20 tegn eller så. Imidlertid valgte jeg i stedet å lage en fast buffer med tre tegn (18 byte). Bare to av karakterene vises aktivt, og den tredje er et blikk fremover, der det neste tegnet er lastet. LED -strengen (tenk på det som et stort skiftregister) er lastet med 48 bits for strengen. Jeg kastet bort litt minneplass for å gjøre dette lettere å konseptualisere. Hver nibble får sin egen minneplassering, og dobler minnekravet, men det er ikke mye gitt bufferstørrelsen.

Bufferen lastes med det neste tegnet når utgangsindeksen (pekeren) kommer til en tegngrense (outputPointer ved 5, 11 eller 17).

For å laste bufferen tar vi det første tegnet i "melding" som en ASCII -verdi og trekker fra 48 for å få indeksen i asciiFont -arrayet. Verdien ved denne indeksen er lagret i codedChar.

Den første delen av meldingen flyttet ut tilsvarer lysdioder 47, 35, 23 og 11 (nederst på displayet). Så for tallet null 0x0F999F blir F (venstre) forskjøvet inn først, 9 sekund og så videre.

Det neste tegnet lastes inn ved å maskere hver nibble og flytte den til høyre. For eksemplet ovenfor gir algoritmen (0x0F999F & 0xF00000) >> 20, deretter (0x0F999F & 0x0F0000) >> 16, etc.

int indeks; if (outputPointer == 17 || outputPointer == 5 || outputPointer == 11) {char displayChar = message.charAt (messagePointer); // ta tak i det første tegnet i meldingen long codedChar = asciiFont [displayChar - 48]; hvis (displayChar == 32) codedChar = 0x000000; messageBuffer [bytePointer+5] = byte ((codedChar & 0xF00000) >> 20); // masker alle unntatt siste nibble og skift den over med 20 (og så videre) messageBuffer [bytePointer+4] = byte ((codedChar & 0x0F0000) >> 16); // dette bør sette en nibble per minne plassering messageBuffer [bytePointer+3] = byte ((codedChar & 0x00F000) >> 12); // alle seks representerer on message messageBuffer [bytePointer+2] = byte ((codedChar & 0x000F00) >> 8); messageBuffer [bytePointer+1] = byte ((codedChar & 0x0000F0) >> 4); messageBuffer [bytePointer] = byte ((codedChar & 0x00000F)); hvis (bytePointer == 0) {// håndter løkken rundt på bytePointer bytePointer = 12; } annet {bytePointer -= 6; // vi fyller nedenfra og opp; MERK: må se på å reversere dette for å se om det gjør det lettere} hvis (messagePointer == melding.lengde ()-1) {// håndter løkken rundt på meldingen messagePointer = 0; } annet {messagePointer += 1; // gå til neste tegn}}

Når bufferen er lastet, blir det et spørsmål om å spore hvor utgangspekeren er og laste LED -strengen med de riktige 48 bitene (den nåværende 4 og den forrige 44). Som nevnt tidligere er strip en forekomst av NeoPixel -klassen, og setPixelColor angir fargen (RGB) på hver piksel. Show () -funksjonen flytter visningsverdiene til LED -streng.

// loop for kontinuerlig å skifte ut bufferen

// vil skrive ut hele stripen på hver passering gjennom løkken, bare startstedet endres for (int rad = 12; rad> 0; rad--) {index = outputPointer + (12-rad); hvis (indeks> 17) indeks = outputPointer+(12-rad) -18; // loop hvis større enn 17 for (int column = 4; column> 0; column--) {strip.setPixelColor (uint16_t (12*(column-1)+(row-1)), uint8_t (RedLED*(bitRead) (messageBuffer [index], column-1))), uint8_t (GreenLED*(bitRead (messageBuffer [index], column-1)))), uint8_t (BlueLED*(bitRead (messageBuffer [index], column-1))))); // på hvert sted lyser LED -en hvis biten er en}} // outputPointer peker til gjeldende laveste byte i displaystrengen hvis (outputPointer == 0) outputPointer = 17; annet outputPointer -= 1; strip.show (); }

Trinn 21: Forundre verden med din ukulele -awsomeness

Image
Image

Den siste Ukulele -prototypen tok omtrent 6 måneders start og stopp å trekke av.

Mye ny teknologi å lære og kanskje litt trearbeid og musikalsk teori å starte opp!

Hva skal jeg gjøre for neste versjon?

  1. Bli kvitt displayet og roterende encoder. Erstatt dem med en Bluetooth -modul festet til arduinoen. Kontroller det eksternt ved hjelp av en telefon eller et nettbrett. Alt er bedre med Bluetooth.
  2. Oppdater akkordmønstre eksternt i sanntid. Noe som er best igjen for appen.
  3. LED -deksler. Den nåværende versjonen gjør ingenting for å forhindre at gunk kommer inn i LED -hullene. En venn laget en haug med små linser, men jeg kunne aldri finne ut hvordan jeg skulle få dem til å holde seg ordentlig på plass.
  4. Alternative gripebrettmaterialer, kanskje noe klart så lenge båndene holder.
  5. Flere lys! Eliminer begrensningen på tekst ved å legge til flere "rader". Dette er virkelig en begrensning forårsaket av størrelsen på gripebrettet og LED -kroppene.

Se igjen ledsageren Instructable som beskriver tegnsettet jeg måtte lage for å tillate rullende tekst.

Tusen takk for at du kom så langt! Mahalo!

Anbefalt: