资料介绍
描述
你有没有想过为什么智能手机被称为智能手机?因为他们很聪明,对吧?他们会自动、巧妙地完成一些工作。这是简短的答案。我在想,即使电脑比手机强大得多,为什么它们不聪明!比如手机有自动亮度控制系统,很方便,我一直都在用。但不知什么原因,电脑没有自动亮度控制系统。为了改变亮度,每次我都必须按一些按钮(功能键)。在某些计算机中,一些组合键可以完成工作(通常是 fn+功能键)。我觉得这很烦人。所以我设计了一个简单的设备,可以连接到任何电脑上,电脑的亮度会自动控制,就像我们的手机一样。让我们看看我是如何让我的电脑变得智能的。
第 1 步:零件
电子产品 -
其他 -
- USB 线(与 Arduino 板兼容)
- 焊接工具
- 还有一些刀具
而已。
第 2 步:原理 - 它是如何工作的?
在跳跃之前讨论我们在做什么总是好的。一点理论就足以开始。
我需要某种传感器来检测光强度。LDR 或光敏电阻最适合这种情况。LDR 将面向人(就像手机传感器面向正面/人一样)并获取光强度数据。数据将由 Arduino 读取。那是范围从 0 到 1024 的模拟数据。
如果我们映射值(0 - 1024),我们可以控制亮度。我尝试使用 Arduino 的“键盘”库来使用 Arduino 按下功能按钮。这不起作用,它还会冻结硬件键盘(因为电脑知道键盘已经在工作)。
所以我将传感器数据发送到在 PC 上运行的 python 程序。其余的由 python 完成,我的意思是控制亮度。
现在,让我们开始制作吧。
第 3 步:制作和测试电路/概念
为了证明我的概念,我首先在面包板上制作了电路。并编写了一个简单的程序,通过Arduino的串行监视器输出传感器数据(光强数据)。
这是我编写的程序(从 github 下载)-
// 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次下载 | 免费
评论
查看更多