树莓派如何通过 GPIO 使用光敏电阻传感器?

在此树莓派光传感器教程中,我向您展示如何将光敏电阻传感器正确连接到 GPIO 引脚。

最后,我向您展示如何在简单的 python 脚本中使用它,以便您可以收集和使用其中的数据。

该光敏电阻是我将要考虑的另一种传感器,它可以结合到未来的项目中,例如光激活闹钟。

我将进一步解释该电路中将要使用的每个部分。如果您需要更多有关这些的信息,请务必仔细阅读。

重要的是要注意,对于本教程,我只是使用一个简单的光电传感器。虽然这些传感器非常适合某些任务,但它们可能不如您希望的那样精确。

如果要逐步了解如何设置光传感器电路和代码,请务必检查设备列表下方的视频。

设备

您将需要以下设备才能完成本树莓派光传感器教程。

您可以在没有面包板的情况下进行此操作,但是如果您打算进行大量电路工作,我强烈建议您投资一些。

推荐的

  • 树莓派

  • 电源

  • Micro SD 卡

  • 以太网线或 * Wifi 加密狗

  • 光传感器 (LDR 传感器)

  • 1uF 电容器

可选的

  • 树莓派外壳

  • USB 键盘

  • USB 鼠标

  • GPIO Breakout Kit

  • 面包板

  • Breadboard Wire

视频

该视频几乎包含了本教程文本版本的所有内容。如果您希望看到完成的事情,那就完美了。完成后,您还将了解电路应如何运行。

您可以在视频下方找到文字说明和信息。

树莓派光传感器电路

我们将为本教程制作的电路非常简单,对于刚开始使用电路的任何人都非常有用。

光敏电阻 (LDR)

[光敏电阻](也称为 LDR 传感器) 是我们电路中最重要的设备。没有它,我们将无法检测它是暗还是亮。

在光线下,该传感器的电阻只有几百欧姆,而在黑暗中,它的电阻可能只有几兆欧。

电容器

电路中包含了电容器,因此我们能够测量 LDR 传感器的电阻。

电容器本质上就像电池,在接收电力时充电,然后在不再接收电力时放电。通过与 LDR 串联使用,我们可以计算出 LDR 所产生的阻力,从而能够判断它是亮还是暗。

电路组装

要正确构建光传感器电路,请执行以下步骤。或者,检查步骤下面的电路图。

在以下步骤中,我指的是引脚的物理编号 (逻辑顺序)。

1 首先,将引脚 1 (3v3) 连接到面包板上的正极导轨。

2 接下来,将引脚 6 (接地) 连接到面包板上的接地导轨。

3 现在,将 LDR 传感器放置在板上,并从一端到正极导轨连接一根导线。

4 在 LDR 传感器的另一侧,放置一根引回树莓派的导线。将其钩到 #7

5 最后,将电容器从导线到面包板上的负轨放置。确保电容器的负极引脚位于负极轨中。

现在,我们准备开始使用 Python 代码。如果电路有任何问题,请参考下图。

光传感器代码

该项目的代码非常简单,可以大致告诉我们它是亮的,阴暗的还是完全黑暗的。

如果您不熟悉 Python ,建议您快速学习一下 Python 的基础知识。

该电路面临的最大问题是 Pi 没有任何模拟引脚。它们都是数字的,因此我们无法准确地测量输入电阻的方差。在运动传感器教程中,模拟引脚的缺乏不是问题,因为它的输出是高电平还是低电平 (数字)。取而代之的是,我们将测量电容器充电并将其引脚拉高所需的时间。此方法是分辨是浅色还是深色的简单但不准确的方法。
我将简要解释树莓派光传感器代码及其作用。如果需要代码,可以将其复制并粘贴或从我的 GitHub 下载。

首先,我们导入所需的 GPIO 包,以便我们可以与 GPIO 引脚进行通信。

我们还导入了” 时间” 包,因此我们可以在需要时将脚本置于休眠状态。

#!/usr/local/bin/python

将 RPi .GPIO导入为 GPIO 
导入时间

然后,我们将 GPIO 模式设置为”GPIO.BOARD”,这意味着我们在此脚本中使用的所有编号都将引用引脚的物理编号。

由于我们只有一个” 输入 / 输出” 引脚,因此我们只需要设置一个变量即可。将此变量设置为用作输入 / 输出引脚的引脚号。

GPIO.setmode(GPIO.BOARD)

#定义进入电路的引脚
pin_to_circuit = 7

接下来,我们有一个名为 rc _time 的函数,该函数需要一个参数,即电路的引脚号。在此函数中,我们初始化一个名为 count 的变量,一旦引脚变为高电平,我们将返回该值。

然后,我们将引脚设置为输出,然后将其设置为低电平。接下来,让脚本休眠 10ms 。

之后,我们将引脚设置为输入,然后输入”while 循环”。我们一直处于这个循环中,直到引脚变为高电平为止,此时电容器充电到大约 3 /4

引脚变为高电平后,我们将计数值返回至主功能。您可以使用此值来打开和关闭 LED ,激活其他功能或记录数据并保持有关灯光变化的统计信息。

def rc_time(pin_to_circuit):
    计数= 0

    #在引脚上输出
    GPIO.setup(pin_to_circuit,GPIO.OUT)
    GPIO.output(pin_to_circuit,GPIO.LOW)
    time.sleep(0.1)

    #将引脚改回输入
    GPIO.setup(pin_to_circuit,GPIO.IN)

    #计数直到引脚变高
    而(GPIO.input(pin_to_circuit)== GPIO.LOW):
        计数+ = 1

    退货计数

#在脚本中断时捕获,正确清理
尝试:
    #主循环
    而 True :
        打印(rc_time(pin_to_circuit))
除了 KeyboardInterrupt :
    通过
最后:
    GPIO.cleanup()

在树莓派上运行代码

这一步非常容易,但是我将快速完成这些步骤,以便您可以使其尽可能快速,平稳地在 Pi 上运行。

像该网站上的所有教程一样,我正在使用 Raspbian 。如果您需要安装它的帮助,请查看我的 Raspbian 安装指南。

尽管所有软件包都应该已经安装,但在某些情况下可能没有安装。

如果您想了解有关 GPIO 引脚以及如何更新和安装软件的更多信息,请务必查看我的有关设置 [树莓派上的 GPIO 引脚] 的教程

您可以使用 git clone 下载代码。以下命令恰好可以做到这一点。

git clone https://github.com/pimylifeup/Light_Sensor/
cd ./Light_Sensor

另外,您可以复制并粘贴代码,只需确保文件是 Python 脚本即可。

sudovimlight_sensor.py

完成文件操作后,只需先按 ctrl x 然后 y 进行保存并退出。

最后,使用以下命令运行代码。

sudo python light_sensor.py

希望您现在可以执行脚本,并且希望收到的数据能够正确反映传感器上光线的变化。如果您遇到问题,请与我联系。

提高准确性和可能的​​用途

电路中的光传感器有无数用途。我只列出我在编写本教程时想到的一些内容。

光激活警报 –我之前提到过,但是您可以使用 LDR 来检测它何时开始发光,以便发出警报叫醒您。如果程序和传感器准确无误,则可以使警报随着声音变轻而逐渐变大。

花园监视器 –可以在花园中使用光传感器来检查花园中某个区域正在吸收多少阳光。如果您种植的东西需要大量阳光,反之亦然,这可能是有用的信息。

房间监视器 –是否要确保在某个房间中总是关闭灯?只要检测到不应有的光线,就可以用它来提醒您。这个超酷的小型传感器可以做很多事情,但也要记住,如果您需要比光电管更精确的东西,那么请看一下 [Adafruit 高动态范围数字光传感器]

分享到