Это несколько неудобно и отвлекает от работы.
Мастер разработал простое устройство, которое можно подключить к любому компьютеру, и его яркость будет регулироваться автоматически, как и в смартфонах.
Инструменты и материалы:-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()
Весь процесс по изготовлению такой платы, ее программированию и тестированию можно посмотреть на видео.
Ингредиентыкабачки ( без шкурки и семян) - 2 кгпомидоры - 1 кгшампиньоны - 300 глук…
Ингредиентыслива (без косточек) — 1 кгчеснок — 3-4 зубчикаперец чили — 0,5 шт.соль — 0,5…
Ингредиентыпомидоры — 1,5 кгсладкий перец — 0,5 шт.чеснок — 3-4 зубчикасоль — 2 ст.л.сахар —…
Ингредиентыогурцы мелкие и средниестебли укропа и зонтики - 0.5 пучкаветочки мяты - 1 пучокчеснок -…
Ингредиентыпомидоры -2 кгвинный укусу светлый- 2 с.л.Пошаговый рецепт приготовленияДля приготовления томатов в собственном соку вымыть…
Ингредиентыпомидоры -1 кгзелень (петрушка, укроп, кинза) -200 г.чеснок - -3-4 зубчикаострый перец -1/2 шт.черный молотый…
Мы используем файлы cookie.