Компьютерные

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

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

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

Инструменты и материалы:
-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 не будет опубликован. Обязательные поля помечены *

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