树莓派GPIO使用光敏电阻,感受光线的变化

在这个Raspberry Pi光传感器教程中,我将展示了如何将光敏电阻传感器连接到树莓派的GPIO引脚上,让树莓派能够感知到光线的变化。

Raspberry-Pi-Light-Sensor.jpg

光敏电阻是一个非常好用的传感器,可以将其融入很多的项目中,比如做一个光动闹钟。

我会详细记录电路连接,解释每一行代码。

需要注意的是,在教程中我只是使用一个简单的光电传感器,它们可能没有你想要的那么精确。

设备清单

要完成这篇教程,需要准备如下的设备。

建议

可选

树莓派光传感器电路

要做的这个电路超级简单,非常适合刚开始接触电路的人。

光敏电阻(LDR)

光敏电阻又称LDR传感器,是电路中最重要的设备之一,如果没有它,就无法检测出所处的环境是暗还是亮。

在有光的地方,这个传感器的电阻只有几百欧姆,在黑暗中,它的电阻可以达到几兆欧姆。

电容

我的电路中包含了电容,以便于测量LDR传感器的电阻。

电容本质上就像电池一样,在连接电源时充电,不连接电源时就放电。利用这一特点与LDR串联,可以计算出LDR的电阻有多大,从而能够判断出它所处的环境是暗还是亮。

电路连接

要想正确搭建光传感器电路,请按照下面的步骤进行操作。另外,也可以查看步骤下面的电路图。

在以下步骤中,我指的是引脚的物理编号。

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

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

3. 现在把LDR传感器放在板子上,让一根线从一端走到正极。

4. 在LDR传感器的另一侧,放置一根导线,回到树莓皮。将其挂在7号针脚上。

5. 最后,将电容从导线放到面包板的负轨上。确保电容器的负极引脚在负极轨道上。

现在电路已经准备好了,可以写Python代码了。如果对电路有问题,请参考下图。

Light-Sensor-Circuit.jpg

光传感器代码

这个项目的代码非常简单,会展示环境大概是光亮、阴暗还是完全黑暗。

在这个电路中面临的最大问题是,Pi没有模拟引脚,都是数字的,所以无法准确测量输入端的电阻变化。

在运动传感器教程中,这种模拟引脚的缺乏并不是一个问题,因为它的输出不是高电平就是低电平。为了解决这个问题,我将测量电容充电时让引脚高电平所需的时间。这种方法是一种简单但不准确的方法,可以判断是亮还是暗。

首先,导入需要的GPIO包,这样就可以与GPIO引脚进行通信。

我还导入了时间包,所以能够在需要的时候让脚本进入睡眠状态。

#!/usr/local/bin/python

import RPi.GPIO as GPIO
import time

然后将GPIO模式设置为GPIO.BOARD,在这个脚本中使用的所有编号都将参考引脚的物理编号。

由于只有一个输入/输出引脚,只需要设置一个变量。将这个变量设置为作为输入/输出引脚的编号。

GPIO.setmode(GPIO.BOARD)

#define the pin that goes to the circuit
pin_to_circuit = 7

接下来,创建一个叫做rc_time的函数,它需要一个参数,就是电路的引脚号。在这个函数中,初始化一个叫做count的变量,一旦引脚到了高电平,就会返回这个值。

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

之后,再将引脚设置为输入,进入一个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)

    #Change the pin back to input
    GPIO.setup(pin_to_circuit, GPIO.IN)
  
    #Count until the pin goes high
    while (GPIO.input(pin_to_circuit) == GPIO.LOW):
        count += 1

    return count

#Catch when script is interrupted, cleanup correctly
try:
    # Main loop
    while True:
        print(rc_time(pin_to_circuit))
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

在Raspberry Pi上运行代码

和本网站的所有教程一样,我使用的是Raspbian。

可以使用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

希望到这里,你已经成功连接的电路,运行了代码,如果有问题,请不要犹豫,在下面留言。

平均: 5 / 5. votes: 1

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 树莓派GPIO使用光敏电阻,感受光线的变化

赞 (1)

2 评论

4+3=

  1. 机械狮

    衷心感谢引用,并留下链接

    回复