Съдържание:

Трептящ мост на свещ: 6 стъпки (със снимки)
Трептящ мост на свещ: 6 стъпки (със снимки)

Видео: Трептящ мост на свещ: 6 стъпки (със снимки)

Видео: Трептящ мост на свещ: 6 стъпки (със снимки)
Видео: Свършвам бързо! Как да правя секс по-дълго? 2024, Ноември
Anonim
Image
Image

Тази инструкция показва как да превърнете обикновен свещен мост със статична светлина в приятна светеща светлина с настроение с безкрайни вариации на трептящи светлини, мигащи, вълнови модели и какво ли още не. Купих от After Christmas Sales мост за свещи за 8 €. Той има 7 LED светлини и около 33 V 3 W адаптер за стена. Той блести с ярък и топъл бял цвят и ще бъде идеален за този проект, където ще сложа Arduino, за да накарам свещите да трепнат. Най -популярният Arduino е Arduino Uno. В този проект ще използвам Arduino Mega 2560.

Ще се откажа от 30 V захранването и ще използвам като захранване обикновена 5 V захранваща банка, предназначена за мобилни телефони.

Хубавото, което трябва да знаете за банките за захранване, е, че те имат вътрешна верига, която трансформира батерията от 3,7 V в 5 V. Тъй като процесът използва известна мощност, банката за захранване се изключва, ако не се използва. Ако банката за захранване се използва за базирани на Arduino приспособления „направи си сам“, притурката не може просто да се постави в режим за пестене на енергия и да започне отново след няколко минути. Това ще изключи банката за захранване. Този трептящ мост на свещта няма режим на заспиване. Той използва непрекъснато захранване, поддържайки банката за захранване активна, докато захранващият кабел не бъде изтеглен.

Видеото показва свещния мост в статичен режим и в пълно трептене. Пълното трептене наистина е доста досадно за очите, докато видеото го изглажда малко. След като хардуерът е фиксиран, включително рязане на кабели, запояване на нови връзки и добавяне на някои компоненти, всички желани модели на светлина се създават чрез писане на код за Arduino. Моделите, които включвам в тази инструкция, са:

  • 4 различни мигащи светлини, имитиращи истински свещи
  • 2 различни мигания (произволно мигане на иначе статични светлини)
  • 2 различни модела на вълните
  • проста статична светлина

Превключването на модели става чрез бутон, единственият елемент на потребителския интерфейс. Колкото повече шаблони искате и колкото повече настройка искате, толкова повече бутони и копчета трябва да добавите. Но красотата се крие в простотата. Намалете броя на избираемите модели. Изберете най -добрите настройки по време на кодиране и тестване, а не чрез добавяне на много контроли към хардуера.

Консумативи

  • 1 LED мост за свещи със 7 крушки. Уверете се, че това е DC модел с ниско напрежение, или с батерии, или със стенен източник на захранване, който трансформира смъртоносните 110 - 240 V AC към около 6 - 30 V DC. Така че е напълно безопасно да хакнете свещния мост.
  • 1 Arduino Mega (всеки друг микроконтролер ще го направи, просто се уверете, че можете да го програмирате)
  • 1 прототип на макет
  • джъмперни проводници и други проводници
  • инструмент за запояване
  • мултиметър
  • 7 резистора, 120 Ω
  • 1 бутон (вместо това ще покажа как можете да използвате вградения бутон на Arduino)
  • IC транзистор на Дарлингтън за 7 транзистора, ULN2803AP ще направи (Ако използвате Arduino Uno или Meaga, нямате нужда от това)
  • 5 V захранваща банка, предназначена за мобилни телефони

Стъпка 1: Прегледайте какво имате

Разгледайте какво имате
Разгледайте какво имате
Разгледайте какво имате
Разгледайте какво имате

Разберете на какво напрежение работи всеки светодиод и през колко ток преминава.

  1. Отворете дъното на свещния мост. Намерете двата проводника, които отиват към една свещ.
  2. Отстранете малко изолация от кабелите, разкривайки медните проводници, без да режете медните проводници.
  3. Включете светлините (отпуснете се, това са само няколко волта) и измерете напрежението върху разкритите медни проводници.
  4. Нарежете кабела в една от измервателните точки (в този момент светлините изгасват, разбира се), отстранете малко изолация (3 - 4 мм) в двата края. Измерете преминаващия ток. Това, което правите, е да свържете отново прекъснатия кабел с вашия мултицет, оставяйки целия ток да тече през вашия мултицет, който сега ви казва количеството ток.

Моите показания

Напрежението върху една свещ (стъпка 3): 3.1 V

Обърнете внимание, че източникът на захранване към свещния мост е 33 V. Така че седем пъти 3.1 V е само 21.7 V. На някои от свещите трябва да има допълнителен резистор. Ако бях измерил това напрежение на свещта, сигурно трябваше да е около 11 V.

Токът, който тече, когато свещта свети (стъпка 4): 19 mA

Ще захранвам всичко с 5 V 2 A батерия. За свещите трябва да сваля напрежението от 5 V на 3 V. Имам нужда от резистор, който ще намали напрежението 2 V при ток от 19 mA.

2 V / 0,019 A = 105 Ω

Разсейващата се мощност е:

2 V * 19 mA = 38 mW

Това е нищожно. Много повече може да взриви самия резистор. И все пак без 105 Ω резистор може да издуха светодиода. Имам 100 Ω и 120 Ω резистори. Отивам със 120 Ω. Тя дава повече защита.

Тестването на всичките 7 свещи с 3 V даде ярка светлина, с изключение на една свещ, която имаше само много слаба светлина, през която преминаха само 0,8 mA. Това беше моята свещ с допълнителния резистор. Оказа се, че другите свещи изобщо нямат резистори. LED светлините, използвани в полилея, са просто предназначени за 3 V! Свещта с допълнителния резистор трябваше да бъде отворена с леко насилие, но нищо не се счупи. Резисторът беше намерен точно под малкия светодиод вътре в пластмасовата крушка за свещ. Трябваше да го изваря и да препая кабелите. Беше малко объркано, тъй като поялникът затопли малко горещо лепило, което беше използвано за сглобяването.

Така че сега знам, че какъвто и източник на захранване да използвам, каквото и да е напрежението, трябва да намаля напрежението до 3 V, което позволява преминаването през 19 mA.

Ако бях по -запознат с LED технологията, щях да разпозная вида на използвания светодиод и щях да знам, че се нуждае от 3 V.

Стъпка 2: Малко запояване

Малко запояване
Малко запояване
Малко запояване
Малко запояване

В тази стъпка свързвам всички положителни (+) проводници от 5 -те свещи към един проводник. След това добавям отделен отрицателен (-) проводник за всяка свещ. LED светлината светва само когато '+' и '-' вървят надясно. Тъй като имате само два идентични края на кабела от всяка свещ, трябва да тествате кой от тях е „+“и кой е „-“. За това имате нужда от 3 V източник на захранване. Имах малък пакет батерии, включващ две батерии AAA. 3 V монетна батерия работи чудесно и за тестване.

Свещният мост се нуждае от 8 кабела, за да мине между Arduino и моста. Ако намерите кабел с 8 изолирани проводника, това би било чудесно. Един проводник трябва да държи 120 mA, останалите носят само 20 mA най -много. Избрах да използвам 4 двойни жични кабела, които случайно имах.

Първото изображение показва как подготвих един общ проводник за свързване на всички „+“проводници от свещите. Отстранете изолацията на общия проводник за всяка свещ. Добавете парче свиваща се изолационна тръба (жълтата лента на изображението) за всяка фуга и я поставете на дясното място на общия кабел. Запоявайте проводника „+“от всяка свещ към ставата, покрийте ставата с свиващата тръба и я свийте. Разбира се, простата лепяща лента също е добре, всичко ще бъде покрито в крайна сметка.

Второто изображение показва проводниците „-“, от които всяка свещ се нуждае. Общият проводник „+“отива директно към 5 V щифта на Arduino (или може би през макета). Всеки проводник „-“отива към своя щифт на транзисторната IC (отново, вероятно през макетната платка).

Arduino често се нарича прототипна дъска. Планът също е нещо, което използвате в прототипи. Това, което описвам в тази инструкция, е прототип. Няма да го превърна в луксозен лъскав продукт с всичко скрито в хубави пластмасови кутии. Преминаването от прототипа към следващото ниво би означавало да се замени макетната платка с печатна платка и споени компоненти и дори да се замени Arduino само с обикновен микроконтролерен чип (всъщност такъв чип е мозъкът на Arduino). И всичко да се побере в пластмасова кутия или вътре в хакнат мост за свещи.

Стъпка 3: Връзките

Връзките
Връзките
Връзките
Връзките
Връзките
Връзките
Връзките
Връзките

За Arduinos, взето от тази страница:

  • Общ максимален ток на вход/изход: 40mA
  • Сума от токове от всички входно/изходни щифтове комбинирани: 200mA

Моите свещи извличат по 19 mA всяка, когато се захранват от 3 V. Има седем от тях, което прави 133 mA. Така че можех да ги захранвам директно от изходните щифтове. Имам обаче резервни интегрални схеми на Дарлингтън. Та си помислих, защо не. Моята схема прави нещата по правилния начин: пиновете за данни са само за сигнали, а не за захранване. Вместо това използвам 5 V щифт на Arduino за захранване на LED светлините. Когато тестването работи, лаптопът ми е свързан към Arduino. Всичко се захранва от USB лаптопа, който дава 5 V. Arduino Mega има собствен предпазител, който духа при 500 mA за защита на компютъра. Моите свещи извличат най -много 133 mA. Arduino вероятно много по -малко. Всичко работи добре, когато се захранва от лаптопа, така че използването на 5 V батерия, свързана към USB порта на Arduino, е добре.

Пиновете за данни D3 - D9 отиват към IC ULN2803APGCN. Светодиодите работят на 3 V. Всяка крушка е свързана към 5 V източник и допълнително към 120 Ω резистор. Освен това към един канал на ИС, който накрая свързва веригата към земята чрез транзистор на Дарлингтън в ИС.

Към веригата се добавя бутон, който позволява някои действия на потребителя. Следователно мостът със свещи може да има няколко програми, избираеми от потребителя.

Бутонът във веригата е свързан към RESET и GND. Точно това прави вграденият бутон за нулиране. Тъй като не капсулирам всичко в пластмасов калъф, използвам бутона за нулиране на Arduino за управление на програмата. Добавянето на бутон според изображението ще работи точно като бутона за нулиране на дъската. Програмата работи, като си спомня каква лека програма е била използвана последния път, когато програмата се е изпълнявала. По този начин всяко нулиране ще премине към следващата лека програма.

Снимките показват как новите кабели излизат от моста, как сложих транзисторната интегрална схема и резисторите върху макета и как джъмперните проводници се свързват с Arduino Mega. Нарязах 4 проводника от мъжки и мъжки джъмпер на 8 полупроводника, които запоявах към 8-те кабела, излизащи от моста на свещта. По този начин мога просто да залепя кабелите в макета.

Алтернатива без транзистори

В предишната стъпка подготвих общ „+“проводник за свещите и отделни „-“проводници, които преминават през транзисторната IC към земята. Когато един извод за данни се покачи високо, съответният проводник „-“се заземява през транзистора си и светодиодите светват.

Свързването на проводниците „-“директно към щифтовете за данни на Arduino също би работило, но винаги имайте предвид колко ток могат да издържат щифтовете за данни! Този подход ще се нуждае от промяна в моята програма. Ще са необходими щифтове за данни, за да се понижат, за да се включат свещите. За да използвате програмата ми такава, каквато е, трябва да превключите „+“и „-“в свещите. Имайте общ проводник „-“за свещите, който отива до GND на Arduino. А отделните проводници минават между проводника „+“на свещта и щифт за данни на Arduino.

Стъпка 4: Светлинните програми

Моята програма, която представям в следващата стъпка, преминава през 9 леки програми. Натискането на бутона ще затъмни светлините за секунда, след което стартира следната програма за осветление. Програмите са както следва:

  1. Силно трептене. Свещите трепват произволно. Това изглежда много досадно, когато ги гледате отблизо, но може да изглежда добре от разстояние и може би зад мразовит тавански прозорец. Въпреки това, вашият съсед може да се обади на пожарната.
  2. Меко трептене. Изглежда много добре. Като истински свещи в стая без течение.
  3. Променливо трептене. Свещите се редуват плавно между силно и меко трептене на около 30 s интервали.
  4. Променливо трептене. Като #3, но всяка свещ варира в свое собствено темпо между 30 s и 60 s.
  5. Бързо блестене. Свещите блестят на статично затъмнено ниво и произволно блещукат. Средно всяка секунда има едно блещукане.
  6. Бавно блестене. Като #5, но с много по -бавни темпове.
  7. Бърза вълна от средната горна свещ към долната.
  8. Бавна вълна от средната горна свещ до долната.
  9. Статична ярка светлина. Трябваше да включа това, не исках да се отърва от първоначалната функция.

Стъпка 5: Кодът

/*

FLICKERING CANDLE BRIDGE */ // Обявяване на променливата на режима за задържане на състоянието // чрез операция за нулиране _attribute _ ((раздел (". Noinit"))) беззначен int режим; // Когато програмата стартира след нулиране, това парче // памет не се инициализира, но задържа стойността //, която е имала преди нулирането. При първото стартиране на програмата // тя съдържа случайна стойност. / * * Класът на свещите съдържа всичко необходимо * за изчисляване на нивото на светлина за * трептяща свещ. */ класна свещ {private: long maxtime; дълъг мента; дълъг макслит; дълъг минилит; дълъг подъл; дълъг origmaxtime; дълъг оригинал; дълъг origmaxlite; дълъг origminlite; дълъг ермесманлит; дълъг делтамаксим; дълго делтамин време; дълъг делтамаксит; дълъг делтаминлит; дълъг делтамеанлит; дълъг lforate; дълго изравняване; дълъг старт; дълга цел; поплавъчен фактор; дълго целево време; дълъг старт; дълъг делтатайм; void newtarget (void); дълга едноцелева (невалидна); публично: свещ (дълга рогозка, дълга мита, дълга мал, дълга мил, дълга мел, дълга ео); дълго ниво сега (празнота); празни initlfo (дълъг делтамат, дълъг делтамит, дълъг делтамал, дълъг делтамил, дълъг делтамеан, дълъг процент); void setlfo (празнота); }; свещ:: свещ (дълъг мат, дълъг мит, дълъг мал, дълъг мили, дълъг мел, дълъг ео): maxtime (мат), мента (mit), maxlite (mal), minlite (mil), meanlite (mel), evenout (eo), origmaxtime (мат), origmintime (mit), origmaxlite (mal), origminlite (mil), origmeanlite (мел) {target = meanlite; newtarget (); } / * * levelnow () връща нивото на светлина, което свещта трябва да има в момента. * Функцията се грижи за определяне на ново произволно ниво на светлина и * времето, необходимо за достигане на това ниво. Промяната не е линейна, * а следва сигмоидна крива. Когато не е време за определяне на ново * ниво, функцията просто връща нивото на осветеност. */ дълга свещ:: levelnow (void) {дълга помощ, сега; поплавък t1, t2; сега = millis (); if (сега> = targettime) {help = target; newtarget (); връщане на помощ; } else {// help = target * (millis () - starttime) / deltatime + start * (targettime - millis ()) / deltatime; t1 = float (targettime - now) / deltatime; t2 = 1. - t1; // Това е помощта за изчисление на сигмоида = t1*t1*t1*старт + t1*t1*t2*начало*3 + t1*t2*t2*цел*3 + t2*t2*t2*цел; връщане на помощ; }} void candle:: newtarget (void) {дълга сума; сума = 0; for (long i = 0; i <evenout; i ++) sum+= onetarget (); старт = цел; прицел = сума / изравняване; начален час = милис (); targettime = starttime + random (minintime, maxtime); deltatime = targettime - начален час; } дълга свещ:: onetarget (void) {if (random (0, 10) lastcheck + 100) {lastcheck = now; / * * Алгоритъмът за мигане "след скорост милисекунди": * Започнете проверка след скорост / 2 милисекунди * По време на период на скорост / 2 милисекунди, направете * шанса за блещукане да бъде 50 %. * Ако скоростта е 10000 ms, по време на 5000 ms монетата се * преобръща 50 пъти. * 1/50 = 0.02 * Ако случайно (10000) начално време + скорост / 2) {if (произволно (честотно) целево време) връща нисък лайт; return (start - lowlite) * (targettime - now) / (targettime - starttime) + lowlite; } void twinkler:: twink (void) {starttime = millis (); целево време = произволно (минното време, макстайм) + начално време; старт = случаен (минилит, макслит); } void setup () {int led; // Прочетете променливата за магически режим, която трябва да каже // коя програма за светлина е била изпълнена последния път, увеличете я // и нулирайте при препълване. режим ++; режим %= 9; // Това се грижи за каквато и да е стойност // беше първият път, когато Arduino // изпълняваше тази програма. / * * ВАЖНА ЗАБЕЛЕЖКА * ============== * * Основното нещо, което прави тази програма, е извеждането на PWM * сигнали към LED светлини. Тук поставям изводите от 3 до 9 на * изходен режим. На Arduino Mega2560 тези изводи извеждат * добре ШИМ сигнали. Ако имате друг Arduino, проверете * кои щифтове (и колко) можете да използвате. Винаги можете да * пренапишете кода, за да използвате софтуерна PWM, ако вашият Arduino * не може да осигури достатъчно хардуерни PWM щифтове. * */ pinMode (3, OUTPUT); pinMode (4, OUTPUT); pinMode (5, OUTPUT); pinMode (6, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (9, OUTPUT); pinMode (LED_BUILTIN, OUTPUT); analogWrite (LED_BUILTIN, 0); // Просто изключете досадния червен светодиод на свещта Arduino * *[7]; // подгответе се да използвате трептящите свещи, независимо дали ги използвате или не twinkler *twink [7]; // подготвяме се да използваме светещите свещи … if (mode == 8) {for (int i = 3; i <10; i ++) analogWrite (i, 255); while (вярно); // Всеки път, когато тази програма работи, тя влиза // в този вид безкраен цикъл, докато не се натисне бутона за нулиране //. } if (режим <2) // трептене {long maxtime_; дълга мента_; дълъг maxlite_; дълъг minlite_; дълъг подъл_; дълго равно_; if (mode == 0) {maxtime_ = 250; мента_ = 50; maxlite_ = 256; minlite_ = 0; meanlite_ = 128; четен_ = 1; } if (mode == 1) {maxtime_ = 400; мента_ = 150; maxlite_ = 256; minlite_ = 100; meanlite_ = 200; четен_ = 1; } for (int i = 0; i <7; i ++) {can = нова свещ (maxtime_, mintime_, maxlite_, minlite_, meanlite_, even_); } while (true) // Безкрайният цикъл за трептене на свещи {for (int i = 0; i levelnow ()); }} if (режим <4) // lfo добавен към трептенето {if (mode == 2) // същото lfo (30 s) за всички свещи {for (int i = 0; i initlfo (75, 50, 0, 50, 36, 30000);}} if (mode == 3) // вариращ lfo: s за свещите {for (int i = 0; i initlfo (75, 50, 0, 50, 36, 20000); can [1]-> initlfo (75, 50, 0, 50, 36, 25000); can [2]-> initlfo (75, 50, 0, 50, 36, 30000); can [3]-> initlfo (75, 50, 0, 50, 36, 35000); може [4]-> initlfo (75, 40, 0, 50, 36, 40000); може [5]-> initlfo (75, 30, 0, 50, 26, 45000); can [6]-> initlfo (75, 20, 0, 50, 16, 50000); can [7]-> initlfo (75, 10, 0, 50, 6, 55000);} while (true) // Безкрайният цикъл за трептене на свещи с lfo {long lastclock = 0; for (int i = 0; i levelnow ()); if (millis ()> lastclock + 4000) {lastclock = millis (); for (int i = 0; i setlfo ();}}} if (mode <6) // мигащи свещи {int speedo; if (mode == 4) speedo = 6000; else speedo = 22000; for (int i = 0; i <7; i ++) twink = нов twinkler (300, 295, 255, 250, speedo); while (true) {for (int i = 0; i levelnow ()); }} // Вълни. // Този раздел започва с къдрави скоби, само // за да се гарантира, че няма конфликтни имена на променливи. // Няма друга нужда от скоби, няма нужда от проверка // стойността на режима.{int lolite = 2; int hilite = 255; int означава; int ampl; поплавък fasedelta = 2,5; поплавъчна фаза; int elong; поплавъчен фактор; дълъг период; средно = (лолит + хилит) / 2; ampl = hilite - средна стойност; if (режим == 6) период = 1500; else период = 3500; фактор = 6.28318530718 / период; while (true) {fase = phactor * (millis () % период); elong = средно + ampl * sin (фаза); analogWrite (7, elong); analogWrite (9, elong); фаза = фактор * ((милис () + период / 4) % период); elong = средно + ampl * sin (фаза); analogWrite (3, elong); analogWrite (8, elong); фаза = фактор * ((милис () + период / 2) % период); elong = средно + ampl * sin (фаза); analogWrite (4, elong); analogWrite (5, elong); фаза = фактор * ((милис () + 3 * период / 4) % период); elong = средно + ampl * sin (фаза); analogWrite (6, elong); } // Докато свързвах кабелите на свещите към Arduino, // ги смесих и никога не ги подредих. // Редът е важен за създаване на вълнови модели, // затова просто написах тази малка таблица за мен: // // Свещ# в моста: 2 3 5 4 7 6 1 // ПИН за данни на Arduino: 3 4 5 6 7 8 9}} void loop () {// Тъй като всяка програма за осветление е своя собствена безкрайна линия, // написах всички цикли в началото () // и не оставих нищо за тази секция loop (). }

Стъпка 6: Всичко за PWM

Светодиодите светят ярко, когато се захранват с 3 V. Използвайки само 1,5 V, те изобщо не светят. LED светлините не избледняват добре с избледняващото напрежение, както правят лампите с нажежаема жичка. Вместо това те трябва да бъдат включени с пълно напрежение, след което да бъдат изключени. Когато това се случи 50 пъти в секунда, те блестят добре с 50 % яркост, повече или по -малко. Ако им се позволи да бъдат включени само 5 ms и изключени 15 ms, те могат да блестят с 25 % яркост. Тази техника прави LED светлината затъмнена. Тази техника се нарича широчинно -импулсна модулация или ШИМ. Микроконтролер като Arduino обикновено има пинове за данни, които могат да изпращат сигнали за включване/изключване. Някои от пиновете за данни имат вградени възможности за PWM. Но ако няма достатъчно пинове с вградена PWM, обикновено е възможно да се използват специални библиотеки за програмиране за създаване на "софтуерни PWM пинове".

В моя проект използвах Arduino Mega2560, който има хардуерна ШИМ на пинове 3 - 9. Ако използвате Arduino UNO, имате само шест PWM пина. В такъв случай, ако имате нужда от 7 -ма (или дори повече) свещ, мога да препоръчам софтуерната PWM библиотека на Brett Hagman, която можете да намерите тук.

Препоръчано: