Skip to the content
2 layers110 × 82 mmIoT O2 Concentrator, the printed circuit board in 3D

An integrated PSU Prototype for Unilorin BME Final year student - set 2026

Size
110 × 82 mm
Copper layers
2
Thickness
1.6 mm
Parts
20
Nets
34
Pads
84
Tracks, vias
140, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
23 Jun 2026
Updated
20 Jul 2026

Overview

IoT O2 Concentrator is an open-source printed circuit board by BigSmartt01, from the BigSmartt01/IoT_O2_Concentrator repository on GitHub. It is a 2-layer board of 110 × 82 mm with 20 parts on 34 nets, routed with 140 tracks and 0 vias.

It is built around the ESP32-DEVKITM-1. Its parts include 13 connectors, 3 capacitors and 1 diode. It belongs with the home automation and IoT boards and the ESP32 boards of this library.

Main components

1

README

README.md

IoT Oxygen Concentrator Integration

Purity Monitoring, Alert System and Compressor Control

A non-invasive integration module for PSA oxygen concentrators. The system monitors oxygen purity on the outlet line, escalates alerts through five tiers as purity drops, notifies a caregiver via SMS or voice call, and cuts compressor power only at true system failure levels.


What This System Does

FeatureDescription
Purity monitoringOCS-3FL2.0 ultrasonic sensor on post-filtration outlet (UART2)
Local displayLCD 2004 (I2C) shows O2%, flow, temperature, status, GSM signal, uptime
Five-tier alertsNORMAL → WARNING → DANGER → SEVERE → CRITICAL, each with distinct buzzer pattern and response
Caregiver configNumber stored in NVS flash — configurable via USB serial, SMS command, or the web portal
Three input modesPotentiometer (demo), WiFi captive portal (demo sliders), or real Sensor (UART)
Boot illusionOn boot, simulates a sensor warm-up ramp until a real sensor is connected — no hardware required to demo
Fail-safe relayCompressor only cuts at CRITICAL (near-ambient O2, sustained) — every other tier keeps it running while alerting

The concentrator itself is not modified. All integration is external in a separate enclosure.


Hardware

ComponentRole
ESP32 DevKit (standard)Main microcontroller, 3 UARTs, WiFi AP for captive portal
OCS-3FL2.0 sensorOxygen purity, flow, temperature (UART2, 12-byte packet)
SIM800L GSM EVBSMS and voice call via Nigerian GSM network (UART1)
LCD 2004 + I2C backpackLocal display, 4 rows
5V relay module + NPN driver (BC337)Compressor power control, active-HIGH from GPIO
Active buzzer (5V)Audible alert, pattern varies by tier
LM2596 buck converter12V to 5V regulated rail
12V AC-DC moduleMains AC to 12V DC from concentrator supply
2200uF electrolytic caps (x3)Bulk capacitance on 5V rail, 12V rail, and SIM800L supply
Potentiometer 10kDemo sensor substitute (ADC, GPIO 34)

Full wiring, schematic, and PCB layout are documented in docs/.

Schematic


Project Structure

text
project-root/
├── firmware/               # Arduino sketch (.ino), config.h, portal_html.h
├── hardware/                # KiCad schematic, PCB layout, Gerber files
├── docs/                    # Full project documentation, diagrams, images
├── README.md                # This file
├── SETUP.md                 # Step-by-step setup guide for Arduino IDE
└── .gitignore

Alert Tiers

The system escalates through five tiers based on O2 purity. Only the DANGER tier and above place a voice call; only WARNING sends SMS. The compressor keeps running through every tier except CRITICAL — the design assumes a caregiver may not respond immediately, so oxygen delivery is only stopped once purity has effectively fallen to ambient air levels, at which point the compressor was providing no therapeutic value anyway.

TierO2 PurityBuzzerCaregiver ContactRelay
NORMAL≥ 85%Silent—ON
WARNING70% – 85%Single beep, 1s cycleSMSON
DANGER35% – 70%Double beep, 1s cycleVoice callON
SEVERE23% – 35%Continuous toneVoice callON
CRITICAL< 23% (3 consecutive readings)Continuous toneVoice callOFF

Thresholds are runtime-adjustable (see Configuration below) and persist in NVS flash. Default fallback values live in firmware/config.h.

All alerts are suppressed for 30 seconds after boot to allow the sensor warm-up and GSM network registration to settle before any buzzer, SMS, or call can fire.


Input Modes

The system supports three interchangeable data sources, switchable at any time from the web portal without reflashing:

  • Potentiometer — a physical demo knob on GPIO 34, mapped to 21%–95.6%
  • WiFi — connect to the device's own captive portal and drag sliders for O2, flow, and temperature
  • Sensor (boots here by default) — real UART2 data from the OCS-3FL2.0. If no real sensor is connected, the system runs a realistic warm-up illusion (ramping 21% → ~92% over ~15 seconds, then settling with slight jitter) so the full alert chain can be demonstrated with no hardware attached. The moment a real sensor sends valid packets, live data takes over automatically.


WiFi captive portal for demo input and caregiver configuration


Firmware Architecture

The firmware uses FreeRTOS (built into the ESP32 Arduino core — no extra install needed). Five tasks run concurrently, sharing data through two mutex-protected resources:

TaskCoreResponsibility
sensorTask0Reads active input mode (pot / WiFi / sensor), updates shared O2 data
displayTask0Updates all 4 rows of the LCD every 500 ms
webTask0Hosts the WiFi AP, captive portal, and DNS redirect
gsmTask1Initialises modem on boot, monitors network registration every 5s
configTask1Handles USB serial and incoming SMS configuration commands
alertTask1 (highest priority)Evaluates the 5-tier state machine, drives buzzer/relay/SMS/call

dataMutex protects the shared sensor reading; modemMutex protects all TinyGSM AT command calls, since multiple tasks share the same SIM800L UART.


Quick Start

See SETUP.md for the full step-by-step setup guide.

  1. Install Arduino IDE 2.x
  2. Add ESP32 board support
  3. Install required libraries (listed in SETUP.md — includes ESPAsyncWebServer for the portal)
  4. Open firmware/IoT_O2_Concentrator.ino
  5. Set board to ESP32 Dev Module, select your COM port
  6. Upload

Configuration: Thresholds and Caregiver Number

Three interchangeable ways to configure the system — all write to the same NVS storage:

1. Web portal (easiest, works in any input mode) Connect to WiFi network O2-Controller (password 12345678), a captive portal should open automatically. Enter the caregiver number in the "Caregiver Number" card and tap Set.

2. USB Serial (115200 baud)

text
SET NUM +2348012345678
SET WARN 72
SET NORM 87
STATUS
HELP

3. SMS to the device SIM Send the same commands as SMS text to the SIM card installed in the SIM800L EVB. The device replies with confirmation and deletes the processed message.


Caregiver receiving a live SMS alert

All three methods are always available regardless of which input mode (pot/WiFi/sensor) is active.


Documentation

Full design documentation is in the docs/ folder. It covers:

  • System architecture and power design
  • Sensor UART protocol and 12-byte packet parsing
  • Relay driver circuit (NPN, active-HIGH from GPIO)
  • Five-tier alert logic and state machine
  • KiCad schematic and PCB layout
  • Wiring connection reference table
  • Bill of Materials

Project by Smart Ayodele. README last updated to match firmware Rev 1.4

Parts

20
QtyValueFootprintReferences
32200uCapacitor_THT:C_Radial_D10.0mm_H12.5mm_P5.00mmC1, C2, C3
2NetTie_2PCM_SL_Jumpers:JUP_P10mmNT1, NT2
11N4001Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD1
1BOX_SWITCHfootprint:JST_B2B-XH-AJ12
1BUZZERfootprint:JST_B2B-XH-AJ2
1DC_MODULEfootprint:TB002-500-02BEJ13
1ESP32_DevKitPCM_SL_Development_Boards:DOIT_ESP32_DEVKIT_30PinsA1
1GPIO_SUPPLYfootprint:JST_B3B-XH-AJ9
1GPIOsfootprint:JST_B4B-XH-AJ4
1LCD_20x04footprint:JST_B4B-XH-AJ6
1LM2596_INfootprint:TB002-500-02BEJ10
1LM2596_OUTfootprint:TB002-500-02BEJ1
1O2_SENSORfootprint:JST_B4B-XH-AJ3
1POTENTIOMETERfootprint:JST_B3B-XH-AJ8
1RELAYfootprint:JST_B3B-XH-AJ5
1SIM_GSM_BAREfootprint:JST_B5B-XH-AJ14
1SIM_GSM_EVBfootprint:JST_B6B-XH-AJ7

Similar boards

  • 2 layers67.3 × 74.9 mmEasysdr, the printed circuit board in 3D

    Easysdr

    michalin/easysdr

    Super Simple SDR Receiver

    140 parts115GPL-3.0
  • 4 layers95 × 76.2 mmDeWille Control, the printed circuit board in 3D

    DeWille Control

    zmeiresearch/DeWille

    A high-performance DIY audio DAC

    171 parts23
  • 2 layers241.5 × 321.5 mmMap board, the printed circuit board in 3D

    Map board

    axlan/pcb-map

    PCB designs, firmware, and host SW for controlling an interactive map printed onto a PCB board.

    11 parts11
  • 2 layers68.7 × 100 mmBsides perth 2025, the printed circuit board in 3D

    Bsides perth 2025

    badges4dotcom/bsidesperth2025badge

    Instructions on how to assemble the physical badge can be found here

    15 parts5
  • 2 layers78 × 622 mmBt trx dev board, the printed circuit board in 3D

    Bt trx dev board

    bt-trx/dev-board

    Hardware repo for the bt-trx development board

    59 parts4
  • 2 layers118 × 70 mmESP32SmartBoard PCB, the printed circuit board in 3D

    ESP32SmartBoard PCB

    ronaldsieber/ESP32SmartBoard_PCB

    KiCad project of a Printed Cuircit Board (PCB) for ESP32 with Temperature/Humidity/CO2 Sensors, User LEDs and Buttons

    36 parts4MIT
  • 2 layers33 × 70 mmEdifier remote, the printed circuit board in 3D

    Edifier remote

    cristianghsandu/edifier-remote

    An ESP32 based IR signals translator to use the LG Magic remote to control the volume on an Edifier 2.1 system

    9 parts2
  • 2 layers105.6 × 72 mmSolar mppt charge controller, the printed circuit board in 3D

    Solar mppt charge controller

    Pendu1699/solar-mppt-charge-controller

    ESP32-based solar MPPT charge controller, custom PCB, perturb & observe tracking algorithm, logged efficiency test data.

    25 parts2MIT

Questions

How big is the IoT O2 Concentrator PCB?

It measures 110 × 82 mm and has 2 copper layers, 1.6 mm thick.

What parts does the IoT O2 Concentrator use?

20 parts, built around the ESP32-DEVKITM-1. 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 IoT O2 Concentrator KiCad files?

From the BigSmartt01/IoT_O2_Concentrator repository on GitHub, at the commit this page was made from: the board is hardware/IoT_O2_Concentrator.kicad_pcb and its schematic hardware/IoT_O2_Concentrator.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the IoT O2 Concentrator design in my own project?

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