课程6:昉·星光开发板光敏传感器使用2之光强度数据读取
本次课程为昉·星光开发板IoT开发系列课程的第六讲,将带领同学们在昉·星光开发板上,更进一步的使用光敏传感器。
本次课程,在昉·星光开发板V1和V2上,操作步骤相同。
一、学习目标
- 学习昉·星光开发板使用光敏传感器的模拟输出
二、准备工作
在开始本次课程的实际操作之前,同学们需要做好一些准备工作,课程中涉及到的硬件如下:
- 开发板:昉·星光开发板
- 光线传感器: 带DO输出的光敏传感器
- 模数转换模块:ADS1115
- 杜邦线:若干
三、光敏传感器使用原理
本次课程中,使用的光敏传感器模块具体如下:
在这个光敏传感器上,提供了数字输出接口DO和模拟输出接口AO。
因为昉·星光开发板自身没有ADC模块,因此本次课程,专门使用了一块ADC模块,用于帮助开发板读取光敏传感器的模拟输出信息,从而火照光照强度数值。
在这个光敏传感器顶部,有一个光敏电阻,由于光电效应,光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低。反之,输出低电平信号。随着电阻值的变化,其模拟输出口AO的电压信号也会发生变化,再使用ADC模块即可将电压信号转变位数字信号。
本次课程使用的ADC模块为ADS1115,具体如下:
ADS1115是一个16位精度的ADC信号转换模块,使用IIC接口与开发板通讯,能同时测量4组电压信号进行转换,可以工作在2V至5.5V,可以配合多种开发板、单片机使用,在汽车、电视、传感器等非常多的应用场合都能使用。
四、光敏传感器使用
通过上述光敏传感器的原理,我们可以得知,要获取其测量的具体光线强度值,需要通过ADS1115来进行模数转换。
首先,将光敏传感器模块的AO接口与和ADS1115的A0接口相连,使得ADS1115能够获取光敏传感器输出的模拟电压信号。
然后,参考下图,将ADS115连接到昉·星光开发板:
实物连接如下:
注意:
应根据实际使用的传感器,确定供电电压。本次课程中使用的光敏传感器模块和ADS1115模块,均使用5V供电电压。
然后,编写如下的程序:
# -*- coding: utf-8 -*-
# file: ~/projects/light/light_ao.py
import ADS1115
import time
import numpy
# 初始化ADS1115模块
ads = ADS1115.ADS1115()
while True:
# 读取ADS1115模块通道0的数据,也就是A0
volt = ads.readADCSingleEnded(0)
# 转换
per = numpy.interp(volt, [0, 5000], [0, 100])
# 输出信息
print("%d mV of A0, val is %f" % (volt, per))
# 延时
time.sleep(0.1)
上述程序的逻辑,通过ADS1115,检测光敏传感器模块的AO输出,然后转换到对应的光照强度数值。
要运行以上的程序,还需要安装相应的第三方支持库numpy和ADS1115。但ADS1115扩展库默认使用的是i2c-1,但是我们的开发板使用的是i2c-0,所以需要在安装扩展库以后,需要进行一下处理才能使用,具体如下:
# 安装扩展库
pip install smbus
pip install numpy
pip install ADS1115
# 修改ADS1115库文件
vi ~/.local/lib/python3.10/site-packages/ADS1115/__init__.py
# 将该文件中的 smbus2.SMBus(1) 修改为 smbus2.SMBus(0),然后保存退出
编写完成后,运行 light_ao.py ,然后尝试不同的光照情况。
python3 light_ao.py
实际运行结果如下:
在明亮的环境下测试的结果如下:
使用不透明材料包裹光线传感器的感光部分:
使用手电筒照射光线传感器的感光部分:
五、总结
在本次课程中,我们学习了光敏传感器的模拟输出信号的读取。
通过光敏传感器获取当前环境光线强度数据,在很多场合都有使用。现在有很多台灯,能够根据当前环境的光线强度,自动调节灯光的来说,号称智能台灯,就是采用了光线传感器。
六、课后作业
- 了解光敏传感器的模拟输出和ADS1115模数转换器
- 配合三个LED灯,在当前环境光照太强时,红灯告警,在当前环境光照太弱时,黄灯告警,当光照强度适中时,显示绿灯
- 使用多颗LED辅助,使得根据当前环境光照情况,自动控制一定数量的LED灯点亮或者熄灭,从而达到一个稳定的光照环境。
七、参考资料
- [DFRobot I2C ADS1115 16位AD转换模块]DFROBOT_Gravity: I2C ADS1115 16-Bit ADC模块_DFR0553__产品说明_使用教程)