Build a Solar-Powered Radar Detector
Radar is commonly used to detect, locate, track, and recognize distant objects as varied as ships, rain, and even insects. This month, I build a solar-powered, Doppler radar speed detector. I use a Grove 24GHz Doppler radar module, combined with my large-format LED display, to inform drivers in my neighborhood how fast they are going.
In the late 1960s, my buddy Jimmy Jensen and I often drove to Bradley Field (now Bradly International Airport) and parked at the end of the runway to watch planes take off and land at night. The strobing guidance and taxiing lights, along with the aircrafts’ headlights, were quite the psychedelic playground. We both had an interest in flying, and decided to check out the terminal building. At that time the control tower was in the terminal building, and accessible via a circular metal stairway clearly marked as “control tower,” with an arrow pointing up the stairs.
This was not a secured area at the time, and we would occasionally see personnel use the stairs. As we were hanging around the bottom, one employee asked if we needed help. We asked what the tower’s purpose was, and got invited up to find out. When we stepped through the doorway at the top of the stairs, our jaws dropped to the floor. We had never seen anything like it before—it looked like everyone was playing Asteroids!
The supervisor took us to the panoramic windows to explain the field’s runway makeup, and how it related to the information on the monitors. A radar system high above us sent out electromagnetic waves, and these waves were reflected back by any flying object in the sky. Its position relative to the runway was displayed on the monitor, along with an ID broadcast by each bogie. The monitor showed the IDs and positions of all planes within range of the airport. While each flight has its arrival and departure times, the control tower directs traffic, giving planes instructions on when to approach the runway, land, or take off.
The foundations for the development of radar were laid by Heinrich Hertz in 1886, when he discovered that radio waves are reflected by metallic objects. Christian Hülsmeyer carried out the first detection experiments using radar waves in the early 1900s, and developed a device that could measure the transit time of reflected waves, the “telemobiloscope.” He took out a patent for the process and is therefore considered the inventor of radar.
Radar differs from other sensing methods, such as optical and infrared devices, in some important ways, including the detection of far distant objects, and the ability to see in darkness and through clouds and vegetation. During WWII, the rapid development of radar gave the British a decided advantage by alerting them to an incoming attack, when Nazi planes were still 100 miles out from reaching the coast of England. This allowed citizens to reach shelters, and the military to scramble fighters to meet the enemy head on. The fact that inclement weather also reflected radar waves caused some difficulties when looking for the enemy, but it also led to the use of radar in weather forecasting (Figure 2). You are probably familiar with the phrase “Doppler radar” in weather reporting.
PULSED VS. DOPPLER RADAR
Pulsed radar transmits a short radio pulse (multiple cycles in the gigahertz range) using very high pulse power. A directional antenna forces the wave into a narrow cone at the speed of light. An object such as a plane will reflect some of the wave back toward the antenna. The time of flight (TOF) between sending the pulse and seeing a reflection represents twice the distance (d) to the reflected object. So the round trip distance of the wave is 2 x d = c x TOF, where c is the speed of light. This is similar to an ultrasonic sensor that uses the speed of sound. TOF is then an indication of distance between the source and target.
Doppler radar is a bit different. We are not interested in the distance to the object, but rather the speed at which the object is moving toward or away from the radar. Here the radar frequency is transmitted continuously, and the frequency of the reflected signal is compared to the original. If the object is motionless (not moving toward or away), the frequency is constant. If it’s moving, the frequency changes, based on how fast it is approaching or going away.
This shift in frequency is known as the “Doppler shift.” It is a change in the reflected frequency due to the target compressing the frequency when moving toward the radar source, or expanding it when moving away. The amount of frequency change, or Doppler shift, when the target is directly approaching the radar is calculated by the following formula:
fD = (2 x vt ) / λ
Here, fD is the Doppler shift in frequency, vt is the velocity of the target, and λ is the wavelength. Now let’s consider the following example with a transmitted 24GHz signal:
Let vt = 1m/s (2.24mph)
λ = 0.01249135m
fD = (2 x 1m/s) / 0.01249135m
fD = 160/s = 160Hz
When the target is approaching the radar at 2.24mph, the received signal will be 160Hz higher than the transmitted 24GHz signal. Note that the Doppler shift will be negative when the object is moving away from the radar, and positive when moving toward the radar.
This month’s project is a solar-powered speed detector that uses the Grove 24GHz Doppler radar module and a large-format LED display. The device measures and displays the speed of oncoming moving objects—mainly motor vehicles, but also bicycles and even pedestrians.
INFINEON BGT24LTR11 RADAR CHIP SET
The Grove 24GHz Doppler radar module is based on Infineon’s BGT24LTR11 radar transceiver chip set (Figure 3). Although it has the ability to turn the transmitter ON/OFF, it is used here to reduce power consumption and not to determine distance. It is certainly possible to obtain distance, but it is not being used for this purpose in my project.
The BGT24LTR11 produces two output signals. As their names suggest, the intermediate filter in-phase (IFI) is an in-phase sample of the base-band signal, and the intermediate filter quadrature (IFQ) is a quadrature sample of the received signal. Infineon’s XMC4700, an ARM M4 32-bit microcontroller (MCU), handles the processing of these samples, and also enables the transmitter and analog amplifier chain. The analog amplifier chain provides sample/hold and gain/filter for the IFI and IFQ signals, as shown in Figure 4.
The MCU does all the signal processing from sampling these signals. Since the IFI transmitted frequency and the IFQ received frequency signals are 90º out of phase, this measurement represents no target movement. As stated earlier, the relation of the two inputs will change as a target moves closer or farther away as stated earlier. Phase and magnitude are calculated by the internal fast Fourier transform (FFT).
We have access to three variables that will be used by the FFT. The FFT will set its output “bins” between the two extremes of maximum and minimum speed detection values in cm/s (0x0000:0xFFFF). The third variable is the trigger threshold (0x00000000:0xFFFFFFFF). This value must be exceeded before a “good” detection is proclaimed. Let’s take a look at the control we have over the Grove 24GHz Doppler radar module.
The module uses the standard Grove 4-pin connector. As is standard with this connection scheme, two connections are Power and Ground, and two connections are I/O. The I/O must be configured correctly, according to each different module—in this case, TX and RX for the Grove radar module. The protocol is one of the simplest I’ve ever used. Each transaction begins with an address sequence: 0x55 0x2A for Commands to the module, and 0x55 0xA2 for Responses from the module. This is followed by a 1-byte Command and a 2-byte count of the remaining bytes, which always includes a 2-byte checksum. So the shortest Command will consist of seven bytes. The checksum is merely the total of all bytes preceding the checksum. All eight Commands/Responses are given in Table 1.
Note here that 0xC2 is only a Response from the module and has no 0xC2 Command. This Response can be one of two types, depending on the 0xC5 and 0xC6 Commands. These Commands allow the user to set and query the working mode (see Table 2).
When the working mode is 0, reports will be of the 0xC1 variety—a word detection distance in cm/s and a 1-byte flag that describes the detection. When the working mode is 1, reports will be of the 0xC2 type—a list of 1,024 sampled IFI Data and IFQ Data word values. This data can be used with your own routines to determine one or multiple targets. It is beyond the scope of this column, but if FFT analysis is your thing, I invite you to go deeper into it with this data. Since we will be depending on the internal FFT algorithms, the working mode will remain 0.
Commands 0xC3 and 0xC4 allow the user to set and query the speed detection range, by defining the minimum and maximum speeds (in cm/s). These values are used by the FFT to define the boundaries of algorithm and the significance of its output bins. These bins contain magnitude and frequency information derived from the I and Q Data.
Commands 0xC7 and 0xC8 allow the user to set and query the trigger threshold, which is the value above which a bin’s magnitude is considered relevant.
You can get the detection information any time, using Command 0xC1; however, the module will report each time it completes an analysis. You’ll probably want to convert cm/s to mph or kph so the output is more relevant. Use the routines in Listing 1 for conversion.
Listing 1 The application gives us a velocity in cm/s , but I'd like to displace this in MPH and KPH. Here are a few conversion functions. float Value; int cms; int MPH; int KPH; Value = cms/44.704; // converts int cm/s to int MPH MPH = int(Value); Value = MPH * 44.704; // converts int MPH to int cm/s cms = int(Value); Value = cms/27.778; // converts int cm/s to int KPH KPH = int(Value); Value = cms * 27.778; // converts int KPH to int cm/s cms = int(alue);
The first program presented allows the user to explore the Grove 24GHz Doppler radar module by using a menu of Commands and allowing the user to set or query the various possibilities. To do this, I chose to show the information in a formatted screen presentation. Note that Grove supplies a library for this module, but I wrote this application without using it, so you can better understand how communications with the module work. You are invited to explore the library on your own.
Refer to Figure 5 to get the gist of my application. After setup, the main loop handles display of the main menu, choosing an item from the menu, and executing the routine associated with that item. For instance, Command 0xC3, “Set the Speed Detection Range,” builds the Command byte into the commandArray and then sends the array’s bytes out the second serial port (hardware, if it is available, or software, if there is only one hardware UART port). The serial event function checks for serial input from that port, and if it finds a response string via captureResponse() it will display the data in one of two formats. If the response is 0xC1, then the response is Speed and Direction, else it must be I and Q data. I and Q data won’t fit on the main screen with the normal Command and Response data, so it gets its own screen and waits for you to hit a key to continue before the data goes away. This way you have a chance to copy it, if you like.
Figure 6 shows what the normal screen looks like. It uses the control characters for Parallax’s serial terminal (0, 1, 11, 13, 14, & 15), to display formatted data without scrolling the screen.
I often use debug flags with my print statements to allow the user to turn off and on different kinds of debugging info. Although this variable could be dynamic, changed through user input, most of the time I just set it before compiling. You’ll note that the 0xC1 response presented on the left in Figure 5 is via Command 0xC1. Also, the module makes periodic 0xC1 responses when the working mode = 0, and sampled data has been analyzed. In this case, I present this in the center. Both include speed information, which I display in both kph and mph.
Now that the application can make use of the Grove 24GHz Doppler radar module, let’s remove the fluff from this application—all the user choices, and display data routines. I’ll add in some code from last month’s “From the Bench” column, to make use of the large-format, seven-segment display I built, using DotStar addressable RGB LEDs (“Rainbow LEDs,” Circuit Cellar #388, November, 2022) . Then, after adding the code, this radar module will be packaged with the large-digit display, to inform drivers in my neighborhood how fast they are driving.
Very little code is needed to use this module. The user parameters are fixed to the best fit for this application, and the module is initialized with those parameters. There is no need to communicate any longer with the radar module, since it will continue reporting what it finds.
You can expect the radar module, the (idle) DotStar display, and the Arduino MEGA (which I’m using for this project) to average about 150mA. When all the DotStar LEDs are lit up (white), the current goes up to 500mA. To run this for a day, the minimum requirement is 150mA x 24 = 3.6A-h with the LEDs OFF and 12A-h with them ON. I have a rechargeable 6V gel cell battery capable of 7.2A-h. It can run a couple of days with the LEDs OFF, but what fun is that? Let’s say that 100 cars a day pass by. Each time a car (or a pedestrian) is in the field of view, the display alternates between the “posted limit” in WHITE LEDs, and the “actual speed” in GREEN LEDs if it’s equal to or lower than the posted limit, or RED LEDs if it’s greater than the posted limit. These are ON for about five seconds. Five seconds x 100 is 500 seconds (8.33 minutes) or about 0.006 days. With a maximum requirement of 12A/day, that’s 12 x .006 or about 70mA/day. So you can see that the project should still run for almost two days (2 x 3.4A), periodically lighting up the display for each of the 100 cars. I’ll need to collect about 4A-h a day from a small solar array, to keep the battery from fully discharging.
I wanted to put all of this in a nice package. Some really nice windowed enclosures are available for $200-$300. Since that’s more than my whole budget for this project, I opted for something a bit less expensive. What I needed was something like a shadow box. I found one at Michaels, a craft supply store. It was a Black Extra Deep Shadow Box, 10” x 10” on sale for $26.24 . It’s one of the few boxes that has more than 3” of room behind the glass, and I needed some room for circuitry and a large battery.
I thought I might have to purchase some opaque material to replace the glass, so the LEDs would be visible only when lit, but I found that a single sheet of paper hid everything well, acted as a diffuser, and let the LEDs shine through nicely. I mounted the digits on a piece of foam core, and slid it all the way up against the glass (Figure 7). I used a few strips of wood to hold the foam core firmly inside the box.
The circuitry is mounted on a piece of 1/4” masonite, with the Arduino stack on one side and the radar module on the other side. The radar module is mounted up against the front glass. Radar will penetrate most non-metallic surfaces. To mount the enclosure to a sign post, I used two black L brackets secured to the center of the top and bottom with a single 1/4-20 thumbscrew. Four-pronged T-nuts inserted from the inside of the enclosure (Figure 8) secure the thumbscrews and allow the enclosure to pivot left and right approximately ±30º. The brackets hold the enclosure firmly to a standard U-channel sign post.
The solar panel (POWOXI) is an adjustable, waterproof, 6W panel, with a built-in intelligent charging controller . This is a nice 9” x 6” array in a water-tight plastic frame, complete with mounting bracket. The mounting bracket is adjustable in elevation only, but since it came with a plastic stake for mounting in the ground, I was able to cut the stake and mount it to the top of the enclosure, such that the panel’s bracket fits over the stub. This allows the whole panel to rotate on the stub and pivot up and down. I wanted to be able to zero this in on the sun’s arc across the sky. Trees will hinder it in the early morning and late afternoon, but I expected to get several sun-filled hours every cloudless day.
The device is now mounted along the road in front of my house. I’m close to the public boat launch here at Crystal Lake, so while it’s rather quiet during the week, it gets pretty crazy on the weekends. The posted speed limit is 20mph. The first capture of 3mph was of me walking up to the radar to adjust it on the post (Figure 9). Just as I finished the adjustments, a cyclist flew by at 13mph. From this encounter, I don’t think anyone will be driving 20mph past my house. I guess we’ll see, and so will some pretty surprised drivers.
I’ve already started thinking about improvements. The MEGA isn’t exactly the lowest-power device. It would be nice to log power and speed info to my MQTT server. Oh, and capturing a photo of flagrant violators would be…eh, wait, let’s not get into that trap!
 Jeff Bachiochi, “Rainbow LEDs.” Circuit Cellar 388, November, 2022.
 Application of C-band Doppler Weather Radar (CDR) for Detecting Volcanic Ash Dispersion of Sinabung Eruption – Scientific Figure on ResearchGate. Available from: https://www.researchgate.net/figure/Cartoons-from-the-Doppler-weather-radar-the-distance-to-the-location-of-the-rain-is_fig1_333611911
 Shadow box: –
 Solar panel: –
PUBLISHED IN CIRCUIT CELLAR MAGAZINE • DECEMBER 2022 #389 – Get a PDF of the issueSponsor this Article