Arduino射频传感器网络



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

-使用射频是这个系统最便宜、最好的选择吗?

-如何防止通信重叠?

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

我想我参加聚会迟到了,但我会在一个链路上提供一些关于碰撞控制的见解,a la802.11。这在某种程度上是打包的。

如果两个发射机试图同时发射,你肯定会在接收机上得到一团腐烂的培根。

一个简化版本的WiFi风格的冲突将是好的。基本上,它使用可以检测到的前导码,对于冲突几率更高的较长传输,它可以使用更短的请求/清除来发送数据包。

虽然这可能有些过头了,但我还是选择序言。从传输可识别的东西的稳定流开始,比如十六进制的555533330f0f00ff,它基本上是交替的1和0,但频率不断变化(0101,然后是0011,然后是00001111,等等),这是一种易于识别的模式,不太可能由杂散辐射或噪声发出。

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

如果发射机检测到该前导码,则应停止并等待。如果将所有数据包限制在特定的时间长度内,那么如果在数据包之间等待足够的时间,就不会发生冲突。如果在一个数据包的时间内,听到了前导码,那么你的电台应该等待整个传输长度(监听它的长度和其他报头字段,这样它就知道等待多长时间)。一旦数据包完成,您的电台就可以发送其前导码。

这就是WiFi相似性停止的地方,更简单的协议取而代之。

注意,如果两个站正在等待一个分组,那么它们几乎可以同时启动它们的前导码。为了解决这个问题,每个站都应该在其前导码中翻转一个不同的零比特。如果它检测到该比特的1,它就会看到有另一个站点在进行预组装,并且应该后退

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

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

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

这些将是迄今为止最便宜的方法。至于最好的方法,有多种选择,更好,但更昂贵。脑海中浮现出一个Xbee模块网络,但这些模块的价格远高于1.25美元一对。

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

我认为您的原始方法可能是最好的。在每台设备上安装Tx和Rx的方法可能价格合理,但我怀疑它是否可行。有20个设备在同一频率上传输,哪一个会被接收器"听到"。最重要的是,当设备自身的发射器非常接近时,设备将如何接收任何远程发射器的信号?请记住:这些是AM收音机,即使不发送任何数据,也会"发送"载波。在尝试达到全量程之前,先获取少量变送器。

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

-如何防止通信重叠

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

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

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

最新更新