arduino uno with PWM driven motor and 433mhz wireless receiver don't work

1.9k Views Asked by At

I am fairly new to the arduino topic and try to get a few things to work together.

First i tried setting up a DC motor that can be controlled via PWM, which works perfectly when used standalone. I can start/stop the motor and change speed depending on the value i send to the PWM pin.

Second i tried to use an RF-5V wireless receiver to work with a remote control from remote switched power outlets. For this one i followed the instructions on how to build a 433mhz sniffer. This all by itself works as well. I can receive diffent codes depending on which keys on the remote i am pressing.

Now the fun part started: I wanted to integrate both of the projects into one, so i could use the remote to start/stop the motor. So i came up with the following circuit:

Circuit of pwm driven motor with wireless receiver

(Thanks for some of you pointing out that the circuit does not match the sketch. I made an error when drawing, but even with the cables attached to the right pins, it works as described)

and the following code (which is partly from the instructions mentioned above):

#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();
  }
}

when i run the code and click on the remote, i get different values shown depending on the key i press. So the wireless receiver works as expected.

When i receive the right value for starting the motor, the motor really begins to turn, so this works as well.

And here the fun part starts: As soon as i use the analogWrite function to send data to the PWM port the motor is connected to, the wireless receiver stops working (or at least I do not get any more values when pressing a key on the remote).

I found a few similar posts/problem descriptions on the net which said to try the following:

  • Use another pin for PWM (due to possible interrupt conflicts). I tried that as well, same behaviour
  • Use external power supply instead of USB-Cable, which helped somebody resolve this issue. Not here. Does not work either

So the question is: Does anybody know how to combine those two things together so a can use the wireless receiver to get commands and switch on/off the motor with it?

1

There are 1 best solutions below

2
On

I have the same problem in the past. The problem is the ability of arduino to supply them both. I recommend to use external power supply for the receiver or for the motor (it's best to do that for the motor but according to your circuit it's impossible) like the 545043YwRobot and supply the other from the arduino (I hope this is not what you try already, if so i'm sorry).

Hope it's help.

Yoav