Skip to the content
2 layers68.6 × 53.3 mmSensor module, the printed circuit board in 3D

Adruino code and schematics for ad-hoc wireless sensor networks used for environmental monitoring. Project developed for senior year computer engineering capstone project.

Size
68.6 × 53.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
9
Nets
37
Pads
57
Tracks, vias
57, 4
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
21 Oct 2025
Updated
19 Jan 2026

Overview

Sensor module is an open-source printed circuit board by iconner22, from the iconner22/env_monitor_nodes repository on GitHub. It is a 2-layer board of 68.6 × 53.3 mm with 9 parts on 37 nets, routed with 57 tracks and 4 vias.

It is built around the DHT20 and B67345B0001X087. It belongs with the sensors and measurement boards of this library.

Main components

2

README

README.md

Project Overview

This project implements multihop, ad-hoc wireless sensor network (WSN) for environmental monitoring. The system is built around Arduino UNO nodes that communicate using a 915 MHz transciever and a centeral gateway that handles requests and data storage. The gateway node requests temperature and humidity at sent intervals and collects sound data based on a monitored threshold. The network performs a discovery upon initialization which allows for ad-hoc distribution and supports multi-hop communication based on a path supplied by the gateway.

Hardware

The system is built off of Arduino UNOs and custom PCB shields which integrate the RF transciever and sensors into the microcontroller.

Custom PCB for Sensor Nodes Custom PCB for Sensor Nodes. Custom PCB for Communication and Gateway Nodes Custom PCB for Communication and Gateway Nodes.

Node Types

The network is composed of three distinct node roles: sensor nodes, communication nodes, and a gateway node. All nodes share a common hardware and software base, with behavior determined by role-specific logic and sensors.

Sensor Nodes

Sensor Node Assembled Sensor Node. Sensor nodes are responsible for collecting and reporting environmental data. These nodes interface with temperature, humidity, and sound sensors.

Sensor nodes:

  • Respond to gateway-initiated requests for environmental or GPS data
  • Participate in network discovery and routing
  • Transmit sound data upon trigger
  • Prioritize low-power operation during idle periods

Communication Nodes

Communication Node Assembled Communication Node. Communication nodes help in the routing and localization of the network.

Communication nodes:

  • Participate fully in discovery and routing
  • Forward packets between sensor nodes and the gateway
  • Maintain routing state during the discovery phase
  • Improve network robustness and multihop coverage
  • Record GPS coordinates used in trilateration

Gateway Node

Gateway Node Assembled Gateway Node. The gateway node serves as the **root of the network** and the primary interface between the WSN and external systems. The Arduino UNO is connected to a RasperryPi which handles the routing protocols and publishing of data.

The gateway:

  • Initiates network discovery and route construction
  • Requests environmental and GPS data from sensor nodes
  • Receives asynchronous event-driven messages
  • Aggregates data for storage in an external database
  • Acts as the final destination for routed transmissions

Network Architecture

The network operates as a fully ad-hoc, multihop mesh. Nodes do not rely on preconfigured routing tables; instead, routes are dynamically discovered during a network setup (discovery) phase.

The network supports both:

  • Request–response communication initiated by the gateway (e.g., environmental or GPS data)
  • Asynchronous event-driven messages, such as sound-triggered alerts that propagate back toward the gateway

Discovery and Routing Algorithm

During the discovery process, the gateway node performs Dijkstra’s algorithm using the RSSI as the edge cost, a 32-bit integer is used to represent each node in the network where a 1 signals that it needs to be explored and a 0 signals that it already has been explored. This allows for a compact representation of 32 nodes, and the use of bitwise operations during the discovery process. The gateway node then stores a routing table, and upon request transmits the necessary path to the destination node. For the event based transmissions, each of the nodes stores the best path back to the gateway and transmits over this. The transmissions are handled using a baseline struct which is able to store the required data for each transmission type. The transmission is signified using an enum that specifies the type of tranmission and if it is a request or response.

Transmission Structure

cpp
enum TransmissionType {
  DISCOVERY_REQUEST,
  GPS_REQUEST,
  ENV_SENSOR_REQUEST,
  DISCOVERY_RESPONSE,
  SOUND_RESPONSE,
  GPS_RESPONSE,
  ENV_SENSOR_RESPONSE,
  DISCOVERY_RESPONSE_FINISHED,
  WEIGHT_CALCS
};

/********* Transmission Struct ********/
struct TransmissionData{
    int dest;
    int curr_num_hops;
    int path[MAX_HOPS+1];
    float dataOne; // temp, latitude, RSSI
    float dataTwo; // humidity, longitude, timing
    TransmissionType dataType;
    uint32_t nodeClosedOpenEncoding; // 1 = node unvisited, 0 = visited
};

Included in this repository

This repository includes the PCB design and all of the Arduino code required for the sensor, communication, and gateway nodes. Additional code is needed for the RaspberryPi to communicate with the gateway arduino. This is what handled the discovery process.

Parts

9
QtyValueFootprintReferences
2LOGOLOGOG***, G***
1Analong PinsLibrary:ANALOG_PINSANALOG-1
1DHT20FINAL_FOOTPRINTS:DHT20-Temp-HumidityDHT20
1Digital_BottomLibrary:DIGITAL_BOTTOMDIGITAL-L1
1Digital_TopLibrary:DIGITAL_TOP_PINSDIGITAL-H1
1Power_PinsLibrary:POWER_PINSPOWER1
1~FINAL_FOOTPRINTS:SOUND-BOBSOUND_BOB1
1~FINAL_FOOTPRINTS:RF69_MODULERFM69HCW-915MHz

More from iconner22/env_monitor_nodes

1
  • 2 layers68.6 × 53.3 mmCommunication module, the printed circuit board in 3D

    Communication module

    iconner22/env_monitor_nodes

    Adruino code and schematics for ad-hoc wireless sensor networks used for environmental monitoring. Project developed for senior year computer engineering capstone project.

    8 parts

Similar boards

  • 2 layersDht20, the printed circuit board in 3D

    Dht20

    Maitham16/everything_p2

    54 parts1
  • 2 layersDigital waters, the printed circuit board in 3D

    Digital waters

    atop8918/DigitalWaters_WD

    Digital Waters Water Monitoring Device hardware

    20 parts
  • 4 layers188.5 × 82 mmDigital waters, the printed circuit board in 3D

    Digital waters

    atop8918/DigitalWaters_WD_prototype

    Simplified Schematic for prototype release

    118 partsMIT
  • 2 layers101.6 × 101.6 mmBoot camp pcb, the printed circuit board in 3D

    Boot camp pcb

    eshazen/reference_designs

    Example projects for educational purposes - no warranty!

    35 partsCC0-1.0
  • 4 layers109.5 × 79 mmAirQuality, the printed circuit board in 3D

    AirQuality

    Tsquash/AirQualityMonitor

    AQM is an ESP32-C6-based, Matter compatible, indoor air-quality monitor. It measures carbon dioxide, temperature, humidity, VOC, and NOx, displays the latest readings on an e-paper display, and publishes its…

    47 partsApache-2.0
  • 2 layers103 × 30.5 mmTS Back Endcap, the printed circuit board in 3D

    TS Back Endcap

    EEVengers/ThunderScope

    ThunderScope GitHub Repo

    9 parts1.3kMIT

Questions

How big is the Sensor module PCB?

It measures 68.6 × 53.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Sensor module use?

9 parts, built around the DHT20 and B67345B0001X087. 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 Sensor module KiCad files?

From the iconner22/env_monitor_nodes repository on GitHub, at the commit this page was made from: the board is sensor_pcb/sensor_module.kicad_pcb and its schematic comm_and_gateway_pcb/communication_module.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sensor module design in my own project?

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