MARS Keyboards

Open-source analog hall effect keyboards — every key knows its exact depth. Custom firmware, Nova desktop utility, and open hardware.

0Keys
0Key Modes
0HID Commands
0ADC Levels
4 boards supported Nova UI complete WebHID browser mode
Technology

Why Analog?

Traditional keyboards are binary — pressed or released. MARS keyboards know exactly where every key is.

Each key sits above a hall effect sensor and a tiny magnet inside the switch. As you press down, the magnetic field changes continuously. A 12-bit ADC reads 4,096 distinct levels across the full 4mm of travel — giving you sub-0.1mm precision.

This unlocks features that are physically impossible on traditional mechanical keyboards:

  • Set actuation depth per-key from 0.1mm to 4.0mm
  • Rapid trigger — release and re-fire without full travel
  • DKS (Dynamic Keystroke) — different actions at different depths
  • Analog gamepad emulation — WASD becomes a thumbstick
  • Depth-reactive lighting that responds to press intensity
W
0.0mm
0.0mm
1.0mm
1.5mm — Actuation
2.0mm
3.0mm
4.0mm

Traditional Mechanical

  • Binary: pressed or released
  • Fixed actuation point
  • No per-key tuning
  • No analog features

MARS Hall Effect

  • 4,096 depth levels per key
  • Adjustable 0.1–4.0mm actuation
  • Rapid trigger + DKS
  • Analog gamepad, SOCD, depth-reactive RGB
Hardware

Keyboards

Four boards, one shared platform

VLT / Nocturne75
Flagship

VLT / Nocturne75

75% layout — 81 keys + encoder + 0.85" TFT display

MCU
RP2350B Dual M33
Flash
16 MB QSPI
RGB
94 LEDs (3 zones)
ADC
12-bit internal
Sensors
6x HC4067 MUX
Display
GC9107 128x128 IPS
  • GIF Playback (11 slots)
  • Spotify Now Playing
  • LVGL Display UI + MPR121 Touch
  • Dual-Core Architecture
  • SignalRGB Support
  • 10+10 Profiles
  • 9 Key Modes + SOCD
  • Per-Key Actuation + Rapid Trigger
Saturn60
60%

Saturn60

60% layout — 64 keys + encoder

MCU
RP2350B Dual M33
Flash
16 MB QSPI
RGB
64 per-key LEDs
ADC
12-bit internal
Sensors
4x HC4067 MUX
Wireless
nRF24L01+ 2.4GHz
  • Wireless 2.4 GHz + USB-C
  • LiPo Battery + NTC Monitoring
  • Shared Firmware Platform
  • Per-Key Actuation
  • SOCD + All Key Modes
  • Profile System
Mina65
65% Wireless

Mina65

65% layout — 66 keys + encoder — wireless

MCU
RP2040
Wireless
nRF24L01+ 2.4GHz
RGB
74 LEDs (2 zones)
ADC
MCP3208 SPI
Battery
LiPo + TP4056
Sensors
5x MUX
  • Wireless 2.4 GHz + USB-C
  • Battery Powered
  • Auto Power Mode
  • Per-Key Actuation
  • SOCD Cleaning
Taki65
65% Split

Taki65

65% layout — 68 keys + split spacebar — wireless

MCU
RP2040
Wireless
nRF24L01+ 2.4GHz
RGB
74 LEDs (2 zones)
ADC
MCP3208 SPI
Battery
LiPo + TP4056
Keys
68 (split space)
  • Split Spacebar Layout
  • Wireless 2.4 GHz + USB-C
  • Battery Powered
  • Per-Key Actuation
  • SOCD Cleaning
Features

9 Key Modes

Every key can do more than just type a letter

Keymap — Full Remapping

Remap every key to any HID keycode. 4 independent layers with MO (momentary) and TG (toggle) switching. Supports transparent keys that fall through to lower layers.

  • Dvorak and Colemak layout presets
  • Media keys, function keys, and modifiers
  • Layer-aware — each layer has its own complete keymap
  • Default preset restores factory layout
Layer 0W
Layer 1

Mod-Tap — Dual Function Keys

Tap a key for one action, hold it for another. Transform any key into a dual-purpose input with configurable hold threshold.

  • Tap = primary keycode, Hold = modifier or secondary
  • Configurable hold threshold in milliseconds
  • Works with any keycode combination
  • Example: Tap Caps Lock = Escape, Hold = Ctrl
TapEsc
HoldCtrl

Key Combo — Modifier Shortcuts

Assign a modifier+key combination to a single key press. One key outputs Ctrl+C, Alt+Tab, Ctrl+Shift+T, or any combo.

  • Any modifier + any keycode in one press
  • Ctrl, Shift, Alt, GUI modifiers supported
  • Stack multiple modifiers (Ctrl+Shift+key)
  • Per-key, per-layer configuration
PressF1
=
Ctrl
+
C

DKS — Dynamic Keystroke

Analog depth-aware keystrokes. Assign different keycodes to different depths — shallow press does one thing, deep press does another.

  • Up to 4 depth zones per key
  • Shallow = keycode A, Deep = keycode B
  • Leverages full analog depth sensing
  • Unique to analog hall effect keyboards
Shallow
→ Keycode A
Deep
→ Keycode B

SOCD — Simultaneous Opposing Inputs

Resolve conflicting directional inputs for competitive gaming. When A+D are pressed simultaneously, SOCD cleaning determines the output.

  • 3 resolution modes: Neutral, Last Input, First Input
  • 8 configurable key pairs
  • Default: A↔D and W↔S (WASD)
  • Toggle globally via KC_SOCD_TOG (0xB4)
A
D
=
Neutral

Shortcuts — Single-Key Macros

Assign quick macro shortcuts to any key. Execute common actions with a single press — open apps, trigger system commands, or paste text.

  • One-press macro execution
  • Configurable per key, per layer
  • Works with all standard HID keycodes
  • Instant playback with no delay
PressF2
Shortcut Action

Gamepad — Analog Controller Emulation

Your keyboard becomes a USB gamepad. Analog key depth maps directly to thumbstick axes — partial press = partial tilt. 250Hz report rate.

  • WASD = left stick, Arrows = right stick
  • Configurable deadzone (default 0.3mm)
  • Response curves: linear, steep, gentle
  • 9-byte HID gamepad report at 250Hz
AnalogW
Left Stick ↑

Macros — Record & Replay

Record multi-key sequences and replay them with a single press. Build complex input sequences for productivity or gaming.

  • Record keystroke sequences
  • Assign to any key on any layer
  • Includes timing between keystrokes
  • Flash-persistent — survives power cycles
REC
A
B
C

Layers — 4 Independent Keymaps

Stack up to 4 complete keymaps. Switch between them with MO (momentary hold) or TG (toggle). Each layer can have its own LED colour indicator.

  • Layer 0 = Base, Layer 1 = Fn, Layers 2-3 = Custom
  • MO(n) = active while held, TG(n) = toggle on/off
  • Transparent keys fall through to lower layers
  • Per-layer LED colour indicators on status LEDs
Layer 0 — Base
Layer 1 — Fn
Layer 2
Layer 3

Your keyboard has a display

0.85" 128x128 IPS TFT powered by LVGL on a dedicated CPU core. Upload GIFs, see Spotify album art, type notes, monitor PC stats — all on your keyboard.

The display runs entirely on Core 1 of the RP2350B via LVGL. Core 0 handles USB, hall scanning, and LEDs — zero contention. MPR121 capacitive touch enables gesture navigation: tap, swipe, hold. Screen content can be cast live to Nova Utility.

Software

Nova Utility

Configuration software for all MARS keyboards — Electron desktop app + WebHID browser mode. 9 themes.

Visual keymap editor — click any key to remap. 4 layers, MO/TG switching, media keys, presets.

Nova — Keys
Esc
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
Del
`~
1
2
3
4
5
6
7
8
9
0
-
=
Bksp
Home
Tab
Q
W
E
R
T
Y
U
I
O
P
[
]
\
PgUp
Caps
A
S
D
F
G
H
J
K
L
;
'
Enter
PgDn
Shift
Z
X
C
V
B
N
M
,
.
/
Shift
End
Ctrl
Win
Alt
Space
Alt
Fn
Ctrl

Remap Key

Select keys above, then pick a keycode below.

Default
AOEUIDvorak
ARSTDColemak

9 effects across 3 zones. HSV colour picker, gradient editor, per-key painting, colorway presets.

Nova — Lighting
Esc
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
Del
`~
1
2
3
4
5
6
7
8
9
0
-
=
Bksp
Home
Tab
Q
W
E
R
T
Y
U
I
O
P
[
]
\
PgUp
Caps
A
S
D
F
G
H
J
K
L
;
'
Enter
PgDn
Shift
Z
X
C
V
B
N
M
,
.
/
Shift
End
Ctrl
Win
Alt
Space
Alt
Fn
Ctrl
AMBIENT STRIP
Paint Mode
Zone
Effect
Rainbow
Colour
Recent Colors
Speed153

Per-key actuation from 0.1mm to 4.0mm. Live depth preview, sensor calibration, rapid trigger.

Nova — Performance
1.61.3Esc
0.80.5F1
1.61.3F2
1.61.3F3
1.61.3F4
1.61.3~
1.61.31
1.61.32
1.61.33
1.61.34
1.61.35
1.61.3Bksp
1.61.3Tab
1.61.3Q
1.61.3W
1.61.3E
1.61.3R
1.61.3T
1.61.3\

Live Actuation Preview

WRow 2, Col 2
Depth
1.2mm
ADC
2847
Actuation
1.5mm
Status
Released
Depth
4.0mm

Upload and manage animated GIFs on the VLT's 128x128 TFT. 11 slots, 1 MB each.

Nova — Screen
GIF Slots
Slot 0
Slot 1
Slot 2
Slot 3
Slot 4
Slot 5
Slot 6
Slot 7
Slot 8
Slot 9
Slot 10
+ Upload
Uploading: neon_cat.gif — 67% (chunk 96/143)

Connect Spotify to stream album art and track info to the VLT display in real time.

Nova — Spotify
Blinding Lights
The Weeknd
1:233:20
Spotify Connected
Send to Display
Album art: 64x64 RGB565 | Cached: 12 covers | Transfer: ~2.5s

10+10 profiles, 9 colour themes. Import/export configurations.

Nova — Settings

Profiles

Keymap Profile
Profile 0
Lighting Profile
Profile 0

Theme

NovaDeep SpaceVampireValorantNebulaMatrix

Software

Show Debug tab
Show Developer tab

Click to cycle through Nova's 9 themes:

Lighting

RGB Effects

9 built-in effects across 3 independent zones + 4 startup animations

Static
Solid colour, per-key paint, colorway presets
Breathing
Smooth pulse between colour and off
Wave
Colour wave left to right
Wave Reverse
Colour wave right to left
Radial
Radiates from center outward
Gradient
Multi-stop with orientation control
Rainbow
Full spectrum cycling
Reactive
Flash on press, fade on release
Depth Reactive
Colour intensity tracks key press depth

Startup Animations

4 boot animations play when the keyboard powers on

Comet Wave Ripple Breathe

3 independent zones: Main Keys (per-key RGB), Ambient Strip (underglow), and Status Indicators (layer/profile). Each zone runs its own effect. SignalRGB support for system-wide sync.

Tuning

Performance

Per-key actuation, rapid trigger, and sensor calibration

ADC Resolution 12-bit (4,096 levels)
Key Travel 4.0mm full stroke
Actuation Range 0.1mm — 4.0mm (0.1mm steps)
Rapid Trigger Configurable reset distance
Scan Method Channel-first MUX (6x HC4067)
Calibration Auto + Advanced 4-point
Per-Key Hysteresis Automatic deadband tracking
Debounce Analog depth-based (not timer)
Gaming

SOCD Cleaning

Simultaneous Opposing Cardinal Direction resolution — 8 configurable pairs, 3 modes

Neutral

Both keys cancel out — neither active

A
+
D
=
None

Best for fighting games

Last Input Wins

Most recently pressed key takes priority

A
+
D
=
D

Best for FPS games

First Input Wins

First key pressed holds priority

A
+
D
=
A

Best for defensive play

Default pairs: A↔D and W↔S (WASD). Up to 8 pairs, each with its own resolution mode. Toggle globally with KC_SOCD_TOG.

Storage

Profile System

10 keymap profiles + 10 lighting profiles stored in flash

Profile 0
Profile 1
Profile 2
Profile 3
Profile 4
Profile 5
Profile 6
Profile 7
Profile 8
Profile 9

Flash Persistent

All profiles survive power cycles and USB reconnects. Stored in on-board QSPI flash.

Instant Switch

Switch profiles via Nova, encoder, or keycode. Status LED shows active profile colour.

Independent Stacks

10 keymap profiles and 10 lighting profiles — mix and match any combination.

Input

Encoder Knob

Rotary encoder with PIO hardware polling and layer-aware keymaps

🔊
Volume Control
Default: rotate = volume up/down, press = mute
🎵
Media Scrub
Fn layer: rotate = next/prev track, press = play/pause
💡
LED Brightness
Custom layer: rotate = brightness up/down
📺
Display Navigation
VLT: rotate = scroll menu, press = select. 5-way joystick (RKJXT1F42001)

EC11 rotary encoder with PIO hardware polling at 25kHz. Adaptive press-wait-release for all keycode types. Step accumulation with clamp prevents runaway during stalls.

Connectivity

Wireless

2.4 GHz wireless for Saturn60, Mina65, and Taki65

📡

nRF24L01+ 2.4 GHz

Low-latency wireless link with USB dongle receiver. Auto-pairing, channel hopping, and retry logic.

🔋

LiPo Battery

Rechargeable LiPo battery with TP4056 charging IC. NTC thermistor monitoring for safe charging.

Power Management

Auto sleep mode, LED dimming on battery, wake-on-keypress. USB-C charging while in use.

Reference

Specifications

Complete comparison of all MARS keyboards

Specification VLT / Nocturne75 Saturn60 Mina65 Taki65
Layout75%60%65%65% (split space)
Keys81646668
MCURP2350B Dual M33RP2350B Dual M33RP2040RP2040
Flash16 MB QSPI16 MB QSPI4 MB4 MB
ADC12-bit internal12-bit internalMCP3208 SPIMCP3208 SPI
MUXes6x HC40674x HC40675x MUX5x MUX
RGB LEDs94 (3 zones)64 per-key74 (2 zones)74 (2 zones)
Display0.85" 128x128 IPS (GC9107)
TouchMPR121 Capacitive
EncoderEC11 + 5-way joystickEC11EC11EC11
WirelessnRF24L01+ 2.4GHznRF24L01+ 2.4GHznRF24L01+ 2.4GHz
BatteryLiPo + NTCLiPo + TP4056LiPo + TP4056
MulticoreYes (Core 0 + Core 1)NoNoNo
SD CardYes (GIF storage)
SignalRGBYesYesYesYes
SOCD8 pairs, 3 modes8 pairs, 3 modes8 pairs, 3 modes8 pairs, 3 modes
Profiles10+1010+1010+1010+10
Key Modes9999
Future

TMR Sensor Roadmap

Same footprint. Same firmware. Better sensing.

MDT TMR2617S-AAC — a TMR (Tunnel Magnetoresistance) sensor in the same SOT-23-3 package as our current Hall sensors. Drop-in replacement: same PCB footprint, same MUX+ADC scanning, same firmware — zero changes.

Phase 1 — Research Complete

Evaluated TMR sensor landscape. Identified MDT TMR2617S-AAC as best candidate: Z-axis, single-ended analog output, SOT-23-3, <300uA, $0.02-0.04 bulk.

Phase 2 — Prototype In Progress

Order samples, test on breadboard with existing magnetic switches + RP2350B ADC. Compare noise floor, linearity, and range vs Hall sensors.

Phase 3 — PCB Integration Planned

Verify SOT-23-3 footprint compatibility. Work with MDT on custom sensitivity programming for MARSVLT magnet geometry.

Phase 4 — Production Planned

Establish supply chain (MDT direct or JLCPCB). Offer TMR variant alongside Hall. Advertise 0.01mm resolution and lower power.

0
TMR Resolution
0
Power per sensor
$0.02
Bulk cost (JLCPCB)
Community

Open Source

Built in public — firmware, software, and hardware

Tech Stack

C (Firmware) JavaScript (Nova) Electron WebHID KiCad (Hardware) Pico SDK 2.2 LVGL (Display) TinyUSB

Build & Flash

Terminal
# Build VLT firmware
cd firmware/vlt/build
cmake --build . -j4

# Build Saturn60 firmware
cd firmware/saturn60/build
cmake --build . -j4

# Flash via SWD debug probe
openocd -f interface/cmsis-dap.cfg \
  -f target/rp2350.cfg \
  -c "program {VLT.elf} verify reset exit"