Skip to the content
PCBKitNew board
2 layers40 × 40 mmProject2, the printed circuit board in 3D

My personal embedded systems learning journey projects.

Size
40 × 40 mm
Copper layers
2
Thickness
1.6 mm
Parts
48
Nets
48
Pads
209
Tracks, vias
322, 53
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 Sep 2026
Updated
2 Nov 2026

Overview

Project2 is an open-source printed circuit board by Parwaz-Dynamics, from the Parwaz-Dynamics/Embedded-In-Bones repository on GitHub. It is a 2-layer board of 40 × 40 mm with 48 parts on 48 nets, routed with 322 tracks and 53 vias.

It is built around the ESP32-C3-WROOM-02-H4, AP2112K-3.3 and BQ24074RGTR, with the LSM6DS3TR-C, USBLC6-2SC6 and AO3400A among its other parts. Its parts include 19 resistors, 12 capacitors, 5 ICs, 4 diodes and 4 connectors. It belongs with the ESP32 and RISC-V boards of this library.

Main components

8

README

README.md

Embedded-In-Bones 🦴

My personal journey into embedded systems, from bare-metal programming to real-time operating systems.

This repository documents my hands-on learning journey in embedded systems. It contains experiments, exercises, and projects as I work toward understanding what happens inside a microcontroller — from executing individual instructions to building real-time, event-driven applications.

🎯 Why This Repository?

I've worked with Arduino, ESP32, and Teensy platforms, along with STM32 microcontrollers such as the STM32F103, STM32F411, and STM32H723. Although I had some practical experience, I realized there was still a lot I wanted to understand at a deeper level.

Instead of relying entirely on frameworks and libraries, I decided to go back to the fundamentals: learning how processors execute instructions, how memory works, how interrupts are handled, and how embedded software can be designed to operate reliably in real time.

This repository is a record of that journey — including the concepts I've learned, the challenges I've faced, and the things I still need to explore.

📂 Learning Journey

1. Bare-Metal STM32F446

Learning resource: Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C by Dr. Yifeng Zhu.

I started by learning how to program a microcontroller close to the hardware, using ARM assembly language and C.

Topics covered include:

  • ARM Cortex-M instruction set and processor registers
  • Arithmetic, logical, shifting, and branching instructions
  • Subroutines, structured programming, and mixing assembly with C
  • Stack and heap fundamentals
  • Static and volatile variables
  • GPIO configuration and digital I/O
  • Interrupts and timers
  • Basic communication protocols
  • Memory organization, including Flash and RAM
  • Debugging and the software build process

This book helped me develop a clearer understanding of what happens inside a microcontroller when a program runs, rather than treating the hardware as a black box.

Along the way, I also gained practical experience with Keil µVision, ARM Compiler 6, and the GNU toolchain. I explored debugging, ELF files, linker scripts, and how code and data are organized in memory.

The final DSP chapter is still on my list to revisit.

📁 Folder: Bare-Metal STM32F446/

2. Real-Time Operating Systems — Quantum Leaps

Learning resource: Quantum Leaps — YouTube lectures

After completing most of the bare-metal material, I wanted to understand how embedded applications manage multiple concurrent activities and respond to events in real time.

I started following the Modern Embedded Systems programming lectures by Quantum Leaps. The early material reinforced some concepts I had already studied, but things became more challenging as the lectures progressed into interrupt handling, concurrency, and real-time operating systems.

During this stage, I worked through MiROS, a small real-time operating system, and then moved on to QPC (QP/C).

Building and studying MiROS helped me explore concepts such as:

  • Tasks and cooperative scheduling
  • Preemptive scheduling and context switching
  • Interrupt handling and synchronization
  • Semaphores and blocking
  • Communication and synchronization between concurrent tasks

My journey with QPC is ongoing. Next, I plan to explore state machines and event-driven programming to better understand how embedded applications can be structured without relying entirely on traditional blocking task-based designs.

📁 Folder: Quantum Leap/

🛠️ Tools & Technologies

  • Microcontrollers: STM32F446 and other STM32 platforms
  • Programming languages: C and ARM Assembly
  • IDE: Keil µVision
  • Toolchains: ARM Compiler 6 and GNU toolchain
  • Core topics: Bare-metal programming, interrupts, timers, memory management, debugging, and RTOS fundamentals
  • RTOS / frameworks: MiROS and QP/C

🚧 What's Next?

This journey is far from over.

This list will evolve as I learn and discover new areas worth exploring.

📌 A Note to Myself

Keep it up


🔄 A Change in Direction: PCB Design & Embedded Systems Engineering

For now, I'm taking a slight detour from RTOS development to explore another important side of embedded systems: PCB design and hardware development.

I want to move beyond working with development boards and start understanding how to design and build my own PCBs. My plan is to learn the fundamentals of PCB design and manufacture one or two boards of my own.

Alongside this, I'll be reading Making Embedded Systems by Elecia White. I see this book as an opportunity to learn more about the broader engineering side of embedded systems, including how embedded projects are designed, developed, debugged, and managed.

My current plan is to:

  • Learn the fundamentals of PCB design.
  • Design and build one or two PCBs to gain practical experience.
  • Read Making Embedded Systems by Elecia White.
  • Return to Miro Samek's Modern Embedded Systems lectures after establishing a basic understanding of PCB design and completing my first boards.
  • Meanwhile work on another project where I can practice the already learned techniques.

I'll resume the lectures from Lecture #29 — Object-Oriented Programming, where I paused.

Parts

48
QtyValueFootprintReferences
75k1Resistor_SMD:R_0402_1005MetricR1, R2, R3, R10, R11, R15, R18
6100nCapacitor_SMD:C_0402_1005MetricC4, C5, C6, C8, C9, C12
410kResistor_SMD:R_0402_1005MetricR9, R14, R16, R17
31kResistor_SMD:R_0402_1005MetricR12, R13, R19
31uCapacitor_SMD:C_0603_1608MetricC1, C10, C11
3LEDLED_SMD:LED_0402_1005MetricD2, D3, D4
24u7Capacitor_SMD:C_0603_1608MetricC2, C3
1100Resistor_SMD:R_0402_1005MetricR8
110uCapacitor_SMD:C_0603_1608MetricC7
11k2Resistor_SMD:R_0402_1005MetricR6
13k3Resistor_SMD:R_0402_1005MetricR7
14k7Resistor_SMD:R_0402_1005MetricR4
172kResistor_SMD:R_0402_1005MetricR5
1AO3400APackage_TO_SOT_SMD:SOT-23_HandsolderingQ1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U4
1BATTConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ3
1BOOTButton_Switch_SMD:SW_SPST_PTS810SW1
1BQ24074RGTPackage_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.6x1.6mmU1
1BuzzerBuzzer_Beeper:MagneticBuzzer_CUI_CMT-8504-100-SMTBZ1
1Conn_02x06_Counter_ClockwiseConnector_PinHeader_1.00mm:PinHeader_2x06_P1.00mm_Vertical_SMDJ8
1ESP32-C3-WROOM-02RF_Module:ESP32-C3-WROOM-02U5
1LSM6DS3TR-CPackage_LGA:LGA-14_3x2.5mm_P0.5mm_LayoutBorder3x4yU2
1NRSTButton_Switch_SMD:SW_SPST_PTS810SW2
1PLAY_BUTTONConnector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Vertical_SMD_Pin1LeftJ2
1SS14Diode_SMD:D_SMAD1
1TYPE_C_31_M_12Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U3

Questions

How big is the Project2 PCB?

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

What parts does the Project2 use?

48 parts, built around the ESP32-C3-WROOM-02-H4, AP2112K-3.3, BQ24074RGTR and LSM6DS3TR-C. 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 Project2 KiCad files?

From the Parwaz-Dynamics/Embedded-In-Bones repository on GitHub, at the commit this page was made from: the board is PCB Designing/KiCAD/STM32F103Based/project2/project2.kicad_pcb and its schematic PCB Designing/KiCAD/STM32F103Based/project1/project1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Project2 design in my own project?

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

Similar boards

  • 2 layers76.2 × 119.7 mmLaunchpad, the printed circuit board in 3D

    Launchpad

    NeilKhera/Launchpad

    159 partsMIT
  • 4 layers52.9 × 79.1 mmRealFCV1, the printed circuit board in 3D

    RealFCV1

    bapsenpai-blip/STM32F405-4-layer-flight-controller

    My first PCB revision, not fabricated yet, looking for design review

    94 parts1
  • 6 layers26 × 56.8 mmBluebuzz rm2, the printed circuit board in 3D

    Bluebuzz rm2

    sequoia-hope/bluebuzz

    A Bluetooth vibrator controller: RP2350A + Raspberry Pi Radio Module 2 (the first board, an nRF52840 module, is abandoned and kept in archive/nrf52840/): Wi-Fi 4 and Bluetooth 5.2 Classic + LE (CYW43439), so the toy can…

    109 parts
  • 4 layers60 × 85 mmEsp32s3-camera, the printed circuit board in 3D

    Esp32s3-camera

    LCQIANN/esp32s3-camera

    ESP32-S3 camera board v1.2: OV2640 DVP camera, microSD, USB-C, LiPo, KiCad 10 project for JLCPCB PCBA

    64 parts
  • 4 layers130 × 100 mmAtlas carrier ctrl, the printed circuit board in 3D

    Atlas carrier ctrl

    md-sazzad-eee/ATLAS

    Modular multi-robot system: a carrier robot that docks, transports, charges and redeploys two small agent robots. KiCad, FreeCAD, MATLAB/Simulink, COMSOL and ESP32 firmware.

    157 parts
  • 4 layers92 × 62 mmRouted final, the printed circuit board in 3D

    Routed final

    misko/prompt2device

    The separate vNext PCB skill and orchestrator package is available alongside the reference workflow below; existing projects keep their accepted toolchain until an explicit migration.

    51 parts3MIT