《树莓派项目实战》第九节 使用PCF8591模块和光敏电阻传感器测量光照强度

news2024/10/6 6:52:58

目录

8.1 PCF8691模块引脚介绍

8.2 工作原理

8.3 开启I2C接口

8.4 连接到树莓派

8.5 编写代码测量光照强度


在上一节我们使用光敏电阻传感器检测了环境中的光照是否达到了设定的阈值。在本节,我们将使用PCF8591模块和光敏电阻度传感器测量环境中光照强度的具体值,该项目设计到的材料有:

  1. 树莓派 * 1
  2. 面包板 * 1
  3. 杜邦线若干
  4. PCF8591模块 * 1
  5. 光敏电阻传感器 * 1

 

8.1 PCF8691模块引脚介绍

PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS 数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591模块上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

左侧外扩排针接口:

AOUT:芯片DA输出接口

AIN0:芯片模拟输入接口0

AIN1:芯片模拟输入接口1

AIN2:芯片模拟输入接口2

AIN3:芯片模拟输入接口3

右侧外扩排针接口:

SCL:I2C 时钟接口,接树莓派SCL引脚

SDA:I2C 数字接口,接树莓派SDA引脚

GND:接地

VCC:电源接口 外接 3.3V-5V

下方共有两行三列排针接口:

J4列排针选择热敏电阻接入电路

J5列排针选择光敏电阻接入电路

J6列排针选择0-5V可调电压接入电路

注:读者的PCF8591模块上可能写的是P4、P5、P6。

8.2 工作原理

上一节提到通过光敏电阻传感器的AO引脚可以的值光照强度,但是该引脚输出的是模拟信号,树莓派因为没有AD转换器所以不能直接读取模拟信号。因此,我们需要PCF8591模块将模拟信号转换成数字信号,最后将数字信号传到树莓派上。

注:AD转换器有时候会直接简称为ADC,即Analog to Digtal Converter,作用就是将将模拟信号转换成数字信号。

8.3 开启I2C接口

PCF8591模块采用的是I2C总线进行通信的,但是在树莓派的镜像中默认是关闭的,在使用该传感器的时候,我们必须首先允许I2C总线通信。

第一步:在终端中输入sudo raspi-config

 第二步:选择Interface Options

 第三步:选择I2C

  第四步:选择<是>

8.4 连接到树莓派

光敏电阻传感器:

  • VCC引脚连接到树莓派的2号5V引脚上。
  • GND引脚连接到树莓派的6号GND引脚上。
  • AO引脚连接到PCF8591模块的A0引脚上。

PCF8591模块:

  • VCC引脚连接到树莓派的2号5V引脚上。
  • GND引脚连接到树莓派的6号GND引脚上。
  • SCL引脚连接到树莓派的5号SCL引脚上。
  • SDA引脚连接到树莓派的3号SDA引脚上。

连接完毕之后,我们在终端中输入以下命令获取PCF8591的设备地址,得知设备地址为0x48。

sudo i2cdetect -y 1

 

8.5 编写代码测量光照强度

在编写代码前,我们需要在树莓派上下载smbus库,通过这个库我们能够很方便的读取到I2C引脚上的值。

pip install smbus

编写代码如下: 

import time
import smbus
import RPi.GPIO as GPIO


# 设置编码方式
GPIO.setmode(GPIO.BOARD)

# 设备地址
device_address = 0x48

# 创建smbus实例对象
bus = smbus.SMBus(1)

def read(address):
    """从设备地址读取值"""
    bus.write_byte(address, 0x40)
    return bus.read_byte(device_address)

try:
    while True:
        light_value = read(device_address)
        if light_value:
            print(f"光照强度为:{light_value}")
            time.sleep(0.1)

except KeyboardInterrupt:
    print("停止测量!")
    GPIO.cleanup()

1. smbus.SMBus(1)中的1代表树莓派中的/dev/i2c-1文件。如果传入0,则表示/dev/i2c-0文件。具体传入0还是1,得看树莓派中有哪一个文件。

2. 自定义的read()函数用来从设备地址读取光照值,在读取之前我们需要调用write_byte()方法往设备地址发送一个控制字节0x40,控制字节用于控制器件的各种功能,如模拟信号由哪几个通道输入等。0x40代表PCF8591的A0通道。如果光敏电阻传感器的AO引脚连接的是A1,则发送控制字节0x41;如果是A2,则发送0x42;如果是A3,则发送0x43。

3. light_value是模拟信号经过AD转换器后得出的数字值,范围在0-255之间。光照越强,light_value的值就越低。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Continua CI捆绑的PostgreSQL数据库服务

Continua CI捆绑的PostgreSQL数据库服务 捆绑的PostgreSQL数据库服务已升级到15.1版。 现在可以使用表达式和变量在“配置存储库分支映射”对话框中为每个存储库指定默认分支。 在“停止”操作中添加了“将失败视为错误”选项。如果选中此项并且该操作位于“Try”块内&#xff…

Qt 模型视图编程之可编辑数据模型

背景 Qt 模型视图编程中模型定义了标准接口对数据进行访问&#xff0c;可根据需求继承对应的抽象模型类来实现自定义的数据模型。一个基本的数据模型至少要实现以下虚函数&#xff1a; ①&#xff0e;rowCount&#xff1a;行数&#xff0c;返回要显示多少行&#xff1b; ②&…

SpringBoot+Vue实现在线电子小说网站

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

伙伴福利,100个项目彻底精通Java!【开源】

为了帮助更多的小伙伴&#xff0c;快速成长进步&#xff0c;冲进大厂中厂&#xff0c;我分享了很多的项目哟&#xff0c;例如&#xff1a; java项目精品实战案例 | JavaSwing实战项目 但很多小伙伴&#xff0c;还觉得不够&#xff0c;好吧&#xff01;今天就拿出压箱底的项目…

CPU工作原理概述

为了了解CPU的完整工作过程&#xff0c;我们需要知道两件事&#xff0c;第一&#xff0c;CPU是如何获取到数据或者指令的&#xff1b;第二&#xff0c;CPU是如何执行指令的。 目录 一、CPU和内存的交互方式 1、地址空间的概念 2、CPU的取值过程 二、CPU内部的执行过程 1、…

OceanBase-安装

文章目录部署规划机器准备统一配置hosts设置设置机器名和静态ip关闭大页配置信息查看时钟源ntp配置&#xff08;需要所有机器root&#xff09;磁盘规划创建用户配置limits.conf配置sysctl.conf关闭防火墙关闭SELinux克隆虚拟机差异化配置中控机设置无密码SSH登录目标机器时钟源…

【推送位置苹果群发iMessage推】如果Windows和Linux实现不同的传输层协议,那末因为数据格式的不同

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

Qt-Web混合开发-QWebEngineView加载网页最小示例(2)

Qt-Web混合开发-QWebEngineView加载网页最小示例 2&#x1f30d; 文章目录Qt-Web混合开发-QWebEngineView加载网页最小示例 2&#x1f30d;1、概述&#x1f310;2、实现效果&#x1f9ed;3、实现功能&#x1f685;4、关键代码&#x1f69a;5、源代码&#x1f680;更多精彩内容&…

高斯定理的理解——工程电磁场 P2~P5

证明&#xff1a;静电场是无旋场 根据斯托克斯公式上式等于 电位的引入 由于静电场是无源场&#xff0c;我们可以得到 又因为 再结合电场的物理意义&#xff0c;我们可以定义 功函数表达式的化简 原先功函数表达式 高斯定律的理解 不管是导体还是电解质&#xff0c;对于电…

【图像处理】FAST、BRIEF、ORB算法原理

整理FAST、BRIEF、ORB算法的原理。 FAST算法 一、FAST简介 FAST&#xff08;features from accelerated segment test&#xff09;是一种角点检测算法&#xff0c;可以用于提取特征点&#xff0c;后来也长用于目标跟踪等计算机视觉任务中。FAST角点检测算法最初由 Edward Ro…

LL(1)文法分析程序

一、实验目的 设计一个非递归预测分析器&#xff0c;实现对表达式语言的分析&#xff0c;理解自上而下语法 分析方法的基本思想&#xff0c;掌握设计LL&#xff08;&#xff09;文法分析程序设计的基本原理和方法。 根据给定LL&#xff08;1&#xff09;分析表&#xff0c;输入…

22-31-spark-核心编程-RDD概念及理解

22-spark-核心编程-RDD概念&#xff1a; 分布式计算基础测试&#xff1a; big-data-study\Spark-demo\src\main\java\spark\core\com\zh\test02 Spark 核心编程 Spark 计算框架为了能够进行高并发和高吞吐的数据处理&#xff0c;封装了三大数据结构&#xff0c;用于处理不同的…

vscode 离线安装ssh

首先打开官方插件地址&#xff1a;https://marketplace.visualstudio.com/VSCode 然后输入ssh 下载这两个插件&#xff1a; 安装这两个插件&#xff1a; 这样便在windows下安装成功了ssh。 接下来需要在服务器端进行配置。 首先查看windows上的vscode版本&#xff1a; 这…

Arduino 崩溃或挂起的 7 种方式及如何防止

Arduino 崩溃或挂起的 7 种方式&#xff08;以及如何防止它发生&#xff09; 作者&#xff1a;Chris in Arduino 查看原文 为了帮助防止Arduino崩溃或挂起&#xff0c;我进行了一系列实验&#xff0c;以确定Arduino崩溃&#xff0c;挂起&#xff0c;重置&#xff0c;冻结&am…

5.大型电商项目之创建前端展示模板并调用

1. templates前端模板的使用 1.1 templates前端模板的创建 首先&#xff0c;我们页面很多地方是相似的&#xff0c;这里就创建一个基础模板&#xff0c;不同的地方&#xff0c;对模板内容的block进行修改即可&#xff1b;对于相同的地方&#xff0c;我们就使用include包含即可…

B. Hossam and Friends #837 div2

Problem - B - Codeforces 题意就是给你m个数对&#xff0c;这两个人不是好朋友&#xff0c;其他的所有人都是好朋友&#xff0c;问1~n里面有多少个区间里面所有数都是好朋友 分析: 这题我分析的没错&#xff0c;但是在计算区间的时候&#xff0c;想的复杂了&#xff0c;用模…

JS中,a标签里的javascript:;和 javascript:void(0)还有##

目录 1. javascript:;【常用】点击链接之后不会刷新页面&#xff0c;不会跳转链接&#xff0c;也不会传递参数 2. javascript:void(0) 【少用】点击链接后不会刷新页面&#xff0c;不会跳转链接&#xff0c;也不会传递参数 3. a标签中的# 点击链接后会刷新页面…

Spring Batch批处理-作业Job简介

引言 书接上篇Spring Batch 批处理入门案例解析&#xff0c;上篇带小伙伴们写了一个Spring Batch 入门案例解析&#xff0c;本篇就开始批处理正文啦&#xff0c;今天先对作业Job做个全面了解。 作业介绍 目前很多项目都流程的概念&#xff0c;比如web应用&#xff0c;集成应…

Java基础03_数据类型

数据类型 强类型语言 要求变量的使用要严格符合规定&#xff0c;所有的变量必须先定义后使用&#xff1b;安全性高但是速度低&#xff1b; 弱类型语言 例如&#xff1a;‘12’ 3 123 或者 ‘12’ 3 ‘123’ 在强类型语言中是有明显的区别的。而在弱类型语言中是不区分的…

算符优先分析器的构造

一、实验目的 &#xff08;1&#xff09;理解自底向上的语法分析的基本思想。 &#xff08;2&#xff09;理解算符优先文法的概念。 &#xff08;4&#xff09;掌握算符优先分析器的工作原理和工作流程。 &#xff08;3&#xff09;掌握算符分析表和优先函数的构造。 二、实验…