Coder Social home page Coder Social logo

constantinoschillebeeckx / tacocat-keyboard Goto Github PK

View Code? Open in Web Editor NEW
23.0 6.0 3.0 950.04 MB

Custom, split, ergonomic mechanical keyboard

License: GNU Affero General Public License v3.0

C++ 0.53% Makefile 98.31% Batchfile 0.03% C 0.69% Python 0.44%
mechanical-keyboard diy keyboard cherrymx keycaps

tacocat-keyboard's Introduction

tacocat keyboard

๐Ÿšง this repo is currently on hold; once I started writing the firmware, I realized the choice of microcontroller was not a good one. For a keyboard, it's super useful to have a USB to serial chip that acts like a HID, that's why the Teensy or the ATmega32U4 are popular options. That being said, I started developing the firmware in such a way that required a python script to be running on the host to listen to the keystrokes being sent. ๐Ÿ˜“ Furthermore, I'm not convinced that the physical layout is that great. Anywho, I'm leaving this here for reference. ๐Ÿšง



Another split ergonomic keyboard with features:

  • two symmetric keyboard halves staggered in opposite directions
  • wireless or powered operation
  • wifi & bluetooth connected
  • can be used as two halves with a TRRS audio cable or as single joined keyboard (no cable needed)
  • audio passthrough

Please visit the wiki for full documentation and build logs.

tacocat-keyboard's People

Contributors

constantinoschillebeeckx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

tacocat-keyboard's Issues

ensure I2C micro usb compatible as power source

double check the order of the pins on the micro USB I2C connection so that, if by accident someone plugs this into their computer, the worst thing is that the keyboard half would be powered up. for that the GND and the VUSB pins needs to be validated.

keyboard

I can't use the ESP32 as a HID keyboard since the UART to USB (FT231XS) doesn't support it; my options are:

  • use a different chip as the converter (added hardware)
  • send serial to the host and parse that into keypresses

NOTE: if I use BLE, then I think this isn't an issue ...

https://github.com/fasaxc/arduino-keyboard
https://learn.adafruit.com/introducing-bluefruit-ez-key-diy-bluetooth-hid-keyboard/sending-keys-via-serial

use pyserial to listen to the COM part and simulate a keypress

https://stackoverflow.com/a/11910555/1153897

https://pyautogui.readthedocs.io/en/latest/
https://github.com/PyUserInput/PyUserInput
https://gist.github.com/nzaillian/622181
https://gist.github.com/fredrikw/4078034
https://pypi.python.org/pypi/pynput

Feature ideas

  • mechanism to adjust tent
  • USB pass through
  • wireless/blue tooth?
  • chain multiple?
  • headphone jack passthrough
  • pogo pin connection
  • live edge wooden case

PCB BOM

  • headers pins for esp32?
  • 4.7Ohm pull-up resistors for I2C?
  • power cap for LEDs
  • mini usb plugs and receptacles

symmetric pin assignment layout

can we attach the right combination of pins to the ESP32 so that it can be put in either way?

the only limitation is that pins 34-39 are input only; the following pins are symmetric to those input only pins:
34 -> 23
35 -> 18
36 -> GND
37 -> 21 (SDA)
38 -> TX
39 -> RX

these input pins could be used for either the columns or rows (which ever the library sets up as input)

pins required:

  • 2 for LEDs (front & back) [can be symmetric with one another]
  • 5 keycap rows [can be symmetric with columns]
  • 7 keycap columns [can be symmetric with rows]
  • 2 power (VBAT & VUSB) [these are already symmetric]
  • 2 COMM (SDA & SCL)

screen shot 2017-05-05 at 14 08 46

voltage regulator

in order to properly control the LEDs, they should be powered at ~3.7V (since the control pin is @3.3V) - this is only the case when the LIPO battery is installed. without the battery, it cannot be guaranteed that the voltage on the vbat is ~3.7V (looks like it is around ~4.1V instead).

How do we ensure vbat produces ~3.7V without the LIPO installed? Perhaps we can use a voltage regulator; but will it work in both directions? That is, with the battery attached to the regulators output, will the circuit still function?

I think all we need is a large capacitor hooked up at the power source; Adafruit recommends 1000uF....

https://www.digikey.com/product-detail/en/nichicon/UFW0J102MPD1TD/493-10951-1-ND/4317878

4 pins instead of 5 on I2C connection

Currently the connection that bridges the two keyboard halves has 5 pins:

  • SCL
  • SDA
  • GND
  • Vbat
  • Vusb

Can I get away with dropping the Vusb? I can IFF Vbat is powered when just the USB (and no battery) is used to power keyboards.

There may be an issue about pulling too much current through the master keyboard voltage regulator however. Voltage regulator is limited to 600mA

TODO

  • finalize key layout -> final
  • PCB
    • ensure symmetric PCB layout works
    • design finalized PCB
  • custom TRRS and USB cables
  • case
    • design case (CAD)
    • figure out how to mount pcb to case
    • plate CAM & fab (1.5mm or 0.059in thick)
    • figure out how to interface with tenting stands
  • figure out how to mill wood keycaps
    • test fit of new wall thickness keys
    • figure out laser alignment for lettering
    • art resin?
    • finalize CAM
  • software

I2C bus requires pull-up resistors

Although using the internal pull-up resistors (20kฮฉ) will make communication work, it's best to add in a stronger pull-up: 4k7ฮฉ. This should be added on the master side of things.

asdf

micro USB update

Either update the mounting hole sizes (the PCB drills are too large) or replace the part with a new one. If the latter, choose a plug that has pads and doesn't cover the pins in the back (e.g. this)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.