基于ESP32的竞赛裁判系统功能调试-激光信号调试
简 介: 通过揣进测试了新版的基于ESP32的裁判系统对于激光信号的检测能力。
关键词
: 智能车竞赛,125Hz,激光信号
§01 智能车竞赛裁判系统
对于 基于ESP32的智能车竞赛裁判系统 中对于室内AI视觉组判别的要求在博文 AI视觉组基于ESP32的裁判系统第一版本设计要求 已经给出。这些裁判系统的功能最终可以由调制激光信号检测以及车模通过检测两个功能组合而成。下面继续调试在 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6 基础上的激光调制信号检测功能。
1、检测激光信号要求
检测经过125Hz调试的激光光斑信号。
- 指标要求:
-
灵敏度:5mW红色激光,光斑直径在5厘米左右
响应时间:小于500ms
检测点:5个,分为两组;一组为一个监测点,位于靶心检;另外一组包括四个检测点,位于目标四周检;
相应形式:红色LED(直径大于10mm)、绿色LED(直径大于10mm)、蜂鸣器;
▲ 光电检测传感器的位置分布
功能描述:
- 对于水果目标靶,如果靶心检测点检测到信号,而四周检测点没有检测到信号,则表示激光发送成功;如果任何一个四周检测点检测到激光信号,都表示激光发送失败;
- 对于动物目标靶,任何一个检测点检测到激光信号,都表示激光投射失败;
- 检测到激光发送成功时,绿色LED点亮,同时蜂鸣器鸣叫,五秒钟后停止; 检测到激光发送失败时,红色LED闪烁,频率10Hz,占空比50%,持续时间五秒钟,同期蜂鸣器也做相同的断续鸣叫。
▲ 目标靶位上的响应LED
§02 测试激光检测
1、激光信号检测
在 ESP32检测调制激光信号程序优化 中,对于采集激光信号中检测算法进行了优化。检测一个通道激光信号的时间,从原来的的40ms左右,提高到11ms。 下面的程序就是基于优化后的算法实现。
(1)测试代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST3.PY -- by Dr. ZhuoQing 2021-06-10
#
# Note:
#============================================================from machine import ADC,Timer,Pin,freq
import time
import math#------------------------------------------------------------
led = Pin(5, Pin.OUT)
freq(240000000)#------------------------------------------------------------
speaker = Pin(21, Pin.OUT)#------------------------------------------------------------
adc1 = ADC(Pin(36))
adc2 = ADC(Pin(39))
adc3 = ADC(Pin(34))
adc4 = ADC(Pin(35))adc1.atten(ADC.ATTN_6DB)
adc2.atten(ADC.ATTN_6DB)
adc3.atten(ADC.ATTN_6DB)
adc4.atten(ADC.ATTN_6DB)SAMPLE_NUM = const(500)
AVERAGE_NUM = 16ad1dim = [0] * SAMPLE_NUM
ad2dim = [0] * SAMPLE_NUM
#ad3dim = [0] * SAMPLE_NUM
#ad4dim = [0] * SAMPLE_NUMSAMPLE_AVERAGE_LENGTH = 40
ad3average = [0] * SAMPLE_AVERAGE_LENGTH
ad4average = [0] * SAMPLE_AVERAGE_LENGTH
ad34point = 0
ad3sigma = 0
ad4sigma = 0#------------------------------------------------------------
AD34_BASE_ALPHA = 0.0005
ad3baseline = 0
ad4baseline = 0AD34_CHECK_THRESHOLD = 250
ad3checktime = 0
ad4checktime = 0#------------------------------------------------------------
sample_point = 0
stop_flag = 0sample_mode = 1 # 0 : sample adc3, adc4# 1 : sample adc1, adc2total_count = 0#------------------------------------------------------------
def ADC4Sample(_):global ad1dim,ad2dim,ad3dim,ad4dimglobal sample_pointglobal adc1,adc2,adc3, adc4global ad3average, ad4average, ad34point, ad3sigma, ad4sigmaglobal ad3checktime, ad4checktime,total_countglobal ad3baseline, ad4baseline# led.on()#--------------------------------------------------------total_count += 1#--------------------------------------------------------if sample_mode == 1:ad1dim[sample_point] = adc1.read()ad2dim[sample_point] = adc2.read()if sample_mode == 0:adc = adc3.read()ad3sigma += adcad3sigma -= ad3average[ad34point]ad3average[ad34point] = adcadc = adc4.read()ad4sigma += adcad4sigma -= ad4average[ad34point]ad4average[ad34point] = adcad34point += 1if ad34point >= SAMPLE_AVERAGE_LENGTH:ad34point = 0# ad3dim[sample_point] = ad3sigma / SAMPLE_AVERAGE_LENGTH
# ad4dim[sample_point] = ad4sigma / SAMPLE_AVERAGE_LENGTH#----------------------------------------------------value = ad3sigma / SAMPLE_AVERAGE_LENGTHif ad3baseline == 0:if ad34point == SAMPLE_AVERAGE_LENGTH - 1:ad3baseline = valueelse: ad3baseline = ad3baseline * (1 - AD34_BASE_ALPHA) +AD34_BASE_ALPHA * valueif abs(value - ad3baseline) > AD34_CHECK_THRESHOLD:if ad3checktime == 0:ad3checktime = total_countvalue = ad4sigma / SAMPLE_AVERAGE_LENGTHif ad4baseline == 0:if ad34point == SAMPLE_AVERAGE_LENGTH - 1:ad4baseline = valueelse: ad4baseline = ad4baseline * (1 - AD34_BASE_ALPHA) + AD34_BASE_ALPHA * valueif abs(value - ad4baseline) > AD34_CHECK_THRESHOLD:if ad4checktime == 0:ad4checktime = total_count#--------------------------------------------------------sample_point += 1if sample_point >= SAMPLE_NUM:sample_point = 0#--------------------------------------------------------
# led.off()#------------------------------------------------------------
SAMPLE_PERIOD = 1
FREQUENCY_MOD = 125def angle1(n):return n*2*3.1415926*SAMPLE_PERIOD / 1000.0 * FREQUENCY_MODdef wval(w):if w < SAMPLE_NUM / 2:return w * 2 / SAMPLE_NUMelse: return (SAMPLE_NUM - w) * 2 / SAMPLE_NUMcosdim = [int(math.sin(angle1(a)) * wval(a) * 0x7ff) for a in range(SAMPLE_NUM)]
sindim = [int(math.cos(angle1(a)) * wval(a) * 0x7ff) for a in range(SAMPLE_NUM)]#------------------------------------------------------------
def sample_amp(s):global cosdim,sindim,sample_pointcos_sam = 0sin_sam = 0scopy = s.copy()if sample_point > 0:scopy = scopy[sample_point:] + scopy[:sample_point]cos_sum = sum([s*w for s,w in zip(scopy,cosdim)]) / SAMPLE_NUMsin_sum = sum([s*w for s,w in zip(scopy,sindim)]) / SAMPLE_NUMreturn math.sqrt(cos_sum**2 + sin_sum**2)#------------------------------------------------------------
time0 = Timer(0)
time0.init(period=SAMPLE_PERIOD, mode=Timer.PERIODIC, callback=ADC4Sample)#------------------------------------------------------------
count = 0while True:led.on()check1 = sample_amp(ad1dim)check2 = sample_amp(ad2dim)led.off()print(check1, check2)time.sleep_ms(50)#------------------------------------------------------------
# END OF FILE : test2.PY
#============================================================
(2)计算时间
根据前面的程序,在计算过程中,LED输出高电平。通过测量LED的输出波形,便可以知道计算两个通道的激光信号所消耗的时间。
下图显示了LED的输出信号波形,可以看到两个通道的计算时间大约为30ms。
▲ 图1.1 测量LED的输出波形来表征计算时间
(3)检测激光信号
在静态情况下,输出的数据大都在500上下,1000之下。
▲ 图1.2 在没有信号的输出的噪声
在检测到光的时候输出数值超过10000。所以使用10000作为检测阈值比较合适。
▲ 图1.3 检测到激光信号对应的输出数据变化
(4)判断程序
下面是测试的判断激光信号的程序。
LASER_THRESHOLD = 10000while True:check1 = sample_amp(ad1dim)check2 = sample_amp(ad2dim)print(check1, check2)if check1 > LASER_THRESHOLD:led.on()else: led.off()if check2 > LASER_THRESHOLD:led1.on()else: led1.off()time.sleep_ms(50)
※ 测试结论 ※
通过实验测试了对于激光信号检测能力。检测两个通道使用时间需要30ms。
■ 相关文献链接:
- 基于ESP32模块利用检测线圈检测车模停止时间,室内视觉AI裁判系统
- AI视觉组基于ESP32的裁判系统第一版本设计要求
- 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6
- ESP32检测调制激光信号程序优化
● 相关图表链接:
- 光电检测传感器的位置分布
- 目标靶位上的响应LED
- 图1.1 测量LED的输出波形来表征计算时间
- 图1.2 在没有信号的输出的噪声
- 图1.3 检测到激光信号对应的输出数据变化
基于ESP32的竞赛裁判系统功能调试-激光信号调试相关推荐
- 基于ESP32的竞赛裁判系统功能调试-硬件修改建议
简 介: 基于前面对于基于ESP32比赛系统的第一版本的调试,给出了在硬件方面的修改意见,便于应用到未来的智能车竞赛比赛中去. 关键词: 智能车竞赛,ESP32,比赛系统 §01 基于ESP32裁判系 ...
- 基于ESP32的竞赛裁判系统功能调试-光电条检测板
简 介: 通过实验验证量光电检测板在比赛系统中用于检测车模通过是的功能.前面给出了对于主控板以及光电板上的参数修改内容. 关键词: 比赛系统,智能车竞赛,光电检测板 §01 竞赛裁判系统 在刚刚调 ...
- 基于ESP32的竞赛裁判系统功能调试-计时线圈功能
简 介: 对于智能车竞赛比赛系统中的电磁检测功能进行了调试,设置了程序运行的主要框架. 关键词: 智能车竞赛,比赛系统,计时系统,ESP32,电磁检测 §01 智能车竞赛裁判系统 中间间隔了一段时 ...
- 基于ESP32的竞赛裁判系统功能调试-与微机通讯
简 介: 通过调试测试了基于ESP32设计的智能车竞赛的比赛系统方案与比赛软件联系的功能. 关键词: 智能车竞赛,比赛系统,ESP32 §01 比赛系统与微机通讯 在 基于ESP32智能车竞赛比赛系统 ...
- 基于ESP32智能车竞赛裁判系统第二版硬件调试-6-26
简 介: 对于新版的比赛裁判系统进行硬件测试,验证了新版的硬件满足比赛的要求.对于感光板的不同区域灵敏度不同的问题,最后验证是由于LED的分布电容所引起的时间常数不同造成了.对于单条串联的LED修改成 ...
- 基于ESP32的智能车竞赛新版裁判系统的软件功能要求与实现
简 介: 本文给出了第十六届智能车竞赛裁判系统最终的软件设计和功能实现.并进行了验证,是它可以满足比赛基本计时要求. 最后给出了完整的程序. 关键词: 智能车竞赛,ESP32,视觉AI §01 智能车 ...
- 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6
简 介: 给出了对于基于ESP32设计的智能车竞赛的の比赛系统的硬件调试过程.基本上验证了硬件设计的合理与正确性.在第一部分的"修改建议"中也给出了硬件电路的修改意见. 关键词: ...
- AI视觉组基于ESP32的裁判系统第一版本设计要求
简 介: 面对第十六届全国大学生智能车竞赛中新增加的一些组别的要求,比如室内AI组,对于车模任务增加的检测任务,设计了基于ESP32为核心的比赛系统.本文给出了对于比赛系统功能的要求. 关键词: 比赛 ...
- 基于ESP32模块利用检测线圈检测车模停止时间,室内视觉AI裁判系统
▌01 室内视觉AI裁判系统 1.背景介绍 在 ESP32检测调制激光信号程序优化 以及 测试ESP32S基本模块的功能,并验证是否可以应用在AI智能车竞赛检测激光信号中 中测试了 ESP32串口转W ...
最新文章
- 策略梯度训练cartpole小游戏
- html输出text,为什么text();和html();输出结果不一样呢?
- 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...
- java swing 打开文件_java swing实现打开Excel文件并进行处理
- 基于Matlab的跨孔CT胖射线追踪算法(三)
- HDU多校练习第一场4608——I_Number
- win7计算机锁频图片怎么设置,win7锁屏背景壁纸如何修改
- android局域网设备查看器,局域网查看工具(LanSee)
- 一个大二前端的2017自我总结
- 安卓虚拟摄像头_华为Mate 40 Pro爆料,后置摄像头类似苹果iPod
- 倍福--NC轴无法使能分析
- 网站域名服务器加密,网站域名利用https防劫持方法
- 微信小程序开发—引用公共js里的方法
- js 格式化当前时间 日期推算
- element ui tree树节点数据平面化
- Python 计算思维训练——输入和错误处理练习(二)
- 软件测试工程职场发展细谈
- web安全——基础知识(计算机网络part1)
- Windows 下编译使用 TCMalloc
- 【2014,上半年是一个转变】