测试ESP32S基本模块的功能,并验证是否可以应用在AI智能车竞赛检测激光信号中
▌01 ESP32测试模块
在 ESP32-S模块转接板设计与实现 给出了基于 利用CH340C制作MicroPython ESP8266,ESP32的下载器-改进型 对于ESP32进行开发的方式。
1.设计AI视觉组检测系统
进一步的实验主要是针对 全国大学生智能车 的室内智能AI的智能车运行规则检测,这部分的验证在 智慧AI组对于激光投影的检测方案 已经开展。其中对于智能车在运行中的规则主要包括两部分内容:
- 检测由智能车发送的调制 调制后的激光信号;
- 检测智能车是否能够在规定范围内停留超过规定的时间(3秒钟)详细参见 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明 。
2.实验内容
(1)测试可用的ADC通道
根据功能要求,输入的ADC至少需要三路:
- 检测激光信号靶心;
- 检测激光信号周边,周边四个叠加在一起;
- 检测电磁感应信号;两路电磁信号串联在一起;
(2)测试能够检测125Hz的最小信号阈值
需要确认两种激光器,一种是大型的激光器,在 智慧AI组对于激光投影的检测方案 文给出了其中大型激光器的检测效果。
▲ 大型激光发射器
- 大型激光发射管
▲ 小型激光发射器
- 小型激光发射器
(3)测试激光接收阈值(最远,最近)
对于不同的距离,扩束光斑下的接受强度对比。
(4)测试检测电磁感应线圈
利用在 信标组裁判系统原理与实现 中的电磁感应的 原理,对于来自于磁感应线圈所感应到的车模通过脉冲判断是否车模通过。
(5)设计输出指示电路
- ■ 输出功能:
-
LED : ×2,红色,绿色
蜂鸣器:5V
按钮:复位功能
▌02 测试ESP32所有的AD通道
1.ESP32 AD通道
(1)ESP32的AD通道
根据 MicroPython快速参考 给出的信息,ESP32的AD通道出现在 Pins 32-39,供八个通道。它的基本应用程序为:
adc = ADC(Pin(32)) # create ADC object on ADC pin
adc.read() # read value, 0-4095 across voltage range 0.0v - 1.0vadc.atten(ADC.ATTN_11DB) # set 11dB input attenuation (voltage range roughly 0.0v - 3.6v)
adc.width(ADC.WIDTH_9BIT) # set 9 bit return values (returned range 0-511)
adc.read() # read value using the newly configured attenuation and width
根据 ESP32模块的MicroPython的基本实验 测量,如果使用ATTN_6dB可以获得输入信号幅值范围0 ~ 2V。如果使用ATTN_11DB,虽然输入的模拟电压的范围可以达到3.6V,但是超过3V之后便出现了非常明显的非线性。
(2)转接板引出通道
在 ESP32-S模块转接板设计与实现 所设计的ESP32的转接实验电路板一共引出的六路ADC(Pin32,33,34,35,36,39;没有Pin37,38)。
下面测试这两个通道是否都可以读取信号。
▲ ESP32转接测试版
2.测试每个通道的AD采集
测试方式使用在面包板,将由信号源 DG1062可编程数字信号源 通过125Hz的正弦波(方波,三角波),测量AD采集的通道和信噪比。
(1)测试ADC-36
【直接采集波形】
▲ 采集ADC波形
from machine import Pin,ADC
import time
adc = ADC(Pin(36))
adc.atten(ADC.ATTN_6DB)
SAMPLE_NUM = const(256)
addim = [0] * SAMPLE_NUM
for i in range(SAMPLE_NUM):adcn = adc.read()addim[i] = adcntime.sleep_ms(2)
print(addim)
【平均采集波形】
▲ 平均16的采集数据的波形
from machine import Pin,ADC
import time
adc = ADC(Pin(36))
adc.atten(ADC.ATTN_6DB)
SAMPLE_NUM = const(256)
AVERAGE_NUM = 16
addim = [0] * SAMPLE_NUM
for i in range(SAMPLE_NUM):adcn = sum([adc.read() for _ in range(AVERAGE_NUM)]) // AVERAGE_NUMaddim[i] = adcntime.sleep_ms(2)
print(addim)
(2)测试其它AD通道
PIN3 | PIN4 | PIN5 | PIN6 | PIN7 | PIN8 |
---|---|---|---|---|---|
ADC36 | ADC39 | ADC34 | ADC35 | ADC32 | ADC33 |
▲ 六个通道可以独自采集到各自的 信号
▌03 采集三个通道 ADC
1.通过中断采集三路ADC
(1)采集代码
from machine import Pin,ADC
import time
from machine import Timer
adc1 = ADC(Pin(36))
adc2 = ADC(Pin(39))
adc3 = ADC(Pin(34))
adc1.atten(ADC.ATTN_6DB)
adc2.atten(ADC.ATTN_6DB)
adc3.atten(ADC.ATTN_6DB)
SAMPLE_NUM = const(1024)
AVERAGE_NUM = 16
ad1dim = [0] * SAMPLE_NUM
ad2dim = [0] * SAMPLE_NUM
ad3dim = [0] * SAMPLE_NUM
sample_point = 0
def ADC3Sample(_):global ad1dim,ad2dim,ad3dimglobal sample_pointglobal adc1,adc2,adc3ad1dim[sample_point] = adc1.read()ad2dim[sample_point] = adc2.read()ad3dim[sample_point] = adc3.read()sample_point += 1if sample_point >= SAMPLE_NUM:sample_point = 0
time0 = Timer(0)
time0.init(period=1, mode=Timer.PERIODIC, callback=ADC3Sample)
while True:print(sample_point)ins = input('Press any key : ')if ins == 'q':print("User stop.")breakprint(ad2dim)
(2)采集到的波形
Ⅰ.【10Hz正弦波】
▲ 10Hz正弦波形
Ⅱ.【5Hz三角波】
▲ 5Hz三角波形
(3)采集结果分析
通过上面的采集到的波形,可以看到所采集到的波形:
- 采集频率为1000Hz;
- 采集到的数据的噪声很小;
2.检测125Hz信号
(1)ESP32代码
from machine import Pin,ADC
import time
from machine import Timer
import math
import cmath
adc1 = ADC(Pin(36))
adc2 = ADC(Pin(39))
adc3 = ADC(Pin(34))
adc1.atten(ADC.ATTN_6DB)
adc2.atten(ADC.ATTN_6DB)
adc3.atten(ADC.ATTN_6DB)
SAMPLE_NUM = const(512)
AVERAGE_NUM = 16
ad1dim = [0] * SAMPLE_NUM
ad2dim = [0] * SAMPLE_NUM
ad3dim = [0] * SAMPLE_NUM
sample_point = 0
def ADC3Sample(_):global ad1dim,ad2dim,ad3dimglobal sample_pointglobal adc1,adc2,adc3ad1dim[sample_point] = adc1.read()ad2dim[sample_point] = adc2.read()ad3dim[sample_point] = adc3.read()sample_point += 1if sample_point >= SAMPLE_NUM:sample_point = 0
SAMPLE_PERIOD = 1
time0 = Timer(0)
time0.init(period=SAMPLE_PERIOD, mode=Timer.PERIODIC, callback=ADC3Sample)
FREQUENCY_MOD = 125
sample_t = SAMPLE_NUM * SAMPLE_PERIOD / 1000.0
angle = [i * 2 * 3.1415926 * SAMPLE_PERIOD / 1000.0 * FREQUENCY_MOD for i in range(SAMPLE_NUM)]
cosdim = [math.sin(a) for a in angle]
sindim = [math.cos(a) for a in angle]
def sample_amp(s):global cosdim,sindimcos_sam = 0sin_sam = 0for i in range(SAMPLE_NUM):cos_sam += (s[i] * cosdim[i])sin_sam += (s[i] * sindim[i])return math.sqrt(cos_sam**2 + sin_sam**2)
while True:time.sleep_ms(500)ins = input('Input: ')if ins == 'q':breakprint((sample_amp(ad1dim), sample_amp(ad2dim), sample_amp(ad2dim)))
(2)扫频检测
I.【5Hz至200Hz】
▲ 扫描检测幅度 5Hz~200Hz
II.【110Hz至140Hz】
▲ 110Hz 至 140Hz 检测波形
III.【120Hz至130Hz】
▲ 扫描频率 120Hz~130Hz
3.加窗检测
(1)增加三角窗口
▲ 窗口没有同步形成的频谱
(2)增加汉宁窗口
▲ 不同频率下幅度
▲ 不同频率下检测幅度
▲ 不同频率下检测幅度
4. 计算时间
(1)保存采集数据
由于计算频谱需要一定的时间,所以需要将采集到的数组进行保存,以免出现采集新的数据干扰计算数据的情况。
- 进行保存或者锁定采集数据的方式:
-
(1)使用全局变量来对于采集过程进行锁定;
(2)利用Python中的List Copy的方式来保存采集到的数组,比如下面的代码;
def sample_amp(s):global cosdim,sindim,sample_pointcos_sam = 0sin_sam = 0w = 1.0scopy = s.copy()pointkeep = sample_pointfor i in range(SAMPLE_NUM):ii = i + pointkeepif ii >= SAMPLE_NUM: ii -= SAMPLE_NUMif i < SAMPLE_NUM / 2:w = i * 2 / SAMPLE_NUMelse: w = (SAMPLE_NUM - i) * 2 / SAMPLE_NUMcos_sam += scopy[ii] * cosdim[i] * wsin_sam += scopy[ii] * sindim[i] * wreturn math.sqrt(cos_sam**2 + sin_sam**2)
下图就是利用这种方法测量的不同频率的信号对应的计算的结果。可以看到这个结果与前面使用全局变量进行锁定所得到的结果是一致的。
▲ 不同频率对应的输出响应
(2)计算时间
使用ESP32的PIN2管脚来指示整个计算子程序所需要的时间。输出信号的高电平代表了进入计算子程序与离开子程序对应的时间。时间大约消耗40ms的时间。
▲ 测试计算512点的FFT所需要的时间
(3)将采集时间定位500ms
设置采集时间为500ms主要是为了对于感应线圈进行平均值,计算是否出现了快速变化的感应。
下面显示了通过加窗所计算得到的不同频率的响应。可以看到缩短之后的采集信号对于检测并没有太多的影响。
▲ 采集时间设定为500ms对应不同频率消耗所检测到的信号幅值
▌04 测试激光器
1.检测激光信号
通过 SP-1CL3 陶瓷接收管 光电接收二极管 红外线接收管 模块完成对于直射的激光器进行测试 。他的外部接口为:
【表4-1 激光检测模块接口】
PIN1 | PIN2 | PIN3 |
---|---|---|
3.3V | GND | OU |
▲ 光电检测模块
2.激光发射
在 智慧AI组对于激光投影的检测方案 测试了一款中等激光发射器,使用三极管控制开关进行调制后的检测方案。
下面测试一款功率相同(5mW)但封装更小的激光器。
▲ 两个激光发射头
驱动激光发射器的三极管的集电极电压信号。
▲ 驱动激光管发射器的三极管(NPN)集电极的信号
将激光管对准光电二极管所获得的光电二极管放大后的输出信号。
▲ 接收光电二极管输出信号
▲ 测试实验面包板
3.光信号扫描信号
利用 SH-20403 单轴步进驱动模块带动激光管扫描接收光电管,获得接收信号的检测幅值。
▲ 激光光斑信号
▲ 不同位置对应的扫描电压
▲ 不同位置对应的扫描检测电压
▲ 横向扫描的检测电压
▲ 横向扫描的检测电压信号
▌实验总结
通过实验验证以下的结论:
- 使用ESP32三个通道检测对输入的调制125Hz的激光光斑信号检测的软件的方法;
- 通过横向扫描检测量激光光斑的光强的变化:横向呈现大约4厘米;纵向呈现大约6厘米的光强的范围;
需要通过另外的验证,自身基于#ESP32的激光光斑检测方案。
■ 相关文献链接:
- ESP32-S模块转接板设计与实现
- 利用CH340C制作MicroPython ESP8266,ESP32的下载器-改进型
- 第十六届全国大学智能汽车竞赛竞速比赛规则
- 智慧AI组对于激光投影的检测方案
- 第十六届全国大学生智能车竞赛竞速组-室内视觉组补充说明
- 大型激光发射管
- 小型激光发射器
- 信标组裁判系统原理与实现
- MicroPython快速参考
- ESP32模块的MicroPython的基本实验
- DG1062可编程信号源
测试ESP32S基本模块的功能,并验证是否可以应用在AI智能车竞赛检测激光信号中相关推荐
- 基于ESP32的智能车竞赛新版裁判系统的软件功能要求与实现
简 介: 本文给出了第十六届智能车竞赛裁判系统最终的软件设计和功能实现.并进行了验证,是它可以满足比赛基本计时要求. 最后给出了完整的程序. 关键词: 智能车竞赛,ESP32,视觉AI §01 智能车 ...
- 测试第十七届智能车竞赛信标灯-初步测试
简 介: 本文对于来自于龙邱通过对于来自LQ发送过来的新版的信标灯进行测试,可以看到: 它可以与以往的信标灯控制器进行兼容: 通过光电检测,可以检测到上面经过的车模物体:无线车模上面安装磁铁. 关键词 ...
- Java黑皮书课后题第8章:*8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上。编写下面的方法,检测points数组中所有的点是否都在同一条直线上
*8.15(几何:在一条直线上吗)编程练习题6.39给出了一个方法,用于测试三个点是否在一条直线上.编写下面的方法,检测points数组中所有的点是否都在同一条直线上 题目 题目描述与运行示例 破题 ...
- 测试RDA5807收音机模块
一. 简介 这是一个购自于淘宝网店的RDA5807调频接收模块,价格只有3块钱人民币. RDA5807是一颗调频广播单芯片接收调谐芯片.只需要外部非常少的元器件,便可以组成一个完整的调频广播接 ...
- 测试使用2mH的工字型电感在接收150kHz导航信号中性能
简 介: 在 测试基于2SK241的150kHz的高频放大器 及其相关的博文讨论了使用自行绕制工字型电感接收在 全国大学省智能车竞赛 中节能信标组中的150kHz导航信号.下面讨论一下是否可以使用手边 ...
- 7款超级好用的AI智能工具,功能超越你的想象
分享7个好用的AI智能工具,都是日常能够经常用到的,有了它们可以大大提高工作学习效率! 1.Notion AI:AI写作 一个AI智能写作在线网站,只需要输入关键词就能快速生成一篇文章,可以大大提高办 ...
- boost::mpi模块is_mpi_op 功能的测试
boost::mpi模块is_mpi_op 功能的测试 实现功能 C++实现代码 实现功能 boost::mpi模块is_mpi_op 功能的测试 C++实现代码 #include <boost ...
- DCMTK:测试图像像素模块功能
DCMTK:测试图像像素模块功能 测试图像像素模块功能 测试图像像素模块功能 #include "dcmtk/config/osconfig.h" #include "d ...
- 关于Metasploit 5中测试模块的移植与验证
前言 如果针对某一程序或软件已经有了相应的渗透模块,此时再去写一个实现类似功能的模块就显得多此一举.然而,并非所有的渗透模块都是基于Metasploit框架开发的,其中有很多是用Perl.Python ...
最新文章
- js控制图片的缩放代码示例
- bat递归查找指定文件_dos命令find图文教程,查找搜索文件文本字符串,bat批处理脚本...
- 全图表征学习算法之无监督学习和基于卷积神经网络的监督学习
- 多目标跟踪 | AI产品经理需要了解的CV通识(三)
- vista系统 金山词霸 不取词翻译
- 基于迭代次数的多中心定位分类法
- 浏览器上网 (Safari Chrome)
- python 爬视频下载_Python爬虫进阶之爬取某视频并下载的实现
- boost::fruchterman_reingold_force_directed_layout用法的测试程序
- 在线文本字符串批量替换工具
- Linux 文件,目录的属性
- 增强型绿植植被指数_MODIS增强型植被指数EVI与NDVI初步比较-中国科学院.PDF
- python OOP面向对象笔记
- Java架构师 每日微笔记 0001
- 如何用阿里云服务器建立个人网站(针对新手)
- 着千奇百怪地求爱方式
- Raspberry Pi简介
- C Primer Plus NO.8
- 个人能力--认知能力
- 如何应对客户投诉,对上游部门如何投诉