Реклама
Компьютерные

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

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

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

Инструменты и материалы:
-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()

Теперь осталось подключить плату с помощью кабеля к компьютеру и разместить ее в удобном месте. Мастер приклеил ее к крышке ноутбука с обратной стороны.

Весь процесс по изготовлению такой платы, ее программированию и тестированию можно посмотреть на видео.

Источник

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть
Закрыть