3

我目前正在设计一个传感器网络,其中包含小型 ATtiny85 探头,每个探头都有一个温度传感器、一个气压计和一个湿度传感器。我想我会使用这些(http://goo.gl/TqaDjl)进行通信,因为它们成本低且不需要太多范围。我不确定如何让探头与主控制通信,因为发射器以数字方式传输,我将有 +20 个探头,它们都需要发送数据,而不会每分钟出现信号重叠或混乱。我认为最简单的方法是对探针进行计时,以使它们在传输中不会重叠,但我不确定。问题:

-对于这个系统来说,使用射频是最便宜和最好的选择吗?

-如何防止通信重叠?

- 从 arduino(或 ATtiny85)以数字方式发送数据的最简单方法是什么?

4

3 回答 3

3

我想我迟到了,但我会提供一些关于碰撞控制的见解,在一个链接上使用大量颤抖的发射器,一个802.11。这有点打包。

如果两个发射器试图同时发射,你一定会在接收器处得到一堆烂培根。

WiFi 式碰撞的简化版本会很好。基本上,它使用可以检测到的前导码,对于具有更高冲突机会的较长传输,它可以使用较短的请求/清除来发送数据包。

虽然这可能有点矫枉过正,但我​​会选择序言。首先传输可识别的稳定流,例如十六进制,555533330f0f00ff它基本上是交替的 1 和 0,但频率不断变化(0101,然后是 0011,然后是 00001111,依此类推),这是一种易于识别的模式,不太可能泄露通过杂散辐射或噪声。

这种模式可能会发生变化,因此有一组有限的其他前导码应该相对于原始码进行按位移动。

如果发送器检测到这个前导码,它应该停止并等待。如果您将所有数据包限制在某个时间长度内,那么如果您在数据包之间等待足够的时间,则不会发生冲突。如果在一个数据包的时间内听到前导码,那么您的站应该等待传输的全部长度(监听它的长度和其他头字段,以便知道等待多长时间)。数据包完成后,您的电台可以传输其前导码。

这就是 WiFi 相似性停止和更简单的协议接管的地方。

请注意,如果 2 个站正在等待一个数据包,它们几乎可以同时开始它们的前导码。为了解决这个问题,每个站应该在其前导码中翻转一个不同的零位。如果它检测到该位为 1,它会看到有另一个站前导,并且应该退出。

每个站点应在每个数据包之后等待一定的延迟(由您决定),以便其他站点可以开始传输。

一些沟通模式的草图表明,这足以满足您的需求。

现在,如果它是一个主从式系统,只要您只有一个网络,它应该会更容易,因为应该只有一个涉及从属传输的未完成请求。

于 2013-08-14T16:01:33.113 回答
1

我认为您的原始方法可能是最好的。在每台设备上放置一个 Tx 和 Rx 的方法可能是负担得起的,但我怀疑它是否可行。有 20 个设备在同一频率上传输,接收器将“听到”其中一个。最重要的是,当自己的发射器非常靠近时,设备将如何接收任何远程发射器的信号?请记住:这些是 AM 收音机,即使不发送任何数据也会“发送”载波。在尝试全尺寸之前获取少量发射器。

为避免在大量非活动发射器中接收到一个活动发射器的问题,您希望一次只为 1 个发射器供电。您将控制 Vcc 到一个发射器,打开它,发送数据突发,然后关闭它。

-如何防止通信重叠?

你不能——你必须接受偶尔会有重叠。向传输的数据添加 CRC,以便接收器可以检测到垃圾。

多个发射器的时间安排本身肯定是一个项目。您肯定不想在同一传输周期内全部运行它们。一开始它们可能不会碰撞,但是当两个设备确实漂移在一起并开始碰撞时,它们会保持在一起并碰撞很长时间,直到时钟漂移分开。

我会从一些简单的事情开始。例如对于三个设备,以 2000 ms、2200 ms、2400 ms 周期运行传输(使用 EEPROM 进行配置)。这样,如果一对碰巧在一个数据点发生冲突,那么该对的下一次传输将相隔 200 毫秒。

于 2013-07-31T03:14:18.607 回答
1

这些将是迄今为止最便宜的方法。至于最好的方法,有多种选择更好,但更贵。我想到了一个 Xbee 模块网络,但这些模块比一对 1.25 美元贵得多。

然而,使用射频模块是非常可行的。为了防止通信重叠,在每个传感器节点和主集线器上放置一个射频发射器和接收器。主集线器可以发送“嘿,sensor1 给我你的数据”,然后广播到所有传感器。但是,只有传感器 1 会实现集线器将侦听的“嘿,我是传感器 1,这是我的数据”。然后,集线器会继续说“嘿 sensor2 向我发送你的数据”等等。

于 2013-07-30T17:46:44.673 回答