Мазмуну:

LED спираль дарагы: 4 кадам (сүрөттөр менен)
LED спираль дарагы: 4 кадам (сүрөттөр менен)

Video: LED спираль дарагы: 4 кадам (сүрөттөр менен)

Video: LED спираль дарагы: 4 кадам (сүрөттөр менен)
Video: Устранение люфтов в узлах поворотный блок-каретка на экскаваторе погрузчике VOLVO BL71B. 4 серия 2024, Ноябрь
Anonim
LED спираль дарагы
LED спираль дарагы
LED спираль дарагы
LED спираль дарагы
LED спираль дарагы
LED спираль дарагы

Мен LED тилкелеринин бардык түрүн жакшы көрөм. Мен алар менен жакшы асан -үсөн жарыгын жасадым. Жада калса дареги жоктор да пайдалуу. Мен сырткы жаркыраган кол чатырды сырткы жарык кылып койгом, ошондуктан аларды спираль дарагым жарылып кеткенде, мен анын тегерегиндеги узун тилкени ороп алууну чечтим.

1 -кадам: Контроллер

Контроллер
Контроллер
Контроллер
Контроллер
Контроллер
Контроллер

Мен дареги жок RGB леддерди колдонууну чечтим. Бул мен программаланган эффектке ээ боло алам дегенди билдирет, бирок бир эле учурда бардык леддер түсүн өзгөртөт. Бул дагы контролер керек болот дегенди билдирет. Мен arduino uno колдонуп, RGB калканынын жардамы менен алгачкы сыноолорду жасамакмын, бирок жылаңач Atmega328 чипи бар колдонуучунун тактайы менен аяктадым. Жөн эле максаттуу программистти алмаштырып, чипти түз программалаш керек болчу.

Менде башка лампа долбоорлорунан калган көптөгөн такталар бар болчу. Мен анын кол чатырында болгондой, алдын ала программаланган арзан, арзан контроллерди колдонуңуз.

Мен дарактын негизи катары жай кроссфэйд демо колдонуп бүттүм.

/** Кайчылаш өчүп бараткан 3 LED, кызыл, жашыл жана көк код (RGB) * Өчүрүү үчүн сиз эки нерсени жасашыңыз керек: * 1. Көрсөткүңүз келген түстөрдү сүрөттөңүз * 2. Каалаган тартипти тизмектеңиз * * ТҮСТҮ сүрөттөө: * Түс-бул үч пайыздык массив, 0-100, * кызыл, жашыл жана көк LEDлерди башкаруу * * Кызыл-толугу менен кызыл, көк жана жашыл өчүрүү * int кызыл = {100, 0, 0} * Күңүрт ак - бул үч LED тең 30% * int dimWhite = {30, 30, 30} * ж.б. * * Кээ бир жалпы түстөр төмөндө келтирилген, же өзүңүз жасаңыз * * БУЙРУК: * Программанын негизги бөлүгүндө түстөрдүн пайда болушун каалаган тартипти * тизмектөө керек, мис. * crossFade (кызыл); * crossFade (жашыл); * crossFade (көк); * * Бул түстөр ошол тартипте пайда болот, бир түстөн өчүп, экинчисине өтөт * * Мындан тышкары, сиз жөнгө сала турган 5 кошумча параметр бар: * 1. Баштапкы түс кара болуп коюлган (ошондуктан биринчи түс өчөт in), бирок * сиз баштапкы түсүңүздү башка түстө койсоңуз болот * 2. Ички цикл 1020 интерация үчүн иштейт; "күтүү" өзгөрмөсү * бир кроссфейддин болжолдуу узактыгын белгилейт. Теориялык жактан алганда, * 10 мс 'күтүү' ~ 10 секундага кесилиш жасашы керек. * Практикада, башка функциялар кодду бул тактада ~ 11 секундга чейин жай аткарып жатат. YMMV. * 3. Эгерде "кайталоо" 0го коюлса, программа чексиз айланат. * эгерде ал санга коюлса, ал ошончо жолу айланат, * андан кийин катардагы акыркы түскө токтолот. ("Кайтарууну" 1ге коюңуз, * жана эгер анын аягында өчүшүн кааласаңыз, акыркы түстү кара кылыңыз.) * 4. Кошумча 'кармоо' өзгөрмөсү бар, ал * программасын 'кармоо' миллисекундуна өткөрөт түс толук, * бирок кийинки түс баштала электе. * 5. Эгерде сиз мүчүлүштүктөрдү оңдоону * сериялык мониторго жөнөтүүнү кааласаңыз, DEBUG желегин 1ге коюңуз. * * Программанын ички түзүлүштөрү татаал эмес, бирок алар * бир аз түйшүктүү - ички иштөө негизги циклден төмөндө түшүндүрүлөт *. * * Апрель 2007, Клей Ширки *

/ Output

int grnPin = 9; // Жашыл LED, санарип пинге туташкан 10 int redPin = 10; // Кызыл LED, санарип пинге туташкан 9 int bluPin = 11; // Blue LED, санарип пин 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}; int blue [3] = {0, 0, 100}; int yellow [3] = {40, 95, 0}; int dimWhite [3] = {30, 30, 30}; // жана башкалар.

// Баштапкы түсүн коюу

int redVal = black [0]; int grnVal = кара [1]; int bluVal = black [2];

int wait = 3; // 10ms ички crossFade кечигүүсү; жайыраак өчүшү үчүн көбөйтүү

int hold = 0; // Кошумча кармоо түсү бүткөндө, кийинки crossFade int DEBUG = 0 чейин; // Мүчүлүштүктөрдү эсептөөчү; эгер 1 деп коюлса, маанилерди кайра катар int int loopCount = 60 аркылуу жазат; // DEBUG канча жолу отчет бериши керек? int repeat = 0; // Токтоодон мурун канча жолу айлануу керек? (0 токтобостон) int j = 0; // Кайталоо үчүн цикл эсептегичи

// Түс өзгөрмөлөрүн баштоо

int prevR = redVal; int prevG = grnVal; int prevB = bluVal;

// LED чыгууларын орнотуңуз

жараксыз орнотуу () {pinMode (redPin, OUTPUT); // казыктарды pinMode (grnPin, OUTPUT) катары белгилейт; pinMode (bluPin, OUTPUT);

if (DEBUG) {// Эгерде биз мүчүлүштүктөрдү оңдоо үчүн баалуулуктарды көргүбүз келсе…

Serial.begin (9600); //… сериялык чыгууну орнотуу}}

// Негизги программа: кроссфейддердин тартибин тизмектөө

void loop () {crossFade (red); crossFade (жашыл); crossFade (көк); crossFade (сары);

if (кайталоо) {// Биз акыркы жолу цикл жасайбызбы?

j += 1; if (j> = repeat) {// Биз али барбызбы? чыгуу (j); // Андай болсо токтот. }}}

/* ТӨМӨНКҮ ТӨМӨНДӨГҮ МАТЕМА - МУНУ НЕГИЗДЕР ҮЧҮН ӨЗГӨРТҮҮНҮН КЕРЕКСИЗ

* * Программа мындай иштейт: * Кызыл диодду 0-10дон, * жашылдан 0-5ке чейин, көктү 10дон 7ге чейин жылдыруучу кроссфейди элестетип көрүңүз. * Биз 10 кадамды санап, түстүү баалуулуктарды бирдей баскан кадам менен көбөйтүүнү же * азайтууну каалайбыз. * Элестеткиле, а + маанини 1ге жогорулатууну билдирет, а - * аны төмөндөтүүгө барабар. Биздин 10 кадамдык өчүүбүз төмөнкүдөй көрүнөт: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + + + * G + + + + + * B - - - * * Кызыл жогору көтөрүлөт Он кадамда 0дон 10го чейин, жашыл * 0-5тен 5 кадамга чейин, көк түстөн үчтөн 10го чейин 7ден түшөт. * * Чыныгы программада түстүү пайыздар * 0-255 мааниге которулат жана 1020 кадам (255 * 4) бар. * * Светодиоддук көрсөткүчтөрдүн биринин өйдө же ылдый биринин ортосунда канчалык чоң кадам болушу керектигин билүү үчүн, башталгыч менен аяктоочу маанилердин ортосундагы абсолюттук ажырымды эсептеген calcStep () деп атайбыз. ал боштукту 1020го бөлүп, наркты тууралоонун ортосундагы кадамдын * өлчөмүн аныктайт. */

int calcStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Жалпы ажырым эмнеде? if (step) {// Эгерде анын нөл эмес болсо, step = 1020/step; // бөлүү 1020} кайтуу кадамы; }

/* Кийинки функция calcVal. Циклдин мааниси болгондо, мен, * * түстөрдүн бирине ылайыктуу кадамдын өлчөмүнө жетет, ал түстүн маанисин 1ге көбөйтөт же азайтат. * (R, G жана B ар бири өзүнчө эсептелет.) */

int calcVal (int кадам, int val, int i) {

if ((кадам) && i % step == 0) {// Эгерде кадам нөл эмес болсо жана анын маанисин өзгөртүү убактысы, эгер (кадам> 0) {// кадам оң болсо, маанини жогорулатуу… val += 1; } else if (255 -кадам) {val = 255; } else if (val <0) {val = 0; } return val; }

/* crossFade () пайыздык түстөрдү ага айлантат

* 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);

үчүн (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = calcVal (stepG, grnVal, i); bluVal = calcVal (stepB, bluVal, i);

analogWrite (redPin, redVal); // LED казыктарына учурдагы маанилерди жазыңыз

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); } DEBUG += 1; }} // Кийинки цикл үчүн учурдагы маанилерди жаңыртуу prevR = redVal; prevG = grnVal; prevB = bluVal; кармоо (кармоо); // Циклди улантуудан мурун кошумча "күтүү" миллисекундуна тыныгуу}

2 -кадам: даракты ороо

Даракты ороо
Даракты ороо
Даракты ороо
Даракты ороо
Даракты ороо
Даракты ороо
Даракты ороо
Даракты ороо

Мен суу өткөрбөй турган тилкелерди колдондум, анткени алар сыртта болот. Алар өз алдынча карманышты, бирок мен бат эле зым галстуктарды кармап, алардын ордунда калышына көзүм жетти. Жөнөкөй жана жеңил хак. Тилкенин электр өткөрүүчү жөндөмдүүлүгү электр менен камсыздоону ылдыйга жылдырууга жана чокудан жылдызга чейин чыгарууну жеңилдетти.

3 -кадам: Үстүндөгү жылдызды унутпаңыз

Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа
Жылдызды унутпа

Жылдыз үчүн мен бир аз көңүл буруу үчүн 10W чиптерин колдондум. Мен аларды муздаткыч катары жез баракка коштум. Бир аз калгандыктан көбүрөөк тилкени колдонсо болмок.

4 -кадам: Аны сынап көрүү

Image
Image

Биринчи аракет ылдамдык өтө тез болду ….

Мен аны тынчыткандан кийин абдан жакшы көрүндү.

Сунушталууда: