RF Receiver very limited range and/or spotty performance

Was reading another thread [1] of a similar topic, but it was 2 years old and recent comments were ‘start your own’ – so here I am …

Over the weekend, I was trying to turn on/off the holiday lights with RF. Ive gotten various vendor versions of the one referenced in the picture below. To initially grab the signal, Ive tried all this in both 433MHz and 315MHz chipsets. I have also added the 17.3cm and 23.8cm antennae respectively.

Im getting very good transmit distance, but me wanting to ‘see’ the signals, I can not seem to repeatedly receive the signal unless I am a few inches away. After just giving up (and tossing) a couple 433MHz boards, I finally have one that does get a decent distance, but it seems like I need to power cycle the device a few times to get it to behave. As for the 315MHz, I havent gotten it more than 10 inches distance, and that was once. Typically I need to be right up and close to the module. The same distance as without an antennae basically.

Im using rc-switch and the code is pretty silly simple.

Am I missing something with the antennae placement (bottom corner next to coil)? Am I possibly frying it when soldering? Am I (possibly) a crappy solderer and touching up against the coil? And what would explain the need to power cycle to get it to receive? Crappy boards? Bad luck?

Really appreciate it -

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(115200);
  Serial.println("LISTEN...");

  // Arduino Pin2 = 0
  mySwitch.enableReceive(0);
}

void loop() {
  if (mySwitch.available()) {
    output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(),
      mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),
      mySwitch.getReceivedProtocol());
    mySwitch.resetAvailable();
  }
}

[1] https://forum.arduino.cc/index.php?topic=493887.15

Am I missing something with the antennae placement (bottom corner next to coil)? Am I possibly frying it when soldering? Am I (possibly) a crappy solderer and touching up against the coil? And what would explain the need to power cycle to get it to receive? Crappy boards? Bad luck?

That would require seeing photos of your actual work, not just catalog shots.

The transmitter picture shows the circuit board with a spot to connect the antenna. Did you connect the antenna there and what did you use for an antenna?

Paul

Transmitter works great, its the Receiver that has had issues .. For both, I attached a 22 guage, single copper wire to the proper contacts on each board. for 433MHz I cut is at 17.3cm and for 315 cut at 23.8

What Arduino boards are you using? If a UNO, pin 0 is not good!

Paul

Its a Laflin Nano ... From the code above 0 is D2 which is where the data is plugged into. Works good-ish for 433 and not great with 315 .. I will try to get it to work on a different pin .. this is a good call

So I'm afraid that receiver board are probably the worst one you can get... and some are crappier then other..

That said you can make it less crappy but never good

First google coil loaded antenna 433 add that to the receiver, and the transmitter too if you feel like it

Second caps, that receiver are really sensitive to disturbances so add 0.1uf and 100uf caps close to it, or whatever similar you have

Third in rcswitch.cpp increase this int RCSwitch::nReceiveTolerance = 60; to maybe 99 or something-+

and while you are there try a few different values of this if you cant receive from the light remotes or if the remotes don't react to the signal you are trying to send, it might pick it up as the wrong protocol.....
const unsigned int RCSwitch::nSeparationLimit = 4300; try between 2000 and 12000

Best of luck

Thanks! I read about those coil loaded antennae last night. I will give that shot

Which path should the capacitors be added? just in line with the antennae? or on VCC?

Ill play with that receive tolerance in the library .. It picks up the remote itself, but for the 315, it basically needs to be on the module.

You posted yet more catalog shots instead of photos of your work? If something is wrong, how could we possibly see it?

All that tweaking will be futile if you made some minor wiring or soldering mistake.

Solder and placement pics

Swapped to D3 on the receiver, that didnt seem to change much.

Third in rcswitch.cpp increase this int RCSwitch::nReceiveTolerance = 60; to maybe 99 or something

and while you are there try a few different values of this if you cant receive from the light remotes or if 
the remotes don't react to the signal you are trying to send, it might pick it up as the wrong protocol....
const unsigned int RCSwitch::nSeparationLimit = 4300; try between 2000 and 12000

Tried both of these, best I could get was the the receiver will pick up the light-remote from about 6 inches on the 315MHz ..

Ill have a go with antennae in a bit

Trying the coil antennae route, I was able to get about 5ft ... still pretty bad, but improvement

I think I have tried a similar pair, and I threw them away. If yours work well, then perhaps I had something else. HC12 has worked well here, and if I really needed reliable longer distance transfers, it would cost more, about few tens of £$€. And probably not from unknown source from Ebay.
By the way, you say transmitter works well, but receiver doesn't. How do you know, when they work in pairs.

Im able to test the transmitter on an actual RF controlled powerstrip. I can get that working at 50+ feet without much hassle. As the transmitter is sitting stationary sending signal, I move with the receiver until I get a signal.

The soldering and connection look okay. Wire is actually better than those coil antennas. Here is another sneaky aspect you should consider - “RF desense” (means receiver de-sensitization). Basically, if you have a lot of signal wires carrying digital signals, they transmit noise. Since the receiver may be located very close to the microprocessor, especially if there are a lot of open “jumper” type connections, there is a cloud of RF noise around the receiver. This overwhelms the relatively weak signal from a further away transmitter.

What other modules comprise your system? Any LED displays?

Actually, localized RF noise such as from a desktop or tablet can also do it. I had this problem with my PC when I started playing with the modules. It drove me crazy until I figured it out and moved my protoboard away from the PC keyboard. :slight_smile:

Thus there may be more clues in seeing photos of the complete system, as it is fully constructed and installed.

Also, bit rate may be an issue. Those modules have a maximum data bit rate of about 4k bps. The most reliable performance happens around 2k bps. It’s adjustable in RadioHead but I don’t know about RFSwitch.

Some people will say, “those type of module are just bad”. It’s sort of true, but the fact is, I’ve tested and used many of them and the difference between them and other, better modules is not all that great. I’ve run them through 2 wooden floors, about 30 meters apart with no problems.

These days reasonable decently performing RF transceiver modules are nearly as cheap as the primitive
radio modules like these - I'd suggest its well worth using a transceiver module where you have much
better control of selectivity, much better sensitivity, control of modulation bandwidth, more accurate
frequency, and controllable transmit power.

@aarg -- thanks, Ill give some of those suggestions a try later

@MarkT -- recommendations? I did order the CC1101 module yesterday .. not sure if it will be a performance improvement .. but curious

I have tried cc1101, si4432 and rfm69, in my home automation and at least for me, the best receiving range was with the rfm69, transmit range was good enough for me on cc1101 and rfm69, I did get the si4432 to work but never as reliable as the other ones.

that said the cc1101 is a HUGE improvement to the modules you have
If you haven't already found this: GitHub - LSatan/SmartRC-CC1101-Driver-Lib: This driver library can be used for many libraries that use a simple RF ASK module, with the advantages of the cc1101 module. It offers many direct setting options as in SmartRF Studio and calculates settings such as MHz directly.
that works really good, one thing that made it work a bit better for me was to set the data rate "ELECHOUSE_cc1101.setDRate(2.5);" try 2-4 depending on the protocol you are trying to receive

Best of luck

I got a good range with HC12 modules. Not kilometers, but tens of meters. And yes, they have transceivers, that is they have a receiver and transmitter in the same package. If you switch direction, you have to wait a few hundred ms. And they have minimum distance around 50cm.

@swe-dude I did find that repo last night .. right before I ordered the cc1101 ... its what put me over the edge. I will check out the others you mentioned.

@LM1i -- correct me if Im wrong, but the HC12 is 433Mhz only? (or maybe to 473ish?) .. I currently need 315, thats what intrigued me with the cc1101 ...