如何通过调节其亮度来识别LED标记?


11

对于我的项目,我需要使用带有立体视觉算法和多个红外摄像头的红外LED标记来识别空间中的点的位置。我还需要每个LED标记都有一个唯一的可识别ID,这是我当前的问题。

我的想法是让每个LED以可识别的顺序在两种亮度状态之间闪烁(这可能吗?),但仍然足够亮以跟踪较低的亮度状态。

我不知道如何实现这一目标,或者不知道从哪里开始。我是一名程序员,但之前从未使用过实际电路。你能帮我入门吗?

led 

Answers:


11

如果所有LED均由同一光源控制,请考虑使用微控制器+ 差分曼彻斯特编码 +您的高/低LED状态来编码重复序列的位串,例如:

id #0: 1000000000000000[10000000000000001000000000000000....]
id #1: 1000000000000001[10000000000000011000000000000001....]
id #2: 1000000000000010
id #3: 1000000000000011
id #4: 1000000000000100

将ID号编码为由1,然后为7的零和8位ID#组成的16位比特序列。然后在解码时,寻找一个1,后跟7个零,然后获取后续的后续位。这适用于所有8位ID#(即使#128 = 10000000,其编码为1000000010000000,也不一定能正确同步,但对于该数字而言,这无关紧要)。

(如果您的潜在LED数量较少,则使用较少的位;此方案非常简单,可以概括为1 +(N-1)个零+一个N位的数字)

曼彻斯特编码是自计时的,因此您应该能够将接收器与其同步(即使是另一个不确定频率的微控制器,也应每位采样几次,以便保持锁定状态)。


4

如果您可以使每个LED以不同的频率闪烁,则可能会简化很多事情,因为您可以使用基于555的电路以所需的频率对每个LED进行闪烁。


2
简化了发送器,但使接收器复杂化
Jason S 2009年

如果他跟踪点的负载,则可能不会使用Arduino或任何其他微控制器。
阿莫斯

对于接收器来说,再加上不是编程问题,而是电路,所以电路越简单越好。
阿莫斯

4

每个人似乎这些天要出发与Arduinos,所以像可能是你在找什么。但是,似乎您打算大量使用该项目中的LED数量,而使用arduino则很难。这一切都在我的头上*,但是可以并联使用一个晶体管和一个大电阻,以便在晶体管关闭时,电流流过该大电阻,您会感到昏暗。但是,当您打开它时,由于电阻较低,电流会流过晶体管,您会获得更亮的状态。假设这样做有效,则可以使用微控制器等数字组件来控制晶体管并实现所需的闪烁。附件是我的意思的示意图(这些值是任意的,您可能需要为电路更改它们):

晶体管电路原理图

无论采用哪种方式,考虑到您没有做太多的电子设备,这都会非常困难。祝好运!

*晚了; 这可能是完全错误的,根本无法使用。嗯


1
基本上可以,但是您需要另一个与LED和晶体管串联的电阻器来设置亮状态的电流,否则LED将会熄灭。
starblue

是的,这是真的。我认为这是隐含的,但无论如何我都应该提到它。
杰里米

3

我会改变企鹅的想法。我将使用开和关状态来生成两个级别。与其尝试跟踪处于关闭状态(或低状态)的LED,不如将关闭状态变短,而仅跟踪处于开启状态。

您也没有提到您需要跟踪多少个LED以及它们移动的速度。


1

是的,两种状态的“暗淡”和“明亮”很容易。在任何电路使晶体管使LED闪烁的情况下,您需要在该晶体管上添加一个电阻。然后,当晶体管完全截止时,电阻器会发出暗淡的光。我将从与已经连接到LED的限流电阻完全相同的电阻开始。(每个LED都需要一个限流电阻)。

对于一些记号笔,每个电池上的独立电池和555计时器将是最简单的记号笔硬件。(加上一些电阻器和电容器)。

如果您可以同步LED,则整个系统会更简单:在周期开始时打开所有标记,然后一次关闭一个标记直到它们全部熄灭,然后重新打开它们并重新开始循环。一个或两个中央电池的形式,而不是每个LED一个电池,通常使一堆LED闪烁几个小时所需的能量要轻得多。(这需要在每个LED上使用比较器IC,或者在某些中央位置使用一些移位寄存器或Arduino模拟这些移位寄存器)。(这要求从一个标记到下一个标记,或从每个标记到某个中心点的大量导线穿线,因此对于您的应用程序可能是不可能的。)

如果PC可以直接控制LED,则它使您的视觉识别软件更加简单。然后,当PC搜索LED_5时,它可以打开和关闭LED_5,并确信闪烁的一个LED必须是LED_5。也许使用USB到8位并行端口转换器之类的东西,该转换器(带有8个电阻,每个LED一个)可以直接控制8个LED,或者(带有4个电阻,每列一个)直接控制16个LED的4x4矩阵。(这需要另一条线,即从PC到转换器的USB电缆,但是它不需要任何电池,晶体管或其他芯片-这对于非电子程序员而言,这可能是最简单的工作)。


1

我认为,如果摄像头的帧频相对于LED的运动速率不够高,您可能会遇到视觉方面的麻烦。

LED将需要以相机帧速率的合理倍数从高到低循环,每个状态变化至少2帧,以确保某些帧仅来自一个状态而不是来自两个状态的光,这意味着您需要两个帧来显示LED闪烁的每一位数据,以识别它是哪个标记。显然,较短的代码将是最好的选择。

如果标记移动的距离超过了它们在框架中彼此之间的距离,则视觉系统可能会失去正确识别哪些闪光灯属于哪个标记的信心。


0

原理图

模拟该电路 –使用CircuitLab创建的原理图

图1、2和3 LED方案。

  • 双LED提供非常简单的控制。R2设置常亮LED的亮度。R1设置脉冲LED的亮度。
  • 单LED,双亮度是另一种简单的方案。D3始终通过流过R4的电流点亮。当BUF2切换到低电平时,它将R3连接到GND,并且流经D3的电流增加,导致LED发光。
  • 从硬件角度来看,PWM亮度控制是最简单的,但软件需要控制LED的亮度。

在此处输入图片说明

图2. PWM编码。

使用脉宽调制(PWM),您可以通过改变开关比例来改变视在亮度。图2显示了一个高功率,低功率,高功率序列。

对于您的应用,您需要将PWM频率设置得足够高,以使相机传感器不会看到任何闪烁。数据调制或在高亮度和低亮度之间切换的速率最多必须为帧速率的一半,并且更有可能约为帧速率的十分之一才能正确识别。

您可能还需要解决LED发出的光束角。听起来好像您的相机不会一直在同轴上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.