電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>破解計算機并讓它變得智能

破解計算機并讓它變得智能

2022-11-14 | zip | 0.23 MB | 次下載 | 免費

資料介紹

描述

你有沒有想過為什么智能手機被稱為智能手機?因為他們很聰明,對吧?他們會自動、巧妙地完成一些工作。這是簡短的答案。我在想,即使電腦比手機強大得多,為什么它們不聰明!比如手機有自動亮度控制系統(tǒng),很方便,我一直都在用。但不知什么原因,電腦沒有自動亮度控制系統(tǒng)。為了改變亮度,每次我都必須按一些按鈕(功能鍵)。在某些計算機中,一些組合鍵可以完成工作(通常是 fn+功能鍵)。我覺得這很煩人。所以我設(shè)計了一個簡單的設(shè)備,可以連接到任何電腦上,電腦的亮度會自動控制,就像我們的手機一樣。讓我們看看我是如何讓我的電腦變得智能的。

第 1 步:零件

電子產(chǎn)品 -

  • Arduino(我用的是 Pro Micro)-1x
  • LDR - 2x
  • 10 克朗 - 1 倍
  • 亮度控制器 PCB [鏈接] - 1x
  • 女頭

其他 -

  • USB 線(與 Arduino 板兼容)
  • 焊接工具
  • 還有一些刀具

而已。

第 2 步:原理 - 它是如何工作的?

在跳躍之前討論我們在做什么總是好的。一點理論就足以開始。

我需要某種傳感器檢測光強度。LDR 或光敏電阻最適合這種情況。LDR 將面向人(就像手機傳感器面向正面/人一樣)并獲取光強度數(shù)據(jù)。數(shù)據(jù)將由 Arduino 讀取。那是范圍從 0 到 1024 的模擬數(shù)據(jù)。

如果我們映射值(0 - 1024),我們可以控制亮度。我嘗試使用 Arduino 的“鍵盤”庫來使用 Arduino 按下功能按鈕。這不起作用,它還會凍結(jié)硬件鍵盤(因為電腦知道鍵盤已經(jīng)在工作)。

所以我將傳感器數(shù)據(jù)發(fā)送到在 PC 上運行的 python 程序。其余的由 python 完成,我的意思是控制亮度。

現(xiàn)在,讓我們開始制作吧。

第 3 步:制作和測試電路/概念

為了證明我的概念,我首先在面包板上制作了電路。并編寫了一個簡單的程序,通過Arduino的串行監(jiān)視器輸出傳感器數(shù)據(jù)(光強數(shù)據(jù))。

這是我編寫的程序(從 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
}

我通過串行獲得了一些輸出數(shù)據(jù)。數(shù)據(jù)范圍從 0 到 1024(理論上)。但實際上,沒有 LDR 是完美的(即使在同一批次中也不行)。所以我得到了從 0 到 950 之類的數(shù)據(jù)。仍然有效。在我的應(yīng)用程序中并不重要。

所以這是一個成功的測試,現(xiàn)在我可以繼續(xù)下一步了。

第 4 步:設(shè)計和制作 PCB

?
?
?
pYYBAGNxJIKATtV4AACk_rYk4Lw928.png
?
1 / 2
?

我在easyEDA上使用了相同的電路并設(shè)計了PCB(印刷電路板)。您可以看到我使用了兩個傳感器,實際上這只是出于設(shè)計目的。有兩個 LDR,它看起來像一只蝸牛。LDR_L 是未使用的 LDR。

然后我從PCBWay.com制作了 PCB 。PCBWay 是最好的也是我最喜歡的 PCB 制造商之一。只需 5 美元,我就可以獲得 10 個 PCB!無論如何,我使用了他們的快速訂購頁面,然后是快速訂購 pcb部分,上傳了我的 PCB 并選擇了顏色。而已!我認為快速訂購部分對我們所有了解不多但只想完成它的人來說是一種祝福。從這里獲取 PCB

我之前只用過黑色,它太亮了,這次我嘗試了啞光黑色。等了大約 3-4 天后,我得到了漂亮的 PCB。質(zhì)量一如既往地令人驚嘆。焊盤、阻焊層、絲網(wǎng)印刷盡可能完美。我想我愛上了啞光黑。

第 5 步:焊接 PCB 和完整的硬件

?
?
?
poYBAGNxJISATdO3AAElACB9jr4741.png
?
1 / 3
?

現(xiàn)在是時候?qū)|西焊接到位了。這很簡單,因為那里沒有太多組件。焊接所有東西,確保我沒有吸入烙鐵的煙霧。

我使用女性頭,因為我是一個即插即用的人。您可以將 Arduino 板本身焊接在板上。

注意:不要吸入烙鐵煙霧!它可能會導致癌癥!

第 6 步:對電路板進行編程(Arduino 代碼)

現(xiàn)在是時候上傳Arduino的程序了。Arduino 使用串行通信將數(shù)據(jù)發(fā)送到 PC。

首先,我定義了傳感器引腳,即傳感器輸入數(shù)據(jù)的 Arduino 引腳。

// define sensor pin
int sensor_pin = A3;

在設(shè)置功能中,我以 9600 的波特率開始串行通信。每次為 Arduino 板供電時,設(shè)置功能僅運行一次。

void setup() {
  // set things here
  Serial.begin(9600);  // init serial communication at 9600 bps
}

然后在主循環(huán)中它獲取數(shù)據(jù)并通過串行發(fā)送。保持 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
}

這是完整的代碼。從下面復(fù)制或從這里下載。

/*  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 發(fā)送數(shù)據(jù),其余的由 python 完成。所以我寫了一個簡單的python腳本。

無論如何,如果您沒有安裝 python,請從這里安裝最新版本。安裝時請確保您已選中“將 python 添加到環(huán)境變量路徑”框。

好的,然后我打開終端并安裝了兩個庫,Pyserialscreen-brightness-control使用這些命令($ 符號表示它們?yōu)榻K端命令,復(fù)制沒有它們) -

$ 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      = ""

本節(jié)自動獲取 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 數(shù)據(jù)(從 0 到 1024)轉(zhuǎn)換為 %data - 從 0 到 100 的函數(shù)。它稱為映射。Python map 函數(shù)做了其他事情,所以我不得不寫它(雖然從互聯(lián)網(wǎng)上得到了一些幫助)。

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()

無論如何,最好關(guān)閉使用后打開的東西,無論是對話還是端口。

現(xiàn)在,我打開了我最喜歡的 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 電纜將開發(fā)板連接到我的 PC。然后運行python程序。您可以在視頻中看到其余的內(nèi)容。它就像一個魅力!我以前從未對自己的工作如此滿意。

現(xiàn)在我的電腦有點智能了。

制作快樂?。?!

?

提示:為了節(jié)省電量,您可能需要削減 arduino LED 燈的痕跡。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費