激光传感器 - 从零开始认识各种传感器【第二十一期】

激光传感器|从零开始认识各种传感器

1、什么是激光传感器

激光传感器是一种利用激光技术来进行测量和检测的设备。这类传感器使用激光光束来探测目标物体的位置、距离、速度或其他特性。激光传感器具有精度高、测量距离长,抗干扰能力强的特点。

2、激光传感器是如何工作的 

激光传感器的工作原理主要依赖于激光光束与目标物体的相互作用,如反射、散射或吸收。具体的工作原理依据不同类型的激光传感器会有所不同。

区别于传统光源,激光具有高方向性,在几公里范围内的扩散也只有几厘米。他还具有高单色性,其频宽比普通光小十倍以上,激光束还具有高相干性和高亮度的特性,这是都是激光传感器的优势。

对于测量距离和移动,常用的测量方式是三角测量式:通过半导体激光将激光照射到目标物上,目标物的反射光会在受光镜头上聚焦,并成像在光接收元件上;距离一旦变动,聚焦的反射光角度也会改变,光接收元件上的成像位置也随之发生变化。由于该光接收元件上的成像位置变化随目标物的移动量而变化,因此可通过读取成像位置的变化量来测量目标物的移动量。

还有一种测量方式是时间测量式:它是通过测量激光从物体上反射回来所需的时间(TOF,即Time of Flight,飞行时间)来进行物体的定位和测量。当激光从物体上反射回传感器后,根据光的发射与反射的时间差,就可以计算出传感器与测量物体之间的距离。

图片

3、常见的激光传感器的种类 

激光传感器按照应用,可以分为激光测长,激光测距,激光测速几个种类。

3.1 测长激光传感器

现代激光长度计量多是利用光波的干涉现象来进行的,其精度主要取决于光的单色性的好坏。激光是最理想的光源,它比以往最好的单色光源(氪-86灯)还纯10万倍。因此激光测长的量程大、精度高。最大量程可达几十公里。在测量数米之内的长度时精度可达0.1微米。

图片

3.2 测距激光传感器

对于较短的距离测量一般采用激光三角测距法,激光束以一定的入射角度照射被测目标,激光在目标表面发生反射和散射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD位置传感器上。由于入射光和反射光构成一个三角形,运用几何三角定理就可以算出测量的距离。

对于较长的距离测量多采用脉冲式激光测距,它是针对激光的飞行时间差进行测距,由于激光脉冲发射具有高能量密度的特点,非常适合天文观察,地理探测方面的测量。

3.3 测速激光传感器

测速激光传感器,通常利用多普勒效应来测量物体的速度。多普勒效应是当发射者和接收者之间的相对运动,会导致接收到的波的频率发生变化的现象。以汽车喇叭为例:当汽车以一定速度靠近听者时,听到的声音频率会增高,而当汽车远离时,听者会感觉到声音频率降低。

由于激光的高能量密度特性,它也可以用来测量流体速度。激光输出被分成两束,汇聚到被测物体或者流体粒子上,由于被测物的移动以及两束激光存在的夹角,其返回的散射激光具备不同的多普勒频移,再与到达探测器的初始本振激光做计算,即可算出移动速度。

图片

4、激光传感器与其他传感器的比较 

这是常用的几种传感器的特性比较,包括了激光,红外线,超声,激光四种传感器的各自特点。可以看到激光在多项比较中都有较好的表现,但是在成本方面是红外线和超声传感器比较有优势。

5、激光传感器实验演示 

我们来演示使用 MCU 读取显示激光传感器的数据,实验中使用的是一款反射型TOF激光传感器。将手慢慢靠近传感器的上方,可以看到随着手的贴近,显示测量的物体距离数值不断减小,屏幕显示的距离示意光环也越来越接近圆心。

主代码:

import uos
import test.st7789 as st7789
from test.fonts import vga2_8x8 as font1
from test.fonts import vga1_16x32 as font2
import random
import framebuf
from machine import Pin, SPI, ADC,PWM,I2C,freq
import time, math,array
from utime import sleep_ms
import struct
import vl6180x
freq(180_000_000)st7789_res = 0
st7789_dc  = 1
disp_width = 240
disp_height = 240
CENTER_Y = int(disp_width/2)
CENTER_X = int(disp_height/2)
spi_sck=Pin(2)
spi_tx=Pin(3)
spi0=SPI(0,baudrate=60_000_000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)display = st7789.ST7789(spi0, disp_width, disp_width,reset=machine.Pin(st7789_res, machine.Pin.OUT),dc=machine.Pin(st7789_dc, machine.Pin.OUT),xstart=0, ystart=0, rotation=0)
display.fill(st7789.BLACK)buttonM = Pin(5,Pin.IN, Pin.PULL_UP) #B
buttonS = Pin(6,Pin.IN, Pin.PULL_UP) #A
buttonL = Pin(7,Pin.IN, Pin.PULL_UP) #A
buttonPRESS = Pin(8,Pin.IN, Pin.PULL_UP) #A
buttonR = Pin(9,Pin.IN, Pin.PULL_UP) #Ai2c = I2C(0, scl=Pin(21), sda=Pin(20))TOF=vl6180x.Sensor(i2c)
TOF.init()
TOF.default_settings()def light_dot(x,y,color):display.pixel(x,y,color)def draw_circle(x,y,r,color,fill=0):'''绘制圆形:param x,y  圆心坐标:param r  圆心半径:param fill 0 不填充  1 填充'''angleList = [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.7853981633974483, 0.8, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.5707963267948966, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2.0, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.356194490192345, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3.0, 3.05, 3.1, 3.141592653589793, 3.15, 3.2, 3.25, 3.3, 3.35, 3.4, 3.45, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8, 3.85, 3.9, 3.9269908169872414, 3.95, 4.0, 4.05, 4.1, 4.15, 4.2, 4.25, 4.3, 4.35, 4.4, 4.45, 4.5, 4.55, 4.6, 4.65, 4.7, 4.71238898038469, 4.75, 4.8, 4.85, 4.9, 4.95, 5.0, 5.05, 5.1, 5.15, 5.2, 5.25, 5.3, 5.35, 5.4, 5.45, 5.497787143782138, 5.5, 5.55, 5.6, 5.65, 5.7, 5.75, 5.8, 5.85, 5.9, 5.95, 6.0, 6.05, 6.1, 6.15, 6.2, 6.25, 6.283185307179586];for i in angleList:light_dot(x+round(math.sin(i)*r),y+round(math.cos(i)*r),color)if fill:powR = math.pow(r,2)for xx in range(x-r,x+r):for yy in range(y-r,y+r):if ( (math.pow(xx-x,2)+math.pow(yy-y,2)) < powR):light_dot(xx,yy,color)current_r = 0
turn = 0
while True :print(TOF.range())turn += 1if TOF.range() <200 :current_r = TOF.range() for i in range (current_r,current_r+3) :draw_circle(120,120,i,st7789.BLUE+0x10*current_r*turn,fill=0)if turn == 50 :turn = 0

其余代码请前往gitee查看。

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

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

相关文章

Linux下杀死进程和线程的方法

文章目录 1. 背景介绍2. 命令介绍2.1 kill 命令2.2 pkill 命令2.3 top 或 htop 命令2.4 ps 命令 3. 使用方法3.1 杀死指定PID的进程3.2 杀死指定用户的所有进程3.3 杀死所有特定名称的进程3.4 使用 top 或 htop 杀死进程 4. 代码示例5. 总结 1. 背景介绍 在Linux操作系统中&am…

电脑格式化了还能恢复数据吗?

在日常使用电脑的过程中&#xff0c;我们可能会因为各种原因需要格式化硬盘。然而&#xff0c;格式化操作会清除硬盘上的所有数据&#xff0c;很多人担心格式化后数据无法找回。本文将详细介绍电脑格式化后的数据恢复方法&#xff0c;帮助大家在不小心格式化硬盘后&#xff0c;…

安卓赤拳配音v1.0.3Ai配音神器+百位主播音色

Ai配音神器 本人自用版本&#xff01;超级稳定&#xff01;百位主播音色 登陆即可用 链接: https://pan.baidu.com/s/1NqSx32vB-xvij-1T_qYqxQ?pwdnb3b 提取码: nb3b

golang JSON序列化

JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 json历史 [外链图片转存失败,源站可能有防盗链机…

Nginx代理路径被吃

Nginx代理路径被吃的情况 日常工作中经常使用nginx反向代理一些资源&#xff0c;有时正常代理&#xff0c;发现代理不过去。 验证被吃调location情况 通过浏览器访问&#xff1a; https://zhao138969.com/LinuxPackage/Python/SelectDocker location /LinuxPackage { proxy…

⌈ 传知代码 ⌋ 利用scrapy框架练习爬虫

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…

苹果FaceTime诈骗泛滥,罪魁祸首是过时的隐私机制

在科技水平飞速发展的当下&#xff0c;手机、手表、电视等消费电子产品朝着智能化方向不断迭代。一方面&#xff0c;它们给我们的生活带来了便利。另一方面&#xff0c;这些电子产品经常被部分“有心人”利用&#xff0c;成为高科技电信诈骗的重要渠道之一。为了从你的手上骗取…

Android使用Fiddler模拟弱网络环境测试

之前安卓设置代理的步骤不再赘述 打开fiddler&#xff0c;默认情况下Rules –> Performances –> Simulate Modem Speeds 是未勾选状态&#xff0c;网络正常。当选中此选项&#xff08;模拟光猫网速&#xff09;后&#xff0c;网速就会变很慢&#xff0c;打开一个网页要加…

公布一批神马爬虫IP地址,真实采集数据

一、数据来源&#xff1a; 1、这批神马爬虫IP来源于尚贤达猎头公司网站采集数据&#xff1b; 2、数据采集时间段&#xff1a;2023年10月-2024年1月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“YisouSpider”&#xff0c;具体IP没做核实。 二、神马爬虫主…

DataKit之OpenGauss数据迁移工具

#1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld#2 当前JDK版本 wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gzvim /etc/profile export JAVA_HOME/usr/local/jdk-11.0.2 export …

Android开发中的简单控件(跟着动脑学院学习记录)

3.1 文本显示——使用TextView控件 3.1.1 设置文本的内容 TextView控件的文本内容可以通过XML属性android:text直接在布局文件中设置&#xff0c;也可以在Activity的Java/Kotlin代码中通过调用setText方法来动态设置。例如&#xff0c;在XML中设置文本为"Hello, World!…

ansys fluent流道分析得到的质量流率为负数

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

EtherCAT运动控制器上位机之Python+Qt(一):链接与单轴运动

ZMC408CE硬件介绍 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持8轴运动控制&#xff0c;最多可扩展至32轴…

一文速通GIT版本管理与分支控制

目录 1、了解Git功能 2、第一次使用Git&#xff08;首次配置好&#xff0c;后续不用再操作&#xff09; 打开git后端 设置用户签名 结果 3、初始项目架构 创建本地新仓库并初始化 文件添加到本地仓库 a.文件添加缓存区 b.缓存区内容提交到本地仓库 c.改写提交的注释 …

虚拟化数据恢复—重写文件系统导致Hyper-V虚拟机无法使用的数据恢复

虚拟化数据恢复环境&#xff1a; 一台服务器上部署的Hyper-V虚拟化平台&#xff0c;虚拟机的硬盘文件和配置文件放在一台某品牌MD3200存储中。该存储中有一组由4块硬盘组建的raid5磁盘阵列&#xff0c;还有一块大容量硬盘存放虚拟机数据文件的备份。 虚拟化故障&#xff1a; M…

10046 事件学习

一、作用 sql执行过程中所有动作和等待的追踪。 二、等级 level&#xff1a;12 包含常用的分析信息&#xff1a;基本信息绑定变量等待事件&#xff1b; level&#xff1a;1 基本信息&#xff1b; level&#xff1a;4 基本信息绑定变量 level&#xff1a;8 基本信息绑定变…

字体表绘制的理解

下载字体到项目根目录下&#xff0c;我们通过一些在写预览本地字体的网站&#xff0c;简单看一下 通过图片不难看出阴书与原文的对应关系&#xff0c;接下来通过程序去完成这一过程&#xff0c;通过 fonttools 处理 ttf&#xff0c;然后获取字体和文字对应的 xml 文件 下面简单…

Java并发(十五)Java并发工具类

CountDownLatch 字面意思为 递减计数锁。用于控制一个线程等待多个线程。 **CountDownLatch**** 维护一个计数器 count&#xff0c;表示需要等待的事件数量。**countDown 方法递减计数器&#xff0c;表示有一个事件已经发生。调用 await 方法的线程会一直阻塞直到计数器为零&a…

工作纪实54-git使用ssh方式

很多居家的小伙伴要重新clone项目&#xff0c;但是忘记了密码&#xff0c;最恶心的是idea还会自动帮你记录密码&#xff0c;如果输错了&#xff0c;会很恶心&#xff0c;使用ssh则不会&#xff1b;还有一个好处就是&#xff0c;集团的密码一般都是几个月更新一次&#xff0c;ss…