Каталог
|
Светодиодное освещение рабочего стола на Arduino2020-09-03 Все статьи →Хороший свет на рабочем месте всегда был одним из главных “пунктиков” для меня. Особенно когда сидишь ночью в темноте и пишешь курсач или кодишь в VS - из-за высокой контрастности, между светлым монитором и темным задним фоном, глаза сильно перенапрягаются и устают. Сначала рядом стояла лампа, но она занимала достаточно много места на столе, поэтому было решено сделать новую, более “миниатюрную”. У китайцев заказал 5м светодиодной ленты (теплый белый цвет) и блок питания 12В 3А, в эпицентре – алюминиевый профиль для этой ленты с пластиковой линзой для рассеивания света.
Светодиодные ленты: https://arduino.ua/cat264-svetodiodnie-lenti Все остальное нашел у себя в ящике, а именно:
Все паяется по схеме:
Для прошивки контроллера используем плату Arduino nano и код из папки примеров Arduino ISP, подробную инструкцию писал в статье про сборку портативного осциллографа: https://arduino.ua/art97-kak-sobrat-portativnii-oscillograf Так же делюсь последней версией прошивки. Все функции и переменные описаны в виде комментариев в коде: /*
* Прошивка для светодиодного светильника LEDlamp v.2.1
* Добавлено:
* плавное включение/выключение
* выключение после долгого нажатия на кнопку
* включение заданной яркости за постоянное к-во миллисекунд
*/
#define BTN 2 // Пин для подключения кнопки
#define LED 3 // Пин для подключение мофсета
byte State = 0, flag = 0;
bool ButtonState = HIGH; // Изменить в зависимости от использованной в проекте кнопки
unsigned long previousMillis = 0;
unsigned long interval = 2000; // К-во миллиссекунд для включения заданной яркости
unsigned long currentMillis = 0;
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(BTN, INPUT);
pinMode(A0, INPUT);
}
void loop() {
if ( digitalRead(BTN) == ButtonState ) {
flag++;
currentMillis = millis();
}
while ( digitalRead(BTN) == ButtonState ) {
if ( millis() - currentMillis >= interval ) {
flag = 0;
analogWrite(LED, 0);
break;
}
}
while ( digitalRead(BTN) == ButtonState ) delay(1); // Задержка от ложный нажатий
switch (flag) {
case 0:
analogWrite(LED, 0); // Вторым аргументом в функции устанавливается яркость ленты
break;
case 1:
analogWrite(LED, 40);
break;
case 2:
analogWrite(LED, 85);
break;
case 3:
analogWrite(LED, 175);
break;
case 4:
analogWrite(LED, 250);
break;
case 5:
flag = 0;
break;
}
delay(1);
}
Есть один нюанс: блок питания подбирается из расчета потребления тока лентой - обычно 1А/м + 1А в запас (по умолчанию большинство лент требует 12В напряжения) Блоки питания: https://arduino.ua/cat27-bloki-pitaniya или https://arduino.ua/cat200-bloki-pitaniya-negermetichnie
P.S. Свой светильник я наклеил за монитор дабы он освещал задний фон. При максимальной яркости вполне удобно что-то записывать в сумерках, поздней ночью обычно ставлю рядом еще и лампу. Контроллер повесил слева в углу, кнопка светится постоянно (пока не нажата) – для этого на плате запаивается перемычка.
Ссылки:
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Тарас
09.04.2022 15:46:30
В этой задаче вместо Mega328 за 100 грн достаточно LM555 за 5 грн
Никита
19.01.2022 13:22:36
Повторил, очень круто вышло, спасибо! Правда вместо меги поставил тиньку
Вадим
16.11.2020 00:04:09
вы серьезно? целая мега на такую мелочь? для такой задачи хватит 13той тиньки
Artem
02.11.2020 07:41:10
Може і гарно, але при такому освітлені це просто додаткове навантаження на зір
Олексій Савченко
04.10.2020 18:00:24
Досить гарно вийшло!
|