В продолжение темы об использовании платы BlockProto2 запаяной с цанговыми разъёмчиками под BreadBoard - беспаечную макетную плату.
Сегодня попались мне под руку трехцветные светодиоды и вспомнилось мне, что хотелось как-то посмотреть как будет выглядеть Mood лампа в домашнем исполнении. Ну и я их тут же и примостил на плату.
С резисторами решил не заморачиваться, а просто общий вывод, в моем случае это катод, я повесил на порт микроконтроллера. А так как порт не дает больше 20мА, то светодиод не пострадает от избыточного тока.
Как известно выводов у светодиода 4 - это по одному аноду на каждый встроенный в корпус светодиод (а их там три - красный/Red, зеленый/Green и синий/Blue) и один общий катод.
Расположены в порядке: Red, Катод, Blue, Green. По крайней мере на моих светодиодах. Вывод на катод самый длинный.
Чтоб управлять яркостью светодиода его нужно подключить к порту на котором есть управление ШИМ (PWM), у нас это D3,D5,D6,D9,D10,D11. Этого хватит чтобы управлять двумя трехцветными светодиодами. Один светодиод помещаем на площадку шины BlockDuino, на цифровой ряд, в порта D3-D6, так чтобы катод стал в порт D4, а другой, если есть желание, в порта D8-D11, но надо изгольнуться так, чтобы катод стал в порт D8, т.е. первый и второй ножки согнуть так, чтоб они не соприкасаясь поменялись местами.
Далее оставляем железо и переходим к софту, т.е. заливаем на микроконтроллер проверочный код:
void setup() {Если сразу после запуска программы все светодиоды светятся вполнакала, значит мы подключили все правильно. Теперь вкусняшки. Находим и загружаем библиотеку [RGBlink], мне такая под руку подвернулась, устанавливаем и загружаем наш код для Mood лампы:
pinMode(4, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(4, LOW);
digitalWrite(8, LOW);
analogWrite(3, 128);
analogWrite(5, 128);
analogWrite(6, 128);
analogWrite(9, 128);
analogWrite(10, 128);
analogWrite(11, 128);
delay(10000);
}
Эта программка прогоняет первый светодиод по часовой стрелке по шкале HSB, а второй против часовой стрелки, т.е. навстречу. Цикл порядка 7 с половиной секунды. Кстати, чтоб получить полноценные цвета, нужно светодиод, который скорее всего тоже в прозрачном корпусе, как у меня, "заматовать", т.е. одеть на него что-то полупрозрачное/матовое. Например кусок белого поролона из упаковочного материала. А лучше сразу же подготовить лампу - взять лампочку с матовым покрытием, выковырнуть внутренности цоколя и выбить аккуратно содержимое лампочки. Светодиод подпаивается на проводки, помещается внутрь на небольшую глубину, фиксируется и на выходе имеем готовую "MoodLamp":#include <RGBlink.h> int ledC1 = 8; // порт катода для первого светодиода LED led1(11,9,10); // порта анодов для первого светодиода (R,G,B) int ledC2 = 4; // порт катода для второго светодиода LED led2(3,6,5); // порта анодов для второго HSB myColor1 = {0, 255, 255}; // объявляем переменную где будет храниться цвет для первого HSB myColor2 = {360, 255, 255}; // то же для второго светодиода int counter = 0; // просто счетчика int interval = 20; // время между шагами изменения цвета мсек void setup() { pinMode(ledC1, OUTPUT); digitalWrite(ledC1, LOW); // подаем землю на первый катод pinMode(ledC2, OUTPUT); digitalWrite(ledC2, LOW); // то же на второй} void loop() { counter++; // увеличиваем счетчик на единицу if (counter > 359) counter = 0; // проверяем переполнение myColor1.hue = counter; // цвет первого светодиода идет по часовой стрелке 0 -> 359 myColor2.hue = 359 - counter; // цвет второго - навстречу, 359 -> 0 led1.setColor(myColor1); // зажигаем светодиод 1 led2.setColor(myColor2); // зажигаем светодиод 2 delay(interval); // ждем}
|
|
|
|
Заодно я поднапрягся и прописал код для плавного перехода в случайный цвет за случайный промежуток времени (в разумных пределах). Как по мне, так заметно красивее получается:
Код для одного светодиода.#include <RGBlink.h> //int ledC = 8; //LED led(9,11,10); int ledC = 4; LED led(3,6,5); long previousMillis = 0; long interval = 10; HSB Color = green; HSB OldColor = white; int newHue = 240; void setup() { pinMode(ledC, OUTPUT); digitalWrite(ledC, LOW); } void loop() { OldColor = Color; float delta = ((float)Color.hue - (float)newHue) / (float)interval; for (int i=0; i<interval; i++){ Color.hue = OldColor.hue - delta * i; led.setColor(Color); delay(10); } delay(1000); newHue = random(0, 360); interval = random(100, 1000); }
Что дальше? А дальше несложно привертеть ИК приемник и управлять с пульта; можно подобрать скрипт и менять цвета в определенном порядке: свеча, морской бриз, осень и т.д.; подключить датчик звука и управлять хлопками в ладоши или менять в такт музыки.
Комментариев нет:
Отправить комментарий