Orodha ya maudhui:

LED Spiral Tree: 4 Hatua (na Picha)
LED Spiral Tree: 4 Hatua (na Picha)

Video: LED Spiral Tree: 4 Hatua (na Picha)

Video: LED Spiral Tree: 4 Hatua (na Picha)
Video: Маша и Медведь (Masha and The Bear) - Маша плюс каша (17 Серия) 2024, Novemba
Anonim
Mti wa ond wa LED
Mti wa ond wa LED
Mti wa ond wa LED
Mti wa ond wa LED
Mti wa ond wa LED
Mti wa ond wa LED

Ninapenda kila aina ya vipande vya LED. Nilitengeneza taa nzuri ya upinde wa mvua pamoja nao. Hata zile ambazo haziwezi kushughulikiwa zinafaa. Nimetengeneza mwavuli mkali wa soko nje kwa kuambatisha kwenye mbavu za unbrella kwa hivyo wakati mti wangu wa ond ulipovuma niliamua kufunika urefu wa mkanda ulioongozwa kuzunguka.

Hatua ya 1: Mdhibiti

Mdhibiti
Mdhibiti
Mdhibiti
Mdhibiti
Mdhibiti
Mdhibiti

Niliamua kutumia viongozo vya RGB visivyo na anwani. Hii inamaanisha kuwa ninaweza kuwa na athari iliyowekwa lakini vichwa vyote hubadilisha rangi wakati huo huo. Hii inamaanisha pia kwamba mtawala atahitajika. Ningekuwa nimetumia arduino uno na kufanya kufanya majaribio ya awali kwa kutumia ngao ya RGB lakini nikaishia kutumia bodi moja ya kitamaduni na tupu ya Atmega328. Ilibidi tu ubadilishe programu iliyolengwa na upange chip moja kwa moja.

Nilikuwa na bodi nyingi zilizoachwa kutoka kwa miradi mingine ya taa. Jisikie huru kutumia kidhibiti cha chini kilichopangwa tayari kama vile nilivyofanya kwenye mwavuli wangu badala yake.

Niliishia kutumia onyesho la pole pole kama msingi wa mti.

/ ** Nambari ya kuvinjika kwa LED 3, nyekundu, kijani na samawati (RGB) * Ili kuunda kufifia, unahitaji kufanya vitu viwili: * 1. Eleza rangi unazotaka kuonyeshwa * 2. Orodhesha agizo unalotaka wao kufifia katika * * 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 * int 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 tengeneza yako mwenyewe * Agizo: * Katika sehemu kuu ya programu, unahitaji kuorodhesha mpangilio * unayotaka rangi zionekane, kwa mfano. * CrossFade (nyekundu); * CrossFade (kijani); * CrossFade (bluu); * * Rangi hizo zitaonekana kwa mpangilio huo, zikififia kutoka kwa * rangi moja na kuingia kwenye inayofuata * * Kwa kuongezea, kuna mipangilio 5 ya hiari ambayo unaweza kurekebisha: * 1. Rangi ya asili imewekwa nyeusi (kwa hivyo rangi ya kwanza inafifia in), lakini * unaweza kuweka rangi ya asili kuwa rangi nyingine yoyote * 2. Kitanzi cha ndani kinaendesha maingiliano 1020; ubadilishaji wa 'subiri' unaweka muda wa takriban msalaba mmoja. Kwa nadharia, * 'subiri' ya 10 ms inapaswa kufanya msalaba wa sekunde ~ 10. Katika mazoezi, kazi zingine nambari inafanya polepole hii 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 kuwa nyeusi ikiwa unataka ififie mwisho.) * 4. Kuna chaguo-tofauti la 'kushikilia', ambalo linasukuma mpango wa * "kushikilia" millisecond wakati rangi imekamilika, * lakini kabla ya rangi inayofuata kuanza. * 5. Weka bendera ya DEBUG kuwa 1 ikiwa unataka utatuzi wa utatuzi utumwe * upelekwe 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 grnPin = 9; // LED ya Kijani, iliyounganishwa na pini ya dijiti 10 int redPin = 10; // LED Nyekundu, iliyounganishwa na pini ya dijiti 9 int bluPin = 11; // LED ya Bluu, iliyounganishwa na pini ya dijiti 11

// Upangaji wa rangi

int nyeusi [3] = {0, 0, 0}; nyeupe nyeupe [3] = {100, 100, 100}; nyekundu nyekundu [3] = {100, 0, 0}; kijani kibichi [3] = {0, 100, 0}; rangi ya bluu [3] = {0, 0, 100}; manjano int [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // na kadhalika.

// Weka rangi ya asili

int redVal = nyeusi [0]; int grnVal = nyeusi [1]; int bluVal = nyeusi [2];

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

kushikilia = 0; // Shikilia hiari wakati rangi imekamilika, kabla ya msalaba unaofuata Fade int DEBUG = 0; // 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;

// Weka matokeo ya LED

kuanzisha batili () {pinMode (redPin, OUTPUT); // huweka pini kama pinMode ya pato (grnPin, OUTPUT); pinMode (bluPin, 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);

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 hiyo inafanya kazi kama hii: * Fikiria msalaba unaoharibu taa nyekundu kutoka 0-10, * kijani kibichi kutoka 0-5, na hudhurungi 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 a - * sawa na kuipunguza. Hatua yetu 10 ya kufifia ingeonekana kama: * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + G + + + + + B - - - * * Nyekundu inatoka 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 ya rangi hubadilishwa kuwa maadili ya 0-255, na kuna hatua 1020 (255 * 4). * * Kugundua hatua kubwa inapaswa kuwa kati ya moja juu- au * chini ya alama ya moja ya maadili ya LED, tunaita calculateStep (), * ambayo inahesabu 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 mmoja amehesabiwa 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

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

utupu wa msalaba (rangi ya ndani [3]) {

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

hatua yaR = hesabuHatua (prevR, R);

hatua stepG = hesabuStep (prevG, G); hatua stepB = hesabuStep (prevB, B);

kwa (int i = 0; i <= 1020; i ++) {redVal = calculateVal (stepR, redVal, i); grnVal = hesabuVal (stepG, grnVal, i); bluVal = mahesabuVal (stepB, bluVal, i);

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

AnalogWrite (grnPin, grnVal); AnalogWrite (BluPin, bluVal);

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 / RGB: #"); Printa ya serial (i); Printa ya serial ("|"); Printa ya serial (RedVal); Serial.print ("/"); Serial.print (grnVal); Serial.print ("/"); Serial.println (bluVal); } DEBUG + = 1; }} // Sasisha maadili ya sasa ya kitanzi kinachofuata prevR = redVal; prevG = grnVal; prevB = bluuVal; kuchelewesha (kushikilia); // Pumzika kwa sekunde chache za 'subiri' kabla ya kuanza tena kitanzi}

Hatua ya 2: Kufunga Mti

Kufunga Mti
Kufunga Mti
Kufunga Mti
Kufunga Mti
Kufunga Mti
Kufunga Mti
Kufunga Mti
Kufunga Mti

Nilitumia vipande visivyo na maji kwani hizi zitakuwa nje. Walijifunga peke yao lakini nilifuatilia haraka vifungo vya waya kuhakikisha wanakaa. Rahisi na rahisi hack. Uwezo wa nguvu ya kulisha wa ukanda ulifanya iwe rahisi kulisha usambazaji wa umeme chini na kupata nguvu kutoka juu kwenda kwa nyota.

Hatua ya 3: Usisahau Nyota iliyo Juu

Usisahau Star juu
Usisahau Star juu
Usisahau Star juu
Usisahau Star juu
Usisahau Star juu
Usisahau Star juu
Usisahau Star juu
Usisahau Star juu

Kwa nyota nilitumia jozi ya chips 10W kupata umakini. Niliwauza kwa karatasi ya shaba kama heatsink. Ningeweza kutumia ukanda zaidi kwani kulikuwa na kushoto kidogo.

Hatua ya 4: Kuijaribu

Image
Image

Jaribu la kwanza lilikuwa na njia ya kasi haraka sana….

Mara baada ya kuituliza ilionekana nzuri sana.

Ilipendekeza: