From db3c00521e213e13afdc0fbce165faf14c6bcdac Mon Sep 17 00:00:00 2001 From: ziteh Date: Tue, 19 Sep 2023 13:38:16 +0000 Subject: [PATCH] deploy: siderakb/siderakb-website@82283a9ae4b4b9ce1fe7625165bd4d26f72e7de6 --- 404.html | 4 ++-- assets/js/56f8e4ec.4a6fc959.js | 1 + assets/js/56f8e4ec.f42ef793.js | 1 - ...runtime~main.4327bc31.js => runtime~main.17faf51d.js} | 2 +- docs/ergosnm/index.html | 4 ++-- docs/ergosnm/intro/index.html | 4 ++-- docs/ergosnm/rev1/index.html | 4 ++-- docs/ergosnm/rev2/index.html | 9 +++++---- docs/general-guide/dfu/index.html | 4 ++-- docs/general-guide/index.html | 4 ++-- docs/general-guide/soldering/index.html | 4 ++-- docs/intro/index.html | 4 ++-- docs/research/index.html | 4 ++-- docs/rp-micro/index.html | 4 ++-- index.html | 4 ++-- 15 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 assets/js/56f8e4ec.4a6fc959.js delete mode 100644 assets/js/56f8e4ec.f42ef793.js rename assets/js/{runtime~main.4327bc31.js => runtime~main.17faf51d.js} (98%) diff --git a/404.html b/404.html index 350f042..5444064 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | SideraKB - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/56f8e4ec.4a6fc959.js b/assets/js/56f8e4ec.4a6fc959.js new file mode 100644 index 0000000..e87e3c8 --- /dev/null +++ b/assets/js/56f8e4ec.4a6fc959.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksiderakb_website=self.webpackChunksiderakb_website||[]).push([[890],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),m=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=m(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,c=s["".concat(p,".").concat(k)]||s[k]||d[k]||l;return a?n.createElement(c,i(i({ref:e},u),{},{components:a})):n.createElement(c,i({ref:e},u))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[s]="string"==typeof t?t:r,i[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>B,contentTitle:()=>T,default:()=>I,frontMatter:()=>S,metadata:()=>R,toc:()=>E});var n=a(7462),r=a(7294),l=a(3905),i=a(6010),o=a(2466),p=a(6550),m=a(1980),u=a(7392),s=a(12);function d(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function k(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??d(a);return function(t){const e=(0,u.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function c(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function h(t){let{queryString:e=!1,groupId:a}=t;const n=(0,p.k6)(),l=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,m._X)(l),(0,r.useCallback)((t=>{if(!l)return;const e=new URLSearchParams(n.location.search);e.set(l,t),n.replace({...n.location,search:e.toString()})}),[l,n])]}function N(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,l=k(t),[i,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!c({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:l}))),[p,m]=h({queryString:a,groupId:n}),[u,d]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,l]=(0,s.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&l.set(t)}),[a,l])]}({groupId:n}),N=(()=>{const t=p??u;return c({value:t,tabValues:l})?t:null})();(0,r.useLayoutEffect)((()=>{N&&o(N)}),[N]);return{selectedValue:i,selectValue:(0,r.useCallback)((t=>{if(!c({value:t,tabValues:l}))throw new Error(`Can't select invalid tab value=${t}`);o(t),m(t),d(t)}),[m,d,l]),tabValues:l}}var g=a(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:l,selectValue:p,tabValues:m}=t;const u=[],{blockElementScrollPositionUntilNextRender:s}=(0,o.o5)(),d=t=>{const e=t.currentTarget,a=u.indexOf(e),n=m[a].value;n!==l&&(s(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":d(t);break;case"ArrowRight":{const a=u.indexOf(t.currentTarget)+1;e=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(t.currentTarget)-1;e=u[a]??u[u.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},m.map((t=>{let{value:e,label:a,attributes:o}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===e?0:-1,"aria-selected":l===e,key:e,ref:t=>u.push(t),onKeyDown:k,onClick:d},o,{className:(0,i.Z)("tabs__item",f.tabItem,o?.className,{"tabs__item--active":l===e})}),a??e)})))}function y(t){let{lazy:e,children:a,selectedValue:n}=t;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=l.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function C(t){const e=N(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",f.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(y,(0,n.Z)({},t,e)))}function v(t){const e=(0,g.Z)();return r.createElement(C,(0,n.Z)({key:String(e)},t))}const w={tabItem:"tabItem_Ymn6"};function P(t){let{children:e,hidden:a,className:n}=t;return r.createElement("div",{role:"tabpanel",className:(0,i.Z)(w.tabItem,n),hidden:a},e)}const S={sidebar_position:1},T="Rev 2.x",R={unversionedId:"ergosnm/rev2",id:"ergosnm/rev2",title:"Rev 2.x",description:"This document for the Rev 2.x of the ErgoSNM keyboard, the latest is Rev 2.1. Source files: GitHub.",source:"@site/docs/ergosnm/rev2.md",sourceDirName:"ergosnm",slug:"/ergosnm/rev2",permalink:"/docs/ergosnm/rev2",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Intro",permalink:"/docs/ergosnm/intro"},next:{title:"Rev 1.x",permalink:"/docs/ergosnm/rev1"}},B={},E=[{value:"Features",id:"features",level:2},{value:"Parts List",id:"parts-list",level:2},{value:"PCB and Electronic Parts",id:"pcb-and-electronic-parts",level:3},{value:"Main PCBs",id:"main-pcbs",level:4},{value:"Thumb Cluster",id:"thumb-cluster",level:4},{value:"Trackball Board",id:"trackball-board",level:4},{value:"Build Guide",id:"build-guide",level:2},{value:"Prepare Parts",id:"prepare-parts",level:3},{value:"Solder",id:"solder",level:3},{value:"Flash Firmware",id:"flash-firmware",level:3},{value:"Test",id:"test",level:3},{value:"Assemble",id:"assemble",level:3},{value:"Edit Keymap",id:"edit-keymap",level:3},{value:"Complete",id:"complete",level:3}],F={toc:E},M="wrapper";function I(t){let{components:e,...a}=t;return(0,l.kt)(M,(0,n.Z)({},F,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"rev-2x"},"Rev 2.x"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/tddlJ7A.jpg",alt:null})),(0,l.kt)("p",null,"This document for the ",(0,l.kt)("inlineCode",{parentName:"p"},"Rev 2.x")," of the ErgoSNM keyboard, the latest is ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},(0,l.kt)("inlineCode",{parentName:"a"},"Rev 2.1")),". Source files: ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/ergo-snm-keyboard"},"GitHub"),"."),(0,l.kt)("p",null,"My blog post: ",(0,l.kt)("a",{parentName:"p",href:"https://ziteh.github.io/posts/ergosnm-v2-1-intro/"},"ErgoSNM\u2014\u2014\u6709\u8ecc\u8de1\u7403\u7684\u5206\u96e2\u5f0f\u4eba\u9ad4\u5de5\u5b78QMK\u9375\u76e4 (v2.1)")),(0,l.kt)("h2",{id:"features"},"Features"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"64 keys in total, left half (with thumb cluster) 29+6 keys, right half (with trackball) 29 keys."),(0,l.kt)("li",{parentName:"ol"},"Trackball for mouse cursor and scroll, powered by ",(0,l.kt)("a",{parentName:"li",href:"https://www.pixart.com/products-detail/10/PMW3360DM-T2QU"},"PMW3360")," optical mouse sensor."),(0,l.kt)("li",{parentName:"ol"},"USB Type-C receptacle connector, with ESD protection adn resettable fuse."),(0,l.kt)("li",{parentName:"ol"},"Support Cherry MX style key switches and hot-swap sockets."),(0,l.kt)("li",{parentName:"ol"},"Column-staggered layout."),(0,l.kt)("li",{parentName:"ol"},"Top mount."),(0,l.kt)("li",{parentName:"ol"},"Support ",(0,l.kt)("a",{parentName:"li",href:"https://get.vial.today/"},"Vial"),", edit keymap and configuring keyboard in real time."),(0,l.kt)("li",{parentName:"ol"},"Uses the ",(0,l.kt)("a",{parentName:"li",href:"https://www.raspberrypi.com/products/rp2040/"},"RP2040")," ARM Cortex-M0+ MCU, with 16MB (128Mb) external flash."),(0,l.kt)("li",{parentName:"ol"},"One user configurable monochrome LED."),(0,l.kt)("li",{parentName:"ol"},"Either 3.5mm TRRS/TRS or USB Type-C can be selected for two halves communication cable connector."),(0,l.kt)("li",{parentName:"ol"},"SWD and USB D+/- pads for debugging (left half only)."),(0,l.kt)("li",{parentName:"ol"},"JLCPCB's PCBA service available, no need to solder parts yourself.")),(0,l.kt)("h2",{id:"parts-list"},"Parts List"),(0,l.kt)("table",null,(0,l.kt)("thead",null,(0,l.kt)("tr",null,(0,l.kt)("th",{colspan:"2"},"Item"),(0,l.kt)("th",null,"Qty"),(0,l.kt)("th",null,"Description"),(0,l.kt)("th",null,"Link"))),(0,l.kt)("tbody",null,(0,l.kt)("tr",null,(0,l.kt)("td",{rowspan:"3"},"Left half"),(0,l.kt)("td",null,"Main PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null," "),(0,l.kt)("td",{rowspan:"10"},(0,l.kt)("a",{href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},"GH Release Page")," ")),(0,l.kt)("tr",null,(0,l.kt)("td",null," Top case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"Choose one of the three holes type")),(0,l.kt)("tr",null,(0,l.kt)("td",null," Bottom case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null," ")),(0,l.kt)("tr",null,(0,l.kt)("td",{rowspan:"3"},"Right half"),(0,l.kt)("td",null,"Main PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",null,"Top case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"Choose one of the three holes type")),(0,l.kt)("tr",null,(0,l.kt)("td",null,"Bottom case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Foot (1)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Main plate (1)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null,"FR4")),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Thumb cluster plate"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"FR4")),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Thumb cluster PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Trackball board"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://github.com/siderakb/pmw3360-pcb"},"PMW3360 PCB")),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.1.0"},"GH Release Page"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"40mm Trackball ball"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/i/1005001632971456.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Ball transfer units (BTUs, Ball rollers)"),(0,l.kt)("td",null,"3"),(0,l.kt)("td",null,"MISUMI BCHJJ7 or CheNa BR869-7 or VCN321-7"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://us.misumi-ec.com/vona2/detail/110300427030/?HissuCode=BCHJJ7"},"Ref1"),", ",(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005003081021713.html"},"Ref2"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"3.5mm TRS/TRRS or USB Type-C cable"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"For connect two halves"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://a.co/d/9SjkIcC"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"FPC/FFC Cables (2)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null,"8 Pin, 0.5mm Pitch, Same side contacts"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.ebay.com/itm/155455713493?mkcid=16&mkevt=1&mkrid=711-127632-2357-0&ssspo=8fby7xizq9e&sssrc=2047675&ssuid=&widget_ver=artemis&media=COPY"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 threaded inserts"),(0,l.kt)("td",null,"21"),(0,l.kt)("td",null,"Outer Diameter: 3.5mm, Length: 3mm"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/4000585933306.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 \xd7 5mm screws"),(0,l.kt)("td",null,"21"),(0,l.kt)("td",null,"For PCB, case and plate"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005004543081525.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 \xd7 8mm screws"),(0,l.kt)("td",null,"4"),(0,l.kt)("td",null,"For feet"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005004543081525.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 hex nuts"),(0,l.kt)("td",null,"4"),(0,l.kt)("td",null,"For feet"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/4000226223259.html"},"Ref"))))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"This part is reversible/symmetrical and can be used on both the left and right halves."),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", use JST GH1.25 8P cable instead of FPC/FFC cable, please refer to the schematic for wiring sequence.")),(0,l.kt)("h3",{id:"pcb-and-electronic-parts"},"PCB and Electronic Parts"),(0,l.kt)("p",null,"Here are listed all the electronic components in more detail for PCBs. "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Left half main PCB"),(0,l.kt)("th",{parentName:"tr",align:null},"Right half main PCB"),(0,l.kt)("th",{parentName:"tr",align:null},"Thumb cluster"),(0,l.kt)("th",{parentName:"tr",align:null},"Trackball board"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/lFPIKst.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/lFPIKst.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/YIMYJX9.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/YIMYJX9.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/PUA9THP.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/PUA9THP.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/OyAF7rm.jpg"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/OyAF7rm.jpg",alt:null})))))),(0,l.kt)("h4",{id:"main-pcbs"},"Main PCBs"),(0,l.kt)("p",null,"Since the left and right PCB parts are identical, the following table only lists the quantities required for one half. Please multiply by 2 when manufacturing both halves."),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"If you use PCBA service, you don't have to prepare and solder most or even all of the following parts yourself.")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Qty"),(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Footprint"),(0,l.kt)("th",{parentName:"tr",align:null},"Designator"),(0,l.kt)("th",{parentName:"tr",align:null},"JLCPCB#"),(0,l.kt)("th",{parentName:"tr",align:null},"MFR. Part#"),(0,l.kt)("th",{parentName:"tr",align:"center"},"Basic Parts ",(0,l.kt)("em",{parentName:"th"},"(1)")))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3"),(0,l.kt)("td",{parentName:"tr",align:null},"5.1k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R1,R2,R4"),(0,l.kt)("td",{parentName:"tr",align:null},"C25905"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF5101TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3"),(0,l.kt)("td",{parentName:"tr",align:null},"1k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R3,R7,R9"),(0,l.kt)("td",{parentName:"tr",align:null},"C11702"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF1001TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"27"),(0,l.kt)("td",{parentName:"tr",align:null},"0603 (1608 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R5,R6"),(0,l.kt)("td",{parentName:"tr",align:null},"C25190"),(0,l.kt)("td",{parentName:"tr",align:null},"0603WAF270JT5E"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"10k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R8,R10"),(0,l.kt)("td",{parentName:"tr",align:null},"C25744"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF1002TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4"),(0,l.kt)("td",{parentName:"tr",align:null},"1uF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C1,C2,C8,C16"),(0,l.kt)("td",{parentName:"tr",align:null},"C52923"),(0,l.kt)("td",{parentName:"tr",align:null},"CL05A105KA5NQNC"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"10"),(0,l.kt)("td",{parentName:"tr",align:null},"100nF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C3,C6,C7,C9~C15"),(0,l.kt)("td",{parentName:"tr",align:null},"C307331"),(0,l.kt)("td",{parentName:"tr",align:null},"CL05B104KB54PNC"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"20pF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C4,C5"),(0,l.kt)("td",{parentName:"tr",align:null},"C1554"),(0,l.kt)("td",{parentName:"tr",align:null},"0402CG200J500NT"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"500mA, 6V"),(0,l.kt)("td",{parentName:"tr",align:null},"0805 (2012 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"F1"),(0,l.kt)("td",{parentName:"tr",align:null},"C269104"),(0,l.kt)("td",{parentName:"tr",align:null},"SMD0805B050TF"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"RT9013-33GB"),(0,l.kt)("td",{parentName:"tr",align:null},"SOT-23-5"),(0,l.kt)("td",{parentName:"tr",align:null},"U1"),(0,l.kt)("td",{parentName:"tr",align:null},"C47773"),(0,l.kt)("td",{parentName:"tr",align:null},"RT9013-33GB"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"SRV05-4"),(0,l.kt)("td",{parentName:"tr",align:null},"SOT-23-6"),(0,l.kt)("td",{parentName:"tr",align:null},"U2"),(0,l.kt)("td",{parentName:"tr",align:null},"C85364"),(0,l.kt)("td",{parentName:"tr",align:null},"SRV05-4-P-T7"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"W25Q128JVS"),(0,l.kt)("td",{parentName:"tr",align:null},"SOIC-8 5.23x5.23mm P1.27mm"),(0,l.kt)("td",{parentName:"tr",align:null},"U3"),(0,l.kt)("td",{parentName:"tr",align:null},"C97521"),(0,l.kt)("td",{parentName:"tr",align:null},"W25Q128JVSIQ"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"RP2040"),(0,l.kt)("td",{parentName:"tr",align:null},"QFN-56-1EP 7x7mm P0.4mm EP3.2x3.2mm"),(0,l.kt)("td",{parentName:"tr",align:null},"U4"),(0,l.kt)("td",{parentName:"tr",align:null},"C2040"),(0,l.kt)("td",{parentName:"tr",align:null},"RP2040"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"12MHz"),(0,l.kt)("td",{parentName:"tr",align:null},"3225 4Pin (3.2x2.5mm)"),(0,l.kt)("td",{parentName:"tr",align:null},"Y1"),(0,l.kt)("td",{parentName:"tr",align:null},"C9002"),(0,l.kt)("td",{parentName:"tr",align:null},"X322512MSB4SI"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"29"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148"),(0,l.kt)("td",{parentName:"tr",align:null},"SOD-123"),(0,l.kt)("td",{parentName:"tr",align:null},"D1~D29"),(0,l.kt)("td",{parentName:"tr",align:null},"C81598"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148W"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Red LED"),(0,l.kt)("td",{parentName:"tr",align:null},"0603 (1608 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"LD1"),(0,l.kt)("td",{parentName:"tr",align:null},"C2286"),(0,l.kt)("td",{parentName:"tr",align:null},"KT-0603R"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"RESET & BOOT"),(0,l.kt)("td",{parentName:"tr",align:null},"SW_SPST_TL3342"),(0,l.kt)("td",{parentName:"tr",align:null},"SW1,SW2"),(0,l.kt)("td",{parentName:"tr",align:null},"C318884"),(0,l.kt)("td",{parentName:"tr",align:null},"TS-1187A-B-A-B"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"29"),(0,l.kt)("td",{parentName:"tr",align:null},"Switch"),(0,l.kt)("td",{parentName:"tr",align:null},"Cherry MX style hot-swap socket"),(0,l.kt)("td",{parentName:"tr",align:null},"KEY1~KEY29"),(0,l.kt)("td",{parentName:"tr",align:null},"C2803348"),(0,l.kt)("td",{parentName:"tr",align:null},"CPG151101S11"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"USB Type-C 16P ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"HRO TYPE-C-31-M-12"),(0,l.kt)("td",{parentName:"tr",align:null},"J1,J2"),(0,l.kt)("td",{parentName:"tr",align:null},"C165948"),(0,l.kt)("td",{parentName:"tr",align:null},"TYPE-C-31-M-12"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"3.5mm TRRS 8P ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"PJ-393 8P TRRS"),(0,l.kt)("td",{parentName:"tr",align:null},"J3"),(0,l.kt)("td",{parentName:"tr",align:null},"C668609"),(0,l.kt)("td",{parentName:"tr",align:null},"PJ-393 8PJ"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Conn 01x08"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5mm Pitch 8P FPC/FFC Connector ",(0,l.kt)("em",{parentName:"td"},"(3)")),(0,l.kt)("td",{parentName:"tr",align:null},"J4"),(0,l.kt)("td",{parentName:"tr",align:null},"C2856797"),(0,l.kt)("td",{parentName:"tr",align:null},"FPC-05F-8PH20"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("em",{parentName:"li"},"Basic Part")," means no additional manual feeding charge for these parts when using JLCPCB's PCBA services. Parts that are not ",(0,l.kt)("em",{parentName:"li"},"Basic")," are ",(0,l.kt)("em",{parentName:"li"},"Extended"),"."),(0,l.kt)("li",{parentName:"ol"},"One of the 2 USBs is used for connecting to the computer, and the other one is used to connect the other half of the keyboard. To connect the two halves, you can choose either USB or TRRS/TRS connector:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"If you choose to use TRRS/TRS, then each half requires 1 USB and 1 TRRS/TRS."),(0,l.kt)("li",{parentName:"ul"},"If you choose to use USB, then each half requires 2 USB and no TRRS/TRS."),(0,l.kt)("li",{parentName:"ul"},"TRRS/TRS does not support hot plugging in practice."))),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," is JST GH1.25 8P connector (Mfr. Part No: ",(0,l.kt)("em",{parentName:"li"},"SM08B-GHS-TB(LF)(SN)"),"), please refer to the schematic for wiring sequence."),(0,l.kt)("li",{parentName:"ol"},"If you want to save some money, you can consider not using PCBA service soldering ",(0,l.kt)("inlineCode",{parentName:"li"},"U1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"F1")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"J1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," (all are ",(0,l.kt)("em",{parentName:"li"},"Extended")," parts), there parts are not very difficult to solder by soldering iron, and cheap to buy separately."),(0,l.kt)("li",{parentName:"ol"},"I have never used JLCPCB's PCBA service to solder ",(0,l.kt)("inlineCode",{parentName:"li"},"U1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"F1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"KEY1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"KEY29")," parts. Please check the PCBA files yourself, especially the CPL file, if you need to."),(0,l.kt)("li",{parentName:"ol"},"Please note that the above information is subject to change, so please refer to the current situation.")),(0,l.kt)("h4",{id:"thumb-cluster"},"Thumb Cluster"),(0,l.kt)("p",null,"I did not prepare the PCBA files (i.e. BOM and CPL) for thumb cluster, if you need, try ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/Bouni/kicad-jlcpcb-tools"},"Bouni/kicad-jlcpcb-tools"),"."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Qty"),(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Footprint"),(0,l.kt)("th",{parentName:"tr",align:null},"Designator"),(0,l.kt)("th",{parentName:"tr",align:null},"JLCPCB#"),(0,l.kt)("th",{parentName:"tr",align:null},"MFR. Part#"),(0,l.kt)("th",{parentName:"tr",align:"center"},"Basic Parts"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148"),(0,l.kt)("td",{parentName:"tr",align:null},"SOD-123"),(0,l.kt)("td",{parentName:"tr",align:null},"D1~D6"),(0,l.kt)("td",{parentName:"tr",align:null},"C81598"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148W"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6"),(0,l.kt)("td",{parentName:"tr",align:null},"Switch ",(0,l.kt)("em",{parentName:"td"},"(1)")),(0,l.kt)("td",{parentName:"tr",align:null},"Cherry MX style hot-swap socket"),(0,l.kt)("td",{parentName:"tr",align:null},"KEY1~KEY6"),(0,l.kt)("td",{parentName:"tr",align:null},"C2803348"),(0,l.kt)("td",{parentName:"tr",align:null},"CPG151101S11"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Conn 01x08"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5mm Pitch 8P FPC/FFC Connector ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"J1"),(0,l.kt)("td",{parentName:"tr",align:null},"C2856797"),(0,l.kt)("td",{parentName:"tr",align:null},"FPC-05F-8PH20"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Encoder ",(0,l.kt)("em",{parentName:"td"},"(1)")),(0,l.kt)("td",{parentName:"tr",align:null},"Alps EC11E-Switch Vertical"),(0,l.kt)("td",{parentName:"tr",align:null},"EC1"),(0,l.kt)("td",{parentName:"tr",align:null},"--"),(0,l.kt)("td",{parentName:"tr",align:null},"--"),(0,l.kt)("td",{parentName:"tr",align:"center"},"--")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"If you want to use encoder, only 5 switches can be insert, encoder ",(0,l.kt)("inlineCode",{parentName:"li"},"EC1")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"KEY3")," share the same position. The two larger mounting pins on the encoder must be cliped."),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J1")," is JST GH1.25 8P connector (Mfr. Part No: ",(0,l.kt)("em",{parentName:"li"},"SM08B-GHS-TB(LF)(SN)"),"), please refer to the schematic for wiring sequence.")),(0,l.kt)("h4",{id:"trackball-board"},"Trackball Board"),(0,l.kt)("p",null,"For ErgoSNM ",(0,l.kt)("inlineCode",{parentName:"p"},"v2.1"),", ref to ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.1.0"},"PMW3360 PCB ",(0,l.kt)("inlineCode",{parentName:"a"},"v3.1")),".",(0,l.kt)("br",{parentName:"p"}),"\n","For ErgoSNM ",(0,l.kt)("inlineCode",{parentName:"p"},"v2.0"),", ref to ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.0.0"},"PMW3360 PCB ",(0,l.kt)("inlineCode",{parentName:"a"},"v3.0")),"."),(0,l.kt)("h2",{id:"build-guide"},"Build Guide"),(0,l.kt)("p",null,"Steps summary:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#prepare-parts"},"Prepare parts")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#solder"},"Solder")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#flash-firmware"},"Flash firmware")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#test"},"Test")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#assemble"},"Assemble")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#edit-keymap"},"Edit keymap")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#complete"},"Complete"))),(0,l.kt)("p",null,"Video: ",(0,l.kt)("a",{parentName:"p",href:"https://youtu.be/1BXKdrCFn6c"},"ErgoSNM Rev2.1 Soldering and Assembly")),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"Before you start, make sure the parts are available, PMW3360 and BTUs are more difficult parts to buy."),(0,l.kt)("p",{parentName:"admonition"},"Some online electronic parts stores in my country will help find and purchase rare ICs (usually from Taobao), this is how i bought PMW3360.\nThere are 3 different BTU models listed in the part list, and they are exact same size."),(0,l.kt)("p",{parentName:"admonition"},"Approximate cost in USD:"),(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},"PCBA: $80"),(0,l.kt)("li",{parentName:"ul"},"3D printing case: $46"),(0,l.kt)("li",{parentName:"ul"},"other parts: $32"))),(0,l.kt)("h3",{id:"prepare-parts"},"Prepare Parts"),(0,l.kt)("p",null,"Please refer to ",(0,l.kt)("a",{parentName:"p",href:"#parts-list"},"Parts List")," and prepare all the required pares."),(0,l.kt)("p",null,"The cases and feet can be produced using 3D printing (I use SLA Resin for cases, MJF Nylon for feet). The plates provides Gerber files, which are produced as PCBs."),(0,l.kt)("h3",{id:"solder"},"Solder"),(0,l.kt)("p",null,"If you use PCBA service, most of the parts should not need to solder by yourself, but there are still some parts that need to solder manually."),(0,l.kt)("p",null,"If you are not very familiar with soldering, please read the ",(0,l.kt)("a",{parentName:"p",href:"/docs/general-guide/soldering"},"Soldering Guide")," first.\nThe parts that need attention are diodes and switch hot-swap sockets."),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"It is recommended to solder the switches or hot-swap sockets after ",(0,l.kt)("a",{parentName:"p",href:"#test"},"Test"),".")),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"After soldering is completed, remember to use a multimeter to test for any short circuits between the power supply (5V, 3.3V, and GND) and USB D+/-.")),(0,l.kt)("h3",{id:"flash-firmware"},"Flash Firmware"),(0,l.kt)("p",null,"There are two way to flash firmware:"),(0,l.kt)(v,{mdxType:"Tabs"},(0,l.kt)(P,{value:"uf2",label:"UF2 file",default:!0,mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",null,"Download Pre-build ",(0,l.kt)("code",null,".uf2")," firmware file from ",(0,l.kt)("a",{href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},"Releases")," page."),(0,l.kt)("li",null,(0,l.kt)("a",{href:"/docs/general-guide/dfu#raspberry-pi-rp2040"},"Enter DFU mode"),"."),(0,l.kt)("li",null,"Copy and paste ",(0,l.kt)("code",null,".uf2")," file to the ",(0,l.kt)("code",null,"RPI-RP2")," device.")),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"If you want to build/compile ",(0,l.kt)("inlineCode",{parentName:"p"},".uf2"),", follow the steps:"),(0,l.kt)("ol",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ol"},"Git clone ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/siderakb/vial-qmk"},"firmware repo"),"."),(0,l.kt)("li",{parentName:"ol"},"Open ",(0,l.kt)("a",{parentName:"li",href:"https://msys.qmk.fm/"},"QMK MSYS")," or your preferred terminal."),(0,l.kt)("li",{parentName:"ol"},"Navigate to the cloned repo directory and checkout to ",(0,l.kt)("inlineCode",{parentName:"li"},"siderakb/main")," branch."),(0,l.kt)("li",{parentName:"ol"},"Build via command ",(0,l.kt)("inlineCode",{parentName:"li"},"make siderakb/ergosnm/rev2:vial"),". You may need to additionally install ",(0,l.kt)("em",{parentName:"li"},"make"),".")))),(0,l.kt)(P,{value:"cli",label:"CLI",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",null,"Git clone ",(0,l.kt)("a",{href:"https://github.com/siderakb/vial-qmk"},"firmware repo")),(0,l.kt)("li",null,"Open QMK MSYS or your preferred terminal."),(0,l.kt)("li",null,"Navigate to the cloned repo directory and checkout to ",(0,l.kt)("code",null,"siderakb/main")," branch."),(0,l.kt)("li",null,"Flash via command, e.g. ",(0,l.kt)("code",null,"qmk flash -kb siderakb/ergosnm/rev2 -km vial")," or ",(0,l.kt)("code",null,"make siderakb/ergosnm/rev2:vial:flash"),"."),(0,l.kt)("li",null,(0,l.kt)("a",{href:"/docs/general-guide/dfu#raspberry-pi-rp2040"},"Enter DFU mode"),". If you have other keyboards, you can also enter DFU mode before executing the command (a keyboard in DFU mode will not be able to type).")))),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.")),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"For more infomation, please refer to ",(0,l.kt)("a",{parentName:"p",href:"https://docs.qmk.fm/#/newbs_flashing"},"QMK: Flashing Firmware")," and ",(0,l.kt)("a",{parentName:"p",href:"https://docs.qmk.fm/#/flashing?id=raspberry-pi-rp2040-uf2"},"QMK: Raspberry Pi RP2040 UF2"),".")),(0,l.kt)("h3",{id:"test"},"Test"),(0,l.kt)("p",null,"Onec the firmware is flashed, the keyboard is ready to work."),(0,l.kt)("p",null,"Before proceeding to the next setps, you can test whether the keyboard is working properly to detect PCBs defects early."),(0,l.kt)("p",null,"You can use a site like ",(0,l.kt)("a",{parentName:"p",href:"https://en.key-test.ru/"},"this")," or ",(0,l.kt)("a",{parentName:"p",href:"https://keytest.vn/"},"this")," to test the keybaord. Sine the switch may not be installed on keyboard at present, you can use tweezers to act as a switch."),(0,l.kt)("h3",{id:"assemble"},"Assemble"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Use soldering iron to installing threaded inserts in keyboard case. "),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"The wall of the hole at the thumb cluster is very thin, so please be careful."))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Connect the FPC/FFC cables between main board and thumb cluster/trackball board.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/kWDrTm2.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Screw main and thumb cluster plates to the case.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/54kXYYD.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Insert switches into the plate and PCB, you can insert the corner switches first to fix."),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Before inserting the switch into the hot-swap socket, check if the switch pins are bent. If you find any bent pins, please straighten them.")),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/5N0QGRi.jpg",alt:null}),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/Lklcmzc.jpg",alt:null}),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/BhxgrRT.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Screw bottom cover and foots.\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/zlm93b8.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Add your keycaps. Plugin the TRRS/TRS or USB cable to connect two halves."),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.")))),(0,l.kt)("h3",{id:"edit-keymap"},"Edit Keymap"),(0,l.kt)("p",null,"ErgoSNM support ",(0,l.kt)("a",{parentName:"p",href:"https://get.vial.today/"},"Vial"),", you can edit keymap in real time, please refer to ",(0,l.kt)("a",{parentName:"p",href:"https://get.vial.today/manual/"},"Vial: User manual"),"."),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://i.imgur.com/0yXPjm1.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/0yXPjm1.png",alt:null}))),(0,l.kt)("h3",{id:"complete"},"Complete"),(0,l.kt)("p",null,"Congratulations on getting a new keyboard\ud83c\udf89"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/ovP1uKJ.jpg",alt:null})))}I.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/56f8e4ec.f42ef793.js b/assets/js/56f8e4ec.f42ef793.js deleted file mode 100644 index 2582893..0000000 --- a/assets/js/56f8e4ec.f42ef793.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksiderakb_website=self.webpackChunksiderakb_website||[]).push([[890],{3905:(t,e,a)=>{a.d(e,{Zo:()=>u,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),m=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=m(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,c=s["".concat(p,".").concat(k)]||s[k]||d[k]||l;return a?n.createElement(c,i(i({ref:e},u),{},{components:a})):n.createElement(c,i({ref:e},u))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[s]="string"==typeof t?t:r,i[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>B,contentTitle:()=>T,default:()=>I,frontMatter:()=>S,metadata:()=>R,toc:()=>E});var n=a(7462),r=a(7294),l=a(3905),i=a(6010),o=a(2466),p=a(6550),m=a(1980),u=a(7392),s=a(12);function d(t){return function(t){return r.Children.map(t,(t=>{if(!t||(0,r.isValidElement)(t)&&function(t){const{props:e}=t;return!!e&&"object"==typeof e&&"value"in e}(t))return t;throw new Error(`Docusaurus error: Bad child <${"string"==typeof t.type?t.type:t.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(t).map((t=>{let{props:{value:e,label:a,attributes:n,default:r}}=t;return{value:e,label:a,attributes:n,default:r}}))}function k(t){const{values:e,children:a}=t;return(0,r.useMemo)((()=>{const t=e??d(a);return function(t){const e=(0,u.l)(t,((t,e)=>t.value===e.value));if(e.length>0)throw new Error(`Docusaurus error: Duplicate values "${e.map((t=>t.value)).join(", ")}" found in . Every value needs to be unique.`)}(t),t}),[e,a])}function c(t){let{value:e,tabValues:a}=t;return a.some((t=>t.value===e))}function h(t){let{queryString:e=!1,groupId:a}=t;const n=(0,p.k6)(),l=function(t){let{queryString:e=!1,groupId:a}=t;if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:e,groupId:a});return[(0,m._X)(l),(0,r.useCallback)((t=>{if(!l)return;const e=new URLSearchParams(n.location.search);e.set(l,t),n.replace({...n.location,search:e.toString()})}),[l,n])]}function g(t){const{defaultValue:e,queryString:a=!1,groupId:n}=t,l=k(t),[i,o]=(0,r.useState)((()=>function(t){let{defaultValue:e,tabValues:a}=t;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!c({value:e,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${a.map((t=>t.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=a.find((t=>t.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:e,tabValues:l}))),[p,m]=h({queryString:a,groupId:n}),[u,d]=function(t){let{groupId:e}=t;const a=function(t){return t?`docusaurus.tab.${t}`:null}(e),[n,l]=(0,s.Nk)(a);return[n,(0,r.useCallback)((t=>{a&&l.set(t)}),[a,l])]}({groupId:n}),g=(()=>{const t=p??u;return c({value:t,tabValues:l})?t:null})();(0,r.useLayoutEffect)((()=>{g&&o(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((t=>{if(!c({value:t,tabValues:l}))throw new Error(`Can't select invalid tab value=${t}`);o(t),m(t),d(t)}),[m,d,l]),tabValues:l}}var N=a(2389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function b(t){let{className:e,block:a,selectedValue:l,selectValue:p,tabValues:m}=t;const u=[],{blockElementScrollPositionUntilNextRender:s}=(0,o.o5)(),d=t=>{const e=t.currentTarget,a=u.indexOf(e),n=m[a].value;n!==l&&(s(e),p(n))},k=t=>{let e=null;switch(t.key){case"Enter":d(t);break;case"ArrowRight":{const a=u.indexOf(t.currentTarget)+1;e=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(t.currentTarget)-1;e=u[a]??u[u.length-1];break}}e?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},e)},m.map((t=>{let{value:e,label:a,attributes:o}=t;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===e?0:-1,"aria-selected":l===e,key:e,ref:t=>u.push(t),onKeyDown:k,onClick:d},o,{className:(0,i.Z)("tabs__item",f.tabItem,o?.className,{"tabs__item--active":l===e})}),a??e)})))}function y(t){let{lazy:e,children:a,selectedValue:n}=t;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(e){const t=l.find((t=>t.props.value===n));return t?(0,r.cloneElement)(t,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},l.map(((t,e)=>(0,r.cloneElement)(t,{key:e,hidden:t.props.value!==n}))))}function C(t){const e=g(t);return r.createElement("div",{className:(0,i.Z)("tabs-container",f.tabList)},r.createElement(b,(0,n.Z)({},t,e)),r.createElement(y,(0,n.Z)({},t,e)))}function v(t){const e=(0,N.Z)();return r.createElement(C,(0,n.Z)({key:String(e)},t))}const w={tabItem:"tabItem_Ymn6"};function P(t){let{children:e,hidden:a,className:n}=t;return r.createElement("div",{role:"tabpanel",className:(0,i.Z)(w.tabItem,n),hidden:a},e)}const S={sidebar_position:1},T="Rev 2.x",R={unversionedId:"ergosnm/rev2",id:"ergosnm/rev2",title:"Rev 2.x",description:"This document for the Rev 2.x of the ErgoSNM keyboard, the latest is Rev 2.1. Source files: GitHub.",source:"@site/docs/ergosnm/rev2.md",sourceDirName:"ergosnm",slug:"/ergosnm/rev2",permalink:"/docs/ergosnm/rev2",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Intro",permalink:"/docs/ergosnm/intro"},next:{title:"Rev 1.x",permalink:"/docs/ergosnm/rev1"}},B={},E=[{value:"Features",id:"features",level:2},{value:"Parts List",id:"parts-list",level:2},{value:"PCB and Electronic Parts",id:"pcb-and-electronic-parts",level:3},{value:"Main PCBs",id:"main-pcbs",level:4},{value:"Thumb Cluster",id:"thumb-cluster",level:4},{value:"Trackball Board",id:"trackball-board",level:4},{value:"Build Guide",id:"build-guide",level:2},{value:"Prepare Parts",id:"prepare-parts",level:3},{value:"Solder",id:"solder",level:3},{value:"Flash Firmware",id:"flash-firmware",level:3},{value:"Test",id:"test",level:3},{value:"Assemble",id:"assemble",level:3},{value:"Edit Keymap",id:"edit-keymap",level:3},{value:"Complete",id:"complete",level:3}],F={toc:E},M="wrapper";function I(t){let{components:e,...a}=t;return(0,l.kt)(M,(0,n.Z)({},F,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"rev-2x"},"Rev 2.x"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/tddlJ7A.jpg",alt:null})),(0,l.kt)("p",null,"This document for the ",(0,l.kt)("inlineCode",{parentName:"p"},"Rev 2.x")," of the ErgoSNM keyboard, the latest is ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},(0,l.kt)("inlineCode",{parentName:"a"},"Rev 2.1")),". Source files: ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/ergo-snm-keyboard"},"GitHub"),"."),(0,l.kt)("p",null,"My blog post: ",(0,l.kt)("a",{parentName:"p",href:"https://ziteh.github.io/posts/ergosnm-v2-1-intro/"},"ErgoSNM\u2014\u2014\u6709\u8ecc\u8de1\u7403\u7684\u5206\u96e2\u5f0f\u4eba\u9ad4\u5de5\u5b78QMK\u9375\u76e4 (v2.1)")),(0,l.kt)("h2",{id:"features"},"Features"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"64 keys in total, left half (with thumb cluster) 29+6 keys, right half (with trackball) 29 keys."),(0,l.kt)("li",{parentName:"ol"},"Trackball for mouse cursor and scroll, powered by ",(0,l.kt)("a",{parentName:"li",href:"https://www.pixart.com/products-detail/10/PMW3360DM-T2QU"},"PMW3360")," optical mouse sensor."),(0,l.kt)("li",{parentName:"ol"},"USB Type-C receptacle connector, with ESD protection adn resettable fuse."),(0,l.kt)("li",{parentName:"ol"},"Support Cherry MX style key switches and hot-swap sockets."),(0,l.kt)("li",{parentName:"ol"},"Column-staggered layout."),(0,l.kt)("li",{parentName:"ol"},"Top mount."),(0,l.kt)("li",{parentName:"ol"},"Support ",(0,l.kt)("a",{parentName:"li",href:"https://get.vial.today/"},"Vial"),", edit keymap and configuring keyboard in real time."),(0,l.kt)("li",{parentName:"ol"},"Uses the ",(0,l.kt)("a",{parentName:"li",href:"https://www.raspberrypi.com/products/rp2040/"},"RP2040")," ARM Cortex-M0+ MCU, with 16MB (128Mb) external flash."),(0,l.kt)("li",{parentName:"ol"},"One user configurable monochrome LED."),(0,l.kt)("li",{parentName:"ol"},"Either 3.5mm TRRS/TRS or USB Type-C can be selected for two halves communication cable connector."),(0,l.kt)("li",{parentName:"ol"},"SWD and USB D+/- pads for debugging (left half only)."),(0,l.kt)("li",{parentName:"ol"},"JLCPCB's PCBA service available, no need to solder parts yourself.")),(0,l.kt)("h2",{id:"parts-list"},"Parts List"),(0,l.kt)("table",null,(0,l.kt)("thead",null,(0,l.kt)("tr",null,(0,l.kt)("th",{colspan:"2"},"Item"),(0,l.kt)("th",null,"Qty"),(0,l.kt)("th",null,"Description"),(0,l.kt)("th",null,"Link"))),(0,l.kt)("tbody",null,(0,l.kt)("tr",null,(0,l.kt)("td",{rowspan:"3"},"Left half"),(0,l.kt)("td",null,"Main PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null," "),(0,l.kt)("td",{rowspan:"10"},(0,l.kt)("a",{href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},"GH Release Page")," ")),(0,l.kt)("tr",null,(0,l.kt)("td",null," Top case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"Choose one of the three holes type")),(0,l.kt)("tr",null,(0,l.kt)("td",null," Bottom case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null," ")),(0,l.kt)("tr",null,(0,l.kt)("td",{rowspan:"3"},"Right half"),(0,l.kt)("td",null,"Main PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",null,"Top case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"Choose one of the three holes type")),(0,l.kt)("tr",null,(0,l.kt)("td",null,"Bottom case"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Foot (1)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Main plate (1)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null,"FR4")),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Thumb cluster plate"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"FR4")),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Thumb cluster PCB"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null)),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Trackball board"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://github.com/siderakb/pmw3360-pcb"},"PMW3360 PCB")),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.1.0"},"GH Release Page"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"40mm Trackball ball"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/i/1005001632971456.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"Ball transfer units (Ball rollers)"),(0,l.kt)("td",null,"3"),(0,l.kt)("td",null,"MISUMI BCHJJ7 or CheNa BR869-7 or VCN321-7"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://us.misumi-ec.com/vona2/detail/110300427030/?HissuCode=BCHJJ7"},"Ref1"),", ",(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005003081021713.html"},"Ref2"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"3.5mm TRS/TRRS or USB Type-C cable"),(0,l.kt)("td",null,"1"),(0,l.kt)("td",null,"For connect two halves"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://a.co/d/9SjkIcC"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"FPC/FFC Cables (2)"),(0,l.kt)("td",null,"2"),(0,l.kt)("td",null,"8 Pin, 0.5mm Pitch, Same side contacts"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.ebay.com/itm/155455713493?mkcid=16&mkevt=1&mkrid=711-127632-2357-0&ssspo=8fby7xizq9e&sssrc=2047675&ssuid=&widget_ver=artemis&media=COPY"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 threaded inserts"),(0,l.kt)("td",null,"21"),(0,l.kt)("td",null,"Outer Diameter: 3.5mm, Length: 3mm"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/4000585933306.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 \xd7 5mm screws"),(0,l.kt)("td",null,"21"),(0,l.kt)("td",null,"For PCB, case and plate"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005004543081525.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 \xd7 8mm screws"),(0,l.kt)("td",null,"4"),(0,l.kt)("td",null,"For feet"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/1005004543081525.html"},"Ref"))),(0,l.kt)("tr",null,(0,l.kt)("td",{colspan:"2"},"M2 hex nuts"),(0,l.kt)("td",null,"4"),(0,l.kt)("td",null,"For feet"),(0,l.kt)("td",null,(0,l.kt)("a",{href:"https://www.aliexpress.com/item/4000226223259.html"},"Ref"))))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"This part is reversible/symmetrical and can be used on both the left and right halves."),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", use JST GH1.25 8P cable instead of FPC/FFC cable, please refer to the schematic for wiring sequence.")),(0,l.kt)("h3",{id:"pcb-and-electronic-parts"},"PCB and Electronic Parts"),(0,l.kt)("p",null,"Here are listed all the electronic components in more detail for PCBs. "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Left half main PCB"),(0,l.kt)("th",{parentName:"tr",align:null},"Right half main PCB"),(0,l.kt)("th",{parentName:"tr",align:null},"Thumb cluster"),(0,l.kt)("th",{parentName:"tr",align:null},"Trackball board"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/lFPIKst.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/lFPIKst.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/YIMYJX9.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/YIMYJX9.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/PUA9THP.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/PUA9THP.png",alt:null}))),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://i.imgur.com/OyAF7rm.jpg"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/OyAF7rm.jpg",alt:null})))))),(0,l.kt)("h4",{id:"main-pcbs"},"Main PCBs"),(0,l.kt)("p",null,"Since the left and right PCB parts are identical, the following table only lists the quantities required for one half. Please multiply by 2 when manufacturing both halves."),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"If you use PCBA service, you don't have to prepare and solder most or even all of the following parts yourself.")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Qty"),(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Footprint"),(0,l.kt)("th",{parentName:"tr",align:null},"Designator"),(0,l.kt)("th",{parentName:"tr",align:null},"JLCPCB#"),(0,l.kt)("th",{parentName:"tr",align:null},"MFR. Part#"),(0,l.kt)("th",{parentName:"tr",align:"center"},"Basic Parts ",(0,l.kt)("em",{parentName:"th"},"(1)")))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3"),(0,l.kt)("td",{parentName:"tr",align:null},"5.1k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R1,R2,R4"),(0,l.kt)("td",{parentName:"tr",align:null},"C25905"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF5101TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"3"),(0,l.kt)("td",{parentName:"tr",align:null},"1k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R3,R7,R9"),(0,l.kt)("td",{parentName:"tr",align:null},"C11702"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF1001TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"27"),(0,l.kt)("td",{parentName:"tr",align:null},"0603 (1608 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R5,R6"),(0,l.kt)("td",{parentName:"tr",align:null},"C25190"),(0,l.kt)("td",{parentName:"tr",align:null},"0603WAF270JT5E"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"10k"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"R8,R10"),(0,l.kt)("td",{parentName:"tr",align:null},"C25744"),(0,l.kt)("td",{parentName:"tr",align:null},"0402WGF1002TCE"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"4"),(0,l.kt)("td",{parentName:"tr",align:null},"1uF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C1,C2,C8,C16"),(0,l.kt)("td",{parentName:"tr",align:null},"C52923"),(0,l.kt)("td",{parentName:"tr",align:null},"CL05A105KA5NQNC"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"10"),(0,l.kt)("td",{parentName:"tr",align:null},"100nF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C3,C6,C7,C9~C15"),(0,l.kt)("td",{parentName:"tr",align:null},"C307331"),(0,l.kt)("td",{parentName:"tr",align:null},"CL05B104KB54PNC"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"20pF"),(0,l.kt)("td",{parentName:"tr",align:null},"0402 (1005 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"C4,C5"),(0,l.kt)("td",{parentName:"tr",align:null},"C1554"),(0,l.kt)("td",{parentName:"tr",align:null},"0402CG200J500NT"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"500mA, 6V"),(0,l.kt)("td",{parentName:"tr",align:null},"0805 (2012 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"F1"),(0,l.kt)("td",{parentName:"tr",align:null},"C269104"),(0,l.kt)("td",{parentName:"tr",align:null},"SMD0805B050TF"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"RT9013-33GB"),(0,l.kt)("td",{parentName:"tr",align:null},"SOT-23-5"),(0,l.kt)("td",{parentName:"tr",align:null},"U1"),(0,l.kt)("td",{parentName:"tr",align:null},"C47773"),(0,l.kt)("td",{parentName:"tr",align:null},"RT9013-33GB"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"SRV05-4"),(0,l.kt)("td",{parentName:"tr",align:null},"SOT-23-6"),(0,l.kt)("td",{parentName:"tr",align:null},"U2"),(0,l.kt)("td",{parentName:"tr",align:null},"C85364"),(0,l.kt)("td",{parentName:"tr",align:null},"SRV05-4-P-T7"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"W25Q128JVS"),(0,l.kt)("td",{parentName:"tr",align:null},"SOIC-8 5.23x5.23mm P1.27mm"),(0,l.kt)("td",{parentName:"tr",align:null},"U3"),(0,l.kt)("td",{parentName:"tr",align:null},"C97521"),(0,l.kt)("td",{parentName:"tr",align:null},"W25Q128JVSIQ"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"RP2040"),(0,l.kt)("td",{parentName:"tr",align:null},"QFN-56-1EP 7x7mm P0.4mm EP3.2x3.2mm"),(0,l.kt)("td",{parentName:"tr",align:null},"U4"),(0,l.kt)("td",{parentName:"tr",align:null},"C2040"),(0,l.kt)("td",{parentName:"tr",align:null},"RP2040"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"12MHz"),(0,l.kt)("td",{parentName:"tr",align:null},"3225 4Pin (3.2x2.5mm)"),(0,l.kt)("td",{parentName:"tr",align:null},"Y1"),(0,l.kt)("td",{parentName:"tr",align:null},"C9002"),(0,l.kt)("td",{parentName:"tr",align:null},"X322512MSB4SI"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"29"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148"),(0,l.kt)("td",{parentName:"tr",align:null},"SOD-123"),(0,l.kt)("td",{parentName:"tr",align:null},"D1~D29"),(0,l.kt)("td",{parentName:"tr",align:null},"C81598"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148W"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Red LED"),(0,l.kt)("td",{parentName:"tr",align:null},"0603 (1608 Metric)"),(0,l.kt)("td",{parentName:"tr",align:null},"LD1"),(0,l.kt)("td",{parentName:"tr",align:null},"C2286"),(0,l.kt)("td",{parentName:"tr",align:null},"KT-0603R"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"RESET & BOOT"),(0,l.kt)("td",{parentName:"tr",align:null},"SW_SPST_TL3342"),(0,l.kt)("td",{parentName:"tr",align:null},"SW1,SW2"),(0,l.kt)("td",{parentName:"tr",align:null},"C318884"),(0,l.kt)("td",{parentName:"tr",align:null},"TS-1187A-B-A-B"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"29"),(0,l.kt)("td",{parentName:"tr",align:null},"Switch"),(0,l.kt)("td",{parentName:"tr",align:null},"Cherry MX style hot-swap socket"),(0,l.kt)("td",{parentName:"tr",align:null},"KEY1~KEY29"),(0,l.kt)("td",{parentName:"tr",align:null},"C2803348"),(0,l.kt)("td",{parentName:"tr",align:null},"CPG151101S11"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"2"),(0,l.kt)("td",{parentName:"tr",align:null},"USB Type-C 16P ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"HRO TYPE-C-31-M-12"),(0,l.kt)("td",{parentName:"tr",align:null},"J1,J2"),(0,l.kt)("td",{parentName:"tr",align:null},"C165948"),(0,l.kt)("td",{parentName:"tr",align:null},"TYPE-C-31-M-12"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"3.5mm TRRS 8P ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"PJ-393 8P TRRS"),(0,l.kt)("td",{parentName:"tr",align:null},"J3"),(0,l.kt)("td",{parentName:"tr",align:null},"C668609"),(0,l.kt)("td",{parentName:"tr",align:null},"PJ-393 8PJ"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Conn 01x08"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5mm Pitch 8P FPC/FFC Connector ",(0,l.kt)("em",{parentName:"td"},"(3)")),(0,l.kt)("td",{parentName:"tr",align:null},"J4"),(0,l.kt)("td",{parentName:"tr",align:null},"C2856797"),(0,l.kt)("td",{parentName:"tr",align:null},"FPC-05F-8PH20"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("em",{parentName:"li"},"Basic Part")," means no additional manual feeding charge for these parts when using JLCPCB's PCBA services. Parts that are not ",(0,l.kt)("em",{parentName:"li"},"Basic")," are ",(0,l.kt)("em",{parentName:"li"},"Extended"),"."),(0,l.kt)("li",{parentName:"ol"},"One of the 2 USBs is used for connecting to the computer, and the other one is used to connect the other half of the keyboard. To connect the two halves, you can choose either USB or TRRS/TRS connector:",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"If you choose to use TRRS/TRS, then each half requires 1 USB and 1 TRRS/TRS."),(0,l.kt)("li",{parentName:"ul"},"If you choose to use USB, then each half requires 2 USB and no TRRS/TRS."),(0,l.kt)("li",{parentName:"ul"},"TRRS/TRS does not support hot plugging in practice."))),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," is JST GH1.25 8P connector (Mfr. Part No: ",(0,l.kt)("em",{parentName:"li"},"SM08B-GHS-TB(LF)(SN)"),"), please refer to the schematic for wiring sequence."),(0,l.kt)("li",{parentName:"ol"},"If you want to save some money, you can consider not using PCBA service soldering ",(0,l.kt)("inlineCode",{parentName:"li"},"U1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"F1")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"J1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," (all are ",(0,l.kt)("em",{parentName:"li"},"Extended")," parts), there parts are not very difficult to solder by soldering iron, and cheap to buy separately."),(0,l.kt)("li",{parentName:"ol"},"I have never used JLCPCB's PCBA service to solder ",(0,l.kt)("inlineCode",{parentName:"li"},"U1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"F1"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"J4")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"KEY1"),"~",(0,l.kt)("inlineCode",{parentName:"li"},"KEY29")," parts. Please check the PCBA files yourself, especially the CPL file, if you need to."),(0,l.kt)("li",{parentName:"ol"},"Please note that the above information is subject to change, so please refer to the current situation.")),(0,l.kt)("h4",{id:"thumb-cluster"},"Thumb Cluster"),(0,l.kt)("p",null,"I did not prepare the PCBA files (i.e. BOM and CPL) for thumb cluster, if you need, try ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/Bouni/kicad-jlcpcb-tools"},"Bouni/kicad-jlcpcb-tools"),"."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Qty"),(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Footprint"),(0,l.kt)("th",{parentName:"tr",align:null},"Designator"),(0,l.kt)("th",{parentName:"tr",align:null},"JLCPCB#"),(0,l.kt)("th",{parentName:"tr",align:null},"MFR. Part#"),(0,l.kt)("th",{parentName:"tr",align:"center"},"Basic Parts"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148"),(0,l.kt)("td",{parentName:"tr",align:null},"SOD-123"),(0,l.kt)("td",{parentName:"tr",align:null},"D1~D6"),(0,l.kt)("td",{parentName:"tr",align:null},"C81598"),(0,l.kt)("td",{parentName:"tr",align:null},"1N4148W"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u2714\ufe0f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"6"),(0,l.kt)("td",{parentName:"tr",align:null},"Switch ",(0,l.kt)("em",{parentName:"td"},"(1)")),(0,l.kt)("td",{parentName:"tr",align:null},"Cherry MX style hot-swap socket"),(0,l.kt)("td",{parentName:"tr",align:null},"KEY1~KEY6"),(0,l.kt)("td",{parentName:"tr",align:null},"C2803348"),(0,l.kt)("td",{parentName:"tr",align:null},"CPG151101S11"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Conn 01x08"),(0,l.kt)("td",{parentName:"tr",align:null},"0.5mm Pitch 8P FPC/FFC Connector ",(0,l.kt)("em",{parentName:"td"},"(2)")),(0,l.kt)("td",{parentName:"tr",align:null},"J1"),(0,l.kt)("td",{parentName:"tr",align:null},"C2856797"),(0,l.kt)("td",{parentName:"tr",align:null},"FPC-05F-8PH20"),(0,l.kt)("td",{parentName:"tr",align:"center"},"\u274c")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"1"),(0,l.kt)("td",{parentName:"tr",align:null},"Encoder ",(0,l.kt)("em",{parentName:"td"},"(1)")),(0,l.kt)("td",{parentName:"tr",align:null},"Alps EC11E-Switch Vertical"),(0,l.kt)("td",{parentName:"tr",align:null},"EC1"),(0,l.kt)("td",{parentName:"tr",align:null},"--"),(0,l.kt)("td",{parentName:"tr",align:null},"--"),(0,l.kt)("td",{parentName:"tr",align:"center"},"--")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"If you want to use encoder, only 5 switches can be insert, encoder ",(0,l.kt)("inlineCode",{parentName:"li"},"EC1")," and ",(0,l.kt)("inlineCode",{parentName:"li"},"KEY3")," share the same position. The two larger mounting pins on the encoder must be cliped."),(0,l.kt)("li",{parentName:"ol"},"For ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.0"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"J1")," is JST GH1.25 8P connector (Mfr. Part No: ",(0,l.kt)("em",{parentName:"li"},"SM08B-GHS-TB(LF)(SN)"),"), please refer to the schematic for wiring sequence.")),(0,l.kt)("h4",{id:"trackball-board"},"Trackball Board"),(0,l.kt)("p",null,"For ErgoSNM ",(0,l.kt)("inlineCode",{parentName:"p"},"v2.1"),", ref to ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.1.0"},"PMW3360 PCB ",(0,l.kt)("inlineCode",{parentName:"a"},"v3.1")),".",(0,l.kt)("br",{parentName:"p"}),"\n","For ErgoSNM ",(0,l.kt)("inlineCode",{parentName:"p"},"v2.0"),", ref to ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/siderakb/pmw3360-pcb/releases/tag/v3.0.0"},"PMW3360 PCB ",(0,l.kt)("inlineCode",{parentName:"a"},"v3.0")),"."),(0,l.kt)("h2",{id:"build-guide"},"Build Guide"),(0,l.kt)("p",null,"Steps summary:"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#prepare-parts"},"Prepare parts")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#solder"},"Solder")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#flash-firmware"},"Flash firmware")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#test"},"Test")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#assemble"},"Assemble")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#edit-keymap"},"Edit keymap")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"#complete"},"Complete"))),(0,l.kt)("p",null,"Video: ",(0,l.kt)("a",{parentName:"p",href:"https://youtu.be/1BXKdrCFn6c"},"ErgoSNM Rev2.1 Soldering and Assembly")),(0,l.kt)("h3",{id:"prepare-parts"},"Prepare Parts"),(0,l.kt)("p",null,"Please refer to ",(0,l.kt)("a",{parentName:"p",href:"#parts-list"},"Parts List")," and prepare all the required pares."),(0,l.kt)("p",null,"The cases and feet can be produced using 3D printing (I use SLA Resin for cases, MJF Nylon for feet). The plates provides Gerber files, which are produced as PCBs."),(0,l.kt)("h3",{id:"solder"},"Solder"),(0,l.kt)("p",null,"If you use PCBA service, most of the parts should not need to solder by yourself, but there are still some parts that need to solder manually."),(0,l.kt)("p",null,"If you are not very familiar with soldering, please read the ",(0,l.kt)("a",{parentName:"p",href:"/docs/general-guide/soldering"},"Soldering Guide")," first.\nThe parts that need attention are diodes and switch hot-swap sockets."),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"It is recommended to solder the switches or hot-swap sockets after ",(0,l.kt)("a",{parentName:"p",href:"#test"},"Test"),".")),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"After soldering is completed, remember to use a multimeter to test for any short circuits between the power supply (5V, 3.3V, and GND) and USB D+/-.")),(0,l.kt)("h3",{id:"flash-firmware"},"Flash Firmware"),(0,l.kt)("p",null,"There are two way to flash firmware:"),(0,l.kt)(v,{mdxType:"Tabs"},(0,l.kt)(P,{value:"uf2",label:"UF2 file",default:!0,mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",null,"Download Pre-build ",(0,l.kt)("code",null,".uf2")," firmware file from ",(0,l.kt)("a",{href:"https://github.com/siderakb/ergo-snm-keyboard/releases/tag/v2.1.0"},"Releases")," page."),(0,l.kt)("li",null,(0,l.kt)("a",{href:"/docs/general-guide/dfu#raspberry-pi-rp2040"},"Enter DFU mode"),"."),(0,l.kt)("li",null,"Copy and paste ",(0,l.kt)("code",null,".uf2")," file to the ",(0,l.kt)("code",null,"RPI-RP2")," device.")),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("p",{parentName:"admonition"},"If you want to build/compile ",(0,l.kt)("inlineCode",{parentName:"p"},".uf2"),", follow the steps:"),(0,l.kt)("ol",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ol"},"Git clone ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/siderakb/vial-qmk"},"firmware repo"),"."),(0,l.kt)("li",{parentName:"ol"},"Open ",(0,l.kt)("a",{parentName:"li",href:"https://msys.qmk.fm/"},"QMK MSYS")," or your preferred terminal."),(0,l.kt)("li",{parentName:"ol"},"Navigate to the cloned repo directory and checkout to ",(0,l.kt)("inlineCode",{parentName:"li"},"siderakb/main")," branch."),(0,l.kt)("li",{parentName:"ol"},"Build via command ",(0,l.kt)("inlineCode",{parentName:"li"},"make siderakb/ergosnm/rev2:vial"),". You may need to additionally install ",(0,l.kt)("em",{parentName:"li"},"make"),".")))),(0,l.kt)(P,{value:"cli",label:"CLI",mdxType:"TabItem"},(0,l.kt)("ol",null,(0,l.kt)("li",null,"Git clone ",(0,l.kt)("a",{href:"https://github.com/siderakb/vial-qmk"},"firmware repo")),(0,l.kt)("li",null,"Open QMK MSYS or your preferred terminal."),(0,l.kt)("li",null,"Navigate to the cloned repo directory and checkout to ",(0,l.kt)("code",null,"siderakb/main")," branch."),(0,l.kt)("li",null,"Flash via command, e.g. ",(0,l.kt)("code",null,"qmk flash -kb siderakb/ergosnm/rev2 -km vial")," or ",(0,l.kt)("code",null,"make siderakb/ergosnm/rev2:vial:flash"),"."),(0,l.kt)("li",null,(0,l.kt)("a",{href:"/docs/general-guide/dfu#raspberry-pi-rp2040"},"Enter DFU mode"),". If you have other keyboards, you can also enter DFU mode before executing the command (a keyboard in DFU mode will not be able to type).")))),(0,l.kt)("admonition",{type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.")),(0,l.kt)("admonition",{type:"info"},(0,l.kt)("p",{parentName:"admonition"},"For more infomation, please refer to ",(0,l.kt)("a",{parentName:"p",href:"https://docs.qmk.fm/#/newbs_flashing"},"QMK: Flashing Firmware")," and ",(0,l.kt)("a",{parentName:"p",href:"https://docs.qmk.fm/#/flashing?id=raspberry-pi-rp2040-uf2"},"QMK: Raspberry Pi RP2040 UF2"),".")),(0,l.kt)("h3",{id:"test"},"Test"),(0,l.kt)("p",null,"Onec the firmware is flashed, the keyboard is ready to work."),(0,l.kt)("p",null,"Before proceeding to the next setps, you can test whether the keyboard is working properly to detect PCBs defects early."),(0,l.kt)("p",null,"You can use a site like ",(0,l.kt)("a",{parentName:"p",href:"https://en.key-test.ru/"},"this")," or ",(0,l.kt)("a",{parentName:"p",href:"https://keytest.vn/"},"this")," to test the keybaord. Sine the switch may not be installed on keyboard at present, you can use tweezers to act as a switch."),(0,l.kt)("h3",{id:"assemble"},"Assemble"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Use soldering iron to installing threaded inserts in keyboard case. "),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"The wall of the hole at the thumb cluster is very thin, so please be careful."))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Connect the FPC/FFC cables between main board and thumb cluster/trackball board.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/kWDrTm2.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Screw main and thumb cluster plates to the case.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/54kXYYD.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Insert switches into the plate and PCB, you can insert the corner switches first to fix."),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Before inserting the switch into the hot-swap socket, check if the switch pins are bent. If you find any bent pins, please straighten them.")),(0,l.kt)("p",{parentName:"li"},(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/5N0QGRi.jpg",alt:null}),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/Lklcmzc.jpg",alt:null}),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/BhxgrRT.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Screw bottom cover and foots.\n",(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/zlm93b8.jpg",alt:null}))),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("p",{parentName:"li"},"Add your keycaps. Plugin the TRRS/TRS or USB cable to connect two halves."),(0,l.kt)("admonition",{parentName:"li",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.")))),(0,l.kt)("h3",{id:"edit-keymap"},"Edit Keymap"),(0,l.kt)("p",null,"ErgoSNM support ",(0,l.kt)("a",{parentName:"p",href:"https://get.vial.today/"},"Vial"),", you can edit keymap in real time, please refer to ",(0,l.kt)("a",{parentName:"p",href:"https://get.vial.today/manual/"},"Vial: User manual"),"."),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://i.imgur.com/0yXPjm1.png"},(0,l.kt)("img",{parentName:"a",src:"https://i.imgur.com/0yXPjm1.png",alt:null}))),(0,l.kt)("h3",{id:"complete"},"Complete"),(0,l.kt)("p",null,"Congratulations on getting a new keyboard\ud83c\udf89"),(0,l.kt)("p",null,(0,l.kt)("img",{parentName:"p",src:"https://i.imgur.com/ovP1uKJ.jpg",alt:null})))}I.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.4327bc31.js b/assets/js/runtime~main.17faf51d.js similarity index 98% rename from assets/js/runtime~main.4327bc31.js rename to assets/js/runtime~main.17faf51d.js index c1d3039..fa1b87c 100644 --- a/assets/js/runtime~main.4327bc31.js +++ b/assets/js/runtime~main.17faf51d.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,n={},f={};function i(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=n,i.c=f,e=[],i.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(i.O).every((e=>i.O[e](r[d])))?r.splice(d--,1):(f=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);i.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var f=2&a&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,i.d(o,n),o},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"assets/js/"+({23:"be361a3f",53:"935f2afb",80:"b3c3c200",118:"7e842b5a",158:"d77a23ec",195:"c4f5d8e4",221:"d83ff713",388:"43562802",505:"756882dd",514:"1be78505",565:"e623a0ef",640:"e3722651",659:"34a0a2a2",671:"0e384e19",890:"56f8e4ec",918:"17896441"}[e]||e)+"."+{23:"df9c9b13",53:"4e1e8f70",80:"1233b5eb",118:"bd74c02b",158:"f026d3df",195:"eb8c5a6e",221:"77424251",388:"4e6113bb",505:"5ab7b18f",514:"d8c9709c",565:"32eb50fb",640:"4dbd3d32",659:"96b078f1",671:"efebd0db",890:"f42ef793",918:"c5036172",972:"b171e89c"}[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="siderakb-website:",i.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var f,d;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{f.onerror=f.onload=null,clearTimeout(b);var o=a[e];if(delete a[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),d&&document.head.appendChild(f)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/",i.gca=function(e){return e={17896441:"918",43562802:"388",be361a3f:"23","935f2afb":"53",b3c3c200:"80","7e842b5a":"118",d77a23ec:"158",c4f5d8e4:"195",d83ff713:"221","756882dd":"505","1be78505":"514",e623a0ef:"565",e3722651:"640","34a0a2a2":"659","0e384e19":"671","56f8e4ec":"890"}[e]||e,i.p+i.u(e)},(()=>{var e={303:0,532:0};i.f.j=(t,r)=>{var a=i.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=i.p+i.u(t),f=new Error;i.l(n,(r=>{if(i.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",f.name="ChunkLoadError",f.type=o,f.request=n,a[1](f)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],f=r[1],d=r[2],c=0;if(n.some((t=>0!==e[t]))){for(a in f)i.o(f,a)&&(i.m[a]=f[a]);if(d)var u=d(i)}for(t&&t(r);c{"use strict";var e,t,r,a,o,n={},f={};function i(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=n,i.c=f,e=[],i.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(i.O).every((e=>i.O[e](r[d])))?r.splice(d--,1):(f=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);i.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var f=2&a&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,i.d(o,n),o},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"assets/js/"+({23:"be361a3f",53:"935f2afb",80:"b3c3c200",118:"7e842b5a",158:"d77a23ec",195:"c4f5d8e4",221:"d83ff713",388:"43562802",505:"756882dd",514:"1be78505",565:"e623a0ef",640:"e3722651",659:"34a0a2a2",671:"0e384e19",890:"56f8e4ec",918:"17896441"}[e]||e)+"."+{23:"df9c9b13",53:"4e1e8f70",80:"1233b5eb",118:"bd74c02b",158:"f026d3df",195:"eb8c5a6e",221:"77424251",388:"4e6113bb",505:"5ab7b18f",514:"d8c9709c",565:"32eb50fb",640:"4dbd3d32",659:"96b078f1",671:"efebd0db",890:"4a6fc959",918:"c5036172",972:"b171e89c"}[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="siderakb-website:",i.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var f,d;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{f.onerror=f.onload=null,clearTimeout(b);var o=a[e];if(delete a[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),d&&document.head.appendChild(f)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/",i.gca=function(e){return e={17896441:"918",43562802:"388",be361a3f:"23","935f2afb":"53",b3c3c200:"80","7e842b5a":"118",d77a23ec:"158",c4f5d8e4:"195",d83ff713:"221","756882dd":"505","1be78505":"514",e623a0ef:"565",e3722651:"640","34a0a2a2":"659","0e384e19":"671","56f8e4ec":"890"}[e]||e,i.p+i.u(e)},(()=>{var e={303:0,532:0};i.f.j=(t,r)=>{var a=i.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=i.p+i.u(t),f=new Error;i.l(n,(r=>{if(i.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",f.name="ChunkLoadError",f.type=o,f.request=n,a[1](f)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],f=r[1],d=r[2],c=0;if(n.some((t=>0!==e[t]))){for(a in f)i.o(f,a)&&(i.m[a]=f[a]);if(d)var u=d(i)}for(t&&t(r);c ErgoSNM | SideraKB - + - + \ No newline at end of file diff --git a/docs/ergosnm/intro/index.html b/docs/ergosnm/intro/index.html index 696412a..dbdf8ff 100644 --- a/docs/ergosnm/intro/index.html +++ b/docs/ergosnm/intro/index.html @@ -4,13 +4,13 @@ Intro | SideraKB - + - + \ No newline at end of file diff --git a/docs/ergosnm/rev1/index.html b/docs/ergosnm/rev1/index.html index 60c3c33..712872a 100644 --- a/docs/ergosnm/rev1/index.html +++ b/docs/ergosnm/rev1/index.html @@ -4,7 +4,7 @@ Rev 1.x | SideraKB - + @@ -18,7 +18,7 @@ ▲ Plug in Pro Micro board.

For the right-hand half, your board need to be solder and insert upside down.


▲ Right Pro Micro upside down installation.

4. Flash & Test

Now that the circuit board part is completed, the next step is flashing firmware.

For Rev 1.x, I only prepare the QMK firmware, the repo is here.

The specific steps may differ depending on the board you are using, the following is an example of Pro Micro:

  1. Prepare .hex firmware files, left and right hands have their own files.
  2. Install, open and setup firmware flashing tool, e.g. QMK Toolbox or AVRDUDESS. My personal preference AVRDUDESS.
  3. Connect the one half of the keyboard to computer with USB.
  4. Press RESET button twice quickly, Pro Micro will enter bootloader mode for 8 seconds.
  5. Flash.
  6. Repeat the above steps for other half.

AVRDUDESS setup example
▲ AVRDUDESS setup example, "Port" and "Flash" path select according to the actual situation.

Bootloader mode only 8 secs, which makes flashing not so easy. You can open device manager (Windows), enter bootloader mode and check the COM port of Pro Micro, setup this COM port in AVRDUDESS (even if this port does not exist now), enter bootloader mode again and click "Program!" to flash.

After flashing, you can use a site like this or this to test the keyboard.

For more info about bootloader/DFU of Pro Micro, please refer to this.

5. Complete!

The keyboard is now complete and ready to use!

- + \ No newline at end of file diff --git a/docs/ergosnm/rev2/index.html b/docs/ergosnm/rev2/index.html index d857f6e..713a6e2 100644 --- a/docs/ergosnm/rev2/index.html +++ b/docs/ergosnm/rev2/index.html @@ -4,20 +4,21 @@ Rev 2.x | SideraKB - +
-

Rev 2.x

This document for the Rev 2.x of the ErgoSNM keyboard, the latest is Rev 2.1. Source files: GitHub.

My blog post: ErgoSNM——有軌跡球的分離式人體工學QMK鍵盤 (v2.1)

Features

  1. 64 keys in total, left half (with thumb cluster) 29+6 keys, right half (with trackball) 29 keys.
  2. Trackball for mouse cursor and scroll, powered by PMW3360 optical mouse sensor.
  3. USB Type-C receptacle connector, with ESD protection adn resettable fuse.
  4. Support Cherry MX style key switches and hot-swap sockets.
  5. Column-staggered layout.
  6. Top mount.
  7. Support Vial, edit keymap and configuring keyboard in real time.
  8. Uses the RP2040 ARM Cortex-M0+ MCU, with 16MB (128Mb) external flash.
  9. One user configurable monochrome LED.
  10. Either 3.5mm TRRS/TRS or USB Type-C can be selected for two halves communication cable connector.
  11. SWD and USB D+/- pads for debugging (left half only).
  12. JLCPCB's PCBA service available, no need to solder parts yourself.

Parts List

ItemQtyDescriptionLink
Left halfMain PCB1 GH Release Page
Top case1Choose one of the three holes type
Bottom case1
Right halfMain PCB1
Top case1Choose one of the three holes type
Bottom case1
Foot (1)2
Main plate (1)2FR4
Thumb cluster plate1FR4
Thumb cluster PCB1
Trackball board1PMW3360 PCBGH Release Page
40mm Trackball ball1Ref
Ball transfer units (Ball rollers)3MISUMI BCHJJ7 or CheNa BR869-7 or VCN321-7Ref1, Ref2
3.5mm TRS/TRRS or USB Type-C cable1For connect two halvesRef
FPC/FFC Cables (2)28 Pin, 0.5mm Pitch, Same side contactsRef
M2 threaded inserts21Outer Diameter: 3.5mm, Length: 3mmRef
M2 × 5mm screws21For PCB, case and plateRef
M2 × 8mm screws4For feetRef
M2 hex nuts4For feetRef
  1. This part is reversible/symmetrical and can be used on both the left and right halves.
  2. For v2.0, use JST GH1.25 8P cable instead of FPC/FFC cable, please refer to the schematic for wiring sequence.

PCB and Electronic Parts

Here are listed all the electronic components in more detail for PCBs.

Left half main PCBRight half main PCBThumb clusterTrackball board

Main PCBs

Since the left and right PCB parts are identical, the following table only lists the quantities required for one half. Please multiply by 2 when manufacturing both halves.

note

If you use PCBA service, you don't have to prepare and solder most or even all of the following parts yourself.

QtyValueFootprintDesignatorJLCPCB#MFR. Part#Basic Parts (1)
35.1k0402 (1005 Metric)R1,R2,R4C259050402WGF5101TCE✔️
31k0402 (1005 Metric)R3,R7,R9C117020402WGF1001TCE✔️
2270603 (1608 Metric)R5,R6C251900603WAF270JT5E✔️
210k0402 (1005 Metric)R8,R10C257440402WGF1002TCE✔️
41uF0402 (1005 Metric)C1,C2,C8,C16C52923CL05A105KA5NQNC✔️
10100nF0402 (1005 Metric)C3,C6,C7,C9~C15C307331CL05B104KB54PNC✔️
220pF0402 (1005 Metric)C4,C5C15540402CG200J500NT✔️
1500mA, 6V0805 (2012 Metric)F1C269104SMD0805B050TF
1RT9013-33GBSOT-23-5U1C47773RT9013-33GB
1SRV05-4SOT-23-6U2C85364SRV05-4-P-T7✔️
1W25Q128JVSSOIC-8 5.23x5.23mm P1.27mmU3C97521W25Q128JVSIQ✔️
1RP2040QFN-56-1EP 7x7mm P0.4mm EP3.2x3.2mmU4C2040RP2040
112MHz3225 4Pin (3.2x2.5mm)Y1C9002X322512MSB4SI✔️
291N4148SOD-123D1~D29C815981N4148W✔️
1Red LED0603 (1608 Metric)LD1C2286KT-0603R✔️
2RESET & BOOTSW_SPST_TL3342SW1,SW2C318884TS-1187A-B-A-B✔️
29SwitchCherry MX style hot-swap socketKEY1~KEY29C2803348CPG151101S11
2USB Type-C 16P (2)HRO TYPE-C-31-M-12J1,J2C165948TYPE-C-31-M-12
13.5mm TRRS 8P (2)PJ-393 8P TRRSJ3C668609PJ-393 8PJ
1Conn 01x080.5mm Pitch 8P FPC/FFC Connector (3)J4C2856797FPC-05F-8PH20
  1. Basic Part means no additional manual feeding charge for these parts when using JLCPCB's PCBA services. Parts that are not Basic are Extended.
  2. One of the 2 USBs is used for connecting to the computer, and the other one is used to connect the other half of the keyboard. To connect the two halves, you can choose either USB or TRRS/TRS connector:
    • If you choose to use TRRS/TRS, then each half requires 1 USB and 1 TRRS/TRS.
    • If you choose to use USB, then each half requires 2 USB and no TRRS/TRS.
    • TRRS/TRS does not support hot plugging in practice.
  3. For v2.0, J4 is JST GH1.25 8P connector (Mfr. Part No: SM08B-GHS-TB(LF)(SN)), please refer to the schematic for wiring sequence.
  4. If you want to save some money, you can consider not using PCBA service soldering U1, F1 and J1~J4 (all are Extended parts), there parts are not very difficult to solder by soldering iron, and cheap to buy separately.
  5. I have never used JLCPCB's PCBA service to solder U1, F1, J1~J4 and KEY1~KEY29 parts. Please check the PCBA files yourself, especially the CPL file, if you need to.
  6. Please note that the above information is subject to change, so please refer to the current situation.

Thumb Cluster

I did not prepare the PCBA files (i.e. BOM and CPL) for thumb cluster, if you need, try Bouni/kicad-jlcpcb-tools.

QtyValueFootprintDesignatorJLCPCB#MFR. Part#Basic Parts
61N4148SOD-123D1~D6C815981N4148W✔️
6Switch (1)Cherry MX style hot-swap socketKEY1~KEY6C2803348CPG151101S11
1Conn 01x080.5mm Pitch 8P FPC/FFC Connector (2)J1C2856797FPC-05F-8PH20
1Encoder (1)Alps EC11E-Switch VerticalEC1------
  1. If you want to use encoder, only 5 switches can be insert, encoder EC1 and KEY3 share the same position. The two larger mounting pins on the encoder must be cliped.
  2. For v2.0, J1 is JST GH1.25 8P connector (Mfr. Part No: SM08B-GHS-TB(LF)(SN)), please refer to the schematic for wiring sequence.

Trackball Board

For ErgoSNM v2.1, ref to PMW3360 PCB v3.1.
-For ErgoSNM v2.0, ref to PMW3360 PCB v3.0.

Build Guide

Steps summary:

  1. Prepare parts
  2. Solder
  3. Flash firmware
  4. Test
  5. Assemble
  6. Edit keymap
  7. Complete

Video: ErgoSNM Rev2.1 Soldering and Assembly

Prepare Parts

Please refer to Parts List and prepare all the required pares.

The cases and feet can be produced using 3D printing (I use SLA Resin for cases, MJF Nylon for feet). The plates provides Gerber files, which are produced as PCBs.

Solder

If you use PCBA service, most of the parts should not need to solder by yourself, but there are still some parts that need to solder manually.

If you are not very familiar with soldering, please read the Soldering Guide first. +

Rev 2.x

This document for the Rev 2.x of the ErgoSNM keyboard, the latest is Rev 2.1. Source files: GitHub.

My blog post: ErgoSNM——有軌跡球的分離式人體工學QMK鍵盤 (v2.1)

Features

  1. 64 keys in total, left half (with thumb cluster) 29+6 keys, right half (with trackball) 29 keys.
  2. Trackball for mouse cursor and scroll, powered by PMW3360 optical mouse sensor.
  3. USB Type-C receptacle connector, with ESD protection adn resettable fuse.
  4. Support Cherry MX style key switches and hot-swap sockets.
  5. Column-staggered layout.
  6. Top mount.
  7. Support Vial, edit keymap and configuring keyboard in real time.
  8. Uses the RP2040 ARM Cortex-M0+ MCU, with 16MB (128Mb) external flash.
  9. One user configurable monochrome LED.
  10. Either 3.5mm TRRS/TRS or USB Type-C can be selected for two halves communication cable connector.
  11. SWD and USB D+/- pads for debugging (left half only).
  12. JLCPCB's PCBA service available, no need to solder parts yourself.

Parts List

ItemQtyDescriptionLink
Left halfMain PCB1 GH Release Page
Top case1Choose one of the three holes type
Bottom case1
Right halfMain PCB1
Top case1Choose one of the three holes type
Bottom case1
Foot (1)2
Main plate (1)2FR4
Thumb cluster plate1FR4
Thumb cluster PCB1
Trackball board1PMW3360 PCBGH Release Page
40mm Trackball ball1Ref
Ball transfer units (BTUs, Ball rollers)3MISUMI BCHJJ7 or CheNa BR869-7 or VCN321-7Ref1, Ref2
3.5mm TRS/TRRS or USB Type-C cable1For connect two halvesRef
FPC/FFC Cables (2)28 Pin, 0.5mm Pitch, Same side contactsRef
M2 threaded inserts21Outer Diameter: 3.5mm, Length: 3mmRef
M2 × 5mm screws21For PCB, case and plateRef
M2 × 8mm screws4For feetRef
M2 hex nuts4For feetRef
  1. This part is reversible/symmetrical and can be used on both the left and right halves.
  2. For v2.0, use JST GH1.25 8P cable instead of FPC/FFC cable, please refer to the schematic for wiring sequence.

PCB and Electronic Parts

Here are listed all the electronic components in more detail for PCBs.

Left half main PCBRight half main PCBThumb clusterTrackball board

Main PCBs

Since the left and right PCB parts are identical, the following table only lists the quantities required for one half. Please multiply by 2 when manufacturing both halves.

note

If you use PCBA service, you don't have to prepare and solder most or even all of the following parts yourself.

QtyValueFootprintDesignatorJLCPCB#MFR. Part#Basic Parts (1)
35.1k0402 (1005 Metric)R1,R2,R4C259050402WGF5101TCE✔️
31k0402 (1005 Metric)R3,R7,R9C117020402WGF1001TCE✔️
2270603 (1608 Metric)R5,R6C251900603WAF270JT5E✔️
210k0402 (1005 Metric)R8,R10C257440402WGF1002TCE✔️
41uF0402 (1005 Metric)C1,C2,C8,C16C52923CL05A105KA5NQNC✔️
10100nF0402 (1005 Metric)C3,C6,C7,C9~C15C307331CL05B104KB54PNC✔️
220pF0402 (1005 Metric)C4,C5C15540402CG200J500NT✔️
1500mA, 6V0805 (2012 Metric)F1C269104SMD0805B050TF
1RT9013-33GBSOT-23-5U1C47773RT9013-33GB
1SRV05-4SOT-23-6U2C85364SRV05-4-P-T7✔️
1W25Q128JVSSOIC-8 5.23x5.23mm P1.27mmU3C97521W25Q128JVSIQ✔️
1RP2040QFN-56-1EP 7x7mm P0.4mm EP3.2x3.2mmU4C2040RP2040
112MHz3225 4Pin (3.2x2.5mm)Y1C9002X322512MSB4SI✔️
291N4148SOD-123D1~D29C815981N4148W✔️
1Red LED0603 (1608 Metric)LD1C2286KT-0603R✔️
2RESET & BOOTSW_SPST_TL3342SW1,SW2C318884TS-1187A-B-A-B✔️
29SwitchCherry MX style hot-swap socketKEY1~KEY29C2803348CPG151101S11
2USB Type-C 16P (2)HRO TYPE-C-31-M-12J1,J2C165948TYPE-C-31-M-12
13.5mm TRRS 8P (2)PJ-393 8P TRRSJ3C668609PJ-393 8PJ
1Conn 01x080.5mm Pitch 8P FPC/FFC Connector (3)J4C2856797FPC-05F-8PH20
  1. Basic Part means no additional manual feeding charge for these parts when using JLCPCB's PCBA services. Parts that are not Basic are Extended.
  2. One of the 2 USBs is used for connecting to the computer, and the other one is used to connect the other half of the keyboard. To connect the two halves, you can choose either USB or TRRS/TRS connector:
    • If you choose to use TRRS/TRS, then each half requires 1 USB and 1 TRRS/TRS.
    • If you choose to use USB, then each half requires 2 USB and no TRRS/TRS.
    • TRRS/TRS does not support hot plugging in practice.
  3. For v2.0, J4 is JST GH1.25 8P connector (Mfr. Part No: SM08B-GHS-TB(LF)(SN)), please refer to the schematic for wiring sequence.
  4. If you want to save some money, you can consider not using PCBA service soldering U1, F1 and J1~J4 (all are Extended parts), there parts are not very difficult to solder by soldering iron, and cheap to buy separately.
  5. I have never used JLCPCB's PCBA service to solder U1, F1, J1~J4 and KEY1~KEY29 parts. Please check the PCBA files yourself, especially the CPL file, if you need to.
  6. Please note that the above information is subject to change, so please refer to the current situation.

Thumb Cluster

I did not prepare the PCBA files (i.e. BOM and CPL) for thumb cluster, if you need, try Bouni/kicad-jlcpcb-tools.

QtyValueFootprintDesignatorJLCPCB#MFR. Part#Basic Parts
61N4148SOD-123D1~D6C815981N4148W✔️
6Switch (1)Cherry MX style hot-swap socketKEY1~KEY6C2803348CPG151101S11
1Conn 01x080.5mm Pitch 8P FPC/FFC Connector (2)J1C2856797FPC-05F-8PH20
1Encoder (1)Alps EC11E-Switch VerticalEC1------
  1. If you want to use encoder, only 5 switches can be insert, encoder EC1 and KEY3 share the same position. The two larger mounting pins on the encoder must be cliped.
  2. For v2.0, J1 is JST GH1.25 8P connector (Mfr. Part No: SM08B-GHS-TB(LF)(SN)), please refer to the schematic for wiring sequence.

Trackball Board

For ErgoSNM v2.1, ref to PMW3360 PCB v3.1.
+For ErgoSNM v2.0, ref to PMW3360 PCB v3.0.

Build Guide

Steps summary:

  1. Prepare parts
  2. Solder
  3. Flash firmware
  4. Test
  5. Assemble
  6. Edit keymap
  7. Complete

Video: ErgoSNM Rev2.1 Soldering and Assembly

info

Before you start, make sure the parts are available, PMW3360 and BTUs are more difficult parts to buy.

Some online electronic parts stores in my country will help find and purchase rare ICs (usually from Taobao), this is how i bought PMW3360. +There are 3 different BTU models listed in the part list, and they are exact same size.

Approximate cost in USD:

  • PCBA: $80
  • 3D printing case: $46
  • other parts: $32

Prepare Parts

Please refer to Parts List and prepare all the required pares.

The cases and feet can be produced using 3D printing (I use SLA Resin for cases, MJF Nylon for feet). The plates provides Gerber files, which are produced as PCBs.

Solder

If you use PCBA service, most of the parts should not need to solder by yourself, but there are still some parts that need to solder manually.

If you are not very familiar with soldering, please read the Soldering Guide first. The parts that need attention are diodes and switch hot-swap sockets.

tip

It is recommended to solder the switches or hot-swap sockets after Test.

caution

After soldering is completed, remember to use a multimeter to test for any short circuits between the power supply (5V, 3.3V, and GND) and USB D+/-.

Flash Firmware

There are two way to flash firmware:

  1. Download Pre-build .uf2 firmware file from Releases page.
  2. Enter DFU mode.
  3. Copy and paste .uf2 file to the RPI-RP2 device.
note

If you want to build/compile .uf2, follow the steps:

  1. Git clone firmware repo.
  2. Open QMK MSYS or your preferred terminal.
  3. Navigate to the cloned repo directory and checkout to siderakb/main branch.
  4. Build via command make siderakb/ergosnm/rev2:vial. You may need to additionally install make.
caution

Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.

info

For more infomation, please refer to QMK: Flashing Firmware and QMK: Raspberry Pi RP2040 UF2.

Test

Onec the firmware is flashed, the keyboard is ready to work.

Before proceeding to the next setps, you can test whether the keyboard is working properly to detect PCBs defects early.

You can use a site like this or this to test the keybaord. Sine the switch may not be installed on keyboard at present, you can use tweezers to act as a switch.

Assemble

  1. Use soldering iron to installing threaded inserts in keyboard case.

    caution

    The wall of the hole at the thumb cluster is very thin, so please be careful.

  2. Connect the FPC/FFC cables between main board and thumb cluster/trackball board.

  3. Screw main and thumb cluster plates to the case.

  4. Insert switches into the plate and PCB, you can insert the corner switches first to fix.

    caution

    Before inserting the switch into the hot-swap socket, check if the switch pins are bent. If you find any bent pins, please straighten them.



  5. Screw bottom cover and foots.

  6. Add your keycaps. Plugin the TRRS/TRS or USB cable to connect two halves.

    caution

    Please note that TRRS/TRS does not support hot plugging in practice, please plug and unplug TRRS/TRS cable after unplugging the USB cable between keyboard and computer.

Edit Keymap

ErgoSNM support Vial, you can edit keymap in real time, please refer to Vial: User manual.

Complete

Congratulations on getting a new keyboard🎉

- + \ No newline at end of file diff --git a/docs/general-guide/dfu/index.html b/docs/general-guide/dfu/index.html index d9a5879..b2efee4 100644 --- a/docs/general-guide/dfu/index.html +++ b/docs/general-guide/dfu/index.html @@ -4,13 +4,13 @@ DFU Mode | SideraKB - +

DFU Mode

Device Firmware Update mode aka Bootloader mode.

Raspberry Pi RP2040

You can enter DFU mode using any of the following methods:

  • Connect keyboard to computer and double-tap RESET button. This method requires QMK firmware to be flashed and Double-tap reset enabled.
  • Connect the keyboard to your computer, holding down the BOOT button, toggle the RESET button, and then release the BOOT button.
  • Disconnect the USB cable of the keyboard, holding down the BOOT button, and then release the BOOT button after reconnecting the keyboard to your computer.

If the DFU mode is entered successfully, the keyboard (or RP2040 MCU) will appear as a USB mass storage device under the name RPI-RP2.

- + \ No newline at end of file diff --git a/docs/general-guide/index.html b/docs/general-guide/index.html index fa1016e..7f8f54f 100644 --- a/docs/general-guide/index.html +++ b/docs/general-guide/index.html @@ -4,13 +4,13 @@ General Guide | SideraKB - + - + \ No newline at end of file diff --git a/docs/general-guide/soldering/index.html b/docs/general-guide/soldering/index.html index 45d2162..a163433 100644 --- a/docs/general-guide/soldering/index.html +++ b/docs/general-guide/soldering/index.html @@ -4,7 +4,7 @@ Soldering | SideraKB - + @@ -12,7 +12,7 @@

Soldering

Some notes on soldering.

caution

After soldering is completed, remember to use a multimeter to test for any short circuits between the power supply (5V, 3.3V, and GND) and USB D+/-.

Diodes

Diodes are unidirectional, and soldering them in the incorrect direction can cause the keyboard to malfunction. Please take note of which side is the anode (+) and which side is the cathode (-).

The cathode side of the diode is marked with lines, while the anode side does not have any markings. On the PCB, there is also a line indicating the cathode side. Please solder each diode accordingly, following its polarity mark on the PCB.

▲ Diode polarity marking.

Hot-swappable Sockets

Solder hot-swap sockets with incorrect placement will block the hole.

▲ Hot-swap sockets placement.

- + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 141a974..8f3459e 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -4,13 +4,13 @@ Introduction | SideraKB - +

Introduction

Welcome to the SideraKB docs!

Keyboards

  • ErgoSNM: A split ergonomic keyboard with trackball.
  • Calcite: 60/52 keys ortho Choc low profile switch keyboard.
  • Miniboard🧪: A super mini keyboard.
  • Keypad🧪: Some macropads.

Development Boards

NameI/O PinsMCUCPUFlashSRAM
RP Micro25RP2040133MHz Dual-core ARM Cortex-M0+8MB (External, 16MB Max)264KB
Next μ25ATmega32U416MHz 8-bit AVR32KB +1KB EEPROM2.5KB
MDBTMicro🧪25nRF52840 (MDBT50Q)64MHz ARM Cortex-M41MB256KB
Sphale🧪23STM32F30372MHz ARM Cortex-M4256KB40KB

All board sizes are 17.78×33.02 mm (0.7×1.3 inch), same as Pro Micro.

Others


🧪: Experimental project.

- + \ No newline at end of file diff --git a/docs/research/index.html b/docs/research/index.html index 6acb3ff..6460fac 100644 --- a/docs/research/index.html +++ b/docs/research/index.html @@ -4,13 +4,13 @@ Research | SideraKB - +

Research

These projects have helped or inspired me, thank you very much :)

Split/Ergonomic Keyboards

Normal Keyboards

Pointing Devices

Development Boards

  • nRFMicro: nRF52840, Pro Micro compatible.
  • mikoto: nRF52840, Pro Micro compatible.
  • Bonsai-C: STM32F303/STM32F411, Proton C rev2 compatible.
  • 0xB2: RP2040, Pro Micro compatible.

Other Hardwares

Firmwares

Tools

Others

- + \ No newline at end of file diff --git a/docs/rp-micro/index.html b/docs/rp-micro/index.html index 3af8653..3dbe0d1 100644 --- a/docs/rp-micro/index.html +++ b/docs/rp-micro/index.html @@ -4,13 +4,13 @@ RP Micro | SideraKB - +

RP Micro

Pro Micro/Elite-Pi compatible RP2040 board with USB-C, 8MB flash and up to 25 GPIOs.

GitHub repo

- + \ No newline at end of file diff --git a/index.html b/index.html index 8b15989..56cacd2 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,13 @@ Sidera Keyboard | SideraKB - +
Logo

Nunquam praescriptos transibunt sidera fines

Keyboards

We're dedicated to making better keyboards, even if they aren't designed for the majority.

Development Boards

Great tool for developing keyboards, cost-effective, readily available components and user convenience.

Open Source

Almost all repos are under the MIT license.

- + \ No newline at end of file