Arduino 射频传感器网络
Posted
技术标签:
【中文标题】Arduino 射频传感器网络【英文标题】:Arduino RF sensor network 【发布时间】:2013-07-30 23:09:08 【问题描述】:我目前正在设计一个传感器网络,其中包含小型 ATtiny85 探头,每个探头都有一个温度传感器、一个气压计和一个湿度传感器。我想我会使用这些 (http://goo.gl/TqaDjl) 进行通信,因为它们成本低且不需要太多范围。我不确定如何让探头与主控制器通信,因为发射器以数字方式传输,我将有 +20 个探头,它们都需要发送数据,而不会每分钟都出现信号重叠或混乱。我认为最简单的方法是对探针进行计时,以使它们在传输中不会重叠,但我不确定。 问题:
-对于这个系统来说,使用射频是最便宜和最好的选择吗?
-如何防止通信重叠?
-从 arduino(或 ATtiny85)以数字方式发送数据的最简单方法是什么?
【问题讨论】:
我无法停止思考价格:两块电路板1.29?!?我不在乎它们只是一小部分组件,价格令人难以置信。没有人能以那个价格给你寄一个空信封——我说是的,这是最便宜的。您应该以每对 1.33 美元的价格升级到 ER99,因为它们免费送货?!来自中国?! 我知道可笑的价格是我感兴趣的,通常通信是最昂贵的部分之一(即 Xbee) 【参考方案1】:我想我迟到了,但我会通过一个链接(a la 802.11)上的大量喋喋不休的发射器提供一些关于碰撞控制的见解。这有点打包。
如果两个发射器试图同时发射,你肯定会在接收器处得到一堆烂培根。
WiFi 式碰撞的简化版本会很好。基本上,它使用可以检测到的前导码,对于具有更高冲突可能性的较长传输,它可以使用较短的请求/清除来发送数据包。
虽然这可能有点矫枉过正,但我还是会选择序言。首先传输可识别的稳定流,例如十六进制,555533330f0f00ff
,它基本上是交替的 1 和 0,但频率不断变化(0101,然后是 0011,然后是 00001111,等等),这是一种易于识别的模式,不太可能被杂散辐射或噪音散发出来。
这种模式可能会发生移位,因此有一组有限的其他前导码应该相对于原始模式进行按位移位。
如果发送器检测到此前导码,它应该停止并等待。如果您将所有数据包限制在某个时间长度内,那么如果您在数据包之间等待足够的时间,则不会发生冲突。如果在一个数据包的时间内听到前导码,那么您的站应该等待传输的全部长度(监听它的长度和其他头字段,以便知道等待多长时间)。数据包完成后,您的电台可以传输其前导码。
这就是 WiFi 相似性停止并由更简单的协议接管的地方。
请注意,如果 2 个站点正在等待一个数据包,它们几乎可以同时开始它们的前导码。为了解决这个问题,每个站应该在其前导码中翻转一个不同的零位。如果它检测到该位为 1,它会看到有另一个站前导,并且应该退出。
每个站点应该在每个数据包之后等待一定的延迟(由您决定),以便其他站点可以开始传输。
一些沟通模式的草图表明,这足以满足您的需求。
现在,如果它是一个主从式系统,只要您只有一个网络,它应该会更容易,因为应该只有一个涉及从属传输的未完成请求。
【讨论】:
@Dragongeek 没问题。如有任何问题,请随时发表评论。【参考方案2】:这些将是迄今为止最便宜的方法。至于最好的方法,有多种选择更好,但更贵。我想到了一个 Xbee 模块网络,但这些模块比一对 1.25 美元贵得多。
不过,使用射频模块是非常可行的。为了防止通信重叠,在每个传感器节点和主集线器上放置一个射频发射器和接收器。主集线器可以发送“嘿,sensor1 给我你的数据”,然后广播到所有传感器。但是,只有传感器 1 会实现集线器将侦听的“嘿,我是传感器 1,这是我的数据”。然后,集线器会继续说“嘿,sensor2 向我发送你的数据”等等。
【讨论】:
非常感谢!【参考方案3】:我认为您的原始方法可能是最好的。在每个设备上放置一个 Tx 和 Rx 的方法可能是负担得起的,但我怀疑它是否可行。有 20 个设备在同一频率上传输,接收器将“听到”其中一个。最重要的是,当自己的发射器非常靠近时,设备将如何接收任何远程发射器的信号?请记住:这些是 AM 收音机,即使不发送任何数据也会“发送”载波。在尝试全尺寸之前获取少量发射器。
为避免在大量非活动发射器中接收到一个活动发射器的问题,您希望一次只为 1 个发射器供电。您可以控制 Vcc 到一个发射器,打开它,发送数据突发,然后关闭它。
-如何防止通信重叠?
你不能——你必须接受偶尔会有重叠。为传输的数据添加 CRC,以便接收器可以检测到垃圾。
多个发射器的时间安排本身就是一个项目。您肯定不想在同一传输周期内全部运行它们。一开始它们可能不会碰撞,但是当两个设备确实漂移在一起并开始碰撞时,它们会保持在一起并碰撞很长时间,直到时钟分开。
我会从简单的事情开始。例如对于三个设备,以 2000 ms、2200 ms、2400 ms 周期运行传输(使用 EEPROM 进行配置)。这样,如果一对碰巧在一个数据点发生冲突,那么该对的下一次传输将相隔 200 毫秒。
【讨论】:
以上是关于Arduino 射频传感器网络的主要内容,如果未能解决你的问题,请参考以下文章
Arduino nano 通过RF433将DHT11数据传输实验