

Thermal camera v2
An open source thermal camera, including firmware, schematic and PCB design.
- Size
- 69 × 34 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 52
- Nets
- 69
- Pads
- 203
- Tracks, vias
- 466, 0
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 6 (file 20211014)
- Created
- 6 Nov 2022
- Updated
- 20 May 2026
Overview
Thermal camera v2 is an open-source printed circuit board by fedetft, from the fedetft/thermal_camera repository on GitHub. It is a 2-layer board of 69 × 34 mm with 52 parts on 69 nets, routed with 466 tracks and 0 vias.
It is built around the STM32F205RCT6, LP2981-3.3 and TP4056, with the AP2311SG, AP2312 and BAT54A among its other parts. Its parts include 16 capacitors, 15 resistors, 5 ICs, 4 connectors and 2 diodes. It belongs with the STM32 boards of this library.
Main components
6STM32F205RCT6
LQFP-64(10x10)-40℃~+85℃ 1.8V~3.6V 100KB 120MHz 12bit 12bit 256KB 32 Bit 51 ARM Cortex-M3 Built-in FLASH LQFP-64(10x10) Microcontrollers (MCU/MPU/SOC) ROHSSTMicroelectronicsMicrocontrollers (MCU/MPU/SOC)LP2981-3.3
TO-92TO-92 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSHTC Korea TAEJIN TechUncategorisedTP4056
ESOP-8-40℃~+85℃ 1 1A 35uA 4.2V 4V~6.5V Charging IC Lithium Battery Support Support 恒流充电、恒压充电、涓流充电、自动再充电、充电终止、可编程充电电流、软启动、欠压锁定 ESOP-8 Battery Management ROHSUMWBattery ManagementAP2311SG
SO-8-40℃~+85℃ 1 2.7V~5.5V 2A 70mΩ Active High High Side Switch Short-Circuit Protection(SCP)、Undervoltage Protection(UVP)、Overcurrent Protection(OCP)、Over Temperature Protection SO-8 Power Distribution Switches ROHSDiodes IncorporatedPower Distribution SwitchesAP2312
SOT-23-50℃~+150℃ 1 N-channel 105pF 1V 20V 31.8mΩ@4.5V 350mW 55pF 5A N-Channel SOT-23 MOSFETs ROHSALLPOWERMOSFETsBAT54A
SOT-231 Pair Common Anode 200mA 2uA@25V 30V 600mA 800mV@100mA SOT-23 Schottky Diodes ROHSNexperiaSchottky Diodes
README
README.mdThermal camera
An open source thermal camera, including firmware, schematic and PCB design.

Principle of operation
Showing a frame on the thermal camera requires to perform three operations
- Reading the raw ADC data from the sensor via I2C
- Processing the data (compute temperatures, compute pixel colors)
- Writing the computed frame to the display via SPI
The sensor frame rate can be set anywhere from 1fps to 32fps in discrete increments (1,2,4,8,16,32). However, on the STM32F205RC processing one frame takes ~41ms of CPU time, so the maximum achievable frame rate is 16fps. TODO: to go faster we could use an MCU with a floating point unit such as an STM32F4.
Focusing on the current hardware, we have another problem: consider the 16fps rate, the required operations take the following time
- Reading sensor via I2C takes ~62.5ms (1/16s, mostly waiting for the sensor)
- Processing takes ~41ms
- Writing to display requires to send 128x128 16 bit pixels on a 16MHz SPI bus or ~18ms
Thus, the effective frame rate would be 1/(62.5ms+41ms+18ms)=8fps.
To solve this issue, we use pipelining. Instead of doing the operations sequentially

we use pipelining to perform each operation at the same time on three different data buffers

As always with pipelining, the latency (lag) is the same or higher than in the sequential case, but the throughput (frames per second) matches the longest pipeline stage, which in this case is waiting for the sensor.
But, I hear you say, how can you perform the three operations in parallel on a single-core CPU?
The answer is DMA. You may have noticed that two of the required operations are just receiving/sending data through a peripheral such as I2C/SPI. Thus with appropriately written device drivers which make use of DMA, the threads performing the read/write operations will be waiting on I/O letting the OS scheduler run the CPU-intensive computation thread.
Thread priorities are set so that the I/O threads have higher priority than the computation thread, making sure the computation thread is preempted as soon as I/O operations complete.
From an implementation perspective, the thermal camera uses the Miosix OS and the three threads performing the mentioned operations are in application.cpp:
- The sensor reading thread is Application::sensorThreadMain()
- The processing thread is Application::processThreadMain()
- The display writing thread is Application::renderThreadMain()
How to build
This guide assumes you already have a Miosix build environment installed, if not see here.
# Dependencies (should work both on Linux and WSL)
sudo apt install build-essential cmake libboost-all-dev libpng-dev
# Submodules
git submodule init
git submodule update
# Build mxgui code generators for embedding images and fonts
cd mxgui/_tools/code_generators
chmod +x compile_freetype.sh
mkdir build
cd build
cmake ..
make
# Build the thermal camera application
cd ../../../..
make -j`nproc`How to flash
Install the dfu-util program on your pc.
Connect the USB cable between the PC an thermal camera, while the camera is off.
Use a jumper wire to connect BOOT0 (on the 4 pin header) to +3.3V (a convenient spot is a capacitor next to the voltage regulator). You can just hold the wire with your hands.
While the jumper is in place, press and hold the power on button of the camera.
You can disconnect the jumper but keep holding the power button. If you release the power button, you need to reconnect the jumper and start again.
On the PC, run the command while holding the power button.
dfu-util -a 0 -s 0x08000000:leave -D main.binYou should see a progress bar on the PC, keep holding the power button till the progress bar reaches 100%.
Release the power button, and disconnect the USB cable.
Power on the camera and enjoy the new firmware. You cannot brick the camera, if something goes wrong you can repeat the operation.
Parts
52| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100n | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C3, C5, C8, C9, C10, C14 |
| 5 | 0 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R11, R12, R13, R14, R15 |
| 5 | 1u | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1, C2, C4, C11, C15 |
| 5 | 3k3 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1, R3, R6, R9, R10 |
| 4 | 220k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R2, R4, R5, R8 |
| 3 | Conn_01x01_Male | Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical | B-1, B+1, J2 |
| 2 | 1-1825910-4 | Button_Switch_THT:SW_PUSH_6mm | SW1, SW2 |
| 2 | 10p | Capacitor_SMD:C_0603_1608Metric | C12, C13 |
| 2 | 2u2 | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C6, C7 |
| 2 | MountingHole | MountingHole:MountingHole_2.1mm | H1, H2 |
| 1 | 100n | Capacitor_SMD:C_0603_1608Metric | C16 |
| 1 | 470 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R7 |
| 1 | 8MHz | Crystal:Crystal_SMD_5032-4Pin_5.0x3.2mm | Y1 |
| 1 | AP2311 | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | AP2312 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | BAT54A | Package_TO_SOT_SMD:SOT-23 | D1 |
| 1 | Conn_01x01_Female | Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical | J4 |
| 1 | Conn_01x04_Female | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J1 |
| 1 | Conn_01x07_Female | Connector_PinSocket_2.54mm:PinSocket_1x07_P2.54mm_Vertical | J3 |
| 1 | LED | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D2 |
| 1 | LP2981-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | MLX90640 | Connector_PinSocket_2.54mm:PinSocket_2x02_P2.54mm_Vertical | U5 |
| 1 | STM32F205RC | Package_QFP:LQFP-64_10x10mm_P0.5mm | U1 |
| 1 | TP4056 | Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm | U3 |
| 1 | USB_B_Mini | TFT_footprints:USB_mini_china_unknown | J5 |
| 1 | W25Q64 | Package_SO:SOIC-8W_5.3x5.3mm_P1.27mm | U4 |
Questions
How big is the Thermal camera v2 PCB?
It measures 69 × 34 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Thermal camera v2 use?
52 parts, built around the STM32F205RCT6, LP2981-3.3, TP4056 and AP2311SG. 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 Thermal camera v2 KiCad files?
From the fedetft/thermal_camera repository on GitHub, at the commit this page was made from: the board is hardware_design/thermal_camera_v2.kicad_pcb and its schematic hardware_design/thermal_camera_v2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Thermal camera v2 design in my own project?
Its repository states no licence, so its author keeps all rights: ask fedetft before reusing the design.
Similar boards
- 2 layers

- 4 layers50 × 43 mm

Openlst hw
harmalkar/satellite-prototype
Open-source hardware and software for a satellite with a custom on-board computer to interface over I2C, SPI, and UART with a flash chip, IMU, barometer, camera, and thermal sensors. Built to fit within a 1U form factor.
98 parts1 - 4 layers15 × 15 mm

DRV8213 brushed Motor Driver
techy-robot/CACKLE-Driver-DRV8213_brushed_Motor_Driver
This is a single motor driver based on the DRV8213RTER Texas Instruments chip. It is capable of 4 amps current in a voltage range of 1.65 to 11 volts.
26 parts - 4 layers15 × 15 mm

DRV8213 brushed Motor Driver
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
26 parts915 - 4 layers67 × 98 mm

SJ-201-R6
MycroftAI/hardware-mycroft-mark-II
Mycroft's Mark II Rpi mechanical, electrical and industrial designs
235 parts113 - 2 layers129.2 × 50 mm

- 4 layers23.9 × 44.5 mm

ATTINY3226
marsairforce/breakout_boards
Small circuit boards to assist with breadboard prototyping with SMD packages.
56 parts39Unlicense - 4 layers158 × 95 mm

FHNW Pro4E FS19T8-3DPrinterBoard STM32
mnemocron/FHNW-Pro4E-FS19T8-3DPrinterBoard-STM32
Marlin 2.0 compatible 3D printer board based on STM32F103 (KiCad)
264 parts17GPL-3.0