6

我希望能够检测到外围传感器何时未连接到我的 Raspberry Pi 3。

例如,如果我有一个 GPIO 无源红外传感器。

我可以像这样获得所有 GPIO 端口:

PeripheralManagerService manager = new PeripheralManagerService();
List<String> portList = manager.getGpioList();
if (portList.isEmpty()) {
    Log.i(TAG, "No GPIO port available on this device.");
} else {
    Log.i(TAG, "List of available ports: " + portList);
}

然后我可以连接到这样的端口:

 try {
     Gpio pir = new PeripheralManagerService().openGpio("BCM4")
     } catch (IOException e) {
         // not thrown in the case of an empty pin
     }

但是,即使引脚为空,我仍然可以连接到它(这在技术上是有道理的,因为 gpio 只是二进制打开或关闭)。似乎没有任何 api,我无法从逻辑上合理地思考如何区分连接了外围传感器的引脚和“空”的引脚。

因此,目前,我无法以编程方式断言我的传感器和电路设置正确。

有人有想法么?从电子学的角度来看,它甚至可能吗?

参考文档:

https://developer.android.com/things/sdk/pio/gpio.html

4

2 回答 2

6

有很多方法可以通过电子方式进行“存在检测”,但在 SoC 中您根本找不到任何方法。您通常不会询问 GPIO 引脚是否连接了某些东西——它无法告诉您这一点。

额外的 GPIO 引脚通常用于检测外围设备是否连接到连接器。例如,某些传感器的插头可能包括一条“检测”线,该线对地短路并在连接传感器时将 GPIO 拉低。USB 和 SDIO 使用接口中的一些专用电路做类似的事情。

您还可以使用电流感应之类的东西构建更精细的检测电路,但它们不可避免地必须输出您通过专用 GPIO 捕获的二进制信号。

这对于串行外围设备来说更容易实现,因为您通常可以发送基本命令并验证您是否得到响应。

于 2017-01-23T23:02:17.573 回答
2

仅使用输入线进行检测可能很困难。首先,您希望缩小问题的范围。将传感器未连接、传感器连接但未响应或传感器响应异常的情况视为不存在。

因此,如果它是数字传感器,那么与传感器通信可能足以判断它是否存在(尤其是在涉及校验和或奇偶校验位的情况下)。一些模拟传感器还对触发时的行为有特定的规范。您可以利用与这些规格的偏差来确定传感器是否不存在。

如果您的数字传感器没有对其输出进行任何错误检查,您可以在其中输出数据(因此全 0 或全 1 都是有效的)或者它只是用于输出的二进制 1 或 0,那么您需要外部帮助。大多数模拟传感器也是如此。

这种外部帮助是将系统置于已知的受控状态,按下按钮,然后检查传感器在特定范围内的输出。可以肯定的是,您至少需要两种不同的状态,以确保您的数字或模拟输入不会碰巧卡在测试的正确状态。

几乎任何其他方法都将在系统外部。使用额外的 IO 来“检测”传感器可以帮助增加传感器存在的信心,但如果您所学到的只是“某物”存在,您可能会得到误报 - 不一定是您期望的传感器。

于 2017-01-23T23:26:02.100 回答