Skip to the content
PCBKitNew board
2 layers45 × 45 mmSpo2 module v3.0.0 simple dec2024, the printed circuit board in 3D

Spo2 module v3.0.0 simple dec2024

AEAEmbedded/ESE_PROG6

Course repository for Programming 5 (Prog 5) and Programming 6 (Prog 6) of the Embedded Systems Engineering track, Software Engineering, HAN University of Applied Sciences.

Size
45 × 45 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
49
Pads
157
Tracks, vias
280, 64
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
13 Sep 2024
Updated
5 Nov 2026

Overview

Spo2 module v3.0.0 simple dec2024 is an open-source printed circuit board by AEAEmbedded, from the AEAEmbedded/ESE_PROG repository on GitHub. It is a 2-layer board of 45 × 45 mm with 35 parts on 49 nets, routed with 280 tracks and 64 vias.

It is built around the 10103594-0001LF. Its parts include 11 capacitors, 8 resistors, 2 ICs, 2 diodes and 1 connector. It belongs with the SAM D and SAM boards of this library.

Main components

1

README

README.md

ESE_PROG - Programming 5 / 6 (2026-2027)

Course repository for Programming 5 (Prog 5) and Programming 6 (Prog 6) of the Embedded Systems Engineering track, Software Engineering, HAN University of Applied Sciences.

CoursePeriodWhenFolder
Prog 5Period 1September - October 2026Prog5/ - lectures, labs, assignments, example code
Prog 6Period 2November 2026 - January 2027Prog6/ - workshops, Hackathon, Challenge, rubrics

Welcome to Prog 5

Prog 5 and Prog 6 are the final lap of the programming courses in your ESE journey. Together they work towards one overall goal: becoming a professional embedded software and systems developer.

Prog 5 (period 1) is about object-oriented C++ on microcontrollers (Arduino / SAMD21) and on the Raspberry Pi: writing sensor libraries, designing them with UML, connecting them to the outside world (I2C, MQTT) and testing them. Prog 6 (period 2) builds on that with software-engineering practice - build systems, unit testing, clean code and design patterns - and applies it in the Hackathon and the Challenge project.

Why everything is done with Git

All work in Prog 5 and 6 is done with Git, because it is the only way to reach our learning goals. Git:

  • lets several developers work on the same project at the same time;
  • keeps a complete history of every change to the code;
  • makes it easy to revert a change or recover an earlier version;
  • helps you resolve conflicts between contributions efficiently.

More importantly, it takes you out of an artificial learning environment and into the professional field: the companies where you will do your internship and, later, land a job use exactly these tools. Being fluent in them is part of being a professional - see Coder vs Developer vs Software Engineer: what's the difference?

Handing in your work

Put your assignments in a (private) Git repository and add your lecturer as a collaborator (GitHub username jakorten). Commit as you go - a repository with a real history of small, meaningful commits is part of what is assessed.

Prog 5 schedule and deadlines (period 1, 2026-2027)

The course starts on Thursday 3 September 2026 and runs for seven weeks. Every week combines one design principle, a C++ topic and a UML topic, and every Friday there is a lab. The first two labs are Git and Requirements; from week 3 onwards the Friday lab is the next step of one sensor library that grows week by week (the BME280 is the concrete sensor we use; another I2C sensor works just as well). The same seven-step plan is on the schedule slide of every lecture deck.

WeekLecture (Thu)Design principleC++UMLSlidesLab (Fri)
13 Sep 2026Single ResponsibilityScope, namespaces, stringUse cases / class diagram0. Course introduction, 1. IntroductionFri 4 Sep: Git workshop 1 - the basics (clone, add, commit, push, .gitignore, handing in)
210 Sep 2026Open-Closed PrincipleConstructors, iterators, lambdasInheritance / generalization2. Constructors and moreFri 11 Sep: Requirements (SMART, FURPS+, MoSCoW, use cases)
317 Sep 2026Liskov Substitution PrincipleLists, inline functions, default paramsActivity diagrams3. Lists, inline functions and default paramsFri 18 Sep: sensor library 1 - core, Bus, Arduino
424 Sep 2026Interface Segregation PrincipleInterfaces and abstract classesDependencies4. Interfaces and abstract classesFri 25 Sep: sensor library 2 - Raspberry Pi, Bus / Clock split
51 Oct 2026Dependency Inversion PrincipleThreads, callbacksSequence diagrams5. Threading and callbacksFri 2 Oct: sensor library 3 - sampler thread, callback, MQTT
68 Oct 2026Coupling and cohesionPolymorphismComposition, packages6. PolymorphismFri 9 Oct: sensor library 4 - polymorphism, UML design
715 Oct 2026Embedded SOLIDLifecycle: constructors, destructors, const-7. LifecycleFri 16 Oct: sensor library 5 - RAII, host unit tests, refactor

Each assignment is introduced in the lecture of the week listed below and is due one week later, on the Thursday of the following week. Full hand-outs: Prog5/Assignments/.

WeekLectureAssignmentDeadline
1Thu 3 Sep 20261. Make a basic stepper motor library and hand it in via your Git repository.Thu 10 Sep 2026
2Thu 10 Sep 20262. Create a UML use-case diagram with description for a sensor application (e.g. KNMI / weather station).Thu 17 Sep 2026
3Thu 17 Sep 20263. Sensor library, core + Arduino: Bosch driver wrapped in a class, Bus interface, ArduinoI2cBus, example sketch. Tag v0.3-arduino.Thu 24 Sep 2026
4Thu 24 Sep 20264. Same library on the Raspberry Pi: CMake build, LinuxI2cBus, Bus / Clock split (ISP), dependency diagram. Tag v0.4-pi.Thu 1 Oct 2026
5Thu 1 Oct 20265. Sampling thread, callback, MQTT: Sampler, Publisher / MqttPublisher, EnvironmentSensor + FakeSensor, sequence diagram sketch. Tag v0.5-mqtt.Thu 8 Oct 2026
6Thu 8 Oct 20266. Design on paper: class, package and sequence diagrams of the library; vector<EnvironmentSensor*> with a second sensor. Tag v0.6-design.Thu 15 Oct 2026
7Thu 15 Oct 20267. Unit tests on the host with the MockBus (no mocking framework yet).
8. Review the library against DRY, KISS, SOLID, coupling / cohesion and the lifecycle checklist; add a second sensor and move the shared abstractions (Bus, Clock, EnvironmentSensor) into their own package; refactor and report. Tag v1.0.
Thu 22 Oct 2026

Resit: assignments that were not handed in on time, or that did not pass, can be (re)submitted until the resit deadline of Thursday 29 October 2026.

Assignments 3-8 all build on the same sensor library (the Friday labs are its steps), so keep it in one repository and let its history show how it grows: from a first Arduino version to a tested, refactored Pi library that publishes over MQTT. Starter code per week is in Prog5/Code/ (week2: the wrapper library, week4: Linux I2C bus, week5: sampler + MQTT).

Learning outcomes

The learning outcomes below follow the HAN engineering competencies used in the rubrics (Analyze - Design - Manage - Control - Realize - Professionalize). Prog 5 lays the foundation; Prog 6 raises every outcome to a professional level and assesses it in the Hackathon and the Challenge.

Prog 5 - after period 1 you can

#Learning outcomeCompetency
P5.1Analyse a realistic problem into user stories and SMART requirements, categorised with FURPS+ and prioritised with MoSCoW.Analyze
P5.2Design software with UML: a use-case diagram with descriptions, a class diagram and a sequence diagram (and a state diagram where behaviour asks for it).Design
P5.3Implement object-oriented C++ on embedded targets (Arduino / SAMD21 and Raspberry Pi): classes and encapsulation, constructors/destructors and object lifecycle, inheritance, abstract classes and interfaces, polymorphism, smart pointers, lambdas and callbacks, basic concurrency.Realize
P5.4Build reusable sensor libraries: an Arduino library for an (I2C) sensor, a C++ library for an I2C sensor on the Raspberry Pi, and connect it to an MQTT broker.Realize
P5.5Apply DRY, KISS, SOLID and loose coupling / strong cohesion, recognise where your own code violates them, refactor it and explain what improved.Realize
P5.6Test a library with basic unit tests in C++.Control
P5.7Use Git professionally for all your work: meaningful commits, branches, pull requests and a readable history, in a repository you share with your lecturer.Manage

Prog 6 - after period 2 you can

#Learning outcomeCompetency
P6.1Set up and maintain a CMake build for a C/C++ project with its own libraries and externally fetched test dependencies, and explain why build systems exist.Realize
P6.2Unit test at a professional level with CppUTest, including test doubles and mocks for hardware dependencies, and position tests in the testing pyramid.Control
P6.3Write clean, well-commented, maintainable code: recognise code smells, apply MISRA C++:2023 guidelines and use static-analysis tooling to check your own code.Realize
P6.4Apply embedded design patterns and architecture (state, observer, hardware proxy, cyclic executive, debouncing, fixed-point arithmetic, humble object) with awareness of their run-time and memory overhead.Design
P6.5Realise a working proof-of-concept for a healthcare case (Wilhelmina Children's Hospital, WKZ) - in a team under time pressure in the Hackathon and in the longer Challenge project - from analysis and SOLID design, through technical designs (class, sequence, state), to a tested implementation.Analyze / Design / Realize
P6.6Manage code as a team in Git with commits, pull requests, blame and code reviews throughout the project.Manage
P6.7Reflect and advise: give substantiated advice based on your analysis and proof-of-concept and present it convincingly (presentation, report or video), communicating professionally with the team, lecturers and domain experts.Professionalize

Assessment: Prog 5 by the weekly assignments (see schedule below); Prog 6 with the Hackathon and Prog 6 rubrics.

Repository layout

FolderContents
Prog5/Keynotes/Lecture slides (PDF): course introduction and lectures 1-7.
Prog5/Labs/Lab hand-outs (Lab 2: Arduino basics with OOP / SOLID; Lab 3: I2C sensor library).
Prog5/Assignments/Assignment hand-outs per week; from week 3 on all steps of the one sensor library (BME280 as the worked example).
Prog5/Code/week1/Week 1 example code: stepper motor examples, SimpleStepper library, TB6600 test.
Prog5/Code/week2/BME280 starter library: Bus interface, wrapper around the vendored Bosch BME280 SensorAPI, MockBus + doctest.
Prog5/Code/week4/rpi_platform: LinuxI2cBus on /dev/i2c-1 and a smoke test, CMake build of core + platform.
Prog5/Code/week5/mqtt_station: EnvironmentSensor, Sampler (thread + callback), Publisher / MqttPublisher (libmosquitto), composition root.
Prog5/Code/Examples/Demo code used in the lectures and labs (abstract interfaces, object lifecycle, ToF sensor library, SOLID terminal, I2C scanner).
Prog5/Workshops/Git/Git workshops 1 (the basics) and 2 (working together), with an interactive version.
Prog5/Demos/Hand-outs: Git manual, CMake basics, interfaces demo.
Prog6/Workshops/Workshops: CMake, Unit Testing (CppUTest), Commenting, Clean Code / MISRA C++, Design Patterns & Architecture.
Prog6/Hackathon/Hackathon material: the VitalSignsBox modules (ECG lead detection, SpO2 detection, temperature sensors) with firmware, API descriptions and hardware files.
Prog6/Challenge/Challenge project: assignment document and hardware design files (SensorHub, ActuatorHub, sim modules, adapters).
Prog6/Rubrics/Assessment rubrics 2026-2027 (Prog 6 v1.5, Hackathon v1.4; Markdown source + PDF) and previous editions.
Resources/Background reading, e.g. choosing a development method.

How to use

  1. Clone the repository: git clone https://github.com/AEAEmbedded/ESE_PROG
  2. Arduino sketches (*.ino): open the sketch folder in the Arduino IDE and upload to your board.
  3. CMake projects (workshops): configure out-of-source, e.g.
    bash
    cmake -S Prog6/Workshops/UnitTesting/Source/TemperatureTestFinished -B build
    cmake --build build
    ctest --test-dir build
    Build directories are ignored by git - do not commit them.
  4. Refer to the keynotes, labs and workshop READMEs for instructions.

Related repositories

  • PiTest - Raspberry Pi 4 to SensorHub (SAMD21) I2C communication test (Python for the Pi, C++ Arduino sketches for the SAMD21).

Disclaimer

This repository is for educational purposes. The code may be incomplete or contain errors. Use at your own risk.

Contact

Johan Korten - johan.korten@han.nl

Parts

35
QtyValueFootprintReferences
30.1uFSpo2_module_v3.0.0_simple_dec2024:0402-CAPC20, C22, C23
31uFSpo2_module_v3.0.0_simple_dec2024:0603-NOC33, C34, C35
210uFSpo2_module_v3.0.0_simple_dec2024:0603_510C4, C6
215pFSpo2_module_v3.0.0_simple_dec2024:0402-CAPC24, C25
21kSpo2_module_v3.0.0_simple_dec2024:0603_532R1, R2
24.7KSpo2_module_v3.0.0_simple_dec2024:0603-RESR28, R29
2WPSpo2_module_v3.0.0_simple_dec2024:SMT-JUMPER_2_NO_NO-SILK_528SJ5, SJ6
1Spo2_module_v3.0.0_simple_dec2024:618009231121SPO2
10.1uFSpo2_module_v3.0.0_simple_dec2024:0603C21
1100kSpo2_module_v3.0.0_simple_dec2024:0603-NO@1R48
110103594-0001LFSpo2_module_v3.0.0_simple_dec2024:AMPHENOL_10103594-0001LFJ1
110KSpo2_module_v3.0.0_simple_dec2024:0603-RESR22
110kSpo2_module_v3.0.0_simple_dec2024:0603_532R6
132.768kHzSpo2_module_v3.0.0_simple_dec2024:CRYSTAL-SMD-3.2X1.5MMY2
139ΩSpo2_module_v3.0.0_simple_dec2024:R0603_420R7
1AP2112/MIC5219Spo2_module_v3.0.0_simple_dec2024:SOT23-5U5
1ATSAMD21G-ASpo2_module_v3.0.0_simple_dec2024:TQFP-48U4
1BLUESpo2_module_v3.0.0_simple_dec2024:CHIP-LED0603_259LED2
1CORTEX_DEBUGPTHSpo2_module_v3.0.0_simple_dec2024:2X5-PTH-1.27MMJP5
1FB - 30OhmSpo2_module_v3.0.0_simple_dec2024:0603L2
1GREENSpo2_module_v3.0.0_simple_dec2024:CHIP-LED0603_259LED1
1HUB_TESTPINSHUBSSpo2_module_v3.0.0_simple_dec2024:TEST_PINSU$5
1JUMPER-SMT_2_NC_PASTE_SILKSpo2_module_v3.0.0_simple_dec2024:SMT-JUMPER_2_NC_PASTE_SILK_528JP1
1PHOENIX_PTSM_M5_TH_I2C++Spo2_module_v3.0.0_simple_dec2024:PTSM_M5_THRHOLEU$10
1RESETSpo2_module_v3.0.0_simple_dec2024:TACTILE_SWITCH_SMD_4.6X2.8MMS1
1SENSORHUB_PROFILEUSB_LEFTSpo2_module_v3.0.0_simple_dec2024:SENSORHUB_OUTLINE_USB_NOTCH_LEFTU$12

Questions

How big is the Spo2 module v3.0.0 simple dec2024 PCB?

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

What parts does the Spo2 module v3.0.0 simple dec2024 use?

35 parts, built around the 10103594-0001LF. 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 Spo2 module v3.0.0 simple dec2024 KiCad files?

From the AEAEmbedded/ESE_PROG repository on GitHub, at the commit this page was made from: the board is Prog6/Deprecated/Hackathon/VitalSignsBox/Hardware/Spo2_module_v3.0.0_Simple_dec2024/Spo2_module_v3.0.0_simple_dec2024.kicad_pcb and its schematic Prog6/Deprecated/Hackathon/VitalSignsBox/Hardware/Spo2_module_v3.0.0_Simple_dec2024/Spo2_module_v3.0.0_simple_dec2024.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Spo2 module v3.0.0 simple dec2024 design in my own project?

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

Similar boards

  • 4 layers83 × 109 mmD4 small pcb panel, the printed circuit board in 3D

    D4 small pcb panel

    unsurv/unsurv-offline

    Offline portable GNSS device based on the ESP32

    522 parts72
  • 2 layers40 × 50 mmWired sculpt, the printed circuit board in 3D

    Wired sculpt

    chadaustin/wired-sculpt-pcb

    KiCad design files for the Wired Sculpt conversion mod

    39 parts35
  • 8 layers180.6 × 148.5 mmAMC FMC Carrier PcbDoc, the printed circuit board in 3D

    AMC FMC Carrier PcbDoc

    BerkeleyLab/Marble-Mini

    "Marble-Mini" Simple FMC carrier board with SFP, 2x FMC, PoE

    931 parts24
  • 2 layers51.2 × 70.4 mmGreen Pill, the printed circuit board in 3D

    Green Pill

    IsmaelLopesSilva/Eletronica

    Sobre eletrônica (artigos, ebooks, simuladores e outros conteúdos).

    29 parts14
  • 2 layers65 × 56 mmZephyrus IAQ HAT, the printed circuit board in 3D

    Zephyrus IAQ HAT

    erinjense/raspberrypi-indoor-air-quality-pcb

    Hardware and Software for a Indoor Air Quality Logger

    80 parts2MIT
  • 2 layers72.4 × 55.9 mmBarcodeCartridge, the printed circuit board in 3D

    BarcodeCartridge

    flummer/supercon2019-barcodecartridge

    Simple cartridge for the Hackaday Superconference 2019 badge, to support a GM65 Barcode reader module

    253 parts2CC-BY-SA-4.0
  • 4 layers83 × 55 mmSADA Board, the printed circuit board in 3D

    SADA Board

    makerCL/JUCI_CubeSat_SADA

    Solar Array Drive Assembly

    160 parts2
  • 4 layers97 × 55 mmUNIT1 R1, the printed circuit board in 3D

    UNIT1 R1

    svdrecbd/NEMESIS

    NEMESIS (Non-periodic Event Monitoring & Evaluation of Stimulus-Induced States). A desktop app for Stentor habituation: live USB-microscope preview, Arduino stepper taps (Periodic/Poisson, seedable), independent MP4…

    72 parts1Apache-2.0