Комментарии 18
Проект открыт, так что буду рада, если кто‑то захочет посмотреть код, форкнуть его, переделать корпус или собрать свою версию. И особенно интересно услышать идеи — и по программной части, и по форме устройства, и по тому, с чем еще его можно было бы объединить.
Можно объединить с боковой вешалкой для наушников, которая клеиться с одного из верхних углов монитора, при этом не будет ничего лишнего на столе.
Очень рад видеть, во что вырос проект. Особенно приятно, что я наблюдаю за ним с самого начала, ещё с момента, когда мы просто обсуждали идею.
Помню, как мы выбирали новые мониторы и обнаружили, что автояркости нет в большинстве моделей, даже среди дорогих и качественных. Тогда и появилась мысль: вместо того чтобы искать монитор с нужной функцией, можно попробовать реализовать её самостоятельно.
Круто, что из этой идеи получился полноценный проект. Поздравляю!
Хорошо бы развить проект датчиком контрового света, этого не умеют и смартфоны, глаза напрягаются от недостаточной яркости дисплея при достаточно мощном свете позади монитора.
Пользователи отметили, что использование DDC/CI в Windows иногда приводит к проблемам с отдельными моделями мониторов и драйверами.
О, это самое сложное. У меня в MacBook Air M1 с монитором через кабель usb-c - DP отлично работает, а если монитор подключен через какой-либо хаб, то нет (ни через dell, ни через ugreen). С встроенным хабом монитора тоже работал, но китайцы решили, что его работа дольше года - непозволительная роскошь.
Причём на винде даже через hdmi работает, но через сторонний софт.
Уже появилось желание припаяться к рычажку управления яркостью, чтобы его программно нажимать через что-то типа esphome.
Как совет по сенсору: Light Gesture Color Proximity Sensor (TMG39931) https://www.farnell.com/datasheets/3759087.pdf
Использовал фоторезистор 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

Яркость меняется без без участия дисплея и 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;
По сети не лучше будет? И проще провода организовать, нужно только питание. И на несколько компьютеров можно использовать. И нет разницы в платформе датчика.
Сейчас платформа датчика и так не привязана к приложению. ПК просто ищет устройство по всем COM-портам по служебному сообщению и дальше работает по своему протоколу, поэтому контроллер можно заменить без изменений в приложении, если он поддерживает этот протокол.
Для этого решения работа по сети выглядела избыточной. Датчик всё равно должен находиться рядом с мониторами, в зоне рабочего места, потому что яркость определяется по свету, падающему на стол и окружающее пространство - нет смысла ставить его дальше.
Но проблема с проводами действительно есть, приложение можно доработать так чтобы была поддержка и по USB и по локальной сети. Но это уже другие компромиссы: потребуется локальная сеть, обнаружение устройства и его настройка. Как будто для пользовательского опыта проще USB подключить.
Но в issue задачу на работу по сети добавлю. Лучше чтобы был выбор.
Есть идея сделать ещё один вариант корпуса в другом форм-факторе. Он не будет занимать место на столе, а датчик освещённости будет в более подходящем месте.
Типа такого



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