我有两个四驱车在轨道上移动,两个都使用超声波测量模块来检测路径中的障碍物,并由Arduino微控制器控制。两个超声波传感器以相同的频率工作,并且该频率不能改变。两个超声波传感器相互干扰。如何通过向Arduino代码添加内容来减少这种干扰或防止干扰。硬件无法更改。谢谢你的帮助
答案 0 :(得分:6)
通常有六种方法可以减少两个通道之间的干扰(例如参见http://en.wikipedia.org/wiki/Multiplexing) - 其中两种不适用于声音。这让你有四个:
space - don't operate in the same space (e.g. cell towers): not applicable for you
frequency - (e.g. channels) you said you can't change that
time - don't operate at the same time
code - send out different amplitude patterns
从某种意义上说,“代码”有点像“时间”,但更复杂。使用“时间”,您会尝试计时,以便两个传感器不会同时传输。使用“代码”,它们发送复杂的脉冲序列并使用它们来消除干扰。
我认为你最好的选择(简单但有效)是“时间”。这将取决于您需要的更新频率,但您可以将一个错误设置为“主”,每100毫秒发送一个短暂的唧唧声(比方说);然后让第二辆越野车等到它听到主唧唧声,并在50毫秒后发送自己的脉冲(当它知道另一辆越野车将会安静时)。通过这种方式,每个每秒将有10次更新,但它们不会干扰。
为了更加强大,“奴隶”越野车可以决定(在没有听到来自“主人”的脉冲之后)在100毫秒后发送自己的脉冲 - 这样它可以在只有一辆越野车时运行。事实上他们每个人都可以使用这个算法 - 然后没有“主人”和“奴隶”,他们有相同的代码(通常是一个好主意)。作为最后的调整,如果你使这个“等待n ms”间隔随机,你将实现一个版本的“带有碰撞检测的载波侦听多路访问” - 见http://en.wikipedia.org/wiki/Carrier_sense_multiple_access_with_collision_detection
祝你好运。