Адаптивное освещение для ПК - СамоДельня

Адаптивное освещение для ПК

Адаптивное освещение для ПКВ смартфонах присутствует такая умная функция, как адаптивное освещение. Такая функция присутствует и в некоторых моделях телевизоров. Но, по каким- то причинам, на компьютерах нет системы автоматической регулировки яркости. Чтобы изменить яркость, каждый раз приходится нажимать клавиши. А на некоторых компьютерах нужно нажимать комбинацию клавиш.
Это несколько неудобно и отвлекает от работы.
Мастер разработал простое устройство, которое можно подключить к любому компьютеру, и его яркость будет регулироваться автоматически, как и в смартфонах.
Инструменты и материалы:-Arduino Pro Micro;
-LDR (фоторезисторы) — 2 шт;-Резистор 10 К;
-Пользовательская плата;
-Штыревые разъемы;-USB-кабель;-Инструменты для пайки;
-Нож;
Адаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКШаг первый: принцип работы
Устройство работает следующим образом:
Данные с фоторезистора, направленного на лицо пользователя, отправляются на Ардуино. Это аналоговые данные в диапазоне от 0 до 1024.
Если сопоставить значения (0-1024) с освещением, то можно контролировать яркость. В качестве программного обеспечения мастер использует программу Python, работающую на ПК.
Шаг второй: тестирование схемы
Для проверки работоспособности устройства мастер собрал схему на макетной плате. В качестве программного обеспечения написал простую программу для вывода данных датчика (данных интенсивности света) на последовательный монитор Arduino.

// define sensor pin  int sensor_pin = A3;    void setup() {    // set things here    Serial.begin(9600);  // init serial communication at 9600 bps  }    void loop() {    // mainloop    int sensorValue = analogRead(sensor_pin); // read the input on analog pin A3:    Serial.println(sensorValue);              // send data over serial        delay(200);                               // a little delay to make things work better  }

В идеале данные должны варьироваться от 0 до 1024 (теоретически). Но на практике ни один LDR не идеален (даже в одной партии). В итоге мастер я получил данные от 0 до 950.
В любом случае это работает, а небольшая погрешность не имеет значения.
Адаптивное освещение для ПКАдаптивное освещение для ПКШаг третий: дизайн и изготовление пользовательской платы
Дальше мастер разработал печатную плату. На плате можно увидеть, что есть два датчика два датчика. На самом деле это просто для дизайна. С двумя LDR это похоже на улитку. LDR_L — это LDR, который не используется в данной сборке.
Затем он изготовил печатную плату на соответствующем сайте.
Файлы для изготовления платы можно скачать здесь.
Адаптивное освещение для ПКАдаптивное освещение для ПКАдаптивное освещение для ПКШаг четвертый: сборка
Сборка очень простая. Нужно установить Ардуино на плату и припаять контактные площадки. Также нужно припаять фоторезисторы.
Вместо пайки можно использовать штыревые разъемы.
Адаптивное освещение для ПКАдаптивное освещение для ПКШаг пятый: код
Дальше нужно запрограммировать плату.
Прежде всего он определил контакт Arduino, на который датчик вводит данные.

// define sensor pin  int sensor_pin = A3;<br>

В функции настройки установил последовательную связь со скоростью 9600. Функция настройки запускается только один раз при каждом включении платы Arduino.

void setup() {    // set things here    Serial.begin(9600);  // init serial communication at 9600 bps  }

Затем, в основном цикле, Ардуино получает данные и отправляет их по последовательному каналу. Небольшая задержка в 200 мс, нужна для плавной работы.

void loop() {    // mainloop    int sensorValue = analogRead(sensor_pin); // read the input on analog pin A3:    Serial.println(sensorValue);              // send data over serial        delay(200);                               // a little delay to make things work better  }

Полностью код для Ардуино можно загрузить ниже.

/*  Computer Hack!       Brightness Controller        (C) License: GPL3-General Public License        author: ashraf minhaj      mail  : ashraf_minhaj@yahoo.com  */    // define sensor pin  int sensor_pin = A3;    void setup() {    // set things here    Serial.begin(9600);  // init serial communication at 9600 bps  }    void loop() {    // mainloop    int sensorValue = analogRead(sensor_pin); // read the input on analog pin A3:    Serial.println(sensorValue);              // send data over serial        delay(200);                               // a little delay to make things work better  }

Теперь нужно подготовить ПО Python.
Как уже говорилось ранее, датчик отправляет данные в Arduino, а python делает все остальное. Мастер написал простой скрипт на Python.
В любом случае, если у вас не установлен , установите Последнюю версию Python можно загрузить здесь. При установке нужно убедится, что установлен флажок ‘add python to environment variable path’.
Так же нужно установить две библиотеки, Pyserial и screen- bright -control, используя команды ниже (знаки $ должны обозначать их как команду терминала, копировать без них)

$ pip install pyserial  $ pip install screen-brightness-control<br>

Теперь разберем части кода на случай если кто то захочет его отредактировать.
В этой части импортируются библиотеки ‘serial.tools.list_ports’ необходим для автоматического обнаружения платы Arduino.

# import necessary libraries  import serial                                     # for serial communication  import serial.tools.list_ports                    # to get Arduino port automatically  import screen_brightness_control as brightness    # to control brightness

Устанавливает скорость и номер порта. Для данной платы скорость составляет 9600

BUAD_RATE = 9600                                  # Pro Micro's buad rate is 9600   PORT      = ""

Этот раздел автоматически определяет порты USB и пытается подключиться к Arduino.

# get sender device port automatically  serial_ports = list(serial.tools.list_ports.comports())  # get list of ports  for s_port in serial_ports:                              # iterate through all ports      if 'Arduino Micro' in s_port.description:            # look for Pro Micro board          PORT = str(s_port[0])                            # select first found board and          break                                            # proceed    # connect with sender device  sender = serial.Serial(PORT, BUAD_RATE)

Следующая функция преобразует данные Arduino (от 0 до 1024) в% данных — от 0 до 100. Это называется сопоставлением.

def map_value(value, in_min=0, in_max=1024, out_min=0, out_max=100):      """ To map values. Arduio sends values from 0 to 1024. My goal      is to make them in between 0 to 100."""      return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

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

# mainloop  while 1:       # convert byte data into string then integer      sensor_value = int(sender.readline().decode("utf-8"))  # get data      final_value = map_value(value=sensor_value)            # map value (brightness in percentage)      #print(sensor_value)      print(final_value)      brightness.set_brightness(final_value)                 # set brightness    # close port properly so that others can use it  sender.close()

Полный код можно скачать ниже.

""" Computer Hack!       Brightness Controller        (C) License: GPL3-General Public License        author: ashraf minhaj      mail  : ashraf_minhaj@yahoo.com  """    """ libraries -  $ pip install pyserial  $ pip install screen-brightness-control  """    # import necessary libraries  import serial                                     # for serial communication  import serial.tools.list_ports                    # to get Arduino port automatically  import screen_brightness_control as brightness    # to control brightness    # device buadrate (bit per second)  # (change buadrate according to your need)  BUAD_RATE = 9600                                  # Pro Micro's buad rate is 9600   PORT      = ""    # get sender device port automatically  serial_ports = list(serial.tools.list_ports.comports())  # get list of ports  for s_port in serial_ports:                              # iterate through all ports      if 'Arduino Micro' in s_port.description:            # look for Pro Micro board          PORT = str(s_port[0])                            # select first found board and          break                                            # proceed    # connect with sender device  sender = serial.Serial(PORT, BUAD_RATE)    def map_value(value, in_min=0, in_max=1024, out_min=0, out_max=100):      """ To map values. Arduio sends values from 0 to 1024. My goal      is to make them in between 0 to 100."""      return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)    # mainloop  while 1:       # convert byte data into string then integer      sensor_value = int(sender.readline().decode("utf-8"))  # get data      final_value = map_value(value=sensor_value)            # map value (brightness in percentage)      #print(sensor_value)      print(final_value)      brightness.set_brightness(final_value)                 # set brightness    # close port properly so that others can use it  sender.close()

Адаптивное освещение для ПКТеперь осталось подключить плату с помощью кабеля к компьютеру и разместить ее в удобном месте. Мастер приклеил ее к крышке ноутбука с обратной стороны.
Весь процесс по изготовлению такой платы, ее программированию и тестированию можно посмотреть на видео.

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Мы в соцсетях