Skip to the content
PCBKitNew board
2 layers40.5 × 58 mmInitial v, the printed circuit board in 3D

It's a BMW shifter converted to a Bluetooth Keyboard that you use with Vim

Size
40.5 × 58 mm
Copper layers
2
Thickness
1.6 mm
Parts
30
Nets
58
Pads
156
Tracks, vias
177, 27
Pours
3
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
14 Feb 2023
Updated
1 Oct 2023

Overview

Initial v is an open-source printed circuit board by tenderlove, from the tenderlove/initial-v repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 40.5 × 58 mm with 30 parts on 58 nets, routed with 177 tracks and 27 vias.

It is built around the ESP32-MINI-1-H4, MPM3610GQV-Z and SN65HVD230D, with the PJ-032A among its other parts. Its parts include 8 resistors, 7 capacitors, 4 ICs, 3 diodes and 3 connectors. It belongs with the radio and wireless and keyboards and input boards and the ESP32 boards of this library.

Main components

4

README

README.md

Initial V

Initial V is a BMW shifter that has been converted to a Bluetooth keyboard. In this repository, you'll find schematics and PCB designs, stl files, a Vim plugin, and client software for turning a BMW shifter in to a Bluetooth keyboard that can control Vim.

Think of this project as a very over-engineered Vim clutch.

Handle Front View Handle Side View

What does it do?

Initial V is a Bluetooth Keyboard specialized for controlling Vim. The key presses sent depend on Vim's state. The table below describes the key presses for each handle position according to the state of the editor:

ParkUpDownDouble UpDouble DownMove LeftLeft UpLeft DownMove Right (back to center)
Normal Mode (Drive):w on a modified buffer, :wq on unmodified bufferUp keyDown keyioCTRL-VUp KeyDown keyESC
Insert Mode (Neutral)ESCUp keyDown keyPage UpPage Down

"Drive" on the handle means "Normal Mode" in Vim. "Neutral" on the handle means "Insert Mode" in Vim. It's not possible to move the handle to the left when the handle is in Neutral mode, so there are no key combinations. I'm not sure what mode in Vim would map to Reverse on the handle, so there's no way to transition to Reverse at the moment.

Saving a buffer in Normal mode will put the handle in to the "Park" position. The Park position behaves the same way as Drive (Normal mode in Vim) except that if you hit Park again, it will exit Vim.

Hardware Design

The BMW handle communicates via CAN bus. The PCB uses an ESP-MINI-1 chip with Bluetooth capabilities, and an SN65HVD230D for CAN bus communication. The handle runs on 12v, so I used a MPM3610GQV buck converter to step the voltage down to 3.3v for the ESP.

I must give a huge thanks to @projectgus for decoding the CAN bus data. This project would not be possible without their hard work.

Software Design

The handle appears as a Bluetooth keyboard to the operating system, but it in order to change the handle state we require a way to communicate data back to the handle. I used HID data APIs to send bytes back to the handle, requesting the handle to change state. There is a client written in Zig here, and also a Ruby client here. Finally, I wrote a Vim plugin that sends commands to the handle whenever Vim changes modes. This means that the handle will maintain state along with Vim's state even if the user changes state via keyboard (like hitting i on their keyboard, etc).

The general flow is (from Normal mode):

  1. Double shift the handle up to send i
  2. Vim goes in to insert mode which triggers the Inivial V Vim plugin
  3. The Vim plugin requests the handle change state
  4. The handle changes state

End

I had a ton of fun building this project. I will update each directory with a README for more detailed build instructions. I'm also going to make a promotional video as well, but I felt I needed to fill out the README since the project is public at this point anyway!!

Parts

30
QtyValueFootprintReferences
30.1ufCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC3, C6, C7
210kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR6, R9
222ufCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC2, C5
2LOGOartwork:miseG***, G***
2SW_SPSTButton_Switch_THT:SW_PUSH_6mmSW1, SW2
1100Resistor_SMD:R_1206_3216MetricR14
1100kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR11
110ufCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC8
1120Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR10
112vLED_SMD:LED_1206_3216MetricD1
11kResistor_SMD:R_1206_3216MetricR12
11ufCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC4
124kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR7
13vLED_SMD:LED_1206_3216MetricD3
175kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR8
1Conn_01x10Connector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_HorizontalJ3
1D_SchottkyDiode_SMD:D_1206_3216Metric_Pad1.42x1.75mm_HandSolderD4
1ESP32-MINI-1-H4footprints:ESP32-MINI-1-H4U3
1LOGOartwork:logoG***
1MCP1700-1202E_SOT89Package_TO_SOT_SMD:SOT-89-3U2
1MPM3610GQV-Zfootprints:MPM3610GQV-ZU4
1PJ-032APJ-032A:CUI_PJ-032AJ2
1ProgConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_HorizontalJ1
1SN65HVD230Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU5

Questions

How big is the Initial v PCB?

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

What parts does the Initial v use?

30 parts, built around the ESP32-MINI-1-H4, MPM3610GQV-Z, SN65HVD230D and PJ-032A. 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 Initial v KiCad files?

From the tenderlove/initial-v repository on GitHub, at the commit this page was made from: the board is pcb/initial-v.kicad_pcb and its schematic pcb/initial-v.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Initial v design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers55 × 90 mmIPodClone, the printed circuit board in 3D

    IPodClone

    mojo626/iPodClone

    This is a clone of an iPod video based on the Allwinner V3s processor

    163 parts
  • 2 layers55 × 95 mmMaster, the printed circuit board in 3D

    Master

    formicidae-tracker/hardware

    Hardware repository for the FORT system

    90 parts1
  • 4 layers50 × 100 mmStDevboard, the printed circuit board in 3D

    StDevboard

    teletype7/IRIS

    166 parts3MIT
  • 4 layers100 × 80 mmCMFD LMSE, the printed circuit board in 3D

    CMFD LMSE

    IImon1293/CMFD-LMSE

    CAN FDで通信できるGPIO基板

    134 parts
  • 4 layers76.8 × 38.1 mmINSIGHT, the printed circuit board in 3D

    INSIGHT

    K-Eckert15/ARES

    ARES capstone with PHOBOS and DEIMOS subsystems

    76 parts1
  • 4 layers106 × 98 mmMotion control, the printed circuit board in 3D

    Motion control

    menloresearch/asimov-1

    v1 of Asimov, an open-source humanoid robot

    76 parts1.4kCERN-OHL-S-2.0
  • 4 layers42 × 42 mmHuvud, the printed circuit board in 3D

    Huvud

    bondus/KlipperToolboard

    A 3D printer tool head controller board

    126 parts373GPL-3.0
  • 4 layers85 × 85 mmEPS, the printed circuit board in 3D

    EPS

    rgw3d/1KCubeSat_Hardware

    Hardware design files for my $1000 CubeSat.

    657 parts158GPL-3.0