Skip to the content
4 layers75 × 170 mmOpencalc pcb V5, the printed circuit board in 3D

Opencalc pcb V5

CoryPearl/opencalc2

A new and improved, better than the TI-84, open-source, graphing calculator

Size
75 × 170 mm
Copper layers
4
Thickness
1.6 mm
Parts
194
Nets
156
Pads
664
Tracks, vias
1,494, 229
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
7 May 2026
Updated
21 Sep 2026

Overview

Opencalc pcb V5 is an open-source printed circuit board by CoryPearl, from the CoryPearl/opencalc repository on GitHub. It is a 4-layer board of 75 × 170 mm with 194 parts on 156 nets, routed with 1,494 tracks and 229 vias.

It is built around the ADS1115IDGST, BQ24074RGTR and 1N4148WT, with the AO3401A among its other parts. Its parts include 51 diodes, 51 switches, 40 resistors, 21 capacitors and 3 ICs.

Main components

4

README

README.md

OpenCalc logo OpenCalc logo

Prototype sponsored by PCBWay.

OpenCalc is an open-source graphing calculator inspired by the TI-84, built around an ESP32-S3, a color LCD, USB-C, Python-style scripting, games, and expandable firmware.

OpenCalc-authored software is licensed under GPL-3.0-or-later. Bundled components retain their original licenses; see Third-Party Notices.

The calculator runs OpenCalc OS, the project’s open-source ESP32-S3 operating environment. OpenCalc OS includes the calculator interface, math and graphing engines, built-in apps, scripting runtime, USB file storage, keypad handling, display drivers, game support, and power management.

Website: https://corypearl.github.io/opencalc/product-website/

Blog: https://corypearl.github.io/opencalc/blog.html

OpenCalc revised case rotating, exploding apart, and reassembling OpenCalc V5 PCB OpenCalc OS demo

Click an image to enlarge. The UI tour visits all 12 apps and the game menu.

Highlights

  • A real graphing calculator: textbook-style input, exact and numerical math, complex numbers, calculus, history, typed persistent variables, and unit-aware expressions such as 8 m / 2 s.
  • Integrated CAS and graphing: Giac/KhiCAS symbolic math linked to Cartesian, parametric, polar, and sequence graphs, tables, roots, derivatives, tangents, integrals, and points of interest. Alpha + Graph opens exact symbolic analysis for the selected graph, including its derivative, integral, roots, asymptotes, tangent line, and integral shading. CAS results have selectable solution branches, exact/decimal views, domain controls, assumptions, and a searchable command catalog. All graph modes support per-series colors/styles, mode-aware trace and tables, scalable image backgrounds, and direct or recurrent sequences.
  • A complete math toolkit: Statistics, Lists, Matrices, Solver, Finance, Conics, Inequalities, and a searchable science and engineering reference.
  • Reference Center: press Alpha + Zoom for an interactive periodic table and browsable math, physics, and engineering formulas and explanations.
  • Programmable on the device: edit, run, upload, and debug Tiny Python programs with math, statistics, exceptions, local modules, cancellable forever loops, CAS access, graphics, storage, audio, and protected CircuitPython-style sensor objects.
  • Built for science and electronics: use Tiny Python, 12 bidirectional digital pins, four 16-bit analog inputs, and shared I2C to control experiments, plot live sensor data, and analyze recordings in Stats.
  • Games included: press Alpha + 2nd for Tetris, Doom, Snake, Breakout, and NES/Mario support with persistent high scores, multi-key controls, and optional audio.
  • Open hardware: ESP32-S3, 320x240 color display, diode-isolated keypad, rechargeable battery, USB-C, expandable storage, and a documented V5 PCB.
  • One-cable workflow: the same USB-C connection handles charging, firmware flashing, serial monitoring, and file storage.
  • Dual-core OpenCalc OS: one core keeps the interface and graphics responsive while the other handles background math and system work, with persistent worksheets, configurable performance, and power-saving controls.

Rough production Cost Estimate

Cost areaEstimate per unit
PCB electronics parts from BOM$11-$16
320x240 LCD$5
3.7 V 2000 mAh Li-ion battery$3-$5
Cheap keycaps / keypad plastics$2-$4
3d printed case$3-$6
PCB fabrication + SMT assembly$5-$9
Bulk shipping / logistics allowance$3-$6
Estimated production cost$32-$51

Project Layout

text
firmware/   OpenCalc OS source for the ESP32-S3 calculator
hardware/   key layouts, graphics, PCB files, case files, and hardware docs
docs/       notes and project website files

Quick Start

Install and activate ESP-IDF first; see Espressif's ESP32-S3 Get Started guide. Then connect OpenCalc with a data-capable USB-C cable and build the firmware:

console
cd firmware
idf.py build

Find the serial port created by OpenCalc:

SystemTerminalCommand
macOSTerminalls /dev/cu.*
LinuxTerminalls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
WindowsPowerShell[System.IO.Ports.SerialPort]::GetPortNames()
WindowsCommand Promptmode

Look for a new USB serial device after connecting the calculator. Typical names are /dev/cu.usbmodemopencalc1 on macOS, /dev/ttyACM0 on Linux, or COM5 on Windows. Replace PORT below with that complete name; do not type the word PORT literally.

If automatic flashing does not enter the bootloader, hold Boot, tap Reset, and then release Boot. Flash using the detected port:

text
idf.py -p PORT flash

After OpenCalc restarts, find the port again because its name can change between bootloader and normal operation. Start the serial monitor with the runtime port:

text
idf.py -p PORT monitor

Press Ctrl+] to exit the monitor. The same USB-C cable supports flashing, serial monitoring, storage, and charging.

Documentation

  • Complete OpenCalc OS Guide: in-depth controls, app workflows, games, scripting, settings, build instructions, validation, and troubleshooting.
  • Tiny Python Start Guide: create, run, and debug scripts; use imports, math, files, graphics, audio, keys, and scientific I/O.
  • Firmware README: build settings, flashing, storage image, controls, apps, games, and firmware status.
  • App Status: implementation status for every OpenCalc OS app and game.
  • PCB README: current V5 PCB parts, pin map, power path, display, keypad, battery, audio, and bring-up checks.
  • Tiny Python README: scripting runtime details.
  • Tiny Python capability audit: supported Python and hardware APIs, limits, and the CircuitPython compatibility boundary.

Current Status

OpenCalc OS is a capable working prototype. Every built-in app has its main workflow in place, and the calculator, graphing, CAS, scripting, USB storage, power controls, and all five games are usable. The remaining work is mostly deeper edge-case handling, long-session reliability, and validation of the new V5-only hardware features.

AreaCurrent estimate
Primary app workflows implemented12/12 (100%)
Automated host test groups passing19/19 (100%)
Planned software feature coverageAbout 87%
Everyday workflow usabilityAbout 83%
Software reliability confidenceAbout 75%
Production-release readinessAbout 50%

These percentages are practical estimates, not test-coverage measurements. The biggest jobs left are closing Tiny Python's compatibility gaps, handling very large CAS results and unusual math edge cases, stress-testing large matrices and long sessions, and validating V5 audio and scientific I/O on real hardware. See the app-by-app status for more detail.

Credits

  • OpenCalc OS, hardware, and enclosure design: Cory Pearl.
  • CAS engines: Giac/Xcas by Bernard Parisse and contributors, with the KhiCAS ESP32 port lineage under GPL-3.0-or-later; Eigenmath remains as a BSD-2-Clause fallback.
  • Doom engine: id Software's GPL Doom source, Simon Howard's Chocolate Doom work, and doomgeneric by ozkl, under GPL-2.0-or-later notices.
  • NES emulation: Anemoia-ESP32 by Shim06 and contributors, under GPLv3.
  • Platform: Espressif ESP-IDF, TinyUSB, and the ESP LCD ILI9341/ST7789 panel drivers under their respective licenses.
  • Prototype project funding was provided in part by PCBWay.

Complete copyright, license, and game-data details are recorded in THIRD_PARTY_NOTICES.md. Doom WADs and NES ROMs are separate game data and are not licensed under the OpenCalc firmware license.

Parts

194
QtyValueFootprintReferences
501N4148WTDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25 +34
10100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC3, C4, C5, C6, C10, C12, C16, C17, C18, C19
1046kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR22, R23, R24, R25, R26, R27, R28, R29, R30, R31
510kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R3, R11, R35, R37
51kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R12, R13, R40, R41
5TestPointTestPoint:TestPoint_Pad_D2.0mmTP1, TP2, TP3, TP4, TP5
410uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C9, C13, C15
427ΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR4, R5, R6, R7
3100kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR8, R21, R36
31uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C7, C8
210nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC20, C21
21MΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR18, R19
24.7kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR38, R39
25.1kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR9, R10
11.1kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR15
1100ΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR32
11ΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR33
122uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC14
12kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16
14.7uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC11
146.4kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR17
1560kΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR20
1590ΩResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR14
174479275147opencalc_footprint_library:74479275147L1
1ADS1115IDGSTopencalc_footprint_library:ADS1115IDGSTU7
1AO3401APackage_TO_SOT_SMD:SOT-23Q1
1BLUELED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderD2
1BOOTButton_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW2
1BQ24074RGTRopencalc_footprint_library:BQ24074RGTRU4
1Button1Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW3
1Button10Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW12
1Button11Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW13
1Button12Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW14
1Button13Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW15
1Button14Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW16
1Button15Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW17
1Button16Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW18
1Button17Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW19
1Button18Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW20
1Button19Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW21
1Button2Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW4
1Button20Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW22
1Button21Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW23
1Button22Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW24
1Button23Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW25
1Button24Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW26
1Button25Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW27
1Button26Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW28
1Button27Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW29
1Button28Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW30
1Button29Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW31
1Button3Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW5
1Button30Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW32
1Button31Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW33
1Button32Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW34
1Button33Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW35
1Button34Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW36
1Button35Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW37
1Button36Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW38
1Button37Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW39
1Button38Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW40
1Button39Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW41
1Button4Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW6
1Button40Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW42
1Button41Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW43
1Button42Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW44
1Button43Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW45
1Button44Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW46
1Button45Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW47
1Button46Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW48
1Button47Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW49
1Button48Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW50
1Button49Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW51
1Button5Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW7
1Button50Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW52
1Button6Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW8
1Button7Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW9
1Button8Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW10
1Button9Button_Switch_SMD:SW_Push_1P1T_NO_E-Switch_TL3301NxxxxxGSW11
1CMS-151504-SMT-TRopencalc_footprint_library:CMS-151504-SMT-TRU6

The 173 most common of 194 parts.

More from CoryPearl/opencalc

2
  • 2 layers76 × 170 mmOpenCalc pcb V2, the printed circuit board in 3D

    OpenCalc pcb V2

    CoryPearl/opencalc

    A new and improved, better than the TI-84, open-source, graphing calculator

    85 parts2
  • 2 layers76 × 170 mmOpenCalc pcb V1, the printed circuit board in 3D

    OpenCalc pcb V1

    CoryPearl/opencalc

    A new and improved, better than the TI-84, open-source, graphing calculator

    18 parts2

Similar boards

  • 4 layers65 × 100 mmPGR, the printed circuit board in 3D

    PGR

    Projeto-Guarda-Rios/PCB

    O repositório para a PCB do Projeto Guarda Rios! Inclui todos os ficheiros relacionados com a PCB!

    188 parts2MIT
  • 4 layers246.5 × 95 mmViaggio, the printed circuit board in 3D

    Viaggio

    dataehora/beatconfused

    A small web studio of fast, elegant, install-free music tools. Every tool is plain HTML, CSS and vanilla JavaScript with the Web Audio API — no build step, no dependencies, no accounts, works offline after first load.

    215 parts1
  • 2 layers22 × 60 mmDecabox pcb, the printed circuit board in 3D

    Decabox pcb

    arvindsa/decabox

    A compact, intelligent battery management system for 6× Decapo batteries used with cochlear speech processors. This project monitors cell voltage, ambient light, and battery state-of-charge in real-time, with visual…

    61 parts
  • 4 layers96 × 70 mmTradewind, the printed circuit board in 3D

    Tradewind

    binaryBeachLLC/tradewind

    Tradewind TW-1: solar LoRaWAN field sensor. KiCad 9 board, CadQuery enclosure, RUI3 firmware, simulations, test data, report and datasheet.

    85 parts
  • 4 layers71 × 42.8 mmCadProd compact, the printed circuit board in 3D

    CadProd compact

    botsqerebot/AudioDeck

    Everything to change, check and test for rev 2. The main goal is power saving while the player is off:

    83 parts
  • 4 layers80 × 50 mmPCB LoRa+GPS, the printed circuit board in 3D

    PCB LoRa+GPS

    ChrisKlein01/ArrozPCB

    LoRa-based GPS PCB design with KiCad

    84 parts
  • 4 layers100 × 90 mmOpentouch s3, the printed circuit board in 3D

    Opentouch s3

    JoeMighty/opentouch-s3

    A modern remake of the Bare Conductive Touch Board: 12 capacitive touch electrodes, MP3/WAV/MIDI audio, and now WiFi, Bluetooth LE, USB-C, a proper LiPo power path, a fuel gauge, line-in, MIDI out, Qwiic and an RGB LED.

    185 parts
  • 4 layers150 × 100 mmRun3, the printed circuit board in 3D

    Run3

    John-ODell/pocket-chance

    rp2040-plus and 1.3 inch LCD screen for pi pico by waveshare

    150 parts

Questions

How big is the Opencalc pcb V5 PCB?

It measures 75 × 170 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Opencalc pcb V5 use?

194 parts, built around the ADS1115IDGST, BQ24074RGTR, 1N4148WT and AO3401A. 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 Opencalc pcb V5 KiCad files?

From the CoryPearl/opencalc repository on GitHub, at the commit this page was made from: the board is hardware/pcb/opencalc_pcb_V5/opencalc_pcb_V5.kicad_pcb and its schematic hardware/pcb/V1/openCalc-pcb-V1.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Opencalc pcb V5 design in my own project?

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