Orodha ya maudhui:

Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa): Hatua 4
Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa): Hatua 4

Video: Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa): Hatua 4

Video: Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa): Hatua 4
Video: Настройка 3D-принтера с помощью MKS sGen L v1.0 2024, Novemba
Anonim
Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa)
Kuboresha Arduino LED Mood Cube (Rahisi) (Video Imejumuishwa)

Baada ya kuona mradi wa mchemraba mdogo wa mhemko ulioundwa na 'earl, niliamua kufanya toleo bora la Cube ya Mood ya LED. Toleo langu litakuwa ngumu zaidi kuliko ile ya asili, kwani itakuwa kubwa kidogo kuliko ile ya asili, kuwa na rangi mbili zaidi ikilinganishwa na mchemraba asili (iliyoongezwa manjano na nyeupe), kuwa na idadi isiyo na kipimo ya mzunguko wa rangi, nk. inapaswa kuwa mradi mzuri wa kufanya mazoezi ya matumizi zaidi ya taa za LED kwa wale ambao walielewa dhana ya kuunganisha taa za LED na waya.

Hatua ya 1: Vifaa

Vifaa
Vifaa
Vifaa
Vifaa

Hapa kuna vifaa ambavyo utahitaji kufanya hii Cube ya Mood:

  • Bodi ya mkate
  • Arduino - (nina Leonardo hapa)
  • Usambazaji wa umeme wa Arduino / kebo ya USB
  • Bodi ya mkate
  • Waya za Jumper (nyingi, nilitumia waya 29)
  • Nyekundu LED x 2
  • Bluu ya LED x 2
  • Kijani cha kijani x 2
  • Njano LED x 2
  • Nyeupe LED x 1
  • Vipinga 9
  • Sanduku kubwa la kutosha kutoshea ubao wa mkate (nilitumia sanduku la viatu)
  • Kisu cha Huduma
  • Karatasi

Hatua ya 2: Kanuni

Maelezo mengine ya nambari iliyopewa hapa:

Sifa ya nambari hizo huenda kwa chanzo asili cha mradi wangu wakati mhariri wa mradi aliunda nambari hizi. Niliboresha tu zingine kwa kuzifanya kuwa ngumu zaidi. Katika nambari zingine, unaweza kuona // 改 mwishowe. Hii inamaanisha kuwa nambari hii imehaririwa na mimi, kwa hivyo ni tofauti na chanzo changu asili.

Pia nina toleo la nambari kwenye Muumba wa Arduino.

/ * Nambari ya kuvinjika kwa LED 3, nyekundu, kijani kibichi na bluu (RGB) Ili kuunda kufifia, unahitaji kufanya vitu viwili: 1. Eleza rangi unazotaka kuonyeshwa 2. Orodhesha agizo unalotaka lififie

KUELEZA RANGI:

Rangi ni safu tu ya asilimia tatu, 0-100, kudhibiti LED nyekundu, kijani na bluu

Nyekundu ni LED nyekundu kamili, bluu na kijani mbali

nyekundu nyekundu = {100, 0, 0} Nyeupe hafifu ni LED zote tatu kwa 30% int dimWhite = {30, 30, 30} nk.

Rangi zingine za kawaida hutolewa hapa chini, au fanya yako mwenyewe

Kuorodhesha Agizo:

Katika sehemu kuu ya programu, unahitaji kuorodhesha mpangilio ambao unataka rangi zionekane, k.m. crossFade (nyekundu); crossFade (kijani); crossFade (bluu);

Rangi hizo zitaonekana kwa mpangilio huo, zikiondoka

rangi moja na kwenye inayofuata

Kwa kuongeza, kuna mipangilio 5 ya hiari ambayo unaweza kurekebisha:

1. Rangi ya asili imewekwa nyeusi (kwa hivyo rangi ya kwanza inafifia), lakini unaweza kuweka rangi ya asili kuwa rangi nyingine yoyote. Kitanzi cha ndani kinaendesha maingiliano 1020; ubadilishaji wa 'subiri' huweka muda wa takriban msalaba mmoja. Kwa nadharia, 'subiri' ya 10 ms inapaswa kufanya msalaba wa sekunde ~ 10. Kwa mazoezi, kazi zingine ambazo nambari inafanya polepole hadi sekunde ~ 11 kwenye ubao wangu. YMMV. 3. Ikiwa "kurudia" imewekwa kwa 0, programu hiyo itazunguka kwa muda usiojulikana. ikiwa imewekwa kwa nambari, itazunguka idadi hiyo ya nyakati, kisha simama kwenye rangi ya mwisho katika mlolongo. (Weka 'kurudi' kwa 1, na ufanye rangi ya mwisho iwe nyeusi ikiwa unataka kufifia mwishoni.) 4. Kuna chaguo-tofauti la 'kushikilia', ambayo hupitisha mpango wa 'kushikilia' millisecond wakati rangi ni kamili, lakini kabla ya rangi inayofuata kuanza. 5. Weka bendera ya DEBUG kuwa 1 ikiwa unataka utatuzi wa utatuzi utumwe kwa mfuatiliaji wa serial.

Wafanyakazi wa programu sio ngumu, lakini wao

ni fussy kidogo - utendaji wa ndani umeelezewa chini ya kitanzi kuu.

Aprili 2007, Clay Shirky

*

/ Pato

int ylwPin = 5; // LED ya manjano, iliyounganishwa na pini ya dijiti 5 // 改 int redPin = 6; // LED Nyekundu, iliyounganishwa na pini ya dijiti 6 // 改 int grnPin = 7; // LED ya Kijani, iliyounganishwa na pini ya dijiti 7 // 改 int bluPin = 8; // LED ya Bluu, iliyounganishwa na pini ya dijiti 8 // 改 int whiPin = 9; // Nyeupe LED, iliyounganishwa na pini ya dijiti 9 // 改 int ylwPin2 = 10; // LED ya manjano, iliyounganishwa na pini ya dijiti 10 // 改 int redPin2 = 11; // LED Nyekundu, iliyounganishwa na pini ya dijiti 11 // 改 int grnPin2 = 12; // LED ya Kijani, iliyounganishwa na pini ya dijiti 12 // 改 int bluPin2 = 13; // LED ya Bluu, iliyounganishwa na pini ya dijiti 13 // 改

// Upangaji wa rangi

nyeusi nyeusi [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // nyeupe nyeupe [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100, 100}; // nyekundu nyekundu [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // kijani kibichi [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // bluu ya bluu [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // njano njano [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int zambarau [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // rangi ya machungwa [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int pink [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // nk.

// Weka rangi ya asili

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

subiri = 15; // 10ms kuchelewa kwa msalaba wa ndani; ongezeko la kufifia polepole // 改

kushikilia = 1; // Shikilia hiari wakati rangi imekamilika, kabla ya msalaba unaofuata Fade // 改 int DEBUG = 1; // kaunta ya DEBUG; ikiwa imewekwa 1, itaandika maadili kupitia serial int loopCount = 60; // Ripoti ya DEBUG inapaswa mara ngapi? kurudia int = 0; // Tunapaswa kitanzi mara ngapi kabla ya kuacha? (0 bila kusimama) // 改 int j = 0; // Kitengo cha kitanzi cha kurudia

// Anzisha vigeu vya rangi

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

// Weka matokeo ya LED

kuanzisha batili () {pinMode (redPin, OUTPUT); // huweka pini kama pinMode ya pato (grnPin, OUTPUT); pinMode (bluPin, OUTPUT); pinMode (ylwPin, OUTPUT); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); // 改

ikiwa (DEBUG) {// Ikiwa tunataka kuona maadili ya utatuzi …

Kuanzia Serial (9600); //… sanidi ouput ya serial}}

// Programu kuu: orodhesha mpangilio wa msalaba

kitanzi batili () {crossFade (nyekundu); crossFade (kijani); crossFade (bluu); crossFade (njano); crossFade (nyeupe); crossFade (nyekundu); crossFade (zambarau); crossFade (machungwa);

ikiwa (kurudia) {// Je! tunapiga idadi kadhaa ya nyakati?

j + = 1; ikiwa (j> = kurudia) {// Je! tuko bado? toka (j); // Ikiwa ni hivyo, simama. }}}

/ * HAPA CHINI MSTARI HUU NDIO MATH - HUFANIKIWI KUBADILI HII KWA MISINGI

Programu inafanya kazi kama hii:

Fikiria msalaba unaoharibu taa nyekundu kutoka 0-10, kijani kibichi kutoka 0-5, na bluu kutoka 10 hadi 7, kwa hatua kumi. Tunataka kuhesabu hatua 10 na kuongeza au kupunguza maadili ya rangi katika nyongeza zilizopigwa sawasawa. Fikiria a + inaonyesha kuongeza thamani kwa 1, na - sawa na kuipunguza. Hatua yetu 10 ya kufifia ingeonekana kama:

1 2 3 4 5 6 7 8 9 10

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

Nyekundu huinuka kutoka 0 hadi 10 kwa hatua kumi, kijani kutoka

0-5 kwa hatua 5, na hudhurungi huanguka kutoka 10 hadi 7 kwa hatua tatu.

Katika mpango halisi, asilimia za rangi hubadilishwa kuwa

Maadili 0-255, na kuna hatua 1020 (255 * 4).

Ili kujua ni hatua gani kubwa inapaswa kuwa kati ya moja juu- au

alama-chini ya moja ya maadili ya LED, tunaita calculateStep (), ambayo huhesabu pengo kabisa kati ya maadili ya mwanzo na mwisho, na kisha hugawanya pengo hilo kufikia 1020 ili kujua saizi ya hatua kati ya marekebisho ya thamani. * /

int calculateStep (int prevValue, int endValue) {

hatua ya mwisho = Thamani ya mwisho - Thamani ya awali; // Je! Pengo la jumla ni lipi? ikiwa (hatua) {// Ikiwa sio sifuri, hatua = 1020 / hatua; // kugawanywa na 1020} hatua ya kurudi; }

/ * Kazi inayofuata ni hesabuVal. Wakati thamani ya kitanzi, i, hufikia saizi ya hatua inayofaa kwa moja ya rangi, inaongeza au hupunguza thamani ya rangi hiyo kwa 1. (R, G, na B kila moja imehesabiwa kando.) * /

int calculateVal (hatua ya int, int val, int i) {

ikiwa ((hatua) && i% step == 0) {// Ikiwa hatua sio sifuri na wakati wake wa kubadilisha thamani, ikiwa (hatua> 0) {// kuongeza thamani ikiwa hatua ni nzuri… val + = 1; } mwingine ikiwa (hatua 255) {val = 255; } mwingine ikiwa (val <0) {val = 0; } kurudi val; }

/ * crossFade () hubadilisha rangi ya asilimia kuwa

Masafa ya 0-255, kisha vitanzi mara 1020, ukiangalia ikiwa thamani inahitaji kusasishwa kila wakati, kisha uandike nambari za rangi kwenye pini sahihi. * /

utupu wa msalaba (rangi ya ndani ) {// 改

// Badilisha kwa 0-255 int R = (rangi [0] * 255) / 100; int G = (rangi [1] * 255) / 100; int B = (rangi [2] * 255) / 100; int Y = (rangi [3] * 255) / 100; // 改 int W = (rangi [4] * 255) / 100; // 改

hatua yaR = hesabuHatua (prevR, R);

hatua stepG = hesabuStep (prevG, G); hatua stepB = hesabuStep (prevB, B); hatua ya hatua = mahesabuHatua (mapema, Y); // 改 int stepW = hesabuHatua (prevW, W); // 改

kwa (int i = 0; i <= 1020; i ++) {redVal = calculateVal (stepR, redVal, i); grnVal = hesabuVal (stepG, grnVal, i); bluVal = mahesabuVal (stepB, bluVal, i); ylwVal = hesabuVal (hatuaY, ylwVal, i); // 改 whiVal = mahesabuVal (stepW, whiVal, i); // 改

AnalogWrite (nyekunduPin, nyekunduVal); // Andika maadili ya sasa kwa pini za LED

AnalogWrite (grnPin, grnVal); AnalogWrite (BluPin, bluVal); AnalogWrite (ylwPin, ylwVal); // 改 AnalogWrite (whiPin, whiVal); // AnalogWrite (grnPin2, grnVal); // 改 AnalogWrite (bluPin2, bluVal); // 改 AnalogIandika (ylwPin2, ylwVal); // 改 AnalogWrite (redPin2, redVal); // 改

kuchelewesha (subiri); // Pumzika kwa 'subiri' millisecond kabla ya kuanza tena kitanzi

ikiwa (DEBUG) {// Ikiwa tunataka pato la serial, chapisha kwenye

ikiwa (i == 0 au i% loopCount == 0) {// mwanzo, na kila mara loopCount Serial.print ("Loop / RGBYW: #"); Printa ya serial (i); Printa ya serial ("|"); Printa ya serial (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; }} // Sasisha maadili ya sasa ya kitanzi kinachofuata prevR = redVal; prevG = grnVal; prevB = bluuVal; mapema = ylwVal; // 改 prevW = whiVal; // kuchelewa (kushikilia); // Pumzika kwa sekunde chache za 'subiri' kabla ya kuanza tena kitanzi}

Hatua ya 3: Sanidi

Sanidi
Sanidi
Sanidi
Sanidi
Sanidi
Sanidi
  1. Pata ubao wa mkate.
  2. Maonyesho ya waya zinazounganisha ili taa ya LED iweze kuangaza:

    1. Weka LED kwenye ubao wa mkate. Weka mwisho mrefu kushoto na mwisho mfupi upande wa kulia.
    2. Weka mwisho mmoja wa waya ya kuruka mahali penye safu moja na mwisho mrefu wa LED. Weka ncha nyingine kwenye sehemu ya Digital PWM. Nambari hiyo ilielezea LED za manjano kushikamana na 10 na 5, nyekundu kwa 6 na 11, zile za bluu hadi 8 na 13, zile za kijani hadi 7 na 12, na mwishowe LED nyeupe hadi 9.
    3. Weka mwisho mmoja wa kontena kwenye safu ile ile na mwisho mfupi wa LED. Weka mwisho mwingine mahali fulani karibu.
    4. Weka mwisho wa waya mwingine wa kuruka na safu ile ile na mwisho wa kontena ambao hauko kwenye safu moja na mwisho mfupi wa LED. Weka mwisho mwingine wa waya kwenye safu ya malipo hasi.
    5. Weka mwisho wa waya mwingine wa kuruka kwenye safu ya malipo hasi na uweke ncha yake nyingine kwenye GND.
  3. Rudia Hatua ya 2 kwa mara 8 kwa vile unataka taa za 9 ziangaze
  4. Weka ubao wa mkate ndani ya sanduku. Vikumbusho vichache hapa:

    1. Nilitumia usambazaji wa umeme. Unda shimo ndogo kwa waya zako ukitumia kisu cha matumizi kupita kwenye sanduku na unganisha kwenye ubao wa mkate.
    2. Hakikisha kisanduku kama upande mmoja ulio wazi. Sanduku la viatu tayari lina upande mmoja ambao uko wazi. Ikiwa sanduku limefungwa kikamilifu, kata upande mmoja wa sanduku ili kuweka nafasi wazi.
    3. Funika kando bila chochote na karatasi. Hii ni kwa taa za LED kuangaza kupitia karatasi.

Ilipendekeza: