一起玩儿物联网人工智能小车(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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import