Last week, I set up the RFM69HCW 433 MHz radio hardware to be able send messages from one radio to the other. Below is a picture of the set up. I have the 433 MHz packet radio on a breadboard and connected to an ESP32 Feather Board, as well as attached to a quarter-wavelength antenna (about 17 centimeters).
Once I made sure I knew how to use the hardware and could send messages one way, I integrated the code for the 433 MHz radio into my existing code for the distributed networking epic; however, as of right now, my code involves each 433 MHz radio broadcasting its message and then receiving a confirmation, so I have only used two nodes in all my testing.
When playing around with these radio modules, I learned about how the receiver not only gets the message sent over the radio, but also the signal strength measured in dBm (decibels relative to one milliwatt). I thought that we might be able to use the signal strength value between radios to approximate their relative position. For example, let's create a situation where there are three blimps in a network and one of the blimps gives a payload to another blimp. The giving blimp may be able to know which node to send a payload delivered message to by assuming that the better signal strength radio near it is closer.
So, I ran a simple test to see how the signal strength of these radios drop off as they get separated (of course, the signal is measured in decibels and is logarithmic, but I still was curious as how varied the signal strength would be for ten versus twenty feet for example). I put one radio that would receive a signal and send an acknowledgement in the corner of the bottom floor of Boelter with line of sight, and measured the signal strength of the acknowledgement from another radio as I walked farther away.
I used a laser distance sensor for the first 60 feet before it stopped working, and then I went all the way to the other wall since I previously had estimated it to be around 90 feet. I wanted even more distant results, so for the 140 and 190 feet tests I moved the entire setup outside (so that having a glass door in the way wouldn’t mess with the results). I plotted this on a scatterplot at first, but the logarithmic scale wasn’t too apparent, so I made a line chart.
From the chart, the logarithmic nature of the dBm scale was clear. Comparing the signal strengths from ten and twenty feet, they don’t differ by much (about 6 dbM), so using signal strength with lots of nearby blimps coupled with the fact that there may be more interference may not be ideal; however, on the closest test where I had the antennae half an inch away from one another, I saw some promise of using the signal strength to find very close-by nodes, as long as there are no others at least 2-3 feet away. In reality though, our robots will never get that close since they will have large chassis.
So, a good solution for allowing nearby robots to find each other on the network is to use signal strength as well as LED boards to physically locate one another: a robot can ask its network-neighbors with the highest signal strength to take turns flashing a specific color on their LED boards, and the robot’s camera can detect that color to find its target.
One more thing that I noticed while measuring the signal strength was the fact that every message on the radios appeared to take 3 milliseconds to send a message and receive an acknowledgment. I didn’t want to conclude anything from this or compare it with the painlessMesh latency since I still am using the Arduino serial monitor, which introduces some of its own latency, to debug, so I will run that test once I get the React Dash working with my networking code.