Here’s another project I had on the TODO list since forever, suddenly becoming possible and easy with a 3D printer. It has some history - I initially just wanted to measure and log outdoor temperature, so I had a water-proof DS18B20 probe on the balcony. It worked fine, but in sunny weather, the balcony and the wall heated up like an oven and the sensor reported temperatures over 50°C. The proper way to do this is to have the sensor mounted in a white-painted wooden box with slated walls called a Stevenson screen. It also shouldn’t be on a balcony… well, it is what it is :D
Commercial weather stations generally, besides various air qualities, measure wind speed and wind direction, sunlight intensity, and rainfall. I don’t see much value in light measurements when I don’t have solar panels; rainfall sensors are notoriously problematic, but I might try to build that later. Wind direction doesn’t make sense on a balcony, so I was left with temperature, humidity, atmospheric pressure, and wind speed. I plan to explore dust particles at some point as well, but these sensors are rather expensive.
I searched for a simple way to make a Stevenson screen and came upon this Australian blog article (archived) showing how to build one from plastic bowls. My design uses white flower pot trays, but the construction with threaded rods is otherwise identical. I printed spacers and other pieces needed to hold it together. I then designed an anemometer that sits on top of the Stevenson screen, and a bottom cap holding the electronics, which attaches the whole thing to a plastic pipe. Use a steel pipe if you have one - it could use some more strength.
All 3D models and print files can be downloaded here: 3d-weatherstation.zip (29MB).
Everything in the archive is my original work, CC-BY-SA.
Measuring wind speed and gust
I had some trouble finding the correct method to measure wind speed and wind gusts. Eventually, I stumbled upon this page from the British “Met Office” (archived), which suggests that:
- Wind speed is the average of the previous 10 minutes
- Wind gust is the maximal average speed seen in a 3-second window. The paper didn’t specify the measurement period (maximal in the day? hour?), so I interpreted that as the 10 minutes used for wind speed calculation.
The wind speed is measured using a Hall effect sensor mounted inside the top cap. Normally you have one magnet, but I wanted more resolution for wind gust detection, so I glued three magnets with 120° spacing to the bottom side of the rotor; I then divide the reported RPM by 3. The measurement algorithm is very simple - I have a circular buffer with 600 slots, one per second. I count pulses from the Hall sensor and fill the buffer, so at any moment there is a 10-minute history to average and find gusts in.
I didn’t calibrate it in any way yet, I use the reported RPM as a relative value. The fastest wind gust detected so far made 573 RPM.
Testing the Hall sensor:
Measuring temperature, relative humidity, air pressure
You can choose some of the many sensors available, e.g. on AliExpress. I had a bunch in my parts box already - DS18B20 for temperature (it’s my favourite sensor), DHT22 for temperature and humidity (slightly cursed pulse-based interface), and BMP280 for atmospheric pressure (and temperature). So I now have relative humidity, atmospheric pressure, and three different temperature readings - none of which quite agree. I chose to average these - one degree one way or another doesn’t matter for my home science.
The brains of the weather station could be anything, perhaps an Arduino. I used an ESP8266 module that publishes the readings over WiFi to the MQTT broker running on my home server.
And finally, a short video showing the anemometer in action: