电脑显示器亮度怎么调节? 电脑如何调整显示器亮度

35白皮书 2023-01-21

智能手机通常内置的光传感器在一些笔记本电脑上没有配备。当你在一些环境下用这样的笔记本电脑工作时如何让笔记本电脑随着环境光自动调节屏幕亮度?

接下来我们准备用一个Arduino加两个光敏电阻来修复这个~

通过这个小项目你可以学习如何让Arduino通过串口与电脑通讯以及如何使用光敏电阻。

组件列表

Arduino开发板(这里用的是Pro Mini)× 1 ldr光敏电阻× 210kr电阻× 1电路板× 1引脚座× 2USB线(兼容Arduino开发板)×1

原理解释

当我们需要检测环境光时使用光敏电阻是最简单的解决方案。就像智能手机的光传感器一样将LDR光敏电阻转向人的正面获得光强模拟信号。该值由Arduino的ADC引脚读取取值范围为0 ~ 1024。

我们通过电脑上的Python程序接收Arduino发来的光线值将该值与屏幕的亮度等级进行映射然后调整屏幕的亮度。

搭建实验电路

为了验证这个想法首先在面包板上搭建了一个实验电路。示意图如下。

并编写一个简单的程序通过Arduino的串行监视器输出光线传感器数据。

// define sensor pinint 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}

完整的代码可以从项目文件库:https://make.quwj.com/project/389下载

运行后可以看到在不同的光照强度下输出值在0 ~ 950的范围内。

设计PCB

用easyEDA设计PCB。我选择了两个传感器让这个像蜗牛一样的小装置更加可爱。实际上左边的LDR光敏电阻没有被使用。

然后交给PCB板厂打样。

和焊接来完成组装。

这个板很简单没有很多元件。只需要焊接一套针座和光敏电阻。

然后将Arduino插入针托。

Arduino编程

通过USB线将Arduino连接到电脑打开Arduino IDE将以下代码上传到Arduino。

/* Computer Hack! Brightness Controller (C) License: GPL3-General Public License author: ashraf minhaj*/// define sensor pinint 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并完成安装:http://python.org/download

打开终端安装串口和屏幕亮度控制两个库。

$ pip install pyserial$ pip install screen-brightness-control

下载项目文件库中的源代码:https://make.quwj.com/project/389

找到controller.py它的程序如下:

""" Computer Hack! Brightness Controller (C) License: GPL3-General Public License author: ashraf minhaj"""""" libraries -$ pip install pyserial$ pip install screen-brightness-control"""# import necessary librariesimport serial # for serial communicationimport serial.tools.list_ports # to get Arduino port automaticallyimport screen_brightness_control as brightness # to control brightness# device buadrate (bit per second)# (change buadrate according to your need)BUAD_RATE = 9600 # Pro Micros buad rate is 9600 PORT = ""# get sender device port automaticallyserial_ports = list(serial.tools.list_ports.comports()) # get list of portsfor 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 devicesender = 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)# mainloopwhile 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 itsender.close()

运行它并确保Arduino也连接到计算机。