AquaMeteo — IoT Weather Station for Watersports
by mielb in Circuits > Raspberry Pi
50 Views, 0 Favorites, 0 Comments
AquaMeteo — IoT Weather Station for Watersports
AquaMeteo is an IoT weather station built for watersports enthusiasts — kitesurfers, windsurfers, and SUPers. It measures wind speed, wind direction, and water temperature in real time and displays the data on a live web dashboard with an LED ring that shows beach flag colours. Powered by a Raspberry Pi 5(can be downgraded to a cheaper pi),it uses an anemometer, a wind vane, and an NTC thermistor connected through an MCP3008 ADC. All data is stored in MySQL and served via a FastAPI + Socket.IO backend.
Supplies
Main components:
- Raspberry Pi 5 8GB(can be a cheaper pi)
- Anemometer (wind speed sensor, 0-5V)
- Wind direction sensor (wind vane, 0-5V)
- NTC 10K B=3950 thermistor (waterproof IP68)
- MCP3008 ADC (8-channel SPI)
- NeoPixel ring (12 LEDs)
- LCD 16 with I2C adapter (PCF8574)
- Buzzer (active, 5V)
- 12V battery for wind sensors
- momentary push button
Enclosure & build:
- some plastic boxes to fit the cables
- Black spray paint (for enclosure)
- 2x Breadboard (830 points)
- Jumper wires (M-M and M-F, assorted)
- Female 40-pin GPIO header
Resistors & cabling:
- 10kΩ resistors
- 1kΩ resistors
- 2kΩ resistors
- Soldering iron + solder
- USB-C power supply (5V/3A)
Circuit Assembly
Start by connecting the MCP3008 ADC to the Raspberry Pi via SPI. Connect MCP3008 pin CS to GPIO 8, DOUT to GPIO 9, DIN to GPIO 10, and CLK to GPIO 11. Connect VDD and VREF to 3.3V and GND to ground.
Connect the wind direction sensor to CH6 of the MCP3008. This sensor outputs 0-5V analog, so you need a voltage divider: put a 1k ohm resistor in series and a 2k ohm resistor to ground. This steps the voltage down to 0-3.3V for the ADC input.
Connect the NTC thermistor to CH7 of the MCP3008. Use a 3.3V voltage divider with a 10k ohm reference resistor between 3.3V and the NTC to ground.
Connect the anemometer to GPIO 5. This is a reed switch, not an analog sensor. Use a 1k ohm pull-up resistor to 3.3V. Configure the GPIO for falling edge detection.
Connect the NeoPixel ring data input to GPIO 18. Connect power to 5V and ground.
Connect the LCD 16x2 I2C module through the 3.3V logic level shifter. SDA goes to GPIO 2, SCL goes to GPIO 3.
Connect the buzzer to GPIO 24 and ground.
Connect one momentary button between GPIO 6 and ground for starting a measurement. Connect the other between GPIO 12 and ground for safe shutdown.
Database Setup
This project uses MariaDB with a database called aquameteo. The database uses a single measurements table where each sensor type is identified by a DeviceID.
The system has six devices:
Device 1 — Anemometer, measures wind speed in m/s
Device 2 — Wind vane, measures wind direction in degrees
Device 3 — NTC thermistor, measures water temperature in degrees Celsius
Device 4 — NeoPixel ring (12 LEDs), actuator
Device 5 — Buzzer, actuator
Device 6 — LCD 16x2 I2C, display
Other tables store measurement locations and eight watersport types with wind and temperature thresholds.
Software Installation
Clone the repository and follow the instructions in the README:
https://github.com/howest-mct/2025-2026-projectone-mct-BuyseMiel
Enclosure
Find three plastic or cardboard boxes that are large enough to hold all the components. Spray them black with graffiti paint for a clean, uniform look.
Mount all components on a wooden plank. This serves as a sturdy base so the entire setup does not blow away when measuring wind outside.
Place the LCD on the front so it is readable. Make the NeoPixel ring visible through a cutout or window. Mount the two buttons for start measurement and shutdown where they are easy to reach.
Mount the anemometer and wind vane above the enclosure so they are exposed to the wind. The NTC thermistor goes in the water on its cable. Place the 12V battery next to the plank.
Usage — Live Dashboard
Once assembled and powered on, the weather station starts measuring automatically.
The dashboard shows wind speed in m/s, wind direction in compass degrees, and water temperature in degrees Celsius.
The measurements page shows all historical readings sorted from newest to oldest.
The sports page gives live advice for eight watersports: kitesurfing, windsurfing, SUP, sailing, swimming, fishing, rowing, and surfing.
The NeoPixel ring lights up in the corresponding beach flag colour: green for calm conditions, yellow for moderate conditions, red for strong conditions, and black for dangerous conditions.
The measurement cycle repeats every five minutes by default. Press the start button to force a measurement at any time.