Sadržaj:

Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video): 4 koraka
Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video): 4 koraka

Video: Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video): 4 koraka

Video: Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video): 4 koraka
Video: Тестирование оптопар 4n25 во входных MIDI-цепях 2024, Srpanj
Anonim
Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video)
Poboljšanje Arduino LED kocke raspoloženja (jednostavno) (uključen video)

Nakon što sam vidio projekt male kocke za raspoloženje LED koji je stvorio 'Earl, odlučio sam napraviti poboljšanu verziju LED kocke za raspoloženje. Moja verzija bit će složenija od izvorne, jer će biti nešto veća od izvorne, imati još dvije boje u usporedbi s izvornom kockom (dodana žuta i bijela), imati beskonačnu količinu rotacije boja itd. trebao bi biti dobar projekt za vježbu o daljnjoj uporabi LED svjetala za one koji su razumjeli koncept povezivanja LED svjetala sa žicama.

Korak 1: Materijali

Materijali
Materijali
Materijali
Materijali

Evo nekoliko materijala koji će vam biti potrebni za izradu ove kocke raspoloženja:

  • Oglasna ploča
  • Arduino - (ovdje imam Leonarda)
  • Arduino napajanje / USB kabel
  • Oglasna ploča
  • Kratkospojne žice (mnogo njih, koristio sam 29 žica)
  • Crvena LED x 2
  • Plava LED x 2
  • Zelena LED dioda x 2
  • Žuta LED x 2
  • Bijela LED dioda x 1
  • 9 otpornika
  • Kutija dovoljno velika da stane na ploču (koristio sam kutiju za cipele)
  • Pomoćni nož
  • Papir

Korak 2: Kodiranje

Nekoliko objašnjenja za kôd dano ovdje:

Zasluge kodova idu izvornom izvoru mog projekta jer je urednik projekta stvorio te kodove. Neke sam samo poboljšao čineći ih složenijima. U nekim kodovima na kraju ćete možda vidjeti // 改. To znači da sam ovaj kôd uređivao pa se razlikuje od izvornog izvora.

Također imam verziju koda na Arduino Creatoru.

/* Kôd za 3 LED svjetla, crveno, zeleno i plavo (RGB) za stvaranje unakrsnog blijeđenja (RGB) Da biste stvorili blijeđenje, morate učiniti dvije stvari: 1. Opišite boje koje želite prikazati 2. Navedite redoslijed po kojem želite da izblijede

OPIS BOJE:

Boja je samo niz od tri posto, 0-100, koji kontrolira crvenu, zelenu i plavu LED diodu

Crvena je crvena LED lampica puna, plava i zelena isključena

int red = {100, 0, 0} Dim white (bijela) su sve tri LED diode pri 30% int dimWhite = {30, 30, 30} itd.

U nastavku su navedene neke uobičajene boje ili ih napravite sami

NAVEDENJE NARUDŽBE:

U glavnom dijelu programa morate navesti redoslijed u kojem želite da se boje pojavljuju, npr. crossFade (crveno); crossFade (zeleno); crossFade (plavo);

Te će se boje pojavljivati tim redoslijedom, blijedeći

jednu boju u drugu

Osim toga, postoji 5 izbornih postavki koje možete prilagoditi:

1. Početna boja je postavljena na crnu (tako da prva boja blijedi), ali početnu boju možete postaviti na bilo koju drugu boju 2. Unutarnja petlja radi 1020 interacija; varijabla "wait" postavlja približno trajanje jednog unakrsnog ugađanja. U teoriji, "čekanje" od 10 ms trebalo bi napraviti crossFade od ~ 10 sekundi. U praksi, ostale funkcije koje kod izvršava usporavaju ovo na ~ 11 sekundi na mojoj ploči. YMMV. 3. Ako je 'repeat' postavljeno na 0, program će se ponavljati u nedogled. ako je postavljeno na broj, to će se ponavljati taj broj puta, a zatim zaustaviti na posljednjoj boji u nizu. (Postavite 'return' na 1, a zadnju boju učinite crnom ako želite da na kraju izblijedi) dovršeno, ali prije nego što počne sljedeća boja. 5. Postavite zastavicu DEBUG na 1 ako želite da se izlaz za ispravljanje pogrešaka šalje na serijski monitor.

Unutrašnjost programa nije komplicirana, ali jesu

malo su nervozni - unutarnji rad objašnjen je ispod glavne petlje.

Travnja 2007., Clay Shirky

*

/ Izlaz

int ylwPin = 5; // Žuta LED, spojena na digitalni pin 5 // 改 int redPin = 6; // Crvena LED, spojena na digitalni pin 6 // 改 int grnPin = 7; // Zelena LED dioda, spojena na digitalni pin 7 // 改 int bluPin = 8; // Plava LED, spojena na digitalni pin 8 // 改 int whiPin = 9; // Bijela LED, spojena na digitalni pin 9 // 改 int ylwPin2 = 10; // Žuta LED, spojena na digitalni pin 10 // 改 int redPin2 = 11; // Crvena LED, spojena na digitalni pin 11 // 改 int grnPin2 = 12; // Zelena LED dioda, spojena na digitalni pin 12 // 改 int bluPin2 = 13; // Plava LED dioda, spojena na digitalni pin 13 // 改

// Nizovi boja

int crna [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int bijela [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // 改 int crveno [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // 改 int zeleno [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int plava [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int žuta [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int ljubičasta [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int narančasta [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int pink [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // itd.

// Postavljanje početne boje

int redVal = crno [0]; int grnVal = crno [1]; int bluVal = crno [2]; int ylwVal = crno [3]; // 改 int whiVal = crno [4]; // 改

int čekanje = 15; // 10 ms interno kašnjenje crossFade; povećanje za sporije blijeđenje // 改

int hold = 1; // Opcionalno zadržavanje kad je boja potpuna, prije sljedećeg crossFade // 改 int DEBUG = 1; // DEBUG brojač; ako je postavljeno na 1, vratit će vrijednosti natrag putem serijskog int loopCount = 60; // Koliko često bi DEBUG trebao izvještavati? int ponavljanje = 0; // Koliko puta trebamo proći petlju prije zaustavljanja? (0 bez zaustavljanja) // 改 int j = 0; // Brojač petlji za ponavljanje

// Pokretanje varijabli boja

int prevR = redVal; int prevG = grnVal; int prevB = bluVal; int prevY = ylwVal; int prevW = whiVal; // 改

// Postavljanje LED izlaza

void setup () {pinMode (redPin, OUTPUT); // postavlja pinove kao izlazni pinMode (grnPin, OUTPUT); pinMode (bluPin, OUTPUT); pinMode (ylwPin, OUTPUT); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); // 改

if (DEBUG) {// Ako želimo vidjeti vrijednosti za ispravljanje pogrešaka …

Serial.begin (9600); //… postavljanje serijskog izlaza}}

// Glavni program: popis redoslijeda unakrsnih uzoraka

void loop () {crossFade (crveno); crossFade (zeleno); crossFade (plavo); crossFade (žuto); crossFade (bijela); crossFade (ružičasta); crossFade (ljubičasta); crossFade (narančasta);

if (ponavljanje) {// Petljamo li konačan broj puta?

j += 1; if (j> = repeat) {// Jesmo li već stigli? izlaz (j); // Ako je tako, prestanite. }}}

/* ISPOD OVOG LINIJA JE MATEMATIKA - NE TREBATE TO MJENJATI OSNOVNO

Program radi ovako:

Zamislite crossfade koji pomiče crvenu LED od 0-10, zelenu od 0-5, a plavu od 10 do 7, u deset koraka. Željeli bismo izbrojati 10 koraka i povećati ili smanjiti vrijednosti boje u ravnomjerno povećanim koracima. Zamislite da + označava povećanje vrijednosti za 1, a a - jednako njezinu smanjenju. Naše blijeđenje u 10 koraka izgledalo bi ovako:

1 2 3 4 5 6 7 8 9 10

R + + + + + + + + + + G + + + + + B - - -

Crvena se diže od 0 do 10 u deset koraka, zelena od

0-5 u 5 koraka, a plava pada s 10 na 7 u tri koraka.

U stvarnom programu postoci boja se pretvaraju u

0-255 vrijednosti, a postoji 1020 koraka (255*4).

Da bismo shvatili koliki bi trebao biti korak između jednog gore ili

tipku dolje jedne od LED vrijednosti nazivamo CalcuStep (), koji izračunava apsolutni jaz između početne i krajnje vrijednosti, a zatim taj razmak dijeli s 1020 kako bi se odredila veličina koraka između prilagodbi vrijednosti. */

int CalculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Koliki je ukupni jaz? if (korak) {// Ako nije nula, korak = 1020 / korak; // podijeli sa 1020} return step; }

/* Sljedeća funkcija je CalcuVal. Kad vrijednost petlje, i, dosegne veličinu koraka prikladnu za jednu od boja, povećava ili smanjuje vrijednost te boje za 1. (R, G i B se izračunavaju zasebno.) */

int CalculatorVal (int korak, int val, int i) {

if ((step) && i % step == 0) {// Ako korak nije nula i vrijeme je za promjenu vrijednosti, if (korak> 0) {// uvećava vrijednost ako je korak pozitivan … val += 1; } else if (korak 255) {val = 255; } else if (val <0) {val = 0; } povratni val; }

/* crossFade () pretvara postotne boje u a

0-255, zatim petlja 1020 puta, provjeravajući treba li vrijednost ažurirati svaki put, a zatim upisuje vrijednosti boje na ispravne pinove. */

void crossFade (int boja ) {// 改

// Pretvori u 0-255 int R = (boja [0] * 255) / 100; int G = (boja [1] * 255) / 100; int B = (boja [2] * 255) / 100; int Y = (boja [3] * 255) / 100; // 改 int W = (boja [4] * 255) /100; // 改

int korakR = izračunatiKorak (prevR, R);

int korakG = izračunatikorak (prevG, G); int korakB = izračunatiKorak (prevB, B); int korakY = izračunavanjeKorak (prevY, Y); // 改 int korakW = izračunavanjeKorak (prevW, W); // 改

za (int i = 0; i <= 1020; i ++) {redVal = izračunajVal (stepR, redVal, i); grnVal = izračunatiVal (stepG, grnVal, i); bluVal = izračunajVal (stepB, bluVal, i); ylwVal = izračunatiVal (stepY, ylwVal, i); // 改 whiVal = izračunatiVal (stepW, whiVal, i); // 改

analogWrite (redPin, redVal); // Zapis trenutnih vrijednosti na LED pinove

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal); analogWrite (ylwPin, ylwVal); // 改 analogWrite (whiPin, whiVal); // 改 analogWrite (grnPin2, grnVal); // 改 analogWrite (bluPin2, bluVal); // 改 analogWrite (ylwPin2, ylwVal); // 改 analogWrite (redPin2, redVal); // 改

odgoda (čekanje); // Pauza za 'čekanje' milisekundi prije nastavka petlje

if (DEBUG) {// Ako želimo serijski izlaz, ispišite ga na

if (i == 0 ili i % loopCount == 0) {// početak, i svaki loopCount puta Serial.print ("Petlja/RGBYW: #"); Serijski.ispis (i); Serial.print ("|"); Serijski.ispis (redVal); Serial.print (" /"); Serijski.ispis (grnVal); Serial.print (" /"); Serial.println (bluVal); Serial.print (" /"); Serijski.println (ylwVal); // 改 Serial.print (" /"); // 改 Serial.println (whiVal); // 改 Serial.print (" /"); // 改} DEBUG += 1; }} // Ažuriranje trenutnih vrijednosti za sljedeću petlju prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // 改 prevW = whiVal; // 改 odgoda (zadržavanje); // Pauziraj za opcionalno 'čekanje' milisekundi prije nastavka petlje}

Korak 3: Postavljanje

Postaviti
Postaviti
Postaviti
Postaviti
Postaviti
Postaviti
  1. Uzmi ploču.
  2. Demo spojnih žica kako bi LED svjetlo moglo zasjati:

    1. Stavite LED na ploču. Postavite duži kraj s lijeve strane, a kraći s desne strane.
    2. Postavite jedan kraj kratkospojne žice na mjesto koje je u istom redu s dužim krajem LED diode. Drugi kraj postavite na odjeljak Digital PWM. Kôd je odredio da se žute LED diode spajaju na 10 i 5, crvene na 6 i 11, plave na 8 i 13, zelene na 7 i 12 i na kraju bijela LED na 9.
    3. Jedan kraj otpornika postavite u isti red s kraćim krajem LED diode. Drugi kraj postavite negdje blizu.
    4. Postavite kraj druge kratkospojne žice u istom redu s krajem otpornika koji nije u istom redu s kraćim krajem LED diode. Drugi kraj žice postavite na red s negativnim nabojem.
    5. Stavite kraj još jedne kratkospojne žice na red s negativnim nabojem, a drugi kraj postavite na GND.
  3. Ponovite 2. korak 8 puta jer želite da zasvijetli 9 LED dioda
  4. Postavite ploču u kutiju. Evo nekoliko podsjetnika:

    1. Koristio sam napajanje. Napravite mali otvor za svoje žice pomoću pomoćnog noža koji će proći kroz kutiju i spojiti se na matičnu ploču.
    2. Provjerite je li kutija otvorena s jedne strane. Kutija za cipele već ima jednu stranu koja je otvorena. Ako je kutija potpuno zatvorena, odrežite jednu stranu kutije kako biste napravili slobodan prostor.
    3. Pokrijte stranu ničim papirom. Ovo je za LED svjetla koja svijetle kroz papir.

Preporučeni: