我目前正在设计一个传感器网络,它将配备小型ATtiny85探头,每个探头都有一个温度传感器,一个气压计和一个湿度传感器。我想我会使用这些(http://goo.gl/TqaDjl)进行沟通,因为它们成本低且不需要太多范围。我不确定我将如何让探测器与主控制器通信,因为发射器以数字方式传输,我将有+20探测器,所有探测器都需要发送数据而不会发出信号重叠或每分钟搞乱。我认为最简单的方法是对探头进行计时,使它们在传输中不重叠,但我不确定。 问题:
- 使用RF是这个系统最便宜和最好的选择吗?
- 如何防止沟通重叠?
- 从arduino(或ATtiny85)以数字方式发送数据的最简单方法是什么?
答案 0 :(得分:3)
我想我已经迟到了,但是我会在一条链路上提供一些关于碰撞控制的信息,其中包括 a la 802.11。这有点打包。
如果两个发射器试图同时传输,你必然会在接收器处弄到一堆烂烂的培根。
WiFi风格碰撞的简化版本会很好。基本上,它使用可以检测的前导码,对于具有更高冲突机会的更长传输,它可以使用更短的请求/清除来发送数据包。
虽然这可能有点矫枉过正,但我会选择前言。首先发送一个可识别的东西的稳定流,如十六进制,555533330f0f00ff
基本上交替1和0但频率变化(0101,然后是0011,然后是00001111,依此类推),这是一个容易识别的模式,不太可能被杂散辐射或噪音所摒弃。
这种模式可能会发生移位,因此有一组有限的其他前导码应相对于原始位移逐位移位。
如果发射器检测到此前同步码,则应该停止并等待。如果将所有数据包限制为某个时间长度,则在数据包之间等待足够的时间时不应发生冲突。如果在一个数据包的时间内听到一个前导码,那么你的电台应该等待传输的全长(听它的长度和其他标题字段,以便它知道等待多长时间)。数据包完成后,您的工作站可以传输其前导码。
这就是WiFi相似性停止和更简单的协议接管的地方。
请注意,如果两个电台正在等待一个数据包,他们几乎可以同时启动它们的前导码。要解决此问题,每个站应在其前导码中翻转不同的零位。如果它检测到该位为1,则会看到另一个站点是预先设置的,并且应该退出。
每个电台应在每个数据包之后等待一段延迟(由您决定),以便其他电台可以开始传输。
通信模式的一些草图表明这足以满足您的需求。
现在,如果它只是一个主从式系统,只要你只有一个网络就应该更容易,因为只有一个未完成的请求会涉及从属传输。
答案 1 :(得分:1)
这些将是迄今为止最便宜的方法。至于最好的方法,有各种各样的选择更好,但更昂贵。我们想到了一个Xbee模块网络,但这些模块比每对1.25美元贵得多。
然而,使用RF模块是非常可行的。为了防止通信重叠,在每个传感器节点和主集线器上放置一个RF发送器和接收器。主集线器可以发送“嘿传感器1给我你的数据”,它将被广播到所有传感器。但是,只有sensor1会实现“嘿我是传感器1,这是我的数据”,集线器将监听。然后,集线器将继续说“嘿传感器2发送给我你的数据”,依此类推。
答案 2 :(得分:1)
我认为你原来的方法可能是最好的。在每台设备上放置Tx和Rx的方法可能是可以承受的,但我怀疑它是否可行。 20个设备以相同的频率发送,接收器“听到”。最重要的是,当设备自身的发射器非常接近时,设备如何接收任何远程发射器的信号?请记住:这些是AM无线电,即使不发送任何数据也会“发送”一个载波。在尝试全面扩展之前,先获得少量发射器。
为了避免在非活动发射器中接收一个有源发射器的问题,您只需要一次发射一个发射器。您可以将Vcc控制为一个发射器,将其打开,发送数据突发,然后将其关闭。
- 如何防止沟通重叠?
你不能 - 你必须接受偶尔会有重叠。在传输的数据中添加CRC,以便接收方可以检测垃圾。
多个发射器的时间肯定是一个项目本身。你肯定不希望在相同的传输周期内运行它们。它们可能在开始时不会发生碰撞,但是当两个装置一起漂移并开始碰撞时,它们将保持在一起并长时间碰撞,直到时钟漂移为止。
我会从简单的事情开始。例如,对于三个设备,在2000 ms,2200 ms,2400 ms周期运行传输(使用EEPROM进行配置)。这样,如果一对碰巧碰撞在一个数据点,则该对的下一次传输将相隔200毫秒。