Управление RGB светодиодом
- Войдите на сайт для отправки комментариев
Добрый день!
Собираю небольшой проект на Ардуино нано, т.к. сам больше про инженерию, то с программой возникла проблема. Собираю исключительно для себя, хочу создать "идеальный" в моем понимании светильник.
Суть проекта:
Светильник на единичном мощном светодиоде rgb 3 вата (напряжение по цветам: красный - 2.4 в макс, синий, зеленый 3.4 в макс. спецификация светодиода: http://p.globalsources.com/IMAGES/PDT/SPEC/141/K1048855141.pdf), органы управления - кнопка физически обрубающая плюс, тактовая кнопка управления. Питание - аккумулятор 18650. Очень нужна помощь в создании скетча программы управляющей светом в двух режимах. //Комментами фиксирую идеал функционала, желательный но не обязательный.
Включение питания //опрос состояния батареи. Заряжена от 70 до 100% - быстрое мигание 3 вспышки зеленым цветом , от 40 до 70% - быстрое мигание 3 вспышки синим цветом, от 0 до 40%- быстрое мигание 3 вспышки красным цветом. Быстрое - задержка между вспышками 0,3 сек.
Одиночное нажатие тактовой кнопки активирует работу системы и переводит к режиму работы 1.
Режим 1: постоянное свечение заданным цветом. Единичное нажатие тактовой кнопки (задержка между нажатиями равно или более 1 секунды) производит смену цвета. Палитра из 5-6 заранее выбранных цветовых значений. При достижении последнего цвета в списке цикл выбора цвета начинается с первого из списка.
Двойное нажатие на тактовую кнопку (менее 1 секунды между нажатиями) переводит систему в режим работы 2.
Режим 2: переменное свечение - режим "радуга". Единичное нажатие на тактовую кнопку производит смену паттерна свечения. 2-3 сочетания мерцаний. Перелив по спектру - плавно разжигаем и гасим цвета. Мерцание - быстрые вспышки цветов поочередно. При достижении последнего паттерна в списке цикл выбора паттерна начинается с первого из списка. Сочетания цветов совершенно не важны, править буду уже исходя из того как будет смотреться в интерьере.
//При падении напряжения на аккумуляторе, заряд от 0 до 20% во время исполнения основного скрипта принудительно переводить в режим "Разряд" - 5 вспышек красным цветом, постоянное свечение красным цветом на 40% мощности.
Надеюсь достаточно подробно описал проект, буду рад если найду человека готового помочь и если не написать за меня, то проконсультировать как зашить во все это безобразие управление кнопкой на смену режимов. Сам пока написал (скопипастил) только скетч плавного перелива цвета.
const byte rgbPins[3] = {3,5,6};
int dim = 1;
void setup() {
for(byte i=0; i<3; i++){
pinMode( rgbPins[i], OUTPUT );
}
// начальное состояние - горит красный цвет
analogWrite(rgbPins[0], 122);
analogWrite(rgbPins[1], 172);
analogWrite(rgbPins[2], 172);
}
void loop() {
// гасим красный, параллельно разжигаем зеленый
for(int i=173; i>=0; i--){
analogWrite( rgbPins[0], i/dim );
analogWrite( rgbPins[1], (173-i)/dim );
delay(1);
}
// гасим зеленый, параллельно разжигаем синий
for(int i=173; i>=0; i--){
analogWrite( rgbPins[1], i/dim );
analogWrite( rgbPins[2], (173-i)/dim );
delay(1);
}
// гасим синий, параллельно разжигаем красный
for(int i=122; i>=0; i--){
analogWrite( rgbPins[2], i/dim );
analogWrite( rgbPins[0], (122-i)/dim );
delay(1);
}
}
Контакты для связи: телеграм @kosmos_visuals
Включение питания //опрос состояния батареи. Заряжена от 70 до 100% - быстрое мигание 3 вспышки зеленым цветом , от 40 до 70% - быстрое мигание 3 вспышки синим цветом, от 0 до 40%- быстрое мигание 3 вспышки красным цветом. Быстрое - задержка между вспышками 0,3 сек.
Дополнение:
Включение питания физическим замыканием цепи, подача напряжения на ардуину. По завершению опроса батареи и вывода сообщения о статусе заряда - гасим диод, ждем нажатия тактовой кнопки.
Это в идеале. Если собственными силами ардуинки замерить напряжение не получается, то просто ждем нажатия тактовой кнопки. Подозреваю что именно так и получится, т.к. батарея подключена через модуль повышающий 3,7 до 12 в. //Но если кинуть напрямую с батареи два провода на ардуинку и читать показания...
1999 рублей. andycat2013@yandex.ru
а так вообще тут на форуме примеров по всем вашим вопросам полно.
если у повышающего модуля общая земля то можно мерять напряжение через аналоговый вход,
Скетч arduino для определения уровня заряда аккумулятора Чтобы установить опорное напряжение на аналоговых входах arduino на уровне 1.1В необходимо воспользоваться функцией analogReference и передать ей параметр INTERNAL. Работать с опорным напряжением 1.1В умеют микроконтроллеры ATmega168 и ATmega328, если будет использоваться ATmega8, то при вызове этой же функции, опорным напряжением будет 2.56В. Для вывода уровня заряда аккумулятора будет использоваться 7-мегментный 4-х разрядный индикатор TM1637, как его использовать, можно почитать в более ранней статье: индикатор TM1637. Ниже приведен код с подробными комментариями. // подключение индикатора TM1637 #include <TM1637.h> #define CLK 3 #define DIO 2 TM1637 tm1637(CLK,DIO); // пин для считывания напряжения Int pin_read = A1; // максимальный заряд аккумулятора float max_v = 4.25; // минимальный заряд аккумулятора float min_v = 2.75; void setup(){ // установка опорного напряжения для аналоговых входов analogReference(INTERNAL); // вывод данных в монитор порта Serial.begin(9600); // инициализация индикатора tm1637.init(); tm1637.set(BRIGHT_TYPICAL); } void loop(){ float Vbat = (analogRead(pin_read) * 1.1) / 1023; float del = 0.091; // R2/(R1+R2) 0.99кОм / (9.88кОм + 0.99кОм) float Vin = Vbat / del; // уровень заряда в процентах int proc = ((Vin - min_v) / (max_v - min_v)) * 100; // вывод данных в монитор порта Serial.println(Vin); Serial.println(proc); // вывод уровня заряда на индикатор tm1637.display(proc); delay(1000); }поищите в инете, масса статей.
про нажатия кнопок , антидребезг, двойные нажатия есть даже целые темы и готовые библиотеки тут же.
режимы работы программируются банально - заводите переменную, в которой режим и храните,
по нажатиям кнопки меняете номер режима, а потом через например switch case уже светите светодиодами как надо
Делал. htpicc@gmail.com
Да там ничего сложного. На час работы.
Здравствуйте, проект интересный, пишите - обсудим , вот почта maslachenko767@mail.ru На руках есть компонентов для отладки вашей задачи
Что может быть интересного в мигании тремя диодами?
Что может быть интересного в мигании тремя диодами?
Студент или школьник - заказчик, круче моргающих светодиодов наверное ничего не видел (
Мне больше интересно - Карамзина кто нибудь лично знает? Уж слишком одинаково он всегда отвечает.
Мне больше интересно - заказывает ли у Карамзина кто то? Уж слишком дебильно всё выглятит. Это ж каким лохом нужно быть...
Что может быть интересного в мигании тремя диодами?
Да не. Для заказчика это может быть вполне утилитарной задачей, подоплеки которой мы не знаем.
Но, я согласен с Green и тоже на это хотел обратить внимание - насколько тупо выглядит высказывание "проект интересный", если учитывать, что проект - это мигание диодами.
Вангую - это наш жопорукий сирожа мудозвягинцев, одна из инкарнаций его воспалённого межушного ганглия. Уж больно стиль похож, а, как известно эмпирически - не палиться сирожа паталогически не способен, у него даже диплом второклассницы есть, я сам видел - он показывал в своём потоке сознания на ютюбе.
Так шта...
Какой интерес к теме внезапно.
Совершенно верно, вопрос времени/сил на изучение нового направления. Пожалуй это интересно и попробую разобраться сам.
Изначально я прекрасно понимал что решать мою задачу ардуиной это сверх избыточная мощность для примитивного задания. Чуть больше времени на курение мануалов и парсинг алиэкспресса показал что мою задачу спокойно закрывает обычный контроллер 5в адресных светодиодов. По этому коммерческая часть разработки пожалуй становится неактуальна.