前沿拓展:
怎么設(shè)置電腦的亮度
1、臺式機(jī)顯示器亮度調(diào)節(jié)按鈕通常在斤劃入亂溶序礦媽可面少屏幕的邊緣,例如下起什議換桿每年圖紅圈標(biāo)記的地方雜統(tǒng),是實體或觸摸按鍵:
2、開關(guān)旁邊有功能指示圖案,功能圖案說明如下,亮度的快捷按鈕一般是太陽形狀的圖標(biāo):
智能手機(jī)普遍內(nèi)置的光線傳感器,在一些筆記本電腦上卻并沒有配備。當(dāng)你帶著這樣的筆記本電腦在某些環(huán)境下工作時,如何讓筆記本隨著環(huán)境光線來自動調(diào)節(jié)屏幕的亮度呢?
下面我們準(zhǔn)備用一個 Arduino 外加兩枚光敏電阻來搞定這件事~
通過這個小項目你可以學(xué)到如何讓 Arduino 和電腦通過串口進(jìn)行通信,以及光敏電阻的使用方法。
組件清單
Arduino 開發(fā)板(這里使用 Pro mini) × 1LDR 光敏電阻 × 210kr 電阻 × 1電路板 × 1排針座 × 2U** 線(兼容 Arduino 開發(fā)板) × 1
原理說明
當(dāng)我們需要檢測環(huán)境光線的時候,使用光敏電阻是最簡單的方案。就像智能手機(jī)的光線傳感器一樣,將 LDR 光敏電阻朝向人的正臉并獲取光線強(qiáng)度模擬信號。由 Arduino 的 ADC 引腳讀取這個數(shù)值,值域為 0 ~ 1024。
我們通過電腦上的 Python 程序,來接收由 Arduino 發(fā)送過來的光線數(shù)值,并將該數(shù)值與屏幕亮度的級別做一個映射,第二來調(diào)節(jié)屏幕的亮度。
搭建實驗電路
為了驗證這個想法,第一在面包板上搭建實驗電路。原理圖如下。
并編寫一段簡單的程序,通過 Arduino 的串行監(jiān)視器輸出光線傳感器數(shù)據(jù)。
// 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 = **ogRead(sensor_pin); // read the input on **og 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
運(yùn)行之后可以看到在不同的光線強(qiáng)度下,輸出的數(shù)值在 0 ~ 950 這個區(qū)間。
設(shè)計 PCB
使用 easyEDA 設(shè)計出 PCB。我選用了兩枚傳感器,這樣讓這個小設(shè)備如圖一直蝸牛,更加可愛。實際上左邊的 LDR 光敏電阻并未使用。
第二就交給 PCB 板廠打樣吧。
焊接并完成組裝
這塊板很簡單,沒有太多的組件。焊接好一組排針座和光敏電阻就好了。
第二把 Arduino **排針座。
Arduino 編程
將 Arduino 用 U** 線連接到電腦,打開 Arduino IDE 將下面的代碼上傳到 Arduino 上。
/* Computer Hack!
Brightness Controller
(C) License: GPL3-General Public License
author: ashraf minhaj
*/
// 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 = **ogRead(sensor_pin); // read the input on **og pin A3:
Serial.println(sensorValue); // send data over serial
delay(200); // a little delay to make things work better
}
安裝 Python 程序
通過上面的步驟,Arduino 已經(jīng)可以將光線數(shù)值通過串口傳給計算機(jī)了。下面要做的是編寫一個 Python 程序,在計算機(jī)上運(yùn)行,任務(wù)是接收發(fā)來的傳感器數(shù)值并依此調(diào)節(jié)屏幕亮度。
如果你的計算機(jī)上還沒裝過 Python 環(huán)境,請在這里下載好 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 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()
運(yùn)行它,同時確保 Arduino 也連接在計算機(jī)上。
拓展知識:
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http://xiesong.cn/22005.html