Lav en belyset Rainbow Synthesizer med en Arduino !: 8 trin (med billeder)

Lav en belyset Rainbow Synthesizer med en Arduino !: 8 trin (med billeder)

Indholdsfortegnelse:

Anonim

Dette instruktioner viser dig, hvordan du føjer en højopløselig berøringsskærm til din Arduino og lav en synthesizer, der styrer farvede lysdioder! De teknikker du lærer her kan tjene som grundlag for andre berøringsskærmsprojekter!

I denne vejledende lærer du:

  • Hvor kan man få en høj opløsning 800x480 berøringsskærm.
  • Hvordan lodde en overskrift på berøringsskærmen.
  • Sådan udskrives 3D og monterer en LCD-stand (valgfrit trin).
  • Sådan tilslutter du farveskærmen til Arduino Uno.
  • Sådan opbygges en line out jack til touch screen ved hjælp af passive komponenter.
  • Sådan tilslutter du en LED-matrix til din Arduino.

Til dette vejledende skal du:

  • En høj opløsning touch screen baseret på en FT810 chip (se næste trin til min anbefaling)
  • 2x5 og 1x4 mandlige headers (du kunne købe disse og skære dem ned i længden)
  • Et loddejern
  • Elektrisk tape
  • Kvinde til mænd jumper ledninger
  • Jumper til mænd til mænd.
  • En Arduino Uno
  • Et brødbræt
  • Et sæt WS2812 LED'er (jeg fik et 4x4 modul til omkring $ 5 fra eBay)
  • En 220Ohm og en 100Ohm modstand, en 100nF keramisk kondensator og 1uF tyndfilm kondensator og en 3,5mm audio jack.
  • Et brødbræt
  • En Arduino Uno
  • Et sæt forstærkede computerhøjttalere eller ørepropper.

Credits / Disclaimer: Dette projekt gør brug af fri tilgængelig og GPL-licenseret bibliotekskode, jeg arbejdede på, mens jeg var ansat hos AlephObjects, maker af LulzBot open source 3D-printere. Dette projekt og tilhørende videoer blev gjort på min egen tid derhjemme ved hjælp af mit eget udstyr.

forsyninger:

Trin 1: Berøringsskærmen bruges i denne vejledning

Til dette vejledende bruger jeg touchscreens fra Haoyu Electronics. Jeg brugte følgende:

  • 5 "Grafisk LCD Touchscreen, 800x480, SPI, FT810

Denne skærm koster omkring $ 36 med fragt. Dette er mere end andre Arduino skærme, men du får meget for dine penge:

  • Et skarpt touch-panel med høj opløsning med en opløsning på 800x480.
  • En indbygget grafik co-processor og RAM gør det muligt at styre uden at bukke ned ad Arduino.
  • Indbygget lyd synthesizer med kvalitetslydprøver og forskellige instrumenter at vælge imellem.
  • Landskabs- og portrætstøtte (på FT810 eller bedre).
  • Multi-touch support.
  • Indbygget JPEG, bølge lyd og video dekoder, til avancerede projekter.

Trin 2: Klargøring af skærmen

Når du har fået din skærm, skal du loddehoveder på den. Haoyu-skærmene er gode, fordi de kommer med lette loddehuller, og du har mulighed for at lodde hovedet direkte på bagsiden af ​​skærmen eller på enden af ​​et lille båndkabel, der fastgøres til et aftageligt breakoutkort.

For at fuldføre loddejobbet vil du midlertidigt frakoble båndkablet og fjerne printkortet fra bagsiden af ​​panelet. Brug din fingernegle til forsigtigt at løfte beslaget på LCD-stikket og frigive båndkablet. Derefter fjernes de fire skruer, der holder bordet på plads.

Løft nu en 5x2 header (eller to 5x1 headers), hvor du vil have dem. Dæk bagsiden med elektrisk tape for at undgå enhver shorts. Derefter skrues PCB'en igen og genmonterer båndkablet.

Trin 3: Valgfrit: Udskriv LCD-stativet og tilføj Brass Inserts

Jeg valgte at 3D udskrive et stativ for at holde min LCD-panel 1

Panelet leveres med fire messingindsatser; disse er beregnet til at blive presset i plast med varme.Når de køler sig, bidder de små tænder på dem i plastik og holder dem ude af at falde ud. Disse indlæg er en fælles måde at tilføje slidstærke tråde til 3D-udskrevne dele.

Når standen var færdig med at trykke, skruede jeg de fire messingindsatser ud af panelet.

Jeg opvarmede min jern og holdt den med spidsen vinklet opad og forsigtigt balancerer en indsats på spidsen. Jeg bragte så plastikdelen ned over den og skubbet langsomt indskæringerne i de forudformede huller, indtil de var flush med overfladen.

Dette trin fungerer bedre, hvis du har et loddejern med et smalt konisk tip. Hvis du aldrig har gjort det før, kan du øve dig, mens jernet er køligt - du får kun en chance for at gøre det rigtigt, når strygejernet er varmt!

Pas på med dette trin, da messingindsatserne bliver meget varme, og du vil ikke have, at de falder i dit skød. Arbejd på en varmebestandig overflade, og hvis de falder af spidsen af ​​jernet, modstå fristelsen til straks at nå dem!

1 Kilder: LCD Stand STL og CAD-filer

Trin 4: Fjern filmen og monter skærmen

Vip nu over skærmen og tag den forreste akrylramme ud, og fjern beskyttelsesfilmen fra LCD-panelet (dette forbedrer displayets klarhed). Brug skruerne til at montere skærmen på det 3D-udskrevne stativ.

Trin 5: Loddehoveder til LED-modulet

Brug sideskærere til at afbryde en 4-polet længde af overskrifter og lod dem solde på LED-modulet, som vist på billedet. Du kan også klippe længder af jumperkabler i halve og lodd dem direkte, hvis du foretrækker det.

Trin 6: Wire Up the Circuit

Kør tre jumperkabler fra Arduino til LED-modulet som følger:

  • 5V til rød skinne på breadboard
  • GND til sort skinne på breadboard
  • IN til pin ~ 5 på Arduino

Til LCD-skærmen, tilslut:

  • 5V til rød skinne på breadboard
  • GND til sort skinne på breadboard
  • SCK til pin ~ 13 på Arduino
  • MISO til pin ~ 12 på Arduino
  • MOSI til pin ~ 11 på Arduino
  • CS til pin ~ 10 på Arduino
  • PD til pin ~ 9 på Arduino
  • AUDIO går til lydkredsløbet som vist i brødbrættet og skematisk
  • GND går til den sorte skinne på brødbrættet

Fra Arduino:

  • Kør et jumperkabel fra 5V pin til den røde skinne på brødbrættet
  • Kør et jumperkabel fra GND-stiften til den sorte skinne på brødbrættet

Når lydudgangen er færdig, kan du nu tilslutte øretelefoner eller et sæt forstærkede computerhøjttalere til lydstikket.

Design af lydoutput:

AUDIO-udgangen på displaypanelet er et digitalt signal, der ikke er beregnet til at drive en højttaler direkte. Forsøg på at gøre det kan beskadige panelet eller højttaleren. For at give en korrekt lydoutput skal du opbygge et konditions kredsløb, der udfører følgende opgaver:

  • Konverter det digitale PWM (pulsbreddemodulerede) signal til en analog spænding.
  • Begrænser udgangsstrømmen og spændingen til sikre niveauer.

Opgaven kan udføres med to modstande og to kondensatorer.

Jeg kontrollerede dataarket for FTDI FT810 chip og fandt ud af at AUDIO pin kan køre op til 16mA ved 3.3V. Dette betyder, at belastningen skal have en modstand på ikke mindre end 206 ohm. For at beskytte stiften mod en kort begyndte jeg ved at placere en 220 Ohm modstand i serie med AUDIO-stiften. Jeg tilføjede derefter en anden 100 ohm modstand til jorden for at danne en spændingsdeler. Når intet er forbundet til jacken, falder dette 3.3V ned til et niveau på ca. 1V, hvilket er sikkert for line level lyd. 100nF danner et lavpasfilter, der udjævner højfrekvens PWM-støj, mens lydfrekvenserne passerer. Den resterende 1uF kondensator kaldes en AC-koblingskondensator. Det blokerer DC-strøm fra at strømme ud lydstikket, mens du lader lydsignalet, som er AC, igennem.

Trin 7: Installation af FastLED-biblioteket og kørsel af koden

Download.zip-filen, der indeholder Arduino-skitsen fra mit github-lager.

Åbn Arduino IDE og gå ind i "Sketch" -> "Include Library" -> "Administrer biblioteker …". Installer "FastLED" -biblioteket af Daniel Garcia. Derefter åbner du filen "RainbowPiano.ino" og uploader den til din Arduino Uno!

Trin 8: En oversigt over koden

Koden bruger en UI-ramme, som jeg udviklede i C ++. Denne ramme giver dig mulighed for at opbygge en grænseflade ud af en af ​​flere UI-skærme. Klaverappen har kun en skærm, som er defineret af følgende kode:

klasse PianoScreen: offentlig InterfaceScreen {… public: static void onEntry (); statisk ugyldig onRedraw (draw_mode_t hvad); statisk tomrum onTouchStart (uint8_t tag); statisk ugyldig onIdle (); }; // Liste over alle skærmbilleder i din app i følgende tabel SCREEN_TABLE {DECL_SCREEN (PianoScreen)}; SCREEN_TABLE_POST void PianoScreen:: onEntry () {// Kode, der udføres, når en skærm vises.} Void PianoScreen:: onRedraw (draw_mode_t hvad) {// Kode der kører for at tegne en skærm} void PianoScreen:: onTouchStart (uint8_t tag) { // Kode, der kører, når brugeren rører skærmen} void PianoScreen:: onIdle () {// Kode for opgaver, der kører, mens skærmen er aktiv}

Af disse er den vigtigste metode onRedraw (). Det maler brugergrænsefladen ved at kalde metoder på CommandProcessor objekt, som sender tegningskommandoer til displaypanelet. Det første sæt kommandoer rydder skærmen med sort (0x000000):

CommandProcessor cmd; cmd.cmd (CLEAR_COLOR_RGB (0x000000)).cmd (CLEAR (sandt, sandt, sandt));

Derefter trækker koden instrumentets valgknapper øverst på skærmen:

#define GRID_ROWS 8 #define GRID_COLS 6 cmd.font (font_small).fgcolor (sort).tag (241).knap (BTN_POS (1,1), BTN_SIZE (1,1), F ("Piano"))

Der er et par ting at notere her. For det første giver UI-biblioteket dig mulighed for at opsætte grænsefladen på et net. I dette tilfælde lægger jeg min grænseflade ud på et 6x8 gitter. Jeg sætter så skrifttypen og farven efterfulgt af et tag.

Hver interface knap er forbundet med et tag. Når en bruger klikker på en knap, skal den onTouchStart () Metoden hedder med det tag, så du kan tage en passende handling for den knap. Taggen går forud for knappen kommando, som sender instruktionerne til at placere knappen mærket "Piano" i position (1,1), mens der indtages et mellemrum på 1x1 på gitteret. Koden til udlægning af klavernøglerne er ens, men sker i en loop.

Senere i koden finder du den funktion, der svarer til knappen, hvor mærke 241 trykkes:

void PianoScreen:: onTouchStart (uint8_t tag) {switch (tag) {case 241: highlighted_instrument = tag; instrument = PIANO; pause; …} onRefresh (); }

Når brugeren trykker på en knap, ændrer koden nogle variabler for at indstille instrumentet KLAVER og derefter opkald onRefresh () at opdatere skærmen med den nye knap fremhævet. Fremhævningen udføres af highlightCallback () funktion, som under onRefresh () kaldes for hver knap, så du kan ændre farverne på knapperne baseret på deres tags og markere tilstand.

Koden til afspilning lyde er lidt anderledes:

void PianoScreen:: onTouchStart (uint8_t tag) {switch (tag) {… default: // Kode til indstilling af LED-farver … hvis (instrument == HIHAT) {// Særligt tilfælde til trommesæt noter} andet { // Aflyd noten sound.play (instrument, NOTE_C3 + tag - 1); } highlighted_note = tag; } onRefresh (); }

Det er indpakket for denne hurtige gennemgang. Jeg håber, at denne introduktion er nok til at komme i gang med at designe dine egne grafiske grænseflader til dine Arduino-projekter!