RF range & performance testing in a concrete building

I needed a quick and easy (and slightly more professional) way to measure RF performance of the typical RFM69/RFM95 low power transmitters, at a remote location where a prospect RF sensor network would be installed. Here’s a video explaining the devices and what’s involved, the rest of the blog has more details, the code and links you might be interested in.

In the past I ran range and performance tests of RFM69 radios in various types of applications to gauge how it might perform. I know it does great in medium/large residential homes with many walls and gateway in a corner of a concrete basement, while nodes are transmitting from inside and outside the building 100-200ft away. It also works great in typical industrial buildings (usually metal) with lots of equipment and obstacles. Of course in practice we follow some basic RF principles to ensure our small antennas are oriented decently and signal not degraded by incorrectly crammed or wound inside enclosures.

At this location we had an unusual multi level heavily reinforced concrete building. I did not know what to expect – would all the concrete and rebar act as a faraday cage and totally block signal from an outside sensor to an inside gateway? Or would performance just be poor?

I assembled a MotionMote – which runs on a CR123A 3V lithium, sipping ~2uA. These batteries are great for temperature extremes, yielding a stable and deterministic discharge curve, and they can last for many years on an ultra low power node such as the MotionMote.

RFGateway is my go to board for setting up a RaspberryPi as an RF gateway. It plugs straight into a Pi’s USB port and I would normally use an SMA dipole antenna at the gateway end of such an RF network. The video shows how I soldered a helical to an SMA male connector to mate it to the RFGateway’s SMA-female connector.

The RFGateway’s SAMD51 processor clocks at 120mhz, plenty fast for handling packets from a very large RF network, while doing floating point and other memory operations. It has a small header convenient for an I2C OLED. Also for this evaluation I just used a LiPo battery plugged into the power header, only connected when USB is not plugged in.

Any compatible transceivers can be tested, but for this application RFM69HCW was used as I prefer it for all my RFM69 based applications.

To run the test I placed the small transmitting node (MotionMote) in a fixed position and walked away around the property and inside the building in the areas of interest with the RFGateway which displays the captured packets on the OLED. The transmitter sends a packet and waits for an ACK back from the RFGateway, that way we have 2-way communication for each transmission. Every few transmissions the RFGateway sends a packet to the node and waits for an ACK back (same as the normal transmissions but backwards).

The sample sketches are posted in the RFM69 library (RangeTest_Gateway & RangeTest_Transmitter). The video explains in more detail what the packets contain and how to evaluate the RF performance.

But essentially as signal gets weaker the RSSI will start to drop. The RFM69 library will automatically ramp up transmit power (that X metric) when signal drops too low.
So as I walk away from the NODE the RSSI will drop and the X will start to increase at some point. This helps determine any dead spots or areas with weak signal.

In my test the MotionMote was placed outside about 150ft away, and to my surprise there were no dead spots in the building either on above floors or below ground. The signal was weak as expected when I was below grade, but the RFM69_ATC auto-power was able to ramp up power and still reach the gateway. Below is one of the weakest signal spots with most grade and obstacles in the way, with signal still getting through, at the expense of higher transmission power at the node.

Have you built something similar? Let me know!

Transceivers In-Depth Overview

I prepared a complementary video to cover all the basics of the LoRa and RFM69 transceivers used on Moteino boards. I concentrated on the most common topics I’ve seen show up in the forum and in support emails. This should be a good primer for those getting started with using sub-Ghz transceivers with Arduino or Moteino or even other compatible boards, since most principles apply the same way. Feedback and comments are welcome.

New Dipole Antenna Review & How-To

I’m pleased to introduce a new version of the PCB Dipole Antenna, a significant upgrade from the previous version. This has a nice VSWR of almost 1.0 at both 868Mhz (at default 78mm length), and 915Mhz (trimmed at 73.5mm). It could be trimmed anywhere down to 2.4Ghz but it will be a best performer for the wideband LoRa and FSK radios in the sub Ghz ranges. Be sure to check out the dipole section in the RF-Best-Practices Guide for more theory on the dipole antenna.

Simple monopole antenna testing

As outlined in the RF Best Practices guide, the Monopole Antenna is formed by a quarter wavelength vertical piece of wire, plus a “launchpad” ground around its base, and is a very good cost-to-performance ratio antenna. The quarter wavelength refers to the wavelength of the frequency at which the radio is transmitting/receiving. As an example, the for 433mhz the wavelength is 0.69m and the quarter wave is then ~172.5mm. This is a theoretical figure at which the signal would have maximum resonance in the antenna, but in real life the signal from a radio goes through various passive components (matching networks), RF switches, and other PCB traces which influence this signal, and hence the signal might resonate better at slightly different physical dimensions of the antenna.

In the video below, Marcel illustrates how you can test a simple monopole antenna by starting with a given length and then trimming the antenna length to determine which length yields the longest range. Since the radio can transmit at a maximum of 20dBm, a 30dB attenuator was added and also the transmit power was diminished in software (with this function) to reduce the total output to around -26dBm – that is many many times (-30dB = 1000 times reduction) less powerful than 20dBm (dB scale is logarithmic not linear – see this page for more on that). This allows testing the antenna at very small range without having to walk very far away to see the signal drop. The monopole is omnidirectional in the horizontal plane (ie it emits the signal in all directions at the same intensity).

Of course, this type of test could be done in the lab with a VNA (Vector Network Analyzer). But for such a cheap and simple antenna, this test shows how easy it is to do it yourself without investing an eye watering amount of cash in such exotic equipment.

You can do your own testing in a similar manner, and you can even use the Node and Gateway examples for this purpose, and simply add the setPowerLevel(0) call in setup() (and disable RFM69_ATC) to reduce signal power, or use an attenuator like Marcel did. Be sure to check out this page where Marcel has used the same technique to test several antenna types, with some interesting results – this might help you decide to upgrade from the virtually free monopole to a dipole.