Raspberry Pi 光传感器:简单的 LDR 教程
在这个 Raspberry Pi 光传感器教程中,我向您展示了如何将光电阻传感器正确连接到 GPIO 引脚。最后,我将向您展示如何在一个简单的 Python 脚本中使用它,以便您能够从中收集和使用数据。
这是我将考虑纳入未来项目的另一个传感器,例如光激活闹钟。
我将在这个电路中使用的每个部分进一步解释一下。如果您需要有关这些的更多信息,请务必仔细阅读。重要的是要注意本教程,我只是使用一个简单的光电传感器,虽然这些传感器非常适合某些任务,但它们可能不像您希望的那样准确。
如果您想一步步直观地了解如何设置光传感器电路和代码,请务必查看设备列表下方的视频。
设备:
您将需要以下设备才能完成此 Raspberry Pi 光传感器教程。您可以在没有任何面包板设备的情况下完成此操作,但如果您计划进行大量电路工作,我强烈建议您投资一些。
推荐:
树莓派
8 GB SD 卡或微型 SD 卡,如果您使用的是 Raspberry Pi 2 或 B+
以太网线或 Wifi 加密狗
光传感器(LDR Sensor)
1个1uF电容
可选:
树莓派案例
USB键盘
USB鼠标
GPIO 分线套件
面包板
面包板线
视频
该视频几乎包含了本教程的文本版本所做的所有内容。如果您更喜欢以视觉方式查看完成的事情,那就太完美了。完成后,您还将了解电路的性能。
您可以在视频下方找到文字说明和信息。
树莓派光传感器电路
我们将为本教程制作的电路非常简单,非常适合任何刚开始使用电路的人。
光敏电阻器或也称为 LDR 传感器是我们电路中最重要的设备(显然)。没有它,我们将无法检测它是黑暗还是光明。在光线下,该传感器的电阻只有几百欧姆,而在黑暗中,它的电阻可以达到几兆欧。
我们电路中的电容器就在那里,因此我们能够测量 LDR 传感器的电阻。电容器本质上就像电池在接收电力时充电,然后在不再接收电力时放电。将其与 LDR 串联使用,我们可以计算出 LDR 发出的阻力有多大,因此无论是亮的还是暗的。
要正确构建光传感器电路,请按照以下步骤操作或查看步骤正下方的电路图。在以下步骤中,我指的是引脚的物理编号(逻辑顺序)。
- 首先将引脚 #1 (3v3) 连接到面包板上的正极导轨。
- 接下来将引脚 #6(接地)连接到面包板上的接地导轨。
- 现在将 LDR 传感器放在电路板上,并从一端连接到正极导轨。
- 在 LDR 传感器的另一侧放置一根连接到 Raspberry Pi 的电线。把它挂在#7 上。
- 最后将电容器从电线放置到面包板上的负极导轨。确保电容器的负极引脚位于负极导轨中。
我们现在准备开始使用 Python 代码,如果您对电路有任何问题,请参阅下图。
代码
这个项目的代码非常简单,它会大致告诉我们它是亮的、阴暗的还是完全黑暗的。
我们在这个电路中面临的最大问题是 Pi 没有任何模拟引脚。它们都是数字的,因此我们无法准确测量输入电阻的变化。在运动传感器教程中,缺少模拟引脚不是问题,因为它的输出要么高要么低(数字)。相反,我们将测量电容器充电并将引脚发送到高电平所需的时间。这种方法是一种简单但不准确的方法来判断它是亮还是暗。
我将简要解释树莓派光传感器代码,以及它的作用,如果你想要代码,你可以复制粘贴在下面或者从我的 GitHub 下载。
首先,我们导入我们需要的 GPIO 包,以便我们可以与 GPIO 引脚进行通信。我们还导入了 time 包,因此我们可以在需要时让脚本进入睡眠状态。
#!/usr/local/bin/pythonimport RPi.GPIO 作为 GPIO 导入时间
然后我们将 GPIO 模式设置为 GPIO.BOARD,这意味着我们在此脚本中使用的所有编号都将引用引脚的物理编号。由于我们只有一个输入/输出引脚,因此我们只需要设置一个变量。将此变量设置为用作输入/输出引脚的引脚编号。
GPIO.setmode(GPIO.BOARD)#定义去电路的引脚pin_to_circuit =7
接下来,我们有一个名为 rc_time 的函数 这需要一个参数,即电路的引脚编号。在此函数中,我们初始化了一个名为 count 的变量,一旦引脚变为高电平,我们将返回该值。
然后我们将引脚设置为输出,然后将其设置为低电平,然后让脚本休眠 10 毫秒。
在此之后,我们然后将引脚设置为输入,然后我们进入一个 while 循环。我们停留在这个循环中,直到引脚变高,此时电容器充电到大约 3/4。一旦它变高,我们将计数值返回给主函数。您可以使用此值来打开和关闭 LED、激活其他东西或记录数据并保留有关任何光线变化的统计信息。
def rc_time (pin_to_circuit):count =0 #Output on the pin for GPIO.setup(pin_to_circuit, GPIO.OUT) GPIO.output(pin_to_circuit, GPIO.LOW) time.sleep(0.1) #更改pin back to input GPIO.setup(pin_to_circuit, GPIO.IN) #Count直到pin变高 while (GPIO.input(pin_to_circuit) ==GPIO.LOW):count +=1 return count#脚本中断时捕获,清理正确尝试:# 主循环 while True:打印 rc_time(pin_to_circuit)except KeyboardInterrupt:passfinally:GPIO.cleanup()
在 Raspberry Pi 上部署和运行代码
这一步非常简单,但我将快速完成这些步骤,以便您可以尽可能快速、顺利地在您的 Pi 上启动并运行它。就像本网站上的所有教程一样,如果您在安装 Raspbian 方面需要帮助,请查看我的 Raspbian 安装指南。
虽然在某些情况下应该已经安装了所有软件包,但可能没有。如果您想了解有关 GPIO 引脚以及如何更新和安装软件的更多信息,请务必查看我关于在 Raspberry Pi 上设置 GPIO 引脚的教程。
您可以使用 git clone 下载代码。以下命令将完全做到这一点:
git clone https://github.com/pimylifeup/Light_Sensor/cd ./Light_Sensor
或者,您可以复制并粘贴代码,只需确保文件是 Python 脚本即可。
sudo nano light_sensor.py
在文件中完成后,只需使用 ctrl x 然后y 保存并退出。
最后,使用以下命令运行代码:
sudo python light_sensor.py
我希望您现在可以运行脚本,并且您正在接收正确反映传感器上光线变化的数据。如果您遇到问题,请不要犹豫,在下面发表评论。
提高准确性和可能的用途
光传感器在电路中有无数用途。我只列举一些我在编写本教程时想到的。
- 光激活警报 – 我之前提到过这个,但是您可以使用 LDR 来检测它何时开始变亮,这样您就可以发出警报以唤醒您。如果程序和传感器是准确的,那么您可以在警报变轻的同时慢慢变大。
- 花园监控 – 可以在花园中使用光传感器来检查花园的某个区域获得了多少阳光。如果您种植需要大量阳光的植物,这可能是有用的信息,反之亦然。
- 房间监控 – 想确保某个房间的灯总是关着?每当在不应该出现的地方检测到光线时,您都可以使用它来提醒您。
这个很酷的小传感器可以做很多事情,但也要记住,如果你需要比光电管更精确的东西,那么看看像 Adafruit 高动态范围数字光传感器这样的东西。
我希望您能够毫无问题地设置这个 Raspberry Pi 光传感器。如果您确实遇到了问题,需要反馈,我错过了您想说的某些内容或其他任何内容,请随时在下面发表评论。
来源:Raspberry Pi 光传感器:一个简单的 LDR 教程
制造工艺