【问题标题】:arduino uno with PWM driven motor and 433mhz wireless receiver don't work带有 PWM 驱动电机和 433mhz 无线接收器的 arduino uno 不工作
【发布时间】:2017-05-23 18:54:30
【问题描述】:

我对 arduino 主题相当陌生,并尝试让一些东西一起工作。

首先我尝试设置一个可以通过 PWM 控制的直流电机,它在单独使用时可以完美运行。我可以根据发送到 PWM 引脚的值启动/停止电机并改变速度。

其次,我尝试使用 RF-5V 无线接收器与远程开关电源插座的遥控器配合使用。对于这个,我按照how to build a 433mhz sniffer 上的说明进行操作。 这一切本身也有效。根据我按下的遥控器上的键,我可以接收不同的代码。

现在有趣的部分开始了:我想将两个项目整合为一个,这样我就可以使用遥控器来启动/停止电机。 所以我想出了以下电路:

(感谢你们中的一些人指出电路与草图不匹配。我在绘图时出错,但即使将电缆连接到正确的引脚,它也可以按描述工作)

以及以下代码(部分来自上述说明):

#include <RCSwitch.h>

// init 433MHz lib
RCSwitch mySwitch = RCSwitch();
unsigned long lOldValue=0;  // to check for consecutive reads on 433MHz
int motorPin = 5; // PWM-Pin to use for motor

void setup()
{
  pinMode(motorPin, OUTPUT);

  Serial.begin(9600);

  // set-up rf receiver
  mySwitch.enableReceive(0);  // 433MHz Receiver on interrupt 0 => that is pin #2
}

void loop()
{
  if (mySwitch.available())
  {
    int value = mySwitch.getReceivedValue();

    // only react, if at least two times same value received
    if (value == lOldValue)
    {
      if (value == 0)
      {
        Serial.print("Unknown encoding");
      }
      else
      {
        Serial.print("Received ");
        Serial.print( mySwitch.getReceivedValue() );
        Serial.print(" / ");
        Serial.print( mySwitch.getReceivedBitlength() );
        Serial.print("bit ");
        Serial.print("Protocol: ");
        Serial.println( mySwitch.getReceivedProtocol() );

    // One of the keys on the remote
    if (value == 274393) {
      Serial.println("got start code, starting motor");
          analogWrite(motorPin, 100); // start the motor
    }

    // another key on the remote
    if (value == 270384) {
      Serial.println("got stop code, stopping motor");
          analogWrite(motorPin, 0); // stop the motor
    }
      }
    }
    lOldValue = value;
    mySwitch.resetAvailable();
  }
}

当我运行代码并单击遥控器时,我会根据我按下的键显示不同的值。所以无线接收器按预期工作。

当我收到启动电机的正确值时,电机真的开始转动,所以这也有效。

有趣的部分从这里开始: 一旦我使用模拟写入功能将数据发送到电机所连接的 PWM 端口,无线接收器就会停止工作(或者至少在按下遥控器上的键时我没有得到更多值)。

我在网上找到了一些类似的帖子/问题描述,说尝试以下:

  • 为 PWM 使用另一个引脚(由于可能的中断冲突)。我也试过了,同样的行为
  • 使用外部电源代替 USB 电缆,这有助于解决此问题。不在这里。也不行

所以问题是: 有人知道如何将这两个东西结合在一起,以便可以使用无线接收器获取命令并用它打开/关闭电机吗?

【问题讨论】:

  • 如果您断开电机,离开相同的程序,并可能在电阻上放置一个 LED,这能解决问题吗?如果解决了,问题要么是功率不足,要么是噪音。您可以通过从外部为电路供电来解决第一个问题(尝试使用台式电源,然后您可以尝试使用单个电池,但只需在开始设计之前确认这一点)。如果是噪音,在电机电源旁边放一个电容(越大越好,至少几百微法)。
  • @frarugi87 有趣的是,当我没有将电机连接到电路时,问题仍然存在。即使在没有附加硬件的情况下调用模拟写入也会导致相同的行为。
  • 等等,你写了int motorPin = 5;,但是在原理图中你把电机连接到针脚 3,在针脚 5 上你有 433 收发器......你正确地纠正了吗?
  • @frarugi87 哦,愚蠢的我......我真的把电路图形弄错了......对此感到抱歉......这发生在我改变了几次 PWM 引脚并感到困惑之后...... :( 但是像代码一样使用电缆,它仍然无法正常工作。
  • 不接电机不接二极管的情况下是否有效?

标签: arduino wireless pwm


【解决方案1】:

我过去也有同样的问题。问题是 arduino 能够同时提供它们。我建议为接收器或电机使用外部电源(最好为电机这样做,但根据您的电路这是不可能的),如 545043YwRobot 并从 arduino 提供另一个(我希望这不是您已经尝试过的,如果是,我很抱歉)。

希望对你有所帮助。

约夫

【讨论】:

  • 感谢您提供的信息。我将尝试检查这是否可以解决问题。但是由于我的设计空间有限,我无法在我的情况下添加两个电源。我希望能够只使用一个 9v 块来为整个电路供电。对此有何想法?
  • 尝试使用 arduino,并直接从电池进行调节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多