資料介紹
描述
你有沒有想過為什么智能手機被稱為智能手機?因為他們很聰明,對吧?他們會自動、巧妙地完成一些工作。這是簡短的答案。我在想,即使電腦比手機強大得多,為什么它們不聰明!比如手機有自動亮度控制系統,很方便,我一直都在用。但不知什么原因,電腦沒有自動亮度控制系統。為了改變亮度,每次我都必須按一些按鈕(功能鍵)。在某些計算機中,一些組合鍵可以完成工作(通常是 fn+功能鍵)。我覺得這很煩人。所以我設計了一個簡單的設備,可以連接到任何電腦上,電腦的亮度會自動控制,就像我們的手機一樣。讓我們看看我是如何讓我的電腦變得智能的。
第 1 步:零件
電子產品 -
其他 -
- USB 線(與 Arduino 板兼容)
- 焊接工具
- 還有一些刀具
而已。
第 2 步:原理 - 它是如何工作的?
在跳躍之前討論我們在做什么總是好的。一點理論就足以開始。
我需要某種傳感器來檢測光強度。LDR 或光敏電阻最適合這種情況。LDR 將面向人(就像手機傳感器面向正面/人一樣)并獲取光強度數據。數據將由 Arduino 讀取。那是范圍從 0 到 1024 的模擬數據。
如果我們映射值(0 - 1024),我們可以控制亮度。我嘗試使用 Arduino 的“鍵盤”庫來使用 Arduino 按下功能按鈕。這不起作用,它還會凍結硬件鍵盤(因為電腦知道鍵盤已經在工作)。
所以我將傳感器數據發送到在 PC 上運行的 python 程序。其余的由 python 完成,我的意思是控制亮度。
現在,讓我們開始制作吧。
第 3 步:制作和測試電路/概念
為了證明我的概念,我首先在面包板上制作了電路。并編寫了一個簡單的程序,通過Arduino的串行監視器輸出傳感器數據(光強數據)。
這是我編寫的程序(從 gi??thub 下載)-
// 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 之類的數據。仍然有效。在我的應用程序中并不重要。
所以這是一個成功的測試,現在我可以繼續下一步了。
第 4 步:設計和制作 PCB
我在easyEDA上使用了相同的電路并設計了PCB(印刷電路板)。您可以看到我使用了兩個傳感器,實際上這只是出于設計目的。有兩個 LDR,它看起來像一只蝸牛。LDR_L 是未使用的 LDR。
然后我從PCBWay.com制作了 PCB 。PCBWay 是最好的也是我最喜歡的 PCB 制造商之一。只需 5 美元,我就可以獲得 10 個 PCB!無論如何,我使用了他們的快速訂購頁面,然后是快速訂購 pcb部分,上傳了我的 PCB 并選擇了顏色。而已!我認為快速訂購部分對我們所有了解不多但只想完成它的人來說是一種祝福。從這里獲取 PCB 。
我之前只用過黑色,它太亮了,這次我嘗試了啞光黑色。等了大約 3-4 天后,我得到了漂亮的 PCB。質量一如既往地令人驚嘆。焊盤、阻焊層、絲網印刷盡可能完美。我想我愛上了啞光黑。
第 5 步:焊接 PCB 和完整的硬件
現在是時候將東西焊接到位了。這很簡單,因為那里沒有太多組件。焊接所有東西,確保我沒有吸入烙鐵的煙霧。
我使用女性頭,因為我是一個即插即用的人。您可以將 Arduino 板本身焊接在板上。
注意:不要吸入烙鐵煙霧!它可能會導致癌癥!
第 6 步:對電路板進行編程(Arduino 代碼)
現在是時候上傳Arduino的程序了。Arduino 使用串行通信將數據發送到 PC。
首先,我定義了傳感器引腳,即傳感器輸入數據的 Arduino 引腳。
// define sensor pin
int sensor_pin = A3;
在設置功能中,我以 9600 的波特率開始串行通信。每次為 Arduino 板供電時,設置功能僅運行一次。
void setup() {
// set things here
Serial.begin(9600); // init serial communication at 9600 bps
}
然后在主循環中它獲取數據并通過串行發送。保持 200ms 的一點延遲以使其順利運行。
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
}
打開 Arduino.ide 并將程序上傳到我的 Arduino 板。
第 7 步:Python 編程(PC 版)
正如我們之前討論的,Arduino 向 Arduino 發送數據,其余的由 python 完成。所以我寫了一個簡單的python腳本。
無論如何,如果您沒有安裝 python,請從這里安裝最新版本。安裝時請確保您已選中“將 python 添加到環境變量路徑”框。
好的,然后我打開終端并安裝了兩個庫,Pyserial和screen-brightness-control使用這些命令($ 符號表示它們為終端命令,復制沒有它們) -
$ pip install pyserial
$ pip install screen-brightness-control
安裝后,我編寫了整個代碼。但是,讓我們向你們解釋一下。
在這里,我導入庫以使用它們。需要“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
然后我聲明 buad rate 和端口號。端口會自動檢測到,所以我將其保留為空字符串。但對于我的董事會,buad rate 是 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)轉換為 %data - 從 0 到 100 的函數。它稱為映射。Python map 函數做了其他事情,所以我不得不寫它(雖然從互聯網上得到了一些幫助)。
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()
無論如何,最好關閉使用后打開的東西,無論是對話還是端口。
現在,我打開了我最喜歡的 python 編輯器并運行了程序。從github下載完整的程序。
""" 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()
第 8 步:即插即用!
最后,我用 USB 電纜將開發板連接到我的 PC。然后運行python程序。您可以在視頻中看到其余的內容。它就像一個魅力!我以前從未對自己的工作如此滿意。
現在我的電腦有點智能了。
制作快樂!!!
提示:為了節省電量,您可能需要削減 arduino LED 燈的痕跡。
- 基于1602加矩陣鍵盤的簡易計算機原理圖及源碼 4次下載
- 基于C#的密爾計算機工具MilCalc 0次下載
- 如何使用FPGA總結設計CPU和計算機 13次下載
- 計算機的發展概況及常用的碼制與微型計算機的工作過程詳細說明 0次下載
- 全國計算機等級考試二級教程的詳細資料說明 8次下載
- 計算機人工智能算法的最新進展詳細資料說明 10次下載
- 大話計算機教程之狂想計算機PDF電子書免費下載 0次下載
- 計算機通信與網絡教程—課件資料下載 0次下載
- 計算機串行通信基礎
- 計算機硬件知識試題
- 計算機導論教程
- 計算機網絡應用基礎
- 計算機應用基礎教案 0次下載
- 計算機的發展及應用 0次下載
- 計算機應用基礎教案 0次下載
- 計算機視覺的工作原理和應用 1012次閱讀
- 自然語言處理技術在計算機系統中的應用 283次閱讀
- 深度學習在計算機視覺領域的應用 421次閱讀
- 計算機視覺的主要研究方向 488次閱讀
- 工業計算機與普通計算機的區別 609次閱讀
- 什么是工業控制計算機?它有哪些特點? 831次閱讀
- 什么是計算機視覺?計算機視覺的三種方法 4138次閱讀
- 計算機視覺的概念和主要任務 1147次閱讀
- 計算機芯片工作原理 6308次閱讀
- 計算機輔助技術有哪些_計算機輔助技術的應用 3.9w次閱讀
- 什么是量子計算機_量子計算機原理_量子計算的兩種有效方法 1.1w次閱讀
- 什么是量子計算機,它的工作原理是什么 1.3w次閱讀
- 如何才能提高計算機視覺的精確度?并讓它發揮更大的作用呢? 4380次閱讀
- 電子管計算機是第幾代_電子管計算機如何存儲數據 4.3w次閱讀
- 總結了計算機視覺與視頻行業四大應用點 并讓讓視頻智能化不斷升級 7933次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多