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, Juli
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 kreirao '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 odnosu na originalnu kocku (dodana žuta i bijela), imati beskonačnu količinu rotacije boja itd. trebao bi biti dobar projekt za vježbu o daljoj upotrebi 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:

  • Breadboard
  • Arduino - (ovdje imam Leonarda)
  • Arduino napajanje / USB kabel
  • Breadboard
  • Žice za kratkospojnike (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 x 1
  • 9 otpornika
  • Kutija dovoljno velika da stane na ploču (koristio sam kutiju za cipele)
  • Pomoćni nož
  • Papir

Korak 2: Kodirajte

Nekoliko objašnjenja za kôd dano ovdje:

Zasluge kodova idu izvornom izvoru mog projekta jer je urednik projekta kreirao ove kodove. Samo sam neke od njih 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 mog izvornog izvora.

Takođe imam verziju koda na Arduino Creatoru.

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

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 su sve tri LED diode na 30% int dimWhite = {30, 30, 30} itd.

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

POPIS NARUDŽBE:

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

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

jednu boju u drugu

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

1. Početna boja je postavljena na crnu (tako da prva boja izblijedi), ali početnu boju možete postaviti na bilo koju drugu boju 2. Interna petlja radi 1020 interacija; promenljiva 'wait' postavlja približno trajanje jednog unakrsnog fadea. 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 petljati u nedogled. ako je postavljeno na broj, to će se ponavljati taj broj puta, a zatim će se zaustaviti na posljednjoj boji u nizu. (Postavite 'return' na 1, a posljednju boju učinite crnom ako želite da na kraju izblijedi.) 4. Postoji opcionalna varijabla 'hold', koja programu zadaje 'hold' milisekunde kada je boja dovršeno, ali prije nego što počne sljedeća boja. 5. Postavite zastavicu DEBUG na 1 ako želite da se izlaz za otklanjanje grešaka šalje na serijski monitor.

Unutrašnjost programa nije komplicirana, ali jest

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

April 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 wait = 15; // 10ms interno kašnjenje crossFade; povećanje za sporije blijeđenje // 改

int hold = 1; // Opcionalno zadržavanje kada je boja potpuna, prije sljedećeg crossFade // 改 int DEBUG = 1; // DEBUG brojač; ako je postavljeno na 1, upisat će vrijednosti nazad putem serijskog int loopCount = 60; // Koliko često bi DEBUG trebao izvještavati? int repeat = 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 ukrštanja

void loop () {crossFade (crveno); crossFade (zelena); crossFade (plava); crossFade (žuto); crossFade (bijelo); crossFade (ružičasta); crossFade (ljubičasta); crossFade (narančasta);

if (repeat) {// Da li petlju ponavljamo konačan broj puta?

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

/* ISPOD OVOG LINIJA JE MATEMATIKA - NE TREBATE OVO PROMIJENITI OSNOVNO

Program funkcionira ovako:

Zamislite unakrsni prelaz koji pomiče crvenu LED sa 0-10, zelenu sa 0-5, a plavu sa 10 na 7, u deset koraka. Željeli bismo prebrojati 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 snižavanju. Naše blijeđenje u 10 koraka izgledalo bi ovako:

1 2 3 4 5 6 7 8 9 10

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

Crvena boja raste od 0 do 10 u deset koraka, zelena od

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

U stvarnom programu postoci boja se pretvaraju u

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

Da biste shvatili koliki bi korak trebao biti između jednog naviše ili

tipkom na 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 podešavanja vrijednosti. */

int CalculateStep (int prevValue, int endValue) {

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

/* Sljedeća funkcija je CalcuVal. Kada je vrijednost petlje, i, dostigne veličinu koraka odgovarajuću za jednu od boja, povećava ili smanjuje vrijednost te boje za 1. (R, G i B se računaju zasebno.) */

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

if ((korak) && 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 da li vrijednost treba ažurirati svaki put, 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 stepR = CalculateStep (prevR, R);

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

for (int i = 0; i <= 1020; i ++) {redVal = izračunajVal (stepR, redVal, i); grnVal = izračunajVal (stepG, grnVal, i); bluVal = CalcuVal (stepB, bluVal, i); ylwVal = izračunatiVal (stepY, ylwVal, i); // 改 whiVal = CalcuVal (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); // 改

kašnjenje (č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 ("Loop/RGBYW: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); Serial.print (" /"); Serial.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; // 改 kašnjenje (zadržavanje); // Pauziranje za opcionalno 'čekanje' milisekundi prije nastavka petlje}

Korak 3: Postavite

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

    1. Stavite LED diodu na ploču. Duži kraj postavite 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. Kod 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 bijele LED na 9.
    3. Postavite jedan kraj otpornika u isti red s kraćim krajem LED diode. Drugi kraj postavite negde 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. Postavite 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 malu rupu za svoje žice pomoću pomoćnog noža koji će proći kroz kutiju i spojiti se na matičnu ploču.
    2. Uvjerite se da je 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čuje se: