Projects / Open weather station

An open weather station and all-sky camera for robotic telescopes

2024 – present · built for the ROTSE-IIIc telescope in Namibia · enclosure designed in Fusion 360 · Raspberry Pi Pico and MicroPython · circuit board designed in KiCad

A robotic telescope has to decide for itself whether it is safe to open, so it needs to know the wind, humidity, temperature and pressure outside, and whether there is cloud overhead. Commercial observatory weather stations are expensive, so while working on the revival of the ROTSE-IIIc telescope in Namibia I built a monitoring suite that anyone can copy: a 3D-printed weather station, a custom all-sky camera, and open firmware and electronics. Its telemetry is what the observatory's control system reads when it decides whether to open the roof.

3D render of the assembled weather station: a three-cup anemometer on top of a stack of ribbed radiation screens, on a mounting post
The assembled station.
Colour-coded cutaway of the station showing the rotor on a ball bearing in the roof, the sensor holder inside the radiation screens, and the steel rods and wing nuts holding the stack together
A section through it: the rotor turns on a ball bearing in the roof, and the sensor sits on a holder inside the radiation screens.

The enclosure

The enclosure is 3D-printed in PLA or PETG. The temperature and humidity sensor sits inside a stack of four radiation screens, which shade it from direct sun while letting air flow past, and three steel rods with wing nuts hold the stack together. On top, a three-cup anemometer turns on a permanently lubricated ball bearing on an M8 bolt, with small magnets in the rotor that pass a Hall-effect sensor as it spins. The roof takes heat-set threaded inserts, and the whole station comes apart for maintenance.

Exploded view of the station's printed parts stacked vertically: rotor cap, rotor with cups, roof, radiation screens, sensor holder and base
Exploded view: rotor cap, rotor and cups, roof, radiation screens with spacers, sensor holder and base.

Electronics and firmware

The first version runs on a Raspberry Pi Pico with an AHT20 and BMP280 sensor board and an A3144 Hall-effect sensor, wired on a small prototyping board and connected to the sensor head by a 6-core cable with plug-in connectors. I wrote the firmware in MicroPython, including the drivers for both sensors:

Every three seconds the station prints one line over USB:

T:temperature H:humidity P:pressure WS:wind_speed
Wiring diagram connecting a Raspberry Pi Pico to the temperature, humidity and pressure board and the Hall-effect sensor through 6-pin connectors
Wiring for the first version: the Raspberry Pi Pico (left) and the sensor head (right), joined by 6-pin connectors.

In the field

The station has been running on the roof of the ROTSE-IIIc enclosure in Namibia, on a mast alongside the first version of an all-sky camera I built to watch for cloud: a 12.3-megapixel Sony IMX477R sensor behind a 120° lens, in a 3D-printed weatherproof housing under a clear dome. Together the two cost under €200.

The ROTSE-III enclosure open, showing the telescope inside, with the weather station on a mast beside it
The ROTSE-III telescope, with the station on the mast beside it.
A person standing on the roof of the telescope enclosure next to the mounted weather station under a clear blue sky
Installing it on the enclosure roof.
Close view of the mast carrying the anemometer, the radiation-screen housing and the all-sky camera's dome, against the Namibian landscape
The anemometer and radiation screens, next to the all-sky camera's dome.
Enzo holding the opened all-sky camera unit, showing the Raspberry Pi and camera board inside its round housing
The all-sky camera unit, opened up.
Still from the all-sky camera timelapse: a fisheye view of the night sky over the telescope enclosure Watch the all-sky camera timelapse on YouTube
The all-sky camera's first night, sped up. Watch on YouTube.

Three months of data

Between 20 July and 30 October 2025 the station returned hourly averages with 98.5% coverage. Temperatures ran from −2.8 to 31 °C, with the sharp day-night swing of a desert site, and the wind reached 12 m s-1 (43 km/h). The mean pressure of 811 hPa is what the site's altitude implies.

Three stacked time series from July to October 2025: temperature cycling daily between about 0 and 30 degrees, humidity mostly low with spikes, and wind speed peaking at 12 metres per second
Hourly temperature, humidity and wind speed from the station. The humidity channel sticks at 100% from 10 October onwards, which looks like a sensor fault rather than the weather: 348 hours of saturation in a desert spring.

Version 2: AtmoPi

The next version replaces the prototyping board with a custom circuit board I designed in KiCad: AtmoPi, a board that plugs straight onto a Raspberry Pi. It has connectors for a BME280 sensor, the anemometer and an internal temperature sensor, relays to switch a fan and a heater, and a slot for a Raspberry Pi camera, so one board can run both the weather sensors and the all-sky camera. The design is open source under the MIT licence.

3D render of the green AtmoPi circuit board with sensor connectors, a camera slot and a GPIO header
The AtmoPi board, rendered in KiCad.