Skip to the content
PCBKitNew board
2 layers31 × 4 mmWindVane, the printed circuit board in 3D

IOT Sensor Hub using RF communications between sensors

Size
31 × 4 mm
Copper layers
2
Thickness
1.6 mm
Parts
28
Nets
16
Pads
80
Tracks, vias
267, 0
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
23 Sep 2024
Updated
26 Jul 2025

Overview

WindVane is an open-source printed circuit board by Abdenry, from the Abdenry/sensorHubProject repository on GitHub. It is a 2-layer board of 31 × 4 mm with 28 parts on 16 nets, routed with 267 tracks and 0 vias.

Its parts include 8 capacitors, 8 resistors and 2 connectors. It belongs with the home automation and IoT and sensors and measurement boards of this library.

README

README.md

Sensor Hub

weatherStation

A small, portable, self-sustaining weather station built to provide data to an external web interface hosted with Grafana via a Raspberry Pi Zero 2 W. This station is able to collect various metrics from on board sensors such as temperature, humidity, heat index, wind speed, and wind direction. A DHT22 sensor is used to collect relative humidity and temperature metrics with an accuracy of +-2% and +-0.5C, while metrics such as wind speed and wind direction are collected with custom built sensors. The heat index is calculated in software using the DHT-sensor-library.

Communication is handled through the NRF24l01 radio modules in a mesh configuration. The mesh routing of data packets is automatically managed with RF24.h, RF24Network.h, and RF24Mesh.h provided by the RF24 library, specifically chosen for its meshing capabilities. It provides dynamic configuration of the NRF24l01 modules, meaning that in the scenario where the weather station loses connection with the Raspberry Pi for any reason (power down, range lost, etc.), it can automatically reconfigure and connect to the Raspberry Pi given its under normal operable condition (i.e. has power and is in range). This allows additional stations to be installed with potentially different purposes with all metrics collected to be routed back to the Raspberry Pi. Alternatively, if the distance between the Raspberry Pi and the weather station is much greater than the range of a single NRF24l01 module, an additional node can be configured and placed in between the weather station and Raspberry Pi acting as a range extender. The RF24 library will automatically handle the routing and pass the data collected from the weather station to the Raspberry Pi via that additional node. There is no limitation that prevents an additional station from also being a range extending node.

nrf24WeatherStationDiagram4

Wiring Diagram

circuitDiagram3

CAD Model

weatherStationCAD

Sensor Design

The following sensor assemblies were all 3D printed out of white PET-G filament for its UV resistance, and to reflect as much heat as possible to avoid compromising the temperature and humidity readings of the DHT22 sensor.

Solar Radiation Shield

The DHT22 sensor used to collect temperature and humidity data was housed in a solar radiation shield. This is necessary to prevent direct sunlight from heating the sensor over time creating higher than ambient temperature readings, simultaneously it protects the sensor from rainfall, which would also cause a higher than ambient humidity reading if it gets wet.

Wind Vane

Wind direction was measured using eight AH180 omni-polar hall effect sensors and a magnet on the underside of the vane. Each hall effect sensor acts as one of the four cardinal or ordinal directions (North, North East, East, etc.) which is activated only in the presence of the magnet. The vane will point in the direction the wind is blowing from. With limited IO available on the Arduino Nano/ATmega328p the SN74HC175N Parallel In Serial Out (PISO) Shift Register was used to reduce the eight outputs of the wind vane to one output + three inputs, halving the total amount of connections to the Arduino Nano/ATmega328p.

windVane

Anemometer

Wind speed was measured using two magnets and a single US1881 latching hall effect sensor connected to the Arduino Nano D2 pin which corresponds to the ATmega328p external interrupt pin 0 (PD2). The magnets attached to the underside of the anemometer rotate over the US1881 sensor triggering either a high or low state depending on the magnets polarity, generating an interrupt which increments a revolution counter. The getWindSpeed() function is called periodically to calculate the wind speed using the amount of revolutions counted within that period, resetting the revolution counter once calculation has completed, and repeats this process. This assembly was tested by having the anemometer attached externally to a moving car, logging its calculated wind speed and comparing it to that the vehicles actual speed. It proved accurate to +-2 km/h with a vehicle speed of 80 km/h.

anemometer

Grafana Dashboard

The Grafana dashboard conveniently displays historical readings for temperature, humidity, wind speed, and direction. It also provides an updated reading of the stations current temperature, humidity, and calculated heat index. The dashboard has been configured to retain this information for up to two weeks however this can be further increased if desired.

dashboard successfulTransmission

Power Supply and Challenges Faced

Power for the station comes from a 1100 mAh LiPo battery, supported by four 1W solar panels connected in parallel. A solar power manager with Maximum Power Point Tracking (MPPT) is implemented to maximise the efficiency of the solar panels, switching between charging the station and its battery based on sunlight availability. It ensures that the battery remains charged during daylight hours, with enough capacity to keep the station operational overnight. After optimisations, the weather station consumes approximately 0.021 A at 3.72 V, providing an estimated 52 hours of operation without any solar input.

Prior to optimising power consumption, a major challenge faced during development was the intermittent loss of communications particularly over night.

dropOuts

Initially, it was suspected that the issue was not related to power due to the assumption that the 4 watt solar panel array was capable of powering and charging the station which had a measured active consumption of 0.24W (65mA @ 3.7V). After investigating the issue for a significant period of time, no definitive answer could explain the intermittent communication loss overnight other than insufficient solar power. To prove this was the root of the problem the station was connected to a bench top power supply with a constant 3.7V over night. This resulted in no communication drop outs over night nor for the next couple of days as the battery was sufficiently charged from the constant 3.7 V provided by the power supply. Optimisations for the code then proceeded to lower the active consumption.

Optimisations

The first optimisation was replacing the software timer used to intermittently send weather metrics to the Raspberry Pi to a Watchdog Timer. This did not directly improve the power consumption of the station, however, it would allow the station to wake up from a power down mode, which was the second optimisation performed.

Entering the Arduino Nano/ATmega328p into a power down mode and only powering up after the Watchdog Timer expired directly reduced power consumption from 0.24W (65mA @ 3.7V) to 0.208W (56mA @ 3.7V), a 13% power efficiency improvement.

This was further improved by 64% by powering down the NRF24l01 radio module when not in use. This lowered the active consumption of the station to just 0.0744W (20mA @ 3.7V). This is a total 69% improvement from the initial 0.24W (65mA @ 3.7V) observed prior to optimising.

With the stations active power consumption optimised, the 4W solar panel array was able to sufficiently charge and power the station eliminating the intermittent communication loss.

Future Improvements

  • This station could be improved in the future with the inclusion of a rainfall sensor to collect metrics on the volume and rate of rainfall. One possible design for this sensor could involve a tipping bucket mechanism, where a known volume of rain causes a bucket to tip, triggering a hall-effect sensor to log the event. By counting the frequency of tipping, the system could accurately measure rate and cumulative rainfall over time.
  • Improvements could also be made to the assembly of the custom sensors to be more accessible for servicing as the current design is finicky to put together, not suitable for consistently taking apart and putting back together.
  • The internal wiring of the station could also be significantly improved by switching the single core wire used for each connection, to a multi-core cable. This could make the internal wiring much tidier and easier to access/service.

Parts

28
QtyValueFootprintReferences
8100nFCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C4, C5, C6, C7, C8
810kResistor_SMD:R_0402_1005MetricR1, R2, R3, R4, R5, R6, R7, R8
8Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalEast1, North1, NorthEast1, NorthWest1, South1, SouthEast1, SouthWest1, West1
2Conn_01x01Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ1, J2
1Conn_01x06Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalSIG1
1Conn_02x08_Counter_ClockwisePackage_DIP:DIP-16_W7.62mmSN74HC165

Questions

How big is the WindVane PCB?

It measures 31 × 4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the WindVane use?

28 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the WindVane KiCad files?

From the Abdenry/sensorHubProject repository on GitHub, at the commit this page was made from: the board is CAD/kiCAD/windVane/windVane.kicad_pcb and its schematic CAD/kiCAD/anemometer/anemometer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the WindVane design in my own project?

Its repository states no licence, so its author keeps all rights: ask Abdenry before reusing the design.

More from Abdenry/sensorHubProject

4
  • 2 layers43 × 20 mmPowerSystem, the printed circuit board in 3D

    PowerSystem

    Abdenry/sensorHubProject

    IOT Sensor Hub using RF communications between sensors

    11 parts
  • 2 layers35 × 65 mmArduino, the printed circuit board in 3D

    Arduino

    Abdenry/sensorHubProject

    IOT Sensor Hub using RF communications between sensors

    8 parts
  • 2 layers22 × 12 mmAnemometer, the printed circuit board in 3D

    Anemometer

    Abdenry/sensorHubProject

    IOT Sensor Hub using RF communications between sensors

    4 parts
  • 2 layers13 × 37 mmSolarRadiationShield, the printed circuit board in 3D

    SolarRadiationShield

    Abdenry/sensorHubProject

    IOT Sensor Hub using RF communications between sensors

    4 parts

Similar boards

  • 2 layers44.5 × 72.7 mmOSO SWAT C1-jig, the printed circuit board in 3D

    OSO SWAT C1-jig

    joeycastillo/Sensor-Watch

    A board replacement for the classic Casio F-91W wristwatch

    28 parts2.1k
  • 2 layers95 × 54 mmEinkPDA screen, the printed circuit board in 3D

    EinkPDA screen

    TalismanDesign/PocketMage_PDA

    An E-Ink PDA device using the ESP32 S3.

    28 parts2kApache-2.0
  • 2 layers45 × 45 mmSmartbuttons, the printed circuit board in 3D

    Smartbuttons

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    28 parts915
  • 2 layers24.1 × 36.2 mmEsp32miniBT, the printed circuit board in 3D

    Esp32miniBT

    asterics/esp32_mouse_keyboard

    ESP32 implementation for HID over GATT Keyboard and Mouse (Bluetooth Low Energy). Including serial API for external modules (similar to Adafruit EZKey HID)

    28 parts911GPL-3.0
  • 2 layers34.8 × 12.2 mmInfnoise goldfingers, the printed circuit board in 3D

    Infnoise goldfingers

    waywardgeek/infnoise

    The world's easiest TRNG to get right

    28 parts854CC0-1.0
  • 2 layers55.9 × 99.1 mmStm32f0 disco Luos shield, the printed circuit board in 3D

    Stm32f0 disco Luos shield

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    28 parts546MIT
  • 2 layers88 × 25 mmEleLab v2 Frontpanel a, the printed circuit board in 3D

    EleLab v2 Frontpanel a

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    28 parts531GPL-3.0