
Numpad project
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

This folder is intentionally a planning workspace only. The next hardware build will be created from scratch in Atopile.
Layouts is an open-source printed circuit board by nejcokorn, from the nejcokorn/flysys_test repository on GitHub. It is a 2-layer board of 90 × 45 mm with 64 parts on 66 nets.
Its parts include 28 resistors, 14 capacitors, 6 diodes, 5 ICs and 5 transistors.
Updated: 2026-06-08
This folder is intentionally a planning workspace only. The next hardware build will be created from scratch in Atopile. Old EasyEDA, KiCad, generated production files, and JLC-specific draft outputs are not part of the active design.
Build a compact FlySys variometer board with:
| Function | Selection | Supplier note |
|---|---|---|
| MCU/BLE/Wi-Fi/USBMSD | Espressif ESP32-S3-WROOM-1U-N8 | Use ESP32-S3 because USBMSD needs configurable USB device support. N8 provides 8 MB flash and has no PSRAM. The 1U variant uses the module U.FL/I-PEX MHF1 connector for an off-board antenna. |
| External antenna | Pulse ANTX200P001B24003 | Off-board 2.4 GHz adhesive flat patch antenna for the WROOM-1U U.FL/I-PEX MHF1 connector. It is a DigiKey order item, not a PCB footprint. |
| Pressure sensors | 2 x Bosch BMP581 | Dual altitude/variometer pressure sensors on the same I2C bus. U5 uses address 0x46; U6 uses address 0x47. |
| 6-axis IMU | Bosch BMI323 | Primary accelerometer/gyro. |
| Magnetometer | Not fitted | Keep unpopulated I2C pads or optional footprint for future magnetometer. |
| Charger / power path | TI BQ24075RGTR | 1S LiPo charger with power-path management. |
| 3.3 V regulator | TI TLV75533PDBVR | Replaces AP2112K-3.3TRG1 because AP2112 was 0 stock in the DigiKey.si audit. Recheck current and thermal margin with ESP32-S3 peaks. Add local bulk capacitance near the module. |
| USB | GCT USB4105-GF-A + ST USBLC6-2SC6Y | USB-C 2.0 receptacle and automotive/AEC-Q101 USB ESD for charging, ESP32-S3 native USB, USBMSD, logs, and flashing. |
| Audio | Same Sky CSS-J4D20-SMT-TR + AO3400A N-MOSFET | Externally driven SMD magnetic transducer from the old device BOM. Drive from the 1S battery/SYS rail; keep firmware tone, carrier-duty, and envelope control. |
| User input | C&K KMR211NG LFS | Momentary active-low tactile switch for power/user input plus hidden BOOT and RESET service switches. Final actuator and pinhole geometry still depends on enclosure height. |
| Indicators | Lite-On LTST-C190GKT + LTST-C190TBKT | 0603 LEDs: green always-on +3V3 power-present indicator, blue firmware-controlled BLE pairing/advertising indicator. The blue LED is driven from SYS with a GPIO-controlled low-side MOSFET. |
| Battery | JST S2B-PH-SM4-TB | 2-pin JST-PH right-angle SMD header. Confirm protected pack and cable polarity. |
| Firmware update | Application-level updater + hidden ESP32-S3 BOOT/RESET recovery | Normal users update through firmware while USB or another supported link is connected. Debug pads are not fitted; hidden BOOT+RESET remains the recovery fallback for the ESP32-S3 ROM USB bootloader. |
Initial audit checked: 2026-05-31. Audio and LED changes rechecked: 2026-06-01. Stock changes quickly; recheck before ordering.
| Function | MPN | DigiKey cut-tape part | Observed availability | Status |
|---|---|---|---|---|
| MCU/BLE/Wi-Fi/USBMSD | ESP32-S3-WROOM-1U-N8 | 1965-ESP32-S3-WROOM-1U-N8CT-ND | Recheck before ordering | Selected external-antenna module |
| External antenna | ANTX200P001B24003 | 311-1553-ND | Recheck before ordering | Off-board U.FL/I-PEX MHF1 adhesive 2.4 GHz antenna |
| Pressure sensors | BMP581 | 828-BMP581CT-ND | Recheck before ordering | Qty 2 selected |
| 6-axis IMU | BMI323 | 828-BMI323CT-ND | 663 in stock | Selected |
| Charger / power path | BQ24075RGTR | 296-38874-1-ND | 3,702 in stock | Selected |
| 3.3 V LDO | TLV75533PDBVR | 296-50411-1-ND | 110,688 in stock | Selected |
| USB-C receptacle | USB4105-GF-A | 2073-USB4105-GF-ACT-ND | 126,702 in stock | Selected |
| USB ESD | USBLC6-2SC6Y | 497-11882-1-ND | 35,783 in stock | Selected automotive/AEC-Q101 part; LCSC C2969755 |
| Battery connector | S2B-PH-SM4-TB | 455-S2B-PH-SM4-TBCT-ND | 71,350 in stock | Selected |
| Loud SMD buzzer | CSS-J4D20-SMT-TR | 102-1198-1-ND | 2,332 in stock | Selected old-device buzzer: externally driven magnetic transducer, 90 dB at 3.6 V, 5 cm, 80 mA, 3.1 kHz |
| N-MOSFETs | AO3400A | 785-1000-1-ND | 168,023 in stock | Low-side drivers for buzzer PWM, blue BLE pairing LED switching, and power-latch control |
| Battery switch P-MOSFET | DMP3098L-7 | DMP3098LDICT-ND | Recheck before ordering | High-side hard-off switch between battery connector and internal BAT rail |
| Power-start diodes | 1N4148W-7-F | 1N4148W-FDICT-ND | Recheck before ordering | Diode isolation for power button, battery switch gate, and charger SYSOFF |
| User button | KMR211NG LFS | CKN10243CT-ND | 44,917 in stock | Selected |
| Power LED | LTST-C190GKT | 160-LTST-C190GKTCT-ND | 1,068,260 in stock | Selected 0603 green LED, 2.1 V typical Vf |
| BLE LED | LTST-C190TBKT | 160-1646-1-ND | 92,246 in stock | Selected 0603 blue LED for BLE pairing/advertising indication, 3.3 V typical Vf |
| Resistors | Yageo RC0603FR 1% 0603 family | Value-specific | RC0603FR-0710KL observed at 9,468,329 in stock | Use same family for 100R, 1k, 3k, 5.1k, 10k, 100k, 1M as needed |
| 100 nF decoupling capacitor | Samsung CL10B104KB8NNNC | 1276-1000-1-ND | 9,953,497 in stock | Selected family |
| Other ceramics | Samsung CL-series MLCCs | Value-specific | Not individually locked yet | Select exact 1 uF, 10 uF, and 220 nF parts during Atopile binding |
Main audit result: all selected active semiconductors, sensors, connector choices, audio parts, button, LED, and common passives are available from DigiKey.si.
USB_VBUS: USB-C 5 V input to charger and USB VBUS sense divider/comparator.SYS: BQ24075 system output.BAT_RAW: protected 1S LiPo positive terminal at the connector.BAT: switched internal battery rail after the hard-off P-MOSFET.+3V3: TLV75533 output powering ESP32-S3, both BMP581 sensors, BMI323, and optional magnetometer pads.I2C_SCL, I2C_SDA: shared sensor bus for BMP581 U5, BMP581 U6, BMI323, and DNP magnetometer option.USB_OTG_DP, USB_OTG_DM: USB full-speed pair to ESP32-S3 native USB pins (GPIO20 D+, GPIO19 D-).BUZZER_VM: battery/SYS-powered audio rail feeding the buzzer; no boost in the baseline.BUZZER_PWM: ESP32-S3 PWM-capable GPIO to the MOSFET gate.PWR_SW_N: raw active-low power switch node.PWR_BTN_N: diode-isolated active-low button input to ESP32-S3.BOOT_USER_BTN_N: ESP32-S3 GPIO0 boot strap, pulled low by the hidden BOOT service button for ROM bootloader recovery.BAT_SENSE: high-value divider from switched BAT to ESP32-S3 ADC-capable GPIO; it has no DC path to BAT_RAW when the hard-off switch is open.POWER_LED: low-current green +3V3 rail indicator with series resistor. It is on whenever +3V3 is up and is not firmware-controlled.BLE_LED: low-current blue indicator for BLE pairing/advertising mode only. Firmware should drive BLE_LED_PWM active only while connectable BLE advertising/pairing is active and keep it low or high-Z otherwise. Because the blue LED has high forward voltage, prefer SYS plus a current-limit resistor and a small GPIO-controlled low-side switch instead of direct +3V3 GPIO drive.EN, BOOT: hidden physical RESET and BOOT service controls for ESP32-S3 ROM bootloader recovery only.USBMSD is now a baseline requirement. Use ESP32-S3 native USB OTG device mode with the ESP-IDF TinyUSB MSC class.
Route the USB-C D+/D- pair to ESP32-S3 GPIO20/GPIO19, keep the ESD part near the connector, and add a USB VBUS monitor path because this is a battery-powered, self-powered USB device.
Initial storage options:
Do not let firmware and the USB host write the same mounted filesystem at the same time. Define a mode switch or mount arbitration before implementing firmware.
Normal firmware update is software-first. When USB is connected, application firmware should expose an update path such as USB MSC drag-and-drop firmware copy, a USB CDC update tool, BLE DFU, or OTA. The image must be validated before activation, and firmware should use OTA partitions with rollback so a failed image can revert automatically.
USB attach is allowed to power the ESP32-S3 electrically. If USB_VBUS_SENSE
shows USB present and the user has not pressed POWER, firmware enters
USB-attached idle mode instead of starting the vario application. In this mode,
do not start vario sensing, BLE advertising, buzzer output, logging, or normal
flight behavior. Only minimal charging/status indication, the firmware update
endpoint, and an optional command to start normal mode should run.
Pressing POWER while USB is connected records user intent and starts the normal
application. The hidden BOOT (GPIO0) and RST (EN) controls remain behind
service access only. Recovery sequence: connect USB-C, hold hidden BOOT, press
and release hidden RST, release BOOT, then flash with the ESP32-S3 native USB
ROM bootloader tool.
The buzzer must be loud enough for a paragliding vario used in open air with wind noise. Treat acoustic output as a primary requirement, not a secondary indicator.
Use an externally driven passive SMD transducer so firmware keeps control over pitch, cadence, envelope, mute profiles, and sink/climb tone patterns. Do not use an internally driven active buzzer.
Selected audio path:
CSS-J4D20-SMT-TR, externally driven magnetic SMD transducer from the old device BOM, 90 dB at 3.6 V, 5 cm, 3.1 kHz, about 80 mA at rated drive.AO3400A low-side N-MOSFET, with the buzzer powered from the 1S battery/SYS rail and the MOSFET gate driven by one ESP32-S3 PWM GPIO.This matches the old MX270_MiniUP firmware model: one output-compare PWM channel generated the audio carrier, beep->volume changed the carrier duty, and the vario queue changed the beep envelope/cadence. Port that control model to ESP32-S3 LEDC or MCPWM.
Use the battery/SYS rail, not raw USB VBUS. A normal 1S Li-ion/LiPo pack is 4.2 V full and about 3.6-3.7 V nominal; that fits the buzzer's 3-5 V operating range. Confirm BQ24075 SYS behavior so the buzzer never sees an out-of-range USB-derived rail.
Drive the buzzer near its 3.1 kHz rated frequency for maximum SPL. For lower volume, prefer carrier-duty control and audible envelope control; avoid detuning far from resonance just to reduce volume. The old firmware's tone table can be reused as a behavioral reference, but final tones should be revalidated against this buzzer in the enclosure.
Add a gate resistor, gate pulldown, local bulk capacitance near the buzzer supply, and a footprint option for coil clamp/snubber parts. Keep the buzzer current loop compact and scope the first PCB for ringing and EMI while the buzzer is running.
The enclosure must include a real acoustic outlet or sound channel. Verify SPL after the PCB is installed in the actual enclosure, because the port, chamber volume, venting, clothing, helmet, and mounting orientation can dominate the result.
Use two BMP581 barometers and one BMI323 as the fitted sensor stack.
U5 straps SDO to GND for BMP581 I2C address 0x46; U6 straps SDO to +3V3 for address 0x47. Both sensors strap CSB high for I2C mode and have separate interrupt nets, BMP581_1_INT and BMP581_2_INT.
Do not fit a magnetometer for the first Atopile board. The core variometer behavior depends on pressure and vertical-motion filtering, not absolute compass heading. Without a magnetometer, yaw/heading can drift; that is acceptable for this baseline.
Keep an unpopulated future magnetometer option with:
+3V3GNDI2C_SCLI2C_SDAMAG_INTPlace the optional magnetometer pads away from USB shield, charger, buzzer, battery current loops, steel screws, and magnets.
GPIO20/GPIO19.PWR_BTN_N is pressed or a supported start command is received.0x46 and 0x47, including separate BMP581_1_INT and BMP581_2_INT handling.BUZZER_PWM, PWR_BTN_N, PWR_HOLD, BAT_SENSE, BLE_LED_PWM, I2C, USB, EN, and BOOT.CSS-J4D20-SMT-TR response on the new PCB.ESP32-S3-WROOM-1U-N8 without PSRAM is sufficient for the final USBMSD firmware.EN, BOOT, and hidden service bootloader buttons.Atopile is now the active project source in this repo:
ato.yaml: Atopile 0.15.7 project config.main.ato: FlySysVario schematic source and Atopile RectangularBoardShape board outline.parts/: generated and local part definitions, including local draft footprints for battery, buzzer, MOSFETs, signal diodes, buttons, and optional magnetometer pads.layouts/default/default.kicad_pcb: Atopile-generated layout artifact used by the Atopile Autolayout panel.docs/components-and-placement.md: component map, passive explanations, and placement intent.Current modeled nets include USB-C, USB ESD, BQ24075 power path, P-MOS battery hard-off switch, TLV75533 3.3 V rail, ESP32-S3 native USB, I2C sensor bus, two BMP581 barometers, BMI323, battery connector, switched battery/USB sense dividers, buzzer MOSFET driver, always-on green power LED, blue BLE pairing LED low-side switch, power/user button, hidden BOOT and RESET service buttons, and optional future magnetometer pads. See docs/firmware-update-ux.md for the software-first update flow and recovery fallback.
ato --non-interactive build --standalone main.ato:FlySysVario completes the
current Atopile source workflow. The default layout build still needs a layout
artifact migration after the WROOM-1U swap; ato --non-interactive build
passes electrical verification but fails while loading layouts/default/default.kicad_pcb.
The 90 mm x 45 mm board outline is defined in main.ato with
RectangularBoardShape, so the Atopile Autolayout panel has a board boundary to
place and route against. The remaining warnings are expected for local or
DigiKey-only parts because the current picker support is not covering those
local packages. Before production, verify the local draft footprints for
ESP32-S3-WROOM-1U-N8, S2B-PH-SM4-TB, CSS-J4D20-SMT-TR, AO3400A,
DMP3098L, 1N4148W, KMR211NG LFS, and optional magnetometer pads against
manufacturer land patterns and enclosure mechanics.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100nF ±10% | YAGEO_CC0603KRX7R9BB104:C0603 | C2, C4, C5, C6, C10, C11, C12 |
| 6 | 1MΩ ±1% | UNI_ROYAL_0603WAF1004T5E:R0603 | R1, R2, R22, R23, R25, R28 |
| 5 | 10kΩ ±1% | UNI_ROYAL_0603WAF1002T5E:R0603 | R6, R13, R15, R16, R19 |
| 4 | Alpha_Omega_AO3400A:AO3400A | Q1, Q2, Q3, Q5 | |
| 4 | 10µF ±10% | Samsung_Electro_Mechanics_CL10A106KP8NNNC:C0603 | C1, C3, C9, C13 |
| 3 | Diodes_Inc_1N4148W:1N4148W | D2, D3, D4 | |
| 3 | 100kΩ ±1% | UNI_ROYAL_0603WAF1003T5E:R0603 | R3, R7, R26 |
| 3 | 100Ω ±1% | UNI_ROYAL_0603WAF1000T5E:R0603 | R4, R8, R27 |
| 3 | 1µF ±10% | Samsung_Electro_Mechanics_CL10A105KB8NNNC:C0603 | C7, C8, C14 |
| 3 | 4.7kΩ ±1% | UNI_ROYAL_0603WAF4701T5E:R0603 | R17, R18, R24 |
| 2 | 1kΩ ±1% | UNI_ROYAL_0603WAF1001T5E:R0603 | R5, R20 |
| 2 | 5.1kΩ ±1% | UNI_ROYAL_0603WAF5101T5E:R0603 | R9, R10 |
| 1 | Bosch_Sensortec_BMI323:LGA-14_L3.0-W2.5-P0.50-TL_QMI8658A | U2 | |
| 1 | Lite_On_LTST_C190GKT:LED0603-RD | LED2 | |
| 1 | GCT_USB4105_GF_A:TYPE-C-SMD_SBC-160S1A-20-S412 | USB1 | |
| 1 | JST_S2B_PH_SM4_TB:S2B-PH-SM4-TB | J1 | |
| 1 | Same_Sky_CSS_J4D20_SMT_TR:CSS-J4D20-SMT-TR | BZ1 | |
| 1 | STMicroelectronics_USBLC6_2SC6:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | D1 | |
| 1 | Espressif_Systems_ESP32_S3_MINI_1_N8:BULETM-SMD_ESP32-S3-MINI-1-N8 | U4 | |
| 1 | CK_KMR211NG_LFS:KMR211NG_LFS | SW1 | |
| 1 | Texas_Instruments_BQ24075RGTR:QFN-16_L3.0-W3.0-P0.50-TL-EP1.7 | U1 | |
| 1 | Bosch_Sensortec_BMP581:BMP581_LGA10_2x2mm | U5 | |
| 1 | Diodes_Inc_DMP3098L:DMP3098L | Q4 | |
| 1 | CK_KMR211NG_LFS:KMR211NG_LFS_RST | SW3 | |
| 1 | CK_KMR211NG_LFS:KMR211NG_LFS_BOOT | SW2 | |
| 1 | Texas_Instruments_TLV75533PDBVR:SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | U3 | |
| 1 | Lite_On_LTST_C190TBKT:LED0603-RD | LED1 | |
| 1 | 1.1kΩ ±1% | UNI_ROYAL_0603WAF1101T5E:R0603 | R11 |
| 1 | 2kΩ ±1% | UNI_ROYAL_0603WAF2001T5E:R0603 | R12 |
| 1 | 330kΩ ±1% | UNI_ROYAL_0603WAF3303T5E:R0603 | R21 |
| 1 | 47kΩ ±1% | UNI_ROYAL_0603WAF4702T5E:R0603 | R14 |
It measures 90 × 45 mm and has 2 copper layers, 1.6 mm thick.
64 parts. 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.
From the nejcokorn/flysys_test repository on GitHub, at the commit this page was made from: the board is layouts/default/default.kicad_pcb and its schematic kicad/flysys_vario.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask nejcokorn before reusing the design.

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

drandyhaas/KiCadRoutingTools
A set of Python/Rust tools to aid routing in KiCad

BlueSCSI/BlueSCSI-v2
BlueSCSI v2/Ultra - an open source, open hardware, SCSI emulator using the Pi Pico PR2040 and Pico 2 RP2350



PyrooL/Alpha
A 28-key semi-ortholinear mechanical keyboard designed by PyroL

ugcs/ddc
Drone Show Software is software designed for drone shows, allowing flight path planning as well as control of dozens of drones simultaneously in a synchronized manner.
