Very weird - touchscreen monitor on laptop kills RFID range on Arduino

I have built a model train control system based on an Arduino Mega that uses an ID20 RFID reader to identify trains. The connection to the ID20 is very simple - 5V, GND, serial data. It has worked well with a read range of several inches for several years.

Now something very strange has happened. I added an HP touchscreen monitor to the laptop interfacing with the Arduino. That is, the Arduino is connected to the laptop, and the monitor is also connected to the laptop.

When the touchscreen monitor is connected, range on the RFID reader drops to almost nothing. By experimentation, the RFID range dies when:

  1. The touchscreen monitor is plugged in, and
  2. The touchscreen monitor is connected to the laptop EITHER by its USB cable, or the video interface cable, (or both). For that matter, if the Arduino and touchscreen monitor just share a USB hub (no laptop), RFID range dies as well.

It does NOT matter whether the touchscreen monitor is switched on, so long as it is plugged in. Nor does it matter whether the laptop is plugged in or running on battery power. The Arduino and RFID reader are powered by a 5V switching supply. The monitor is located about three feet from the RFID reader, and about three feet from the Arduino. The touchscreen is plugged into the same power strip or outlet as the Arduino's supply.

I am guessing this happens when there is a common ground between the Arduino and the touchscreen - is this some sort of a ground loop? And what could I do to avoid it?

Hi, interesting (and I'm sure to you, frustrating) problem..

What POWERS the touchscreen? USB or other separate supply?

I think you are getting RFI (Radio Frequency Interference) from the Touchscreen-Laptop combination. Probably.

But, Check to see if Arduino +5V power changes with touchscreen plugged in (possible USB limitation?)

But, probably 'other' RF is interfering with RFID..

Get a small RF monitor (a handheld AM [not FM]) radio, tune it to the bottom of the dial near 540KHz and start 20+ feet away. Slowly move to the laptop / touchscreen / Railroad track, RFID receiver etc. Try to find the source of noise you receive and where it is the loudest.

Make sure the wiring from RFID receiver to Arduino is shielded if possible.. Try to do whatever to improve the RFID reception distance first, then start again with touchscreen.

I bet the touchscreen has a power / scanning system that is putting out RF...

Try small (say .1 uf) capacitors on all power leads going to RFID receiver and to Touchscreen...

Let us know what you find out.

Try adding ferrite toroids to every cable in your system to reduce the EMI - quality computer cables have these suppression devices at both ends, cheap ones don't and can lead to tons of radio emissions. Basically the video lead is the main suspect here, try tackling that one first. Also the screen itself may be a source of interference.

One cheap tool to help you locate the problem is an ordinary portable AM radio, use it to locate where most interference is coming from.

Thanks for the replies. I know nothing about EMI, but can it really be the culprit?

The monitor need not be switched on to kill the RFID range

It is sufficient that the monitor be plugged in, and either
(a) the Arduino is connected on the same USB bus as the monitor [it has USB for the touch interface], or
(b) the Arduino is connected by USB to the laptop, and the monitor's video cable is plugged in to the laptop

The monitor has its own power supply; it has a regular 3-prong plug which is plugged into the same outlet powering the Arduino/RFID reader. The supply voltage at the RFID reader doesn't change when any connections are made.

Could the monitor be acting as an antenna when it is plugged in? If so, will toroids help?

If the problem is the Arduino and monitor sharing a ground (via USB or video cable), would it help to power the RFID reader separately, and optoisolate its serial link to the Arduino? Or optoisolate the Arduino's USB connection to the monitor?

Well for one thing, most things are "on" these days once you plug them in. Unless there is a hefty switch on the back you flip, then it is probably powered up enough to detect you pressing the "on" button. My guess is it uses a switching power supply that is generating enough noise to swamp the RFID radio signals.

I recently purchased an HP touchscreen PC, so I tested my ID-12 reader both near it and further away. In my case, the reader fires off at about an inch from the token pretty consistenly. And if I placed the reader right in front of the screen, either in sleep mode or powered on, it still behaves the same. However, my Arduino was powered by a battery so I could walk around with it.

The idea of the radio-suppression chokes clamped around the power wires may well help (or the USB wires for that matter). Any stray RF shooting along the power circuit might be damped down enough to make it work.

The only thing that can adversely affect a radio system is by definition radio interference! Plugging in the touchscreen means you have connected an antenna - the cable itself - to your video-generation hardware - that's why the video cable needs ferrite toroid to present high impedance at radio frequencies to common-mode signal - this reduces the rf currents on the outside of the cable.

Well, I put ferrite clamp chokes on both ends of the Arduino USB cable, the cable running to the RFID reader, the monitor's power cord, and the cord to the Arduino power supply. The video cable already had chokes.

Didn't make any difference at all. Range still drops to near-zero when the Arduino has a USB connection to the monitor.

I found an unresolved thread from another user, who may have a similar issue:
http://arduino.cc/forum/index.php/topic,53517.0.html

If I power the reader from a battery instead of the Arduino power supply (and disconnect the serial line to the Arduino) the read range goes back to normal So I am going to try my original idea of powering the reader from a separate supply, and optoisolating the serial data.

Hmm.. Sounds like the Arduino 5V supply may have RF noise on it, coming over from the USB cable?? If the battery supply works better, try filtering the +5 between Arduino and RFID reader with an RF Choke (like 2.5 mHy) and a bypass capacitor (a couple of .1uf and a 1uf too.

One problem is that the RFID frequencies are low and the Ferrites etc. are not very effective.

What did you hear on the AM radio and where???

Turn off ACPI in the laptops bios and see if that helps.

Actually now I think about it some RFID stuff is very low frequency like 27MHz isn't it? Probably picking up a harmonic of some MHz clock. And yes ferrites are more efficient at VHF - and only eliminate common-mode anyway.

Actually now I think about it some RFID stuff is very low frequency like 27MHz isn't it?

Lower!
RFID can be at 125KHz or 13MHz, that is where the majority of it is.

Just a note on solving this problem - I powered the RFID reader through its own transformer + regulator, and optoisolated the serial line with a HCPL-7710 (probably gross overkill for 9600 baud).

RFID range is great now!

Good, but I bet you could have got away without the opto isoltor.

Is there any chance the touch screen has an active digitizer? An active digitizer interacts with a special pen. maybe the digitizer is emitting radio frequency to active the special pen. Just a thought.