Kako spojiti RGB LED na Arduino. RGB Led traka kontrolirana Arduino Arduino kodom za transfuziju različitih boja




Pulsna širinska modulacija (PWM) je zabavna i posebno zabavna za upravljanje servo motorima, ali danas ćemo je primijeniti na trobojnu LED diodu. To će nam omogućiti da kontroliramo njegovu boju i dobijemo neki privid ljepote.

PWM

Genijalna definicija PWM-a formulirana je na Wikipediji, pa ću je samo kopirati odatle: "PWM - aproksimacija željenog signala (višerazinskog ili kontinuiranog) stvarnim binarnim signalima (s dvije razine - Uključeno, Isključeno ), tako da su u prosjeku u određenom vremenskom razdoblju njihove vrijednosti jednake. <...> W IM je impulsni signal konstantne frekvencije i promjenjiv radnog ciklusa , odnosno omjer perioda ponavljanja pulsa i njegovog trajanja. Postavljanjem radnog ciklusa (trajanje impulsa)možete promijeniti prosječni napon na PWM izlazu. "


Sada ćemo shvatiti što to znači. Neka postoji takav običan pravokutni signal:




Ima fiksnu frekvenciju i radni ciklus od 50%. To znači da je u polovici perioda napon maksimalan, a u drugoj polovici nula. Integrirajući ovaj signal tijekom razdoblja, vidjet ćemo da je njegova energija jednaka polovici maksimuma. Ovo će biti isto kao da mi cijelo vrijeme primijenjeni pola napona.


Ako imamo maksimalni napon od 5 V, tada je napon dobiven na PWM izlazu jednak radnom ciklusu pomnoženom s 5 V (i podijeljen sa 100% tako da formalno-nacistički nije vezan):


Arduino vam omogućuje da na PWM izlaz upišete vrijednost od 0 do 255, što znači da možemo dobiti napon s rezolucijom od oko 20 mV.


Trobojna LED

Evo ga, četveronožnog zgodnog muškarca:


Najduža noga je obična anoda, a sve ostalo su katode, svaka je zaslužna za svoju boju: (pogledajte sliku) donja je crvena, druga odozgo je zelena, gornja je plava.

Ako na dugu nogu primijenite +5V, a na sve ostalo 0V, dobit ćete bijelo svjetlo (molim vas, zaštitite se - stavite ograničavajuće otpornike!). Koliko je bijela može se prosuditi po sljedećem videu:


Ali dobivanje bijele boje na njemu jednostavno nije zanimljivo. Pogledajmo kako to učiniti da svjetluca različitim bojama.

PWM na Arduinu

PWM frekvencija na Arduinu je približno 490 Hz. Na Arduino UNO ploči, pinovi koji se mogu koristiti za PWM su 3,5,6, 9, 10 i 11. Na ploči postoji nagovještaj za to - ispred brojeva PWM pinova nalazi se tilda ili oštar. sitotiskom.

Ništa nije lakše nego kontrolirati PWM pomoću Arduina! Za to postoji samo jedna funkcija. analogWrite(pin, vrijednost), gdje pribadač- izlazni broj, i vrijednost- vrijednost od 0 do 255. U ovom slučaju ne morate ništa upisivati void setup()!

Više o tome možete pročitati na engleskom i.

Prilično radi

Neka LED svjetluca u različitim bojama. Neka jedna boja polako blijedi dok druga svijetli. Naizmjenično ćemo mijenjati nekoliko boja, a boja će ići u krug od crvene do zelene, od zelene do plave, od plave do crvene.

Sastavimo jednostavnu shemu:


I napišite jednostavan kod:

//pozivanje izlaza prema boji
int REDpin = 9;
int ZELENI pin = 10;
int PLAVA igla = 11;

poništiti postaviti (){}

poništiti petlja (){
za (int vrijednost = 0; vrijednost<= 255; value +=1) {
// svjetlina crvene se smanjuje
analogWrite(REDpin, vrijednost);
// povećava se svjetlina zelene boje
analogWrite(GREENpin, 255-vrijednost);
// plava je isključena
analogWrite(BLUEpin, 255);
//pauza
kašnjenje (30);
}

za (int vrijednost = 0; vrijednost<= 255; value +=1) {
// crveno je isključeno
analogWrite(REDpin, 255);
// svjetlina zelene se smanjuje
analogWrite(GREENpin, vrijednost);
//povećava se svjetlina plave boje
analogWrite(BLUEpin, 255-vrijednost);
//pauza
kašnjenje (30);
}

za (int vrijednost = 0; vrijednost<= 255; value +=1) {
// povećava se svjetlina crvene boje
analogWrite(REDpin, 255-vrijednost);
// zeleno isključeno
analogniWrite(GREENpin, 255);
//svjetlina plave se smanjuje
analogWrite(BLUEpin, vrijednost);
//pauza
kašnjenje (30);
}
}

  • 3 otpornika od 220 ohma (ovdje je izvrstan set otpornika najčešćih ocjena);
  • spojne žice (preporučam ovaj set);
  • matična ploča (mašna ploča);
  • osobno računalo s razvojnim okruženjem Arduino IDE.
  • 1 Razlika između RGB LED dioda zajednička anoda i zajednička katoda

    RGB LED diode dolaze u dvije vrste: sa zajedničkom anodom ("plus") i zajednička katoda ("minus"). Na slici su prikazani dijagrami sklopa ove dvije vrste LED dioda. Duga noga LED-a je uvijek uobičajena igla za napajanje. Izlaz crvene LED diode (R) nalazi se zasebno, zelene (G) i plave (B) nalaze se na drugoj strani zajedničkog izlaza, kao što je prikazano na slici. U ovom ćemo članku razmotriti povezivanje RGB LED-a sa zajedničkom anodom i zajedničkom katodom.

    2 Spajanje RGB LED-a sa zajedničkom anodom na Arduino

    Zajednička anoda RGB LED dijagram ožičenja prikazano na slici. Anodu spajamo na "+5 V" na Arduino ploči, ostala tri izlaza na proizvoljne digitalne pinove.


    Imajte na umu da svaku LED diodu povezujemo preko vlastitog otpornika, a ne pomoću jednog zajedničkog. Preporučljivo je učiniti upravo to, jer svaka od LED dioda ima svoju učinkovitost. A ako ih sve povežete kroz jedan otpornik, LED diode će svijetliti različitom svjetlinom.

    Za brzi izračun vrijednosti otpornika prikladnog za LED po vašem izboru, možete koristiti online LED kalkulator.

    3 RGB LED kontrola koristeći Arduino

    Prepišimo klasičnu skicu treptati. Omogućit ćemo i onemogućiti svaku od tri boje zauzvrat. Imajte na umu da LED svijetli kada primijenimo nisku razinu (LOW) na odgovarajući pin Arduina.

    // postavlja brojeve pinova: const int pinR = 12; const int pinG = 10; const int pinB = 9; void setup()(// postavlja dodjela pinova: pinMode(pinR, OUTPUT); pinMode(pinG, OUTPUT); pinMode(pinB, IZLAZ); } void loop() ( digitalWrite(pinR, LOW); //osvijetli kanal Red delay(100); digitalWrite(pinR, HIGH); //isključi Red delay(200); digitalWrite(pinG, LOW); //osvijetli kanal Green delay(100); digitalWrite(pinG, HIGH); //isključi Green delay(200); digitalWrite(pinB, LOW); //osvijetli kanal Blue delay(100); digitalWrite(pinB, HIGH); //isključi Blue delay(200); }

    4 Sastavite krug na matičnoj ploči

    Pogledajmo kako RGB LED treperi u akciji. LED svijetli redom crveno, zeleno i plavo. Svaka boja ostaje uključena 0,1 sekundu, a zatim se gasi na 0,2 sekunde i sljedeća se uključuje. Možete osvijetliti svaki kanal posebno, možete sve u isto vrijeme, tada će se boja sjaja promijeniti.


    RGB LED spojen na Arduino. Krug je sastavljen na matičnoj ploči

    5 na Arduino

    Ako koristite Zajednička katoda RGB LED, zatim spojite dugi kabel LED-a na GND Arduino ploče i R, G i B kanali na Arduino digitalne portove. Treba imati na umu da LED diode svijetle kada se na kanale R, G, B primjenjuje visoka razina (HIGH), za razliku od LED-a sa zajedničkom anodom.


    Dijagram ožičenja za uobičajenu katodu RGB LED na Arduino

    Ako ne promijenite gornju skicu, tada će svaka boja LED-a u ovom slučaju gorjeti 0,2 sekunde, a pauza između njih bit će 0,1 sekundu.

    Ako želite kontrolirati svjetlinu LED-a, onda spojite RGB LED na Arduino digitalne pinove koji imaju PWM funkciju. Takve igle na Arduino ploči obično su označene tildom (valovita linija), zvjezdicom ili zaokružene.

    Višebojne LED diode, ili kako ih još zovu RGB, koriste se za označavanje i stvaranje pozadinskog osvjetljenja koje se dinamički mijenja u boji. Zapravo, nema ništa posebno u vezi s njima, da vidimo kako rade i što su RGB LED diode.

    Unutarnja organizacija

    Zapravo, RGB LED su tri jednobojna kristala kombinirana u jednom pakiranju. Naziv RGB znači crveno - crveno, zeleno - zeleno, plavo - plavo, prema bojama koje svaki od kristala emitira.

    Ove tri boje su osnovne, a svaka boja nastaje njihovim miješanjem; ova tehnologija se dugo koristi u televiziji i fotografiji. Na gornjoj slici možete vidjeti sjaj svakog kristala posebno.

    Na ovoj slici vidite princip miješanja boja kako biste dobili sve nijanse.

    Kristali u RGB LED diodama mogu se spojiti na sljedeći način:

    Sa zajedničkom anodom;

    Sa zajedničkom katodom;

    Nije povezano.

    U prve dvije opcije vidjet ćete da LED ima 4 pina:

    Ili 6 zaključaka u posljednjem slučaju:

    Na fotografiji se ispod leće jasno vide tri kristala.

    Za takve LED diode prodaju se posebne montažne jastučiće, čak ukazuju na svrhu zaključaka.

    Ne može se zanemariti RGBW - LED diode, njihova razlika leži u činjenici da se u njihovom slučaju nalazi još jedan kristal koji emitira bijelo svjetlo.

    Naravno, nije bilo bez traka s takvim LED diodama.

    Ova slika prikazuje traku s RGB LED diodama, sastavljene prema uobičajenoj anodnoj shemi, intenzitet sjaja se podešava kontroliranjem "-" (minusa) izvora napajanja.

    Za promjenu boje RGB trake koriste se posebni RGB kontroleri - uređaji za prebacivanje napona koji se dovodi na vrpcu.

    Ovdje je RGB SMD5050 pinout:

    I nema vrpci, nema posebnih značajki za rad s RGB vrpcama, sve ostaje isto kao i kod monokromatskih modela.

    Za njih postoje i konektori za spajanje LED trake bez lemljenja.

    Ovdje je pinout za 5 mm RGB LED:

    Kako se mijenja boja sjaja

    Podešavanje boje provodi se podešavanjem svjetline zračenja svakog od kristala. Već smo razmotrili.

    RGB kontroler za traku radi na istom principu, ima mikroprocesor koji kontrolira negativni izlaz napajanja - spaja ga i odspaja iz strujnog kruga odgovarajuće boje. Upravljač obično dolazi s daljinskim upravljačem. Kontroleri dolaze u različitim kapacitetima, njihova veličina ovisi o tome, počevši od tako minijaturnog.

    Da, tako moćan uređaj u kućištu veličine napajanja.

    Spojeni su na traku prema sljedećoj shemi:

    Budući da dio staza na vrpci ne dopušta spajanje sljedećeg dijela trake u nizu s njim, ako duljina prvog prelazi 5 m, trebate povezati drugi dio žicama izravno iz RGB kontrolera.

    Ali možete se izvući iz situacije, a ne povlačiti dodatne 4 žice 5 metara od kontrolera i koristiti RGB pojačalo. Za njegov rad potrebno je razvući samo 2 žice (plus i minus 12V) ili napajati drugo napajanje iz najbližeg izvora od 220V, kao i 4 "informacijske" žice iz prethodnog segmenta (R, G i B) koje su potrebne primati naredbe od kontrolera, tako da cijela struktura svijetli na isti način.

    I sljedeći segment je već spojen na pojačalo, t.j. koristi signal s prethodnog komada vrpce. Odnosno, možete napajati vrpcu iz pojačala koje će se nalaziti neposredno uz nju, čime ćete uštedjeti novac i vrijeme na polaganju žica iz primarnog RGB kontrolera.

    Svojim rukama prilagođavamo RGB-led

    Dakle, postoje dvije opcije za upravljanje RGB LED diodama:

    Ovdje je varijanta sklopa bez upotrebe arduina i drugih mikrokontrolera, koristeći tri CAT4101 drajvera koji mogu isporučiti struju do 1A.

    Međutim, sada su kontroleri prilično jeftini, a ako trebate prilagoditi LED traku, onda je bolje kupiti gotovu verziju. Krugovi s arduinom su puno jednostavniji, pogotovo jer možete napisati skicu s kojom ćete ili ručno postaviti boju, ili će odabir boja biti automatski u skladu sa zadanim algoritmom.

    Zaključak

    RGB-LED vam omogućuje da napravite zanimljive svjetlosne efekte koji se koriste u dizajnu interijera, kao pozadinsko osvjetljenje za kućanske aparate, za učinak proširenja TV ekrana. Nema posebnih razlika u radu s njima od običnih LED dioda.

    Za upravljanje ovim uređajima koristi se RGB kontroler. No, osim njega, posljednjih godina koristi se i Arduino ploča.

    Arduino - princip rada

    arduino ploča

    Arduino ploča je uređaj na koji je instaliran programabilni mikrokontroler. Na njega su spojeni različiti senzori, kontrole ili enkoderi i, prema zadanoj skici (programu), ploča upravlja motorima, LED diodama i drugim aktuatorima, uključujući i druge Arduino ploče koristeći SPI protokol. Uređajem je moguće upravljati putem daljinskog upravljača, Bluetooth modula, HC-06, Wi-Fi, ESP ili interneta te tipki. Neke od najpopularnijih ploča su Arduino Nano i Arduino Uno, kao i Arduino Pro Mini, uređaj baziran na ATmega 328 mikrokontroleru.


    Izgled Arduino Pro Mini
    Izgled Arduino Uno
    Izgled Arduino micro

    Programiranje se provodi u otvorenom kodu Arduino okruženju instaliranom na običnom računalu. Programi se preuzimaju putem USB-a.

    Princip kontrole opterećenja kroz Arduino


    Arduino kontrola

    Ploča ima mnogo izlaza, oba digitalna, koji imaju dva stanja - uključeno i isključeno, i analogne, kontrolirane preko PWM kontrolera frekvencije od 500 Hz.

    Ali izlazi su dizajnirani za struju od 20 - 40 mA s naponom od 5 V. To je dovoljno za napajanje RGB LED indikatora ili LED matričnog modula 32x32 mm. Za snažnije opterećenje to nije dovoljno.

    Da biste riješili ovaj problem u mnogim projektima, morate spojiti dodatne uređaje:

    • Relej. Osim pojedinačnih releja s naponom napajanja od 5V, postoje cijeli sklopovi s različitim brojem kontakata, kao i s ugrađenim starterima.
    • Pojačala na bipolarnim tranzistorima. Snaga takvih uređaja ograničena je upravljačkom strujom, ali možete sastaviti krug od nekoliko elemenata ili koristiti tranzistorski sklop.
    • Efekt polja ili MOSFET tranzistori. Mogu pokretati opterećenja strujama od nekoliko ampera i naponima do 40 - 50 V. Prilikom spajanja mosfeta na PWM i motor ili drugo induktivno opterećenje potrebna je zaštitna dioda. Kada je spojen na LED ili LED svjetiljke, to nije potrebno.
    • Ploče za proširenje.

    Spajanje LED trake na Arduino


    spajanje led trake na arduino

    Mišljenje stručnjaka

    Aleksej Bartoš

    Specijalist za popravak, održavanje električne opreme i industrijske elektronike.

    Pitajte stručnjaka

    Arduino Nano može kontrolirati više od samo električnih motora. Koriste se i za LED trake. No budući da izlazna struja i napon ploče nisu dovoljni za izravno spajanje trake s LED diodama na nju, između kontrolera i LED trake moraju se ugraditi dodatni uređaji.

    preko releja


    Povezivanje preko releja

    Relej je spojen na uređaj na digitalni izlaz. Traka koja se kontrolira uz njegovu pomoć ima samo dva stanja - uključeno i isključeno. Za upravljanje crveno-plavo-zelenom vrpcom potrebna su tri releja. Struja koju takav uređaj može kontrolirati ograničena je snagom zavojnice (zavojnica male snage nije u stanju zatvoriti velike kontakte). Za povezivanje veće snage koriste se relejni sklopovi.

    S bipolarnim tranzistorom


    Povezivanje s tranzistorom

    Za pojačanje izlazne struje i napona može se koristiti bipolarni tranzistor. Odabire se prema struji i naponu opterećenja. Upravljačka struja ne smije biti veća od 20 mA, stoga se napaja kroz strujni otpor od 1 - 10 kOhm.

    Tranzistor je bolje koristiti n-p-n sa zajedničkim emiterom. Za veće pojačanje koristi se sklop s nekoliko elemenata ili sklop tranzistora (pojačalački čip).

    S tranzistorom s efektom polja

    Osim bipolarnih, za upravljanje pojasevima koriste se tranzistori s efektom polja. Drugi naziv za ove uređaje je MOS ili MOSFET-tranzistor.

    Takav element, za razliku od bipolarnog, ne kontrolira struja, već napon na vratima. To omogućuje maloj struji vrata za pokretanje velikih struja opterećenja - do desetaka ampera.

    Element je spojen preko otpora koji ograničava struju. Osim toga, osjetljiv je na smetnje, pa bi izlaz kontrolera trebao biti spojen na masu pomoću otpornika od 10 kΩ.

    S ekspanzijskim pločama


    Povezivanje Arduina s pločama za proširenje

    Uz releje i tranzistore, koriste se gotovi blokovi i ploče za proširenje.

    To može biti Wi-Fi ili Bluetooth, upravljački program motora kao što je modul L298N ili ekvilajzer. Namijenjeni su za kontrolu opterećenja različite snage i napona. Takvi uređaji su jednokanalni - mogu kontrolirati samo jednobojnu traku i višekanalni - dizajnirani za RGB i RGBW uređaje, kao i vrpce s WS 2812 LED diodama.

    Primjer programa


    Arduino i LED traka

    Arduino ploče mogu kontrolirati LED strukture prema unaprijed određenim programima. Njihove knjižnice možete preuzeti sa službene stranice, pronaći na Internetu ili sami napisati novu skicu (kod). Takav uređaj možete sastaviti vlastitim rukama.

    Evo nekoliko opcija za korištenje takvih sustava:

    • Kontrola rasvjete. Uz pomoć svjetlosnog senzora, svjetlo u prostoriji se uključuje i odmah i uz postupno povećanje svjetline kako sunce zalazi. Uključivanje je moguće i putem wi-fija, uz integraciju u sustav "pametne kuće" ili telefonsku vezu.
    • Paljenje svjetla na stepenicama ili u dugom hodniku. LED rasvjeta svake stepenice posebno izgleda jako lijepo. Kada je senzor pokreta spojen na ploču, njegov rad će uzrokovati sekvencijalno, s vremenskim odgodom, osvjetljenje stepenica ili hodnika uključit će se, a onemogućavanje ovog elementa će dovesti do obrnutog procesa.
    • Glazba u boji. Primjenom audio signala na analogne ulaze kroz filtere, izlaz će biti glazbena instalacija u boji.
    • Modiranje računala. Uz pomoć odgovarajućih senzora i programa, boja LED dioda može ovisiti o temperaturi ili opterećenju procesora ili RAM-a. Takav uređaj radi prema dmx 512 protokolu.
    • Kontroliranje brzine svjetla za vožnju pomoću enkodera. Slične instalacije montirane su na čipovima WS 2811, WS 2812 i WS 2812B.

    Video upute

    Nedavno sam kupila 2 rolice rgb led traka 5 metara, i odmah odlučio eksperimentirati s njim. Komplet je uključivao kontrolnu jedinicu trake, ali programi su mi se činili nezanimljivi, a Tinyos Uno je bio pri ruci (potpuni kineski analog Arduino UNO). S obzirom na činjenicu da arduino radi sa maksimalno 5v po izlazu, a češće 3.3v, tada je trebalo naći rješenje. Ovaj članak pokazuje kako spojiti LED traku od 12 volti arduino s odvojenim feedom za traku i kontrolom s arduino korištenjem MOSFET-a za kontrolu kanala RGB trake.

    Krenimo od standardne specifikacije analogne LED trake, za koju mislim da je najčešća.

    • 10,5 mm (0,41") širine, 3 mm (0,12") debljine, 100 mm (3,95") dužine po segmentu
    • Vodootporan je ( Vodootporan) i bez zaštite ( ne-vodootporan)
    • Na stražnjoj strani ima ljepljivu traku za pričvršćivanje trake
    • Maksimalni napon 12V i 60mA po segmentu
    • 3 zajedničke anodne LED diode po segmentu
    • LED valna duljina: 630nm/530nm/475nm
    • Nema mikrokontrolera ili upravljačkog čipa (čisto analogno upravljanje)

    Prije početka rada sa Arduino i napon veći od 5 volti, toplo vam savjetujem da pročitate o tome kako ne biste izgorjeli Arduino. Dobro opisuje kako koristiti MOSFET-ovi s Arduino. Ako ste već pročitali ovaj članak, idemo dalje.
    Za rad s LED trakom potrebno nam je:

    1. MOSFET tranzistori koji se mogu naći na istom EBayu
    2. Otpornici za 10k?
    3. Matična ploča bez lemljenja ( matična ploča)
    4. Ožičenje za spajanje arduino s matičnom pločom (muško-muški)
    5. LED traka (uzeo sam aliexpress ovu traku, a planiram naručiti još par od istog prodavača)

    Sada prijeđimo na dijagram povezivanja, iz kojeg će glavni dio ovog članka postati jasan:

    Sada se okrenimo Arduino IDE, u kojem ćemo napisati skicu za upravljanje našim feedom:

    // Imajte na umu da je ovdje ostao neki naslijeđeni kod koji se čini da ne radi ništa // ali ne bi trebao štetiti ... // nemojte se igrati s ovim, nedopuštenim iznosima kasnije #define RED 9// pin za crvenu LED #define GREEN 10 // pin za zelenu - nikad eksplicitno referenciran #define BLUE 11 // pin za plavu - nikad eksplicitno referenciran #define SIZE 255 #define DELAY 20 #define HUE_MAX 6.0 #define HUE_DELTA 0.01 ( //dugi delta, 5 6, 7); dugi rgb; dugo rgbval; // iz nepoznatih razloga, ako je vrijednost !=0, LED ne svijetli. Hmm ... // i čini se da je zasićenje obrnuto float hue=0,0, saturation=1, value=1; /* odabrana LED SparkFun sku : COM-09264 ima maksimalnu svjetlinu (RGB): (2800, 6500, 1200)mcd pa ih sve normaliziramo na 1200 mcd - R 250/600 = 107/256 G 250/950 = 67/256 = 256 B 25 /256 */ dugo svijetlo = ( 107, 67, 256); //dugo svijetlo = ( 256, 256, 256); dugo k, temp_value; void setup () ( randomSeed(analogRead(4)); for (k= 0; k<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { hue += HUE_DELTA; if (hue >HUE_MAX) (hue=0,0; ) rgbval=HSV_to_RGB(nijansa, zasićenost, vrijednost); rgb = (rgbval & 0x00FF0000) >> 16; // mora postojati bolji način rgb = (rgbval & 0x0000FF00) >><3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } delay(DELAY); } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>1.0) || (v<1.0) || (v> < 0.0) || (h >6.0)) ( povratak long(v * 255) + long(v * 255) * 256 + long(v * 255) * 65536; ) i = floor(h); f = h - i; if (!(i&1)) ( f = 1 - f; // ako je i paran ) m = v * (1 - s); n = v * (1 - s * f); prekidač (i) ( slučaj 6: slučaj 0: povratak long(v * 255) * 65536 + long (n * 255) * 256 + long (m * 255); slučaj 1: povratak long (n * 255) * 65536 + long(v * 255) * 256 + long(m * 255); slučaj 2: povratak long(m * 255) * 65536 + long(v * 255) * 256 + long(n * 255); slučaj 3: povratak long (m * 255) * 65536 + dugo (n * 255) * 256 + dugo (v * 255); slučaj 4: povratak dugo (n * 255) * 65536 + dugo (m * 255) * 256 + dugo (v * 255); slučaj 5: povratak long(v * 255) * 65536 + long(m * 255) * 256 + long(n * 255); ) )

    Prenesite skicu na arduino i uživajte.
    Postoji i mogućnost korištenja temperaturnog senzora DS18B20 koji radi po protokolu 1 žica.

    Ideja je da " hladna temperatura, obično plava, i vruća temperatura" će postati crven. Ako pogledate kotačić HSV koji smo koristili u prvoj skici (pogledajte wiki za kotačić u boji), boja će ići od 240° kada je hladno do 0° kada je vruće, krećući se u smjeru kazaljke na satu (prolazeći plavo, zeleno i žuto ).

    hladna temperatura u ovom slučaju mislimo na 18 °C, i vruće podrazumijeva 30 ° C. Temperature ispod hladnog praga smatrat će se hladnim, a iznad vrućeg praga smatrat će se vrućim. Konačni kod je zapravo prilično jednostavan kada imate spreman HSV kod:

    // HSV fade/bounce za Arduino // Imajte na umu da je ovdje ostao neki naslijeđeni kod koji izgleda da ne radi ništa // ali ne bi trebao štetiti ... #include "OneWire.h" //#include "Streaming. h" const int DS18S20_Pin = 2; //DS18S20 Signalni pin na digitalnom 2 #define MIN_TEMP 18 #define MAX_TEMP 30 //Temperaturni čip i/o OneWire ds(DS18S20_Pin); // na digitalnom pinu 2 // na digitalnom pinu 2 // ovi, nedopušteni iznosi kasnije #define RED 9// pin za crvenu LED diodu #define GREEN 10 // pin za zelenu - nikad eksplicitno referenciran #define BLUE 11 // pin za plavu - nikada eksplicitno referenciran #define SIZE 255 #define DELAY 0 # definiraj HUE_MAX 6.0 #define HUE_DELTA 0.01 //duge delte = (5, 6, 7); dugi rgb; dugo rgbval; // iz nepoznatih razloga, ako je vrijednost !=0, LED ne svijetli. Hmm ... // i čini se da je zasićenje obrnuto float hue=0,0, saturation=1, value=1; /* odabrana LED SparkFun sku : COM-09264 ima maksimalnu svjetlinu (RGB): (2800, 6500, 1200)mcd pa ih sve normaliziramo na 1200 mcd - R 250/600 = 107/256 G 250/950 = 67/256 = 256 B 25 /256 */ dugo svijetlo = ( 107, 67, 256); //dugo svijetlo = ( 256, 256, 256); long k, temp_value; void setup () ( randomSeed(analogRead(4)); Serial.begin( 57600); za (k=0; k<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { float temperature = constrain(getTemp(), MIN_TEMP, MAX_TEMP); float deltaTemp = (MAX_TEMP - MIN_TEMP); float deltaHue = 4 - 0; hue = map((temperature - MIN_TEMP) * 100, 0, deltaTemp * 100, deltaHue * 100, 0) / 100.0; //Serial << "Temperature: " << temperature << endl; //Serial << "HUE: " << hue << endl; rgbval=HSV_to_RGB(hue, saturation, value); rgb = (rgbval & 0x00FF0000) >> 16; // mora postojati bolji način rgb = (rgbval & 0x0000FF00) >> 8; rgb=rgbval&0x000000FF; za (k=0; k<3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } //delay(DELAY); } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data; byte addr; if (!ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return -1000; } if (addr != 0x10 && addr != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data; byte LSB = data; float tempRead = ((MSB << 8) | LSB); //using two"s compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>1.0) || (v<1.0) || (v>1.0)) (vrati 0L; ) ako je ((h< 0.0) || (h >6.0)) ( povratak long(v * 255) + long(v * 255) * 256 + long(v * 255) * 65536; ) i = floor(h); f = h - i; if (!(i&1)) ( f = 1 - f; // ako je i paran ) m = v * (1 - s); n = v * (1 - s * f); prekidač (i) ( slučaj 6: slučaj 0: povratak long(v * 255) * 65536 + long (n * 255) * 256 + long (m * 255); slučaj 1: povratak long (n * 255) * 65536 + long(v * 255) * 256 + long(m * 255); slučaj 2: povratak long(m * 255) * 65536 + long(v * 255) * 256 + long(n * 255); slučaj 3: povratak long (m * 255) * 65536 + dugo (n * 255) * 256 + dugo (v * 255); slučaj 4: povratak dugo (n * 255) * 65536 + dugo (m * 255) * 256 + dugo (v * 255); slučaj 5: povratak long(v * 255) * 65536 + long(m * 255) * 256 + long(n * 255); ) )