Thanks to my long-term CNC Mower project, I am always on the lookout for new ways to do local positioning sensing. I’ve played with spinning lasers, fancy DGPS’s, sonar, and boundary wires but none of them are just right. I want centimeter scale repeatability with a range on the order of 100’s of meters updated at least once per second. Cheap, small, and power efficient are also important factors since my goal is to have maybe a half dozen of these little solar powered mowers roaming the fields.
I recently saw a mention of a new Atmel chip that seems to be able to do radio range measurements. It looked exciting.
The AT86RF233 is an Atmel chip that is cheap (<$3 in quantity and <$5 for 1), very low power (milliwatts), and easy to interface to a microcontroller (SPI interface), so it would seem perfect for my project. Unfortunately, I could not find even the most basic information on its ranging capabilities like how far it can go and how accurate it is.
I got a few of the eval boards to play with to find out for myself. Here are some very early findings.
The boards are way too expensive at $379 per pair. They don’t have a serial boot loader pre-programmed so you need to own (and know how to use) an Atmel compatible programmer just to play with the ranging function. The chip is only available in an impossible to solder QFN package. Huge barriers to entry. If anyone at Atmel is listening, you should sell these boards at cost (probably <$25) and preprogram them with a serial boot loader so people can plug them into their USB ports and start playing with them. Why not also offer a friendly 20 pin DIP package? We also need a few app notes with functionality overview, details on the ranging theory, best practices on how to use the actual on-chip registers, and maybe some reference designs for antennas.
I tested in my RF noisy NYC apartment using a Leica laser rangefinder as reference. Out-of-the-box default settings with the default quality-weighted range estimation.
I tested in a huge, flat 20 acre field far away from any RF noise. I cranked transmit power to maximum. I logged all 4 antenna combinations (two stations each with 2 antennas). I sampled every 2000cm up to 8000cm. I forgot to turn off the radio when I walked from 6000cm to 8000cm. I used a fiber reel measuring tape for reference.
Here each dot is a sample and the color indicates the sampled antenna pair.
If I filter out on the best overall pair (the grey dots), it looks like this…
This looks promising.
I think there is room for improvement by…
- Only using a single antenna pair optimized for the location
- Dynamically adjust output power based on estimated distance
- Filter nonsense samples and samples with low signal quality
This weekend I am going to try to test with some of these improvements, and I am going to use 3 base stations to do oversampled 2D location finding. Check back next week for results!
If all goes well, next steps are to…
- Design and build a stand-alone base station with an AT86RF233 and an ATTINY to do very basic . This will be battery powered with optional solar charging. Weatherproof case. Hopefully this unit can be built for less than $25 per unit so it will be possible to put lots of them around a sensing areas.
- Design and build a shield with just enough (chip, xtal, antenna) to make it possible for an Ardunio to be a rover. Also hopefully less than $25.
- Put it on a few robots and start mowing hi-res Google Earth messages!