Съдържание:

Ръчно изработена RGB Moodlamp, задвижвана от Arduino: 7 стъпки
Ръчно изработена RGB Moodlamp, задвижвана от Arduino: 7 стъпки

Видео: Ръчно изработена RGB Moodlamp, задвижвана от Arduino: 7 стъпки

Видео: Ръчно изработена RGB Moodlamp, задвижвана от Arduino: 7 стъпки
Видео: Мощный LED прожектор на 100 Ватт - белый и цветной свет, с zigbee и защитой IP 66 2024, Юли
Anonim
Ръчно изработена RGB Moodlamp, задвижвана от Arduino
Ръчно изработена RGB Moodlamp, задвижвана от Arduino
Ръчно изработена RGB Moodlamp, задвижвана от Arduino
Ръчно изработена RGB Moodlamp, задвижвана от Arduino

Тази инструкция е разделена на 5 части:- Планиране на конструкцията (Стъпка 1)- Ръчно изработената сянка (Стъпка 2+3)- Електронната схема за задвижване на 3W светодиоди с контролера ATmega8 (Стъпка 4)- Кодът (Стъпка 5)- Как да я получите самостоятелен (мигайте зареждащия механизъм на Arduino с PonyProg и запишете скицата) (Стъпка 6) очаквайте скоро Vid: Някои впечатления

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: Мощен 3W LED

Стъпка 1: Планиране на строителството:

Планиране на строителството
Планиране на строителството
Планиране на строителството
Планиране на строителството

Обичам да правя концепция само на един лист хартия. На първия лист виждате някои ранни идеи. Избрах дизайна в долния десен ъгъл. Втората страница показва някои подробности за конструкцията. Измерванията са експериментални като всеки път, но добре за мен;-) Моите хардуерни мисли бяха:- Мога ли да се справя с материалите?- Ще светне ли светлината през сенките? - Каква пропорция трябва да има? - Колко копчета и саксии ще са ми необходими за прост интерфейс? Моите софтуерни мисли бяха: Колко различни функции трябва да има лампата? - Автоматично избледняване на RGB с променлива скорост - Ръчна настройка на цвета - Бял с регулируема яркост

Стъпка 2: Ръчно изработената сянка

Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка

Събиране на материалите: Сянката: Намерих 3 фута х 3 фута лист от 30-милиметрова пластмаса в магазина (Pic1-3). Използвайте остър нож, за да го нарежете. Замръзнах пластмасата с шкурка (Pic4-6). вземете гладък цилиндър Завинтих всичко заедно след пробиване на десните отвори (Pic7-8). Монтирайте пластмасовите сенници върху резбованите месингови опори. Изглежда добре и е доста лесен за получаване и боравене. Пробих и почуках дупките, за да съответстват на 1/8 резба с резба (Pic9-10). Междувременно направих радиатор, за да охладя 3W светодиодите и да имам здрава основа. За да не получавам твърде много нюанси от вала, изграждам малка клетка от заваръчен прът с гайка M8 отгоре (Pic12). Малките винтове и гайки бяха малко сложни, но 30 минути по -късно го направих.

Стъпка 3: Ръчно изработената сянка

Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка
Ръчно изработената сянка

Основата: Дисковете бяха врязани в струга, за да станат гладки и кръгли. След това го оцветих с петно от махагоново дърво, за да изглежда борът добре. Какво следва?!? Реших да направя основа, използвайки същия матирана пластмаса като сянка и я осветявайте с RGB microLED (Pic5). Копчетата: Направих копчето от парче махагон, а копчетата от отрязана орехова дървесина.

Стъпка 4: Електрическата верига:

Електрическата верига
Електрическата верига
Електрическата верига
Електрическата верига
Електрическата верига
Електрическата верига

На първата снимка виждате моята схема. И ето още един видеоклип: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

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

Кодът
Кодът
Кодът
Кодът
Кодът
Кодът

На снимките виждате моя процес с Arduino. Първо се опитах със собствения си ProtoShield, батерия и някои видове светодиоди. Започнах с „Spooky Projects“и „BionicArduino“от TodEKurt преди няколко месеца. Https://todbot.com/blog/spookyarduino/ Моят код е просто сложна комбинация от кода на проекта му. "RGBMoodlight", "RGBPotMixer" и някои разширения. Три аналогови входа и. един цифров вход като превключвател за режим (Благодаря на Ju. за рутината на прекъсване:). Светодиодите са свързани към D9, D10 и D11, които поддържат PulseWithModulation. Ако искате, мога да публикувам скицата, но това е наистина гола комбинация от тези два страхотни кода. Ето моят оригинален код на лампата. Изглежда малко объркан, защото беше моят много ранен етап в програмирането … Но ако го копирате, той би трябвало да работи чудесно. Има фини части, като "PotColorMixer", "RGBfadingFunction" и Interrupt-Routine за mode-switch./* nejo юни 2008 г.

Код за моя "Moodlamp", базиран на "dimmingLEDs" от Clay Shirky

*nejo септември 2008 г.

  • Краен код за лампата за настроение с превключвател за режим на прекъсване, аналогово бързо набиране за избледняване на RGB и промяна на цвета на RGB.
  • Функцията за затъмняване работи само за белия цвят

*nejo октомври 2008 г.

  • Разширение на звука за лампата за настроение:
  • Кондензаторен микрофон с малък усилвател LM368, приемник и RC-нискочестотен филтър
  • с друг analogInput използвам функцията RGBPotMixer, за да променя цвета, като получавам микрофонния сигнал.

* * * Код за кръстосано избледняване на 3 светодиода, червен, зелен и син, или един трицветен светодиод, използващ ШИМ

  • Програмата бавно избледнява от червено към зелено, зелено към синьо и синьо към червено
  • Кодът за отстраняване на грешки приема Arduino 0004, тъй като използва новите функции в стил Serial.begin ()
  • първоначално "dimmingLEDs" от Clay Shirky

*

  • AnalogRead е активиран на Pin A0, за да променя скоростта на избледняване на RGB
  • AnalogRead е активиран на Pin A2, за да променя цвета на hueRGB

* * */#include // Outputint ledPin = 13; // controlPin за отстраняване на грешкиint redPin = 9; // Червен светодиод, свързан към цифров извод 9int greenPin = 10; // Зелен светодиод, свързан към цифров извод 10int bluePin = 11; // Син светодиод, свързан към цифров извод 11int dimredPin = 3; // Пинове за аналоговата стойност на затъмняване, свързани към драйвера на транзистора dimgreenPin = 5; int dimbluePin = 6; // Входен превключвателPin = 2; // превключвателят е свързан към щифт D2int val = 0; // променлива за четене на pinint statusint buttonState; // променлива за задържане на бутона stateint buttonPresses = 0; // 3 натискания, за да отидете! Int potPin0 = 0; // Пот за регулиране на забавянето между избледняване в Moodlamp; int potPin2 = 2; // Изход на потенциометър за промяна на hueRGB colorint potVal = 0; // Променлива за съхраняване на входа от потенциометъраint maxVal = 0; // стойността за запазване на коефициента на затъмняване по подразбиране е 255, ако няма свързан потint dimPin = 4; // Пот, свързан към A4 за намаляване на яркостта // Променливи на програматаint redVal = 255; // Променливи за съхраняване на стойностите за изпращане до пинсинта greenVal = 1; // Началните стойности са червено пълно, зелено и синьо offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50ms (.05 секунди) закъснение; съкращаване за по -бързо затихване k = 0; // стойност за controlLED в blink-functionint DEBUG = 0; // DEBUG брояч; ако е зададено на 1, ще запише стойности обратно чрез serialint LCD = 0; // LCD брояч; ако е зададено на 1, ще запише стойности обратно чрез serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // задава изводите като изход pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // задава изводите като изход pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Задайте щифта на превключвателя като вход за прикачванеInterrupt (0, isr0, RISING); if (DEBUG) {// Ако искаме да видим стойностите на пиновете за отстраняване на грешки … Serial.begin (9600); //… настройваме серийния изход в стил 0004}} // Основна програмаvoid loop () {if (buttonPresses == 0) {Moodlamp (); // извиква функцията Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // извиква функцията за смесване на manuel} if (buttonPresses == 2) {White (); // Тук всичко е бяло} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Бяло (); Monitor (); dim ();} void Monitor () {// Изпращане на състояние на монитора if (DEBUG) {// Ако искаме да прочетем изхода DEBUG += 1; // Увеличете брояча DEBUG, ако (DEBUG> 10) {// Отпечатайте всеки 10 цикъла DEBUG = 1; // Нулиране на брояча Serial.print (i); // Серийни команди в стил 0004 Serial.print ("\ t"); // Отпечатване на раздел Serial.print ("R:"); // Показва, че изходът е червена стойност Serial.print (redVal); // Печат на червена стойност Serial.print ("\ t"); // Отпечатване на раздел Serial.print ("G:"); // Повторете за зелено и синьо … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, за да завърши с връщане на каретка Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, за да завърши с връщане на каретка Serial.print ("\ t"); Serial.print ("изчакайте:"); Serial.print (чакане); // записва стойността на potPin0 на монитора Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // записва стойността на potPin0 на монитора Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // записва стойността на potPin0 на монитора Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // записва стойността на бутонаPress към монитора}}} void dim () // Функция за затъмняване на бялото // може би по -късно за всички режими {maxVal = analogRead (dimPin); maxVal /= 4; // Аналогов диапазон от 0..1024 твърде много за затъмняване на стойността 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {чакане = analogRead (potPin0); // потърсете стойността от potPin0; // ако няма свързан Pot: изчакайте 255 i += 1; // Брояч на увеличаване // i = i - maxVal; if (i <255) // Първа фаза на избледняване {redVal -= 1; // Червено надолу greenVal += 1; // Зелено нагоре blueVal = 1; // Синьо ниско} else if (i <509) // Втора фаза на избледняване {redVal = 1; // Червен нисък greenVal -= 1; // Зелено надолу blueVal += 1; // Синьо нагоре} else if (i <763) // Трета фаза на избледняване {redVal += 1; // Червено нагоре greenVal = 1; // Зелено lo2 blueVal -= 1; // Синьо надолу} else // Повторно задаване на брояча и стартиране на избледняването отново {i = 1; } // правим "255 -redVal" вместо само "redVal", защото // светодиодите са свързани към +5V вместо Gnd analogWrite (redPin, 255 - redVal); // Записване на текущи стойности в LED изводи analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // затъмняване dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Записване на текущи стойности в LED изводи analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / изчакайте / = 4; забавяне (изчакване); // Пауза за милисекунди „изчакване“преди възобновяване на цикъла} void RGBPotMixer () {potVal = analogRead (potPin2); // отчита стойността на потенциометъра на входния щифт potVal = potVal / 4; // конвертираме от 0-1023 в 0-255 hue_to_rgb (potVal); // третираме potVal като нюанс и конвертираме в rgb vals // "255-" е защото имаме светодиоди с общ анод, а не с общ катод analogWrite (redPin, 255-redVal); // Записване на стойности в LED изводи analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Записване на стойности в LED изводи analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Като се има предвид променлив нюанс 'h', който варира от 0-252,
  • задайте подходящо стойността на цвета на RGB.
  • Предполага maxValimum насищане и максимална стойност (яркост)
  • Изпълнява чисто цяло математика, без плаваща запетая.

*/void hue_to_rgb (байт нюанс) {if (hue> 252) hue = 252; // отстъп към 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX байт hi = hd % 6; // дава 0-5 байта f = нюанс % 42; байт fs = f * 6; ключ (здравей) {случай 0: redVal = 252; greenVal = fs; blueVal = 0; прекъсване; случай 1: redVal = 252-fs; greenVal = 252; blueVal = 0; прекъсване; случай 2: redVal = 0; greenVal = 252; blueVal = fs; прекъсване; случай 3: redVal = 0; greenVal = 252-fs; blueVal = 252; прекъсване; случай 4: redVal = fs; greenVal = 0; blueVal = 252; прекъсване; случай 5: redVal = 252; greenVal = 0; blueVal = 252-fs; прекъсване; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // чете закъснението на първоначалното състояниеMicroseconds (100000); // if (val! = buttonState) {// състоянието на бутона се е променило! // if (buttonState == HIGH) {// проверете дали бутонът е натиснат buttonPresses ++; //} // val = buttonState; // запазваме новото състояние в нашата променлива if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Следващият етап бяха транзисторните драйвери. Използвах 3 PNP транзистора с максимален ток на 3Ampere. След като токът и напрежението бяха регулирани, LEDemiter работи чудесно с пълен интензитет.

Стъпка 6: Вземете го самостоятелно с стартирания от PonyProg Bootloader

Вземете го самостоятелно с стартирания от PonyProg Bootloader
Вземете го самостоятелно с стартирания от PonyProg Bootloader

Как да използвате вашия paralell порт, за да запишете bootloader на arduino на ATmega168 или ATmega8, за да използвате евтин празен чип с arduino среда. Скоро … … може би на отделна инструкция Тук също е добра инструкция за използване на чипа самостоятелно: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Стъпка 7: Това е моят Arduino Moodlamp

Това е моят Arduino Moodlamp
Това е моят Arduino Moodlamp

Ако ви е харесало, моля, оценете ме.

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