DIY Arduino Weather Station with BME280, Wind Speed & Wind Direction Sensors
Complete Guide to Building a Compact Weather Monitoring System
Introduction
This project demonstrates how to build a reliable and accurate home weather station using an Arduino Uno, a BME280 sensor, and two specialized anemometric sensors. The system measures temperature, humidity, atmospheric pressure, wind speed, and wind direction, displaying the data on two separate 20×4 LCD screens.
The project is suitable for hobbyists, students, and anyone interested in electronics, sensor technology, and data processing.
Temperature, Humidity, and Pressure (BME280)
The BME280 sensor provides three essential environmental parameters:
-
Temperature
-
Humidity
-
Atmospheric pressure
The code allows you to set the station’s altitude, enabling automatic calculation of sea‑level‑adjusted pressure, which is important for comparing data with other stations.
The system also stores 24‑hour high and low values for temperature and pressure.
Wind Speed
The ZTS‑3000‑FSJT wind speed sensor outputs an analog voltage proportional to wind speed. Arduino converts this voltage into km/h.
Additional features include:
-
Real‑time wind speed
-
5‑minute rolling average (300 readings)
-
Automatic message “Wind is light” when speed is below 5 km/h
-
Adjustable voltage offset for calibration
Wind Direction
The PR‑3000‑FXJT wind direction sensor outputs a voltage between 0 and 5 V, which is mapped to a 0°–360° direction.
Because wind direction is circular, the system uses the mode (most frequent value) from the last 60 readings to provide a stable and realistic direction output.
Display System
The project uses two 20×4 LCD displays, each dedicated to specific data:
LCD #1 – Temperature, Humidity, Pressure
-
Current readings
-
24‑hour high/low values
LCD #2 – Wind Data
-
Current wind speed
-
5‑minute average
-
Wind direction
Update intervals:
-
Temperature/humidity/pressure → every 15 minutes
-
Wind speed/direction → every second
Hardware Overview
The system includes:
-
Arduino Uno Rev3
-
BME280 sensor
-
ZTS‑3000‑FSJT wind speed sensor
-
PR‑3000‑FXJT wind direction sensor
-
Two 20×4 LCD displays
-
12 V power adapter for the external sensors
-
10 kΩ potentiometer for LCD contrast
The wind sensors are powered by 12 V inside a weatherproof enclosure, while their signal wires are routed to the Arduino’s analog inputs.
Project video
How the System Works
-
-
Arduino collects data from the BME280 and both wind sensors.
-
The data is processed:
-
pressure correction
-
rolling averages
-
mode calculation for direction
-
-
Results are displayed on the LCD screens.
-
High/low values are refreshed every 24 hours.
-
Why This Project Is Useful
-
Provides real‑time environmental data
-
Great for learning electronics and programming
-
Can be expanded with Wi‑Fi, SD logging, or MQTT
-
Works reliably in outdoor conditions

