Оглавление:

RGB Moodlamp с питанием от Arduino ручной работы: 7 шагов
RGB Moodlamp с питанием от Arduino ручной работы: 7 шагов

Видео: RGB Moodlamp с питанием от Arduino ручной работы: 7 шагов

Видео: RGB Moodlamp с питанием от Arduino ручной работы: 7 шагов
Видео: Плавное изменение цвета RGB светодиода от красного до фиолетового с помощью потенциометра и Ардуино 2024, Июль
Anonim
RGB Moodlamp с питанием от Arduino ручной работы
RGB Moodlamp с питанием от Arduino ручной работы
RGB Moodlamp с питанием от Arduino ручной работы
RGB Moodlamp с питанием от Arduino ручной работы

Это руководство разделено на 5 частей: - Планирование конструкции (Шаг 1) - Штора ручной работы (Шаг 2 + 3) - Электронная схема для управления светодиодами мощностью 3 Вт с контроллером ATmega8 (Шаг 4) - Код (Шаг 5) - Как его получить автономный (прошить загрузчик Arduino с помощью PonyProg и записать скетч) (Шаг 6) скоро появится Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: мощный светодиод мощностью 3 Вт

Шаг 1: Планирование строительства:

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

Мне нравится делать концепцию всего на одном листе бумаги. На первом листе вы видите некоторые ранние идеи. Я выбрал нижний правый дизайн. На второй странице показаны некоторые детали конструкции. Измерения экспериментальные, как и каждый раз, но для меня это нормально;-) Мои мысли об оборудовании были: - Могу ли я обрабатывать материалы? - Будет ли светиться через абажур? - Какая пропорция должна быть у него? - Сколько ручек и горшков мне понадобится для простого интерфейса? Я думал о программном обеспечении: Сколько различных функций должна иметь лампа? - Автоматическое затухание RGB с изменяемой скоростью - Ручная регулировка цвета - Белый с регулируемой яркостью

Шаг 2: оттенок ручной работы

Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы

Сбор материалов: Тень: Я нашел в магазине 30-миллиметровый пластиковый лист размером 3 фута на 3 фута (Рис. 1-3). Используйте острый нож, чтобы разрезать его. Я заморозил пластик наждачной бумагой (Рис. 4-6). получить гладкий цилиндр, я скрутил все это вместе, просверлив нужные отверстия (фото 7-8). Установите пластиковые плафоны на резьбовые латунные опоры. Он выглядит красиво, его довольно легко достать и использовать. Я просверлил отверстия и нарезал резьбы, чтобы они соответствовали стержню с резьбой 1/8 (Рис. 9-10). Между тем, я сделал радиатор, чтобы охладить светодиоды мощностью 3 Вт и иметь прочное основание.. Чтобы не было слишком много оттенков от вала, я сделал небольшую клетку из сварочного прутка с гайкой M8 наверху (Рис12). По окончании я собрал все вместе. Маленькие винты и гайки были немного сложнее, но через 30 минут я справился.

Шаг 3: тени ручной работы

Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы
Тень ручной работы

Основание: диски были зажаты в токарном станке, чтобы сделать его гладким и круглым. Затем я протер морилкой для дерева из красного дерева, чтобы сосна выглядела хорошо. Что дальше?!? Я решил сделать основу, используя ту же самую матовый пластик в качестве абажура и подсветка с помощью RGB microLED (Рис5). Ручки: я сделал пуговицу из куска красного дерева, а ручки из обрезка ореха.

Шаг 4: электрическая цепь:

Электрическая цепь
Электрическая цепь
Электрическая цепь
Электрическая цепь
Электрическая цепь
Электрическая цепь

На первом фото вы видите мою схему, а вот еще одно видео: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Шаг 5: Код:

Код
Код
Код
Код
Код
Код

На фотографиях вы видите мой процесс с Arduino. Сначала я попробовал самодельный ProtoShield, аккумулятор и несколько видов светодиодов. Несколько месяцев назад я начал с "Spooky Projects" и "BionicArduino" TodEKurt. Http://todbot.com/blog/spookyarduino/ Мой код просто хитрая комбинация кода его проекта. "RGBMoodlight", "RGBPotMixer" и некоторые расширения. Три аналоговых входа и один цифровой вход в качестве переключателя режимов (спасибо Ju. за подпрограмму прерывания:). Светодиоды подключены на D9, D10 и D11, которые поддерживают PulseWithModulation. Если хотите, я могу опубликовать эскиз, но это действительно простая комбинация этих двух отличных кодов. Вот мой исходный код лампы. Он выглядит немного беспорядочно, потому что это был мой очень ранний этап программирования … Но если вы его скопируете, он должен отлично работать. Есть прекрасные места, такие как "PotColorMixer", "RGBfadingFunction" и Interrupt-Routine для переключателя режимов. / * nejo June2008

Код для моего "Moodlamp", основанный на "dimmingLEDs" Клэя Ширки

* Nejo, сентябрь 2008 г.

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

* nejo Октябрь 2008

  • Звуковое расширение для лампы настроения:
  • Конденсаторный микрофон с крошечным усилителем LM368, выпрямителем и RC-фильтром нижних частот.
  • с другим аналоговым входом я использую функцию RGBPotMixer, чтобы изменить цвет, получая микрофонный сигнал.

* * * Код для перекрестного затухания 3 светодиодов, красного, зеленого и синего, или одного трехцветного светодиода, с использованием ШИМ

  • Программа медленно меняет цвет от красного к зеленому, от зеленого к синему и от синего к красному.
  • Код отладки предполагает Arduino 0004, поскольку он использует новые функции в стиле Serial.begin ().
  • первоначально "dimmingLEDs" Клэя Ширки

*

  • AnalogRead включен на выводе A0 для изменения скорости затухания RGB.
  • AnalogRead включен на контакте A2 для изменения оттенка RGB-цвета.

* * * / # include // Outputint ledPin = 13; // controlPin для отладки int redPin = 9; // Красный светодиод, подключенный к цифровому выводу 9int greenPin = 10; // Зеленый светодиод, подключенный к цифровому выводу 10int bluePin = 11; // Синий светодиод, подключенный к цифровому выводу 11int dimredPin = 3; // Выводы аналогового значения затемнения, подключенные к драйверу транзистора int dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // переключатель подключен к выводу D2int val = 0; // переменная для чтения статуса вывода int buttonState; // переменная для удержания состояния кнопки int buttonPresses = 0; // 3 нажатия для перехода! Int potPin0 = 0; // Потенциал регулировки задержки между затуханием в Moodlamp; int potPin2 = 2; // Выход потенциометра для изменения цвета hueRGB potVal = 0; // Переменная для сохранения ввода от потенциометра int maxVal = 0; // значение для сохранения коэффициента затемнения по умолчанию 255, если Pot не подключен int dimPin = 4; // Горшок подключен к A4 для уменьшения яркости // Программные переменные int redVal = 255; // Переменные для хранения значений, отправляемых на вывод greenVal = 1; // Начальные значения: Красный полный, Зеленый и Синий offint blueVal = 1; int i = 0; // Счетчик циклов int wait; // = 15; // задержка 50 мс (0,05 секунды); сократить для более быстрого перехода int k = 0; // значение для контролируемого светодиода в функции blinkint DEBUG = 0; // счетчик ОТЛАДКИ; если установлено в 1, значения будут записываться обратно через serialint LCD = 0; // ЖК-счетчик; если установлено в 1, значения будут записываться обратно через serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, ВЫХОД); // устанавливает выводы как выходные pinMode (greenPin, OUTPUT); pinMode (bluePin, ВЫХОД); pinMode (dimredPin, ВЫХОД); pinMode (dimgreenPin, ВЫХОД); // устанавливает контакты как выходные pinMode (dimbluePin, OUTPUT); pinMode (potPin2, ВХОД); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Установите контакт переключателя как input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Если мы хотим увидеть значения выводов для отладки… Serial.begin (9600); //… настраиваем последовательный вывод в стиле 0004}} // Основная программаvoid loop () {if (buttonPresses == 0) {Moodlamp (); // вызывает функцию Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // вызывает функцию смешивания мануэля} if (buttonPresses == 2) {White (); // Здесь все белое} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Белый(); Монитор (); dim ();} void Monitor () {// Отправляем состояние на монитор if (DEBUG) {// Если мы хотим прочитать вывод DEBUG + = 1; // Увеличиваем счетчик DEBUG if (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"); Серийный принт (potVal); // записывает значение potPin0 в монитор Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // записывает значение potPin0 в монитор Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // записывает значение кнопки buttonPresses на монитор}}} 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; // если банк не подключен: подождите 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); // Записываем текущие значения на выводы светодиода 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); // Записываем текущие значения на выводы светодиода 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); // Записываем значения на выводы светодиода analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Записываем значения на выводы светодиода analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Учитывая переменный оттенок h, который находится в диапазоне от 0 до 252,
  • установите соответствующее значение цвета RGB.
  • Предполагает maxValimum Saturation и максимальное значение (яркость)
  • Выполняет чисто целочисленную математику, без чисел с плавающей запятой.

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

Шаг 6. Получите его автономно с помощью загрузчика PonyProg

Получите его автономно с помощью загрузчика PonyProg
Получите его автономно с помощью загрузчика PonyProg

Как использовать ваш параллельный порт, чтобы записать загрузчик arduino на ATmega168 или ATmega8, чтобы использовать дешевый пустой чип со средой arduino. Вскоре … возможно, на отдельной инструкции Вот также хорошее руководство по автономному использованию чипа: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Шаг 7. Итак, это моя лампа для настроения Arduino

Так что это мой Arduino Moodlamp
Так что это мой Arduino Moodlamp

Если вам понравилось, пожалуйста, поставьте мне оценку.

Рекомендуемые: