Обновить

LumaBloom — DIY‑цветок, который автоматически регулирует яркость мониторов

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K
Всего голосов 18: ↑18 и ↓0+21
Комментарии18

Комментарии 18

Проект открыт, так что буду рада, если кто‑то захочет посмотреть код, форкнуть его, переделать корпус или собрать свою версию. И особенно интересно услышать идеи — и по программной части, и по форме устройства, и по тому, с чем еще его можно было бы объединить.

Можно объединить с боковой вешалкой для наушников, которая клеиться с одного из верхних углов монитора, при этом не будет ничего лишнего на столе.

Хорошая идея) Я добавлю в issue про совместимость с наушниками. Правда не очень поняла про какую вешалку на мониторе речь)

Очень рад видеть, во что вырос проект. Особенно приятно, что я наблюдаю за ним с самого начала, ещё с момента, когда мы просто обсуждали идею.

Помню, как мы выбирали новые мониторы и обнаружили, что автояркости нет в большинстве моделей, даже среди дорогих и качественных. Тогда и появилась мысль: вместо того чтобы искать монитор с нужной функцией, можно попробовать реализовать её самостоятельно.

Круто, что из этой идеи получился полноценный проект. Поздравляю!

Хорошо бы развить проект датчиком контрового света, этого не умеют и смартфоны, глаза напрягаются от недостаточной яркости дисплея при достаточно мощном свете позади монитора.

Цветок можно поставить в удобное место и с помощью шарнирного механизма повернуть как удобно. Но использование нескольких датчиков тоже интересная задача - разобраться в том как объединять показания разных датчиков и регулировать на основе них яркость.

Пользователи отметили, что использование DDC/CI в Windows иногда приводит к проблемам с отдельными моделями мониторов и драйверами.

О, это самое сложное. У меня в MacBook Air M1 с монитором через кабель usb-c - DP отлично работает, а если монитор подключен через какой-либо хаб, то нет (ни через dell, ни через ugreen). С встроенным хабом монитора тоже работал, но китайцы решили, что его работа дольше года - непозволительная роскошь.

Причём на винде даже через hdmi работает, но через сторонний софт.

Уже появилось желание припаяться к рычажку управления яркостью, чтобы его программно нажимать через что-то типа esphome.

Использовал фоторезистор GL5516 по 149 руб. за десяток, припаянный к Arduino:

Светодиод очень яркий и не отключается, поэтому закрыт.
Светодиод очень яркий и не отключается, поэтому закрыт.

Программа в Arduino:

void setup (){Serial.begin(9600);}
void loop  (){Serial.println(analogRead(5)); delay(1000);}

На ПК программа на Delphi7, написанная вручную без LLM:

https://github.com/prog-mania/fani/tree/main/gamma

Регулировка яркости по 2-ум точкам.
Регулировка яркости по 2-ум точкам.

Яркость меняется без без участия дисплея и DDC/CI.

Первая версия у меня тоже была без дисплея, очень похожа на вашу.

Интересно , а что используете вместо DDC/CI?

// Изменение яркости экрана
type TRampArray = array[0..2] of array[0..255] of Word;
var  origRampArray:TRampArray;

// Функция изменения яркости. Чем больше wBrightness, тем больше яркость
function SetBrightness(wBrightness:word):boolean;
var RampArray:TRampArray; i, Value:integer; DC:HDC;
begin
if wBrightness<0 then exit;

for i:=0 to MAXBYTE do begin
    Value := i * (wBrightness + 128);
    if (Value > MAXWORD) then Value := MAXWORD;
    RampArray[0][i] := Value;
    RampArray[1][i] := Value;
    RampArray[2][i] := Value;
end;

DC:=GetDC(0); // Device Canvas рабочего стола. Вызов из user32.dll
try      result:= SetDeviceGammaRamp(DC,RampArray) // Вызов из gdi32.dll
finally  ReleaseDC(0,DC) end;
end;

procedure getGamma;
var
DC:HDC;
begin
  DC:=GetDC(0);
  try     GetDeviceGammaRamp(DC,origRampArray) // Вызов из gdi32.dll
  finally ReleaseDC(0,DC) end;
end;

Поняла. Это работает через изменение RGB. Думаю, это будет полезно как запасной вариант, если монитор не поддерживает DDC/CI или WMI. Но, насколько я понимаю, на физическую яркость это не влияет.

По сети не лучше будет? И проще провода организовать, нужно только питание. И на несколько компьютеров можно использовать. И нет разницы в платформе датчика.

Сейчас платформа датчика и так не привязана к приложению. ПК просто ищет устройство по всем COM-портам по служебному сообщению и дальше работает по своему протоколу, поэтому контроллер можно заменить без изменений в приложении, если он поддерживает этот протокол.

Для этого решения работа по сети выглядела избыточной. Датчик всё равно должен находиться рядом с мониторами, в зоне рабочего места, потому что яркость определяется по свету, падающему на стол и окружающее пространство - нет смысла ставить его дальше.

Но проблема с проводами действительно есть, приложение можно доработать так чтобы была поддержка и по USB и по локальной сети. Но это уже другие компромиссы: потребуется локальная сеть, обнаружение устройства и его настройка. Как будто для пользовательского опыта проще USB подключить.

Но в issue задачу на работу по сети добавлю. Лучше чтобы был выбор.

Есть идея сделать ещё один вариант корпуса в другом форм-факторе. Он не будет занимать место на столе, а датчик освещённости будет в более подходящем месте.

Типа такого

Добавишь в issue на гитхабе?)

Да, и даже попробую сделать корпус)

Можно же взять нерабочую камеру, выбросить потроха и вставить туда своё устройство

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации