I got bit hard by the astronomy bug last year. So much so that on any clear night, I was usually programming my telescope(s) to get data from some target. However, it has been cloudy nearly every night for the last 2 months in New England. Instead of going stir-crazy, I decided to take the plunge into radio astronomy, which can be done in cloudy weather, in the day or at night. Instead of jumping straight into the science though, I decided to dip my toe in.
I read recently that NASA weather satellites transmit their data unencrypted, so you can connect to and download imagery data directly from their satellites! I also learned that there is one satellite (GOES-19) that is parked in geostationary orbit (22, 000 miles away!!!) at an elevation and azimuth that is viewable from my backyard. In addition, GOES-19 is the latest NASA weather satellite, activated in April 2025, so it has the latest technology on it. I bought a kit on Amazon that includes the L-band antenna dish (1.7 GHz center frequency), a low-noise amplifier (LNA), a software defined radio (SDR), and RF SMA cable. All I had to do was provide my Raspberry Pi 4 and an inexpensive tripod to mount the dish to. USRadioguy has a great tutorial on setting it up and getting the appropriate software installed (I used goestools), and I was able to start receiving satellite data pretty quickly (in about an hour).
Once I started collecting data and weatherized the sensitive electronics (the Raspberry Pi, the LNA, and the SDR), I could start collecting lots of data both day and night. After 3 days, I had enough data to import into my favorite edge AI platform: Edge Impulse! My goal was to create an object detection model to identify rain clouds in my downloaded images, then animate the images into a gif and display that on a local webserver. I could then be notified if rain clouds were approaching my house.
I imported about 100 images into the Edge Impulse tool, then went about labelling the data.
Once the labelling was complete, I created an object detection impulse using FOMO 0.35 at a 320x320 pixel resolution. I kept the impulse as RGB to better detect the rain clouds (which show up as blue, green, or red in data depending on intensity).
I pretty much kept the default parameters and had a strong F1 score of 97%.
I then ran the test data and got strong results there as well.
With the model results looking promising, I deployed the model as a Linux AARCH64.eim file. Since I was already using the Raspberry Pi 4 to run the data collection and processing of the satellite imagery, I could also use it to run my model in a Python script. Using the edge-impulse-linux Python library, I'm able to run object detection of each frame (image), then combine all those frames together into a gif animation. I could then host the gif on an internal flask server, and run a cronjob to update the gif every 30 minutes. You can check out the code on github. The public project on Edge Impulse can be found here.
I find it super impressive that with a single board computer roughly the size of a deck of cards, you can run satellite data collection and processing software, along with an object detection model and a webserver. Truly amazing!
This project was a lot of fun. I really enjoyed setting up the antenna, and it was rewarding to start receiving imagery data from the satellite! I look forward to pulling in additional data that the satellite provides, such as EMWIN and Non-Cloud Moisture Imaging Products data.
I hope you enjoyed this project, and don't forget to look up!
Comments