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

相关文章

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.