亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

带有数字接口的简单模拟接近传感器(用于 Raspberry Pi)[最后更新:2014 年 2 月 7 日]

Raspberry Pi 有一个 Broadcom BCM2835 芯片,可控制 26 个 GPIO(通用输入/输出)引脚。网上有 C 库或 RPi.GPIO python 包可用于控制引脚。 RPi.GPIO 包默认包含在大多数树莓派系统中,例如 Raspbian,Debian linux 系统的 RPi 版本。

与 arduino 相比,RPi 的一个缺点是它没有任何模拟引脚。所有 GPIO 引脚都是纯数字的。例如,如果引脚A是输出引脚,它只能输出LOW(0V)或HIGH(3.3V),表示为0或1。如果引脚A是输入引脚,对于任何低于0.8V的电压施加在引脚A上, 将其视为 LOW 或 0;对于任何高于 1.3V 的电压(实际上低得令人惊讶!),它将其视为 HIGH 或 1 [参考:RPi GPIO]。
然而,在现实世界中,纯 0 或 1 很少发生。我们总是得到在其范围内具有连续价值的信息。例如,温度可以是 10C 或 50F,或 100C 或 212F。这些数字包含的信息不仅仅是“冷”或“热”。距离可以是2cm也可以是10m,只知道“近”或“远”是不够的。

有一些方法可以克服这个缺点。 RPi 确实支持 SPI 或 I2C 接口,因此我们可以使用一些外部模数转换器 (ADC) 并使用 SPI 或 I2C 接口通过这些 ADC 获得准模拟信号,例如 MCP3008、TLC549、MCP23017 等。这些芯片通常要花费几美元。但是,如果使用额外的商用传感器,整个部件的成本可能会超过 20 到 30 美元,并且很难使系统紧凑。对于机器人项目,通常需要不止一个传感器,而且成本很容易加起来。

其实在很多情况下,其实是可以避免使用这些外部设备的,仍然可以得到模拟 信号通过数字 大头针!

关键是将模拟信号转换为持续时间。因为时间总是模拟的!

我使用几个红外 LED、一个光电晶体管、一个 2N3904 NPN 晶体管、一个 100nF 陶瓷电容器和几个低功率电阻器构建了一个简单的红外接近传感器。而且我能够得到一些模拟读数。

所有元素都是电子市场中最便宜的。

使用什么 LED、光电晶体管或 NPN 晶体管并不重要。它们几乎相同。

唯一可能有点重要的是 100nF (0.1uF) 电容器。我使用了低调的陶瓷,这可能不是最佳选择。 1 类陶瓷或薄膜电容器将更适合这里。

将 +5V 和 GND 线连接到外部 5V 电源,同时将 GND 线连接到 Raspberry Pi GPIO 引脚的地。选择一个 GPIO 引脚,例如引脚 A 作为触发器并将其连接到触发器线。选择另一个 GPIO 引脚,例如引脚 B,作为信号输入/输出,并将其连接到 OUT 线。

为了测量物体的距离,我们发送触发信号来激活红外 LED。这些 LED 发出的光然后被传感器前面的物体反射。中间的光电晶体管收集反射光并产生成比例的电流。该电流用于对电容器两端的电压进行积分 (I=CdV/dt)。通过监测电容器电压达到某个特定阈值所需的时间,我们可以了解光电晶体管产生了多少电流,或者等效地,反射了多少光。显然,离物体越近,反射光越多。通过仔细校准传感器的时间,我们应该能够非常精确地测量距离。

这是详细的操作顺序。 1。将电容器归零

先设置Pin B为输出管脚,设置为零。

GPIO.setup(PIN_B,GPIO.OUT)
GPIO.output(PIN_B,0)
time.sleep(0.01)

这将释放电容器上的任何残余电压。请注意,电容器放电的 RC 时间为 t=RC=500ohm * 100nF =50 us =0.00005 sec。通过在引脚 B 保持 0 伏 200RC 时间,我们确保电容器完全放电(残余电压应为原始残余电压的 e-200=10-87 倍)。2。将引脚 B 设置为输入

现在我们使用引脚 B 作为输入引脚从光电晶体管获取数据。
GPIO.setup(PIN,GPIO.IN)

3.点亮LED

是时候打开红外 LED 了。

GPIO.setup(PIN_A,GPIO.OUT)
GPIO.output(PIN_A,1)

这会将触发引脚的电压设置为 3.3V。由于 2N3904 的 BE 节点下降了 0.7V,因此 R1 两端的电压为 2.6V。通过 R1 的电流则为 I=2.6V/4.3kΩ=0.6mA。然后 2N3904 将该电流放大约 150 倍,从而从其集电极到发射极产生约 100mA 的电流。每个 LED 将在短时间内传导约 50mA 的电流。4.定时引脚B保持低电平

开始测量电容器达到 RPi 的阈值需要多长时间,因此引脚 B 变为高电平

counter=0
t1=time.clock()*1000
while(GPIO.input(PIN_B)==0)&(counter<1e4):
counter =counter+1
deltat=time.clock()*1000-t1

deltat 是引脚 B 保持低电平的持续时间。由于 deltat 与光电晶体管电流的倒数成正比 (或反射光量 ),光电晶体管电流大致与距离的倒数成正比 , deltat 大致与距离成正比 .
deltat∝1I∝1光∝距离

(counter<1e4)项是为了防止由于极低的光电晶体管电流或等效地无限距离而导致电容器积分时间过长的情况。

有关更多详细信息:一个简单的带有数字接口的模拟接近传感器(用于 Raspberry Pi),上次更新时间为 2014 年 2 月 7 日]


制造工艺

  1. 使用 1 线 DS18B20 传感器和 Raspberry Pi 测量温度
  2. Raspberry Pi 上的 1 线温度传感器 DS1820(直接 GPIO)
  3. 传感器数据与 Raspberry Pi 微处理器的集成
  4. 超声波传感器 (HC-SR04) + Raspberry Pi
  5. 带 RPi 的线跟踪传感器
  6. 使用一个 GPIO 引脚读取模拟传感器
  7. 用于 Raspberry Pi 的 DIY 红外运动传感器系统
  8. Raspberry Pi 上没有模拟输入的模拟传感器
  9. Raspberry Pi 1-Wire 数字温度计传感器 (DS18B20)
  10. JAVA 中的树莓派数字霍尔传感器
  11. 盖革计数器 – Raspberry Pi 辐射传感器板教程
  12. 带有 Raspberry Pi 和湿度传感器的 Aeroponics