Мазмұны:
- 1 -қадам: Контроллер
- 2 -қадам: Ағашты орау
- 3 -қадам: Жоғарыдағы жұлдызды ұмытпаңыз
- 4 -қадам: Оны сынап көріңіз
Бейне: Жарықдиодты спираль ағашы: 4 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Мен жарықдиодты жолақтардың барлық түрін жақсы көремін. Мен олармен әдемі кемпірқосақ жарығын жасадым. Тіпті адрестенбейтіндер де пайдалы. Мен қолшатырды ашық қабырғаға бекітіп, нарықтық қолшатырды жарқыраттым, сондықтан менің спиральды ағаш ұшып кеткенде, оның айналасына ұзындықтағы жолақты орауды шештім.
1 -қадам: Контроллер
Мен адрестік емес RGB шамдарын қолдануды шештім. Бұл бағдарламаланған әсерге ие бола алатынымды білдіреді, бірақ барлық жарық диодтары бір мезгілде түсін өзгертеді. Бұл сонымен қатар контроллер қажет болады дегенді білдіреді. Мен arduino uno -ды қолдана аламын және RGB қалқанының көмегімен алғашқы сынақтарды жасай аламын, бірақ Atmega328 чипі бар арнайы тақтаны қолдандым. Мақсатты бағдарламашыны ауыстырып, чипті тікелей бағдарламалау керек болды.
Менде басқа шамдар жобаларынан қалған көптеген тақталар болды. Мен оның қолшатырында жасағандай, алдын ала бағдарламаланған арзан кірістірілген контроллерді қолданыңыз.
Мен ағаштың негізі ретінде кроссфейдтің баяу демонстрациясын қолдандым.
/** Қызыл, жасыл және көк түсті 3 жарықдиодты сөндіру коды (RGB) * Өшіру үшін сізге екі нәрсені жасау қажет: * 1. Көрсетілетін түстерді сипаттаңыз * 2. Қажетті ретті көрсетіңіз. олар түссізденеді * * ТҮС СИПАТТАУ: * Түс-бұл үш пайыздық массив, 0-100, * қызыл, жасыл және көк жарық диодтарын басқарады * * Қызыл-қызыл жарық диодты толық, көк және жасыл өшіру * int қызыл = {100, 0, 0} * Күңгірт ақ - бұл барлық үш жарықдиодты 30% * int dimWhite = {30, 30, 30} * т.б. Тапсырыс: * Бағдарламаның негізгі бөлігінде түстердің пайда болуын қалайтын * ретін тізімдеу керек, мысалы: * crossFade (қызыл); * crossFade (жасыл); * crossFade (көк); * * Бұл түстер сол тәртіпте пайда болады, бір түстен өшіп, келесіге ауысады * * Сонымен қатар, сіз реттеуге болатын 5 қосымша параметр бар: * 1. Бастапқы түс қара болып орнатылады (сондықтан бірінші түс өшеді) in), бірақ * бастапқы түсті кез келген басқа түске орнатуға болады * 2. Ішкі цикл 1020 интеракция үшін жұмыс істейді; 'күту' айнымалысы * бір кроссфейдтің шамамен ұзақтығын орнатады. Теориялық тұрғыда * 10 мс -тің «күтуі» ~ 10 секундқа созылады. * Тәжірибеде, код басқа функцияларды * 11 секундқа дейін баяулатады. YMMV. * 3. Егер 'қайталау' 0 мәніне қойылса, бағдарлама шексіз циклде болады. * егер ол санға орнатылса, ол сол уақытты айналдырады, * содан кейін тізбектегі соңғы түске тоқтайды. («Қайтаруды» 1 -ге қойыңыз, * және соңғы түс қара болуын қаласаңыз, қара түске айналдырыңыз.) * 4. Қосымша «ұстау» айнымалысы бар. түс аяқталды, * бірақ келесі түс басталмай тұрып. * 5. Егер отладка шығарылымын * сериялық мониторға жіберуді қаласаңыз, ЖЕҢІЛТУ жалаушасын 1 -ге орнатыңыз. * * Бағдарламаның ішкі элементтері күрделі емес, бірақ олар аздап шатастырылған - ішкі жұмыс негізгі циклдің астында түсіндірілген *. * * 2007 ж. Сәуір, Клей Ширки *
/ Шығу
int grnPin = 9; // Жасыл жарық диодты, сандық түйреуішке қосылған 10 int redPin = 10; // Қызыл светодиод, цифрлық түйреуішке қосылған 9 int bluPin = 11; // Сандық түйреуішке қосылған көк жарықдиодты 11
// Түсті массивтер
int black [3] = {0, 0, 0}; int white [3] = {100, 100, 100}; int red [3] = {100, 0, 0}; int green [3] = {0, 100, 0}; көк көк [3] = {0, 0, 100}; int сары [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // т.
// Бастапқы түсті орнатыңыз
int redVal = қара [0]; int grnVal = қара [1]; int bluVal = қара [2];
int wait = 3; // 10 мс ішкі CrossFade кідірісі; баяу түсуі үшін жоғарылайды
int hold = 0; // Түс аяқталғанда, келесі crossFade int DEBUG = 0 алдында қосымша ұстау; // ҚАТЕСТІРУ есептегіші; егер 1 -ге орнатылса, мәндерді serial loop арқылы кері жазады int loopCount = 60; // DEBUG есеп беруі қаншалықты жиі болуы керек? int қайталау = 0; // Тоқтамас бұрын неше рет айналу керек? (Тоқтаусыз 0) int j = 0; // Қайталауға арналған цикл есептегіші
// Түс айнымалыларын инициализациялау
int prevR = redVal; int prevG = grnVal; int prevB = bluVal;
// Жарық диодты шығуларды орнатыңыз
void setup () {pinMode (redPin, OUTPUT); // түйреуіштерді pinMode (grnPin, OUTPUT) шығысы ретінде орнатады; pinMode (bluPin, OUTPUT);
if (DEBUG) {// Егер біз отладтау үшін мәндерді көргіміз келсе …
Serial.begin (9600); // … сериялық шығуды орнату}}
// Негізгі бағдарлама: кроссфейдтердің ретін тізімдеу
void loop () {crossFade (қызыл); crossFade (жасыл); crossFade (көк); crossFade (сары);
if (қайталау) {// Біз соңғы рет цикл жасаймыз ба?
j += 1; if (j> = қайталау) {// Біз әлі бармыз ба? шығу (j); // Олай болса, тоқтаңыз. }}}
/* БҰЛ СҰРАҚТЫҢ АСТЫНДА - МАТЕМА - МҰНЫ НЕГІЗДЕР ҮШІН ӨЗГЕРТУ КЕРЕК.
* * Бағдарлама келесідей жұмыс істейді: * Қызыл жарық диодты 0-10-дан, * жасылдан 0-5-ке дейін, көк түсті 10-нан 7-ге дейін * он қадаммен жылжытатын кроссфэйдті елестетіп көріңіз. * Біз 10 қадамды санап, біркелкі қадаммен түс мәндерін ұлғайтуды немесе * азайтуды қалаймыз. * Елестетіп көріңіз, a + мәнді 1 -ге көтеруді білдіреді, ал а - * оны төмендетуге тең. Біздің 10 қадамдық өшуіміз келесідей болады: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + * B - - - * * Қызыл түс жоғарылайды Он қадамда 0-ден 10-ға дейін, жасыл 5-тен * 0-5-ге дейін, ал көк үш қадамнан 10-нан 7-ге дейін түседі. * * Нақты бағдарламада түс пайыздары * 0-255 мәніне түрлендіріледі және 1020 қадам бар (255 * 4). * * Жарық диодты шамалардың біреуінің жоғары немесе * төмен белгісінің арасында қаншалықты үлкен қадам болу керектігін анықтау үшін біз calcStep () деп атаймыз, ол бастапқы және соңғы мәндер арасындағы абсолютті алшақтықты есептейді *, содан кейін мәнді түзету арасындағы қадамның * өлшемін анықтау үшін сол аралықты 1020 -ға бөледі. */
int calcStep (int prevValue, int endValue) {
int step = endValue - prevValue; // Жалпы айырмашылық неде? if (қадам) {// Егер ол нөлге тең болмаса, қадам = 1020/қадам; // 1020 -ға бөлу} қайтару қадамы; }
/* Келесі функция - CalcVal. Цикл мәні болғанда, мен, * * түстердің біріне сәйкес келетін қадам өлшеміне жетеді, ол сол түстің мәнін 1 -ге арттырады немесе азайтады. * (R, G және B әрқайсысы бөлек есептеледі.) */
int calcVal (int қадамы, int val, int i) {
if ((қадам) && i % step == 0) {// Егер қадам нөлге тең болмаса және оның мәнін өзгерту уақыты, if (қадам> 0) {// қадам оң болса, мәнді көбейтіңіз… val += 1; } if if (255 -қадам) {val = 255; } else if (val <0) {val = 0; } қайтару құны; }
/* crossFade () пайыздық түстерді a -ға түрлендіреді
* 0-255 диапазоны, содан кейін 1020 рет айналады, * мәннің әр уақытта жаңартылып тұруы керектігін тексереді, содан кейін түс мәндерін * дұрыс түйреуіштерге жазады. */
жарамсыз crossFade (int түсі [3]) {
// 0-255 түрлендіру int R = (түс [0] * 255) / 100; int G = (түс [1] * 255) / 100; int B = (түс [2] * 255) / 100;
int stepR = есептеу қадамы (prevR, R);
int stepG = есептеу қадамы (prevG, G); int stepB = есептеу қадамы (prevB, B);
for (int i = 0; i <= 1020; i ++) {redVal = calcalVal (stepR, redVal, i); grnVal = calcalVal (stepG, grnVal, i); bluVal = calcVal (stepB, bluVal, i);
analogWrite (redPin, redVal); // Жарық диодты түйреуіштерге ағымдағы мәндерді жазыңыз
analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal);
кешіктіру (күту); // Циклды қайта бастамас бұрын миллисекундқа «күту» үшін кідірту
if (DEBUG) {// Егер біз сериялық шығаруды қаласақ, оны
if (i == 0 немесе i % loopCount == 0) {// басы, және әрбір loopCount реті Serial.print («Loop/RGB: #»); Serial.print (i); Serial.print («|»); Serial.print (redVal); Serial.print (« /»); Serial.print (grnVal); Serial.print (« /»); Serial.println (bluVal); } ҚАТЕСТІРУ += 1; }} // Келесі цикл үшін ағымдағы мәндерді жаңарту prevR = redVal; prevG = grnVal; prevB = bluVal; кешіктіру (ұстау); // Циклды жалғастырмас бұрын қосымша «күту» миллисекундына кідірту}
2 -қадам: Ағашты орау
Мен су өткізбейтін жолақтарды қолдандым, өйткені олар ашық ауада болады. Олар өз бетінше тұрып қалды, бірақ мен олардың орнында екеніне көз жеткізу үшін сымды байланыстырдым. Қарапайым және жеңіл бұзу. Жолақтың қуат беру қабілеті қуат көзін төменгі жағына беруді және жоғарыдан жұлдызға дейін шығуды жеңілдетті.
3 -қадам: Жоғарыдағы жұлдызды ұмытпаңыз
Жұлдыз үшін мен назар аудару үшін 10 Вт жұпты қолдандым. Мен оларды жылытқыш ретінде мыс табаққа дәнекерледім. Мен аздап қалғандықтан, көбірек жолақты қолдануға болар еді.
4 -қадам: Оны сынап көріңіз
Бірінші әрекетте жылдамдық өте жоғары болды ….
Мен оны тыныштандырған кезде, бұл өте жақсы көрінді.
Ұсынылған:
Креативті ертегі ағашы: 23 қадам (суреттермен)
Шығармашылық ауыспалы ертегі ағашы: Мен сізге осы жарқыраған ертегі ағашын қалай жасау керектігін көрсетемін. Коммутатор - бұл ертегі, ал егер ол орнында болса, шамдар жанады, егер ол қозғалса - қайтадан өшеді
Жарықдиодты-жарықдиодты-жарықдиодты: 7 қадам (суреттермен)
Жарықдиодты-жарықдиодты/жарықдиодты шамдар: мектептің ең жақсы жобасы геплоидты плексиглаздың көмегімен жүзеге асады, содан кейін ол мейрамхананың мейрамханасынан басталады. , кафе, … де о
Микроскоптарға арналған жарықдиодты жарықдиодты жарықдиодты жарықдиодты тақта!: 6 қадам (суреттермен)
Микроскоптар үшін DIY жарықдиодты жарықдиодты PCB! Мен электрониканы қолдануға арналған екінші микроскопты сатып алдым және сіз
Ағаштан жасалған жарықдиодты жарықдиодты жарықдиодты шамдар: 6 қадам (суреттермен)
Ағаштан жасалған жарықдиодты жарықдиодты жарықдиодты шамдар: Бұл идея бірнеше жерден келді. Мен қолөнер сатылымында светодиодтары бар ағаштан жасалған белгіні көрдім және бұл таңғажайып және қарапайым болып көрінді деп ойладым. Бірнеше аптадан кейін мен Джулиан Илеттің бейнелерін сақина осцилляторларынан таптым. Екеуін біріктіру
Жарықдиодты жарық ағашы: 7 қадам
Жарықдиодты жарық ағашы: Ағаштан және көптеген жарықдиодтардан жарық ағашын қалай жасауға болады, бұл табиғи материалдарды да, синтетиканы да біріктіреді. Маған ағаштағы мыс ұнайды, маған ПХД ұнамайды. Бейнеде " Жарықдиодты теру " бұрау арқылы не істеуге болатыны көрсетілген