Arduino robot with 433 Mhz Receiver - range problem (PWM?)

Hello,
I have a problem with the range of my 433mhz transmitter and receiver.
The first command i send with my Raspberry to the Arduino robot can be send from another room which is in another floor, because in general the range is very good. transmitter and receiver, both have a 17cm antenna.
But when a motor runs after that command, the max. range is 20cm.. i made this experience also when i turn on a led stripe with PWM.
Does anybody have this problem, too?
I hope you can help me.

Hi,
How are you powering the two controllers?
What are the Tx and Rx units?
Can you post a diagram of your project?

We need as much info as possible about your project, even a picture of y our project will help.

Tom..... :slight_smile:

Hi Tom,
I'm powering my Robot with 4x 1,5V AA Batteries.
On the Arduino I put a L293D Motorshield. I have two DC motors connected to it. The wires from the batteries also go to the EXT_PWR Input from the shield. (The jumper is set)
The Tx and Rx modules are these: http://www.amazon.de/receiver-Superregeneration-Wireless-Transmitter-Burglar/dp/B00ATZV5EQ
I connected the Rx module as below:

5V -> 5V pin from Arduino
GND -> GND from Arduino
DATA -> Pin 2 from Arduino

I'm using the RC Switch library to receive Codes from my Raspberry.
The Receiver Code is below:

/*

  • Commands:
  • 1: right
  • 2: left
  • 3: forward
  • 4: backward
    1. stop movement
      */

#include <AFMotor.h>
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");

mySwitch.enableReceive(0);

// turn on motor
motor3.setSpeed(255);
motor4.setSpeed(255);

motor3.run(RELEASE);
motor4.run(RELEASE);
}

void loop() {
if (mySwitch.available()) {

int value = mySwitch.getReceivedValue();

if (value == 1) {
motor3.run(FORWARD);
}
else if (value == 2) {
motor4.run(FORWARD);
}
else if (value == 3) {
motor3.run(BACKWARD);
}
else if (value == 4) {
motor4.run(BACKWARD);
}
else if (value == 5) {
motor3.run(RELEASE);
motor4.run(RELEASE);
}

mySwitch.resetAvailable();
}

}

Everything works fine until a motor starts.

I now found out, that it helps to have a seperate supply for the arduino..
So i think there is too much noise coming from the motors so the arduino cannot receive data from the Rx correctly.
I already tried to put noise reducing capacitors onto the motor but it didnt work.
does anybody have an idea how to reduce noise on another way?
i don't want to use two supplys because its too much weight for the robot.

I already tried to put noise reducing capacitors onto the motor but it didnt work.

What did you try and how?
Basically you suppress noise with capacitors and possibly inductors. You need small ceramic capacitors wired directly across the motor windings as close to the brushes as you can. You need a large electrolytic across the motor supply. Then you need an inductor to the Arduino and another electrolytic across the Arduino supply.

Check the voltage on the 433 Mhz reciever when the motors are running and make sure its not dropping below
5V.
Those receivers are very sensitive to supply voltage variation.

This is what I mean about connecting the capacitors as close as possible.

solder_caps.pdf (299 KB)

Hi,

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?
Can you please post picture of your project in jpg, png?

We need to see your layout and how you have configured the power supplies etc...

Tom.... :slight_smile: