Съдържание:
- Стъпка 1: Планиране на строителството:
- Стъпка 2: Ръчно изработената сянка
- Стъпка 3: Ръчно изработената сянка
- Стъпка 4: Електрическата верига:
- Стъпка 5: Кодът:
- Стъпка 6: Вземете го самостоятелно с стартирания от PonyProg Bootloader
- Стъпка 7: Това е моят Arduino Moodlamp
Видео: Ръчно изработена RGB Moodlamp, задвижвана от Arduino: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:55
Тази инструкция е разделена на 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
Как да използвате вашия paralell порт, за да запишете bootloader на arduino на ATmega168 или ATmega8, за да използвате евтин празен чип с arduino среда. Скоро … … може би на отделна инструкция Тук също е добра инструкция за използване на чипа самостоятелно: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS
Стъпка 7: Това е моят Arduino Moodlamp
Ако ви е харесало, моля, оценете ме.
Препоръчано:
Ръчно изработена сплав с ниска точка на топене: 5 стъпки
Ръчно изработена сплав за спойка с ниска точка на топене: Направете сплав за спойка с ниска точка на топене за лесно разпаяване.Моля, посетете моя блог
Ръчно свързана USB и Bluetooth клавиатура, задвижвана от Python: 5 стъпки
Ръчно окабелена USB и Bluetooth клавиатура, задвижвана от Python: Това е ръчна кабелна механична клавиатура. Той поддържа USB и Bluetooth и работи с Python в микроконтролера на клавиатурата. Може да се чудите как работи. Следвайте стъпките за изграждането му, ще го разберете
Circuit Playground Express (CPE) Ръчно изработена тотализатор: 5 стъпки
Circuit Playground Express (CPE) Handmade Tote: В тази Instuctable ще получите стъпките да кодирате вашия микроконтролер Circuit Playground Express (CPE) с MakeCode и да направите тотализатор от фланелена риза и друг плат. Има много място за тълкуване и иновации! Какво ще напреднеш
Arduino и Raspberry Pi задвижвана система за наблюдение на домашни любимци: 19 стъпки (със снимки)
Задвижвана система за наблюдение на домашни любимци Arduino и Raspberry Pi: Наскоро, докато бяхме на почивка, осъзнахме липсата на връзка с нашия домашен любимец Бийгъл. След известно проучване открихме продукти, които разполагат със статична камера, която позволява на човек да наблюдава и комуникира с домашния си любимец. Тези системи имаха определени предимства б
Ръчно изработена празнична фотокарта, която сама по себе си е подарък!: 8 стъпки
Ръчно изработена празнична фотокарта, която сама по себе си е подарък !: Тази инструкция ще ви покаже как да направите уникален набор от карти, всяка от които може да бъде поставена в рамка от получателите след края на празничния сезон, и дори по -лесно, ако им ги дадете фоторамка с клип IKEA заедно с картата. Тези карти могат да бъдат g