Skip to content

Commit

Permalink
Readme updates.
Browse files Browse the repository at this point in the history
  • Loading branch information
george-norton committed Feb 3, 2025
1 parent f03cd68 commit d2849ea
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 33 deletions.
61 changes: 43 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# Peacock

Peacock is an RP2040 powered trackpad running QMK. It features an integrated Microchip MaxTouch sensor IC which is
connected to a 7" capacitive sensor. I also designed some little trackpads, see [Procyon](https://github.com/george-norton/procyon).
Peacock is an RP2040 powered trackpad running QMK. It features an integrated Microchip MaxTouch sensor IC which is connected to a 7" capacitive sensor. I also designed some little trackpads which you can integrate into your own keyboards, see [Procyon](https://github.com/george-norton/procyon).

![Peacock PCB](images/peacock.jpg)

The [Ploopy trackpad](https://ploopy.co/trackpad/) is like a more polished Peacock, with a higher resolution sensor. It runs code build from the same QMK/ZMK branches, and is easier to buy.

## Features
- Fully PCBA, this other than switches and encoders, this board is designed to be fully factory assembled.
- Integrated RP2040 controller, no need to a separate controller.
Expand All @@ -29,27 +30,19 @@ controller as they tend to be designed for much larger sensor areas than touchpa
- The sensor also supports a passive stylus, although the electrodes in Peacock are larger than the recommended size, so this may not perform well.

## Software support
Currently there are two QMK branches with peacock support.
Currently there are experimental QMK and ZMK branches with Peacock support.

The [first](https://github.com/george-norton/qmk_firmware/tree/peacock) implements support for the maxtouch IC as a pointing device - this is how the current
trackpads (cirque, Azoteq) work. as well as pointer movement,
the MaxTouch QMK driver will detect the following gestures:
- Tap to click (1 finger for mouse button 1, 2 fingers for mouse button 2 etc..)
- Two finger scroll.
- Tap and hold to drag.
The [QMK multitouch_experiment branch](https://github.com/george-norton/qmk_firmware/tree/multitouch_experiment) exteneds the QMK digitizer feature to implement real trackpad support. On this branch, the MaxTouch driver reports 5 separate finger positions to the host and it detects gestures. You should get all the same gesture support you would expect from a modern trackpad. This branch is a large changeset which will likely take some time to get merged into QMK. There are some [pre-built QMK firmware images in my userspace](https://github.com/george-norton/qmk_userspace/releases/tag/latest).

The [second](https://github.com/george-norton/qmk_firmware/tree/multitouch_experiment) exteneds the digitizer feature to implement real trackpad support. On this
branch, the MaxTouch driver reports 5 separate finger positions to the host and it detects gestures. This provides a better experience as scrolling is smoother,
pinch and zoom are supported and most OS's provide additional 3 finger gestures which will work too. This branch still needs a lot of work, and it is a large changeset
which will likely take some time to get merged into QMK.
The [ZMK Maxtouch module](https://github.com/george-norton/maxtouch-zephyr-module) builds against Petes [feat/pointers-move-scroll-ptp](https://github.com/petejohanson/zmk/tree/feat/pointers-move-scroll-ptp) ZMK branch. It is currently missing LED support, and fallback to mouse emulation (so no MacOS support).

## Sensor tuning
The sensor sensitivity may require tuning depending on the type of surface you use on your build. This can be done by adjusting the touch threshold, and
if required the transmit gain. If your sensor is not detecting touches well, reduce the touch threshold. If your sensor is jittery, or is detecting spurious touches
increase the touch threshold, or if there is any ungrounded metal by the sensor, move it. Increasing the transmit gain will require a larger touch threshold, but it
should enable you to use thicker overlays and it will give you more room to adjust the touch threshold.
if required the transmit gain. If your sensor is not detecting touches well, reduce the touch threshold. If your sensor is jittery, or is detecting spurious touches increase the touch threshold, or if there is any ungrounded metal by the sensor, move it. Increasing the transmit gain will require a larger touch threshold, but it should enable you to use thicker overlays and it will give you more room to adjust the touch threshold.

The mouse emulation gestures are implemented in software, they rely on various parameters that can be tuned by defining macros.

The gestures are implemented in software, they rely on various parameters that can be tuned by defining macros.
If you flash the QMK debug firmware, you can use the [Maxtouch debug](https://github.com/george-norton/maxtouch-debug) tool to adjust the sensor tuning in real time and see how it works.

## BOM
To build a Peacock you will need:
Expand All @@ -75,7 +68,7 @@ You can see the correct part orientation here, when ordering ensure that all par

The v1.0 release has been tested and it works, but there is an issue with the I2C pin allocation. As a result it requires two additional bodge wires, and the encoder switches will not work.

The v1.01 release has the issue fixed. It is untested, but expected to work.
The v1.01 release has the issue fixed, you should order this version.

## Assembly guide

Expand Down Expand Up @@ -112,6 +105,38 @@ Peacock support has not yet been merged back to QMK. You can find a branch with

This trackpad is a VIK device, so you should be able to discard the controller portion of the build and wire the trackpad directly to a different VIK enabled controller (such as those sold by fingerpunch and splitkb). You could also replace the controller board with one of your own design.

## VIK certification

Trackpad module

| Category | Classification | Response |
| ----------------------- | ----------------------- | ------------------ |
| FPC connector | Required | :heavy_check_mark: |
| Breakout pins | Recommended | :heavy_check_mark: |
| Uses: SPI | Optional | :x: |
| SPI used for SPI only | Strongly recommended | N/A |
| Uses: I2C | Optional | :heavy_check_mark: |
| I2C used for I2C only | Strongly Recommended | :heavy_check_mark: |
| I2C pull ups | Required | 3.3k |
| Uses: RGB | Optional | :x: |
| Uses: Extra GPIO 1 | Optional | :heavy_check_mark: |
| Uses: Extra GPIO 2 | Optional | :x: |
| Standard PCB Size/Mount | Strongly recommended | :x: |

Peacock controller

| Category | Classification | Response |
| ----------------------- | ----------------------- | ------------------ |
| FPC connector | Required | :heavy_check_mark: |
| Breakout pins | Recommended | :heavy_check_mark: |
| Supplies: SPI | Required | :heavy_check_mark: |
| Supplies: I2C | Required | :heavy_check_mark: |
| I2C on main PCB | Discouraged | :x: |
| I2C pull ups | Informative | N/A |
| Supplies: RGB | Required | :heavy_check_mark: |
| Supplies: Extra GPIO 1 | Required | Analog/Digital |
| Supplies: Extra GPIO 2 | Required | Analog/Digital |

## Schematic

![Macropad](images/schematic-Macropad.png)
Expand Down
74 changes: 59 additions & 15 deletions trackpad.kicad_pro
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.1,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
Expand All @@ -21,7 +24,7 @@
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
Expand Down Expand Up @@ -73,9 +76,11 @@
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
Expand Down Expand Up @@ -116,29 +121,26 @@
"max_error": 0.005,
"min_clearance": 0.127,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.19999999999999998,
"min_hole_clearance": 0.09999999999999999,
"min_copper_edge_clearance": 0.2,
"min_hole_clearance": 0.1,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.19999999999999998,
"min_through_hole_diameter": 0.2,
"min_track_width": 0.13,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"min_via_annular_width": 0.05,
"min_via_diameter": 0.4,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
Expand All @@ -147,29 +149,35 @@
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
Expand All @@ -184,6 +192,32 @@
0.4,
0.5
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
Expand All @@ -193,6 +227,13 @@
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
Expand Down Expand Up @@ -502,8 +543,11 @@
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "trackpad.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
Expand Down

0 comments on commit d2849ea

Please sign in to comment.