一起玩儿物联网人工智能小车(ESP32)——55. 利用光敏电阻实现追光小车(一)

本文主要是介绍一起玩儿物联网人工智能小车(ESP32)——55. 利用光敏电阻实现追光小车(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要:本文介绍使用光敏电阻实现追光小车

要想实现追光小车,首先需要找到可以反应光强的传感器。测量光强最常使用且价格便宜的就是光敏电阻和光敏二极管了。

光敏电阻器常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10M欧,在强光条件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。常见的光敏电阻如下图所示:

光敏电阻属半导体光敏器件,除具灵敏度高,反应速度快,光谱特性及阻值一致性好等特点外,在高温,多湿的恶劣环境下,还能保持高度的稳定性和可靠性,可广泛应用于照相机,太阳能庭院灯、草坪灯、路灯自动开关以及各种光控玩具,光控灯饰,灯具等光自动开关控制领域。

这次用在追光小车上使用的是光敏电阻模块,该模块如下图所示。

这种光敏电阻模块通常有两种,一种是3个引脚的,另一种是4个引脚的。两者的区别在于,3引脚的只有一个数字量输出,也就是只能输出高低电平两种状态,而4引脚的多了一个模拟量输出引脚,通过该引脚能够得到光敏电阻在光敏电阻前端分压电路中的电压值,通过这个电压值,可以得到光强的变化情况。因此,3引脚的通常用于根据光线控制灯亮灭的场合,而4引脚的则可以用在需要测量光线变化情况的场景。

我们在这里使用的是4引脚的光敏电阻模块,如下图所示:

在上图中可以看到,最左侧为一个光敏电阻,中部有一个灵敏度调节电位器,这个电位器的作用就是调节后端数字量输出口DO的变化的阈值,也就是当照射在光敏电阻上的光强达到多少时,DO的输出进行高低电平的切换。在控制路灯的应用中,可以通过调节此电位器来调节亮灯的时机。光敏电阻模块靠右侧还有两个LED指示灯,上面的是电源指示灯,下面的是DO输出指示灯。当光敏电阻接收到的光强大于事先的设定时,该LED会点亮。模块的最右侧为外接引脚,具体定义说明如下:

序号

标识

名称

说明

1

VCC

电源正极

3.3V~5V

2

GND

电源负极

3

DO

开关信号输出

表示光强是否大于事先设定值

4

AO

模拟信号输出

光敏电阻两端的电压输出,光强越强,电压值越小。

下面就来把光敏电阻模块与ESP32开发板连接起来,先来测试一下基本功能吧。在这里要使用的是模拟量接口AO,因为我们需要读取光强的变化以及进行多个光敏电阻模块采集到的光强进行比较,以此来决定小车的运动方向。具体的连接方式如下表所示:

光敏电阻模块

ESP32扩展板

VCC

+3.3V(注意这里别接错了)

GND

GND

AO

P34

这里的模拟量读取其实就是电压值的读取,这个在之前已经介绍过了,使用Arduino提供的标准函数analogRead()就可以了。具体程序代码如下所示:

void setup() {

  // put your setup code here, to run once:

  Serial.begin(115200);

}

void loop() {

  // put your main code here, to run repeatedly:

  Serial.println( analogRead(34) );

  delay(1000);

}

编译、运行该程序,就可以看到读入电压的数值了。如下图所示:

可以看到这个输出值,并不是具体的电压值,是要经过转换之后才会得到光敏电阻模块模拟输出引脚的电压值。由于这个转换是线性的,而我们只需要得到光强的变化情况,所以在后边的程序中,我们并不会转化为电压值再进行比较,而是直接使用这个值就可以进行各种比较、判断的操作了。

由于这是光电转换器件,在生产的时候会有一些离散性,或者模块采用了不同型号的光敏电阻,或者是产品质量的原因,导致不同的光敏电阻模块输出的电压相差较大,不利于后边进行比较、判断工作。因此最好是提前把每一个光敏电阻都接到ESP32开发板上,测试一下电压输出的情况,找一些一致性比较好的光敏电阻模块来使用,否则会影响小车的追光效果。

在选择光敏电阻模块的时候,需要注意以下几点:

  1. 最好在相对比较暗的环境中进行,周边环境不要太明亮,尤其不要阳光直射。因为光越强,光的变化越不明显。
  2. 通常情况下,在完全黑暗的时候,ESP32开发板采集到的数据应该是模数转换的最大值——4095,因为这个时候,光敏电阻的阻值应该是1M欧到10M欧。
  3. 在光线最强的时候,光敏电阻的采集值应该只有100左右,甚至更低,因为这个时候光敏电阻的阻值只有几百到几千欧。

4. 在剔除了最大和最小值偏离太大的光敏电阻模块之后,同时将这些光敏电阻模块接到ESP32开发板上,然后测试不同的光强下,输出保持基本一致的几个光敏电阻模块作为下一步的实验使用。

选择合适的光敏电阻模块非常的重要,对下一步实验的成功起着非常关键的作用。好了,本篇文章就到这里了,下一篇将完成追光小车的开发工作。

这篇关于一起玩儿物联网人工智能小车(ESP32)——55. 利用光敏电阻实现追光小车(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684306

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库