Mitt första helt egendesignade mekaniska tangentbord - Del 1
Jag för inte för länge sen en introduktion till KiCAD av en vän i det lokala Makerspacet. Jag har sneglat på design av egna PCB-er tidigare. Det har alltid varit för mycket att lära sig, men i och med den introduktionen fick jag knuffen jag behövde för att komma ihång med designen.
Det största problemet jag stötte på var vad jag skulle göra. Det verkade finnas oändliga möjligheter. Jag bestämde mig för att göra ett nytt mekaniskt tangentbord. Mina gamla tangentbord fungerade i och för sig bra, men det finns utvecklingspotential. Till exempel så behöver man fortfarande flytta händerna när man ska använda musen. Det här var något som störde mig extra mycket när jag började designa i KiCAD. För mig som vanligtvis programmerar så blir det väldigt irriterande att flytta händerna från tangentbordet till musen och sen tillbaka. Om jag nu skulle designa ett nytt tangentbord så kunde jag lika gärna göra plats för något som kunde kontrollera musen på tangentbordet.
Nuvarande uppsättning med separat tangentbord och mus. Aeregonomin är bättre än medel, men fortfarande inte perfekt.
Jag kom fram till följande krav och önskemål som jag ville ha på tangentbordet.
- Det skulle ha plats för utvecklings-varianter av mikrokontrollerna som jag använde. (Jag hade fortfarande inte lärt mig hur man kopplade dit en processor utan utvecklingsbrädan)
- Det skulle finnas möjlighet att välja mellan flera olika processorer.
- Jag ville ha plats för en mus-kontrol som jag skrev ovan.
- Det skule vara ortolinjärt som mitt tidigare tangentbord.
Processor
Det finns fler bra alternativ för vilken processor att sätta på ett sänt här tangenbord. Jag bestämde mig för att designen skulle stödtja flera olika. Det här skulle göra att jag kunde testa olika platformar för att se vilken som passade bäst. Det skulle också rädda mig om jag hade gjort något som inte fungerade på den ena eller andra platformen.
Jag valde att göra plats för både en Esp32-s3-devboard och en devboard från för en Raspberry Pi Pico. Tidigare har jag gjort en del projekt med Esp32 och det brukar fungera väldigt bra. Jag hade en Raspberry Pi Pico liggande hemma och efter en del efterforskningar så lärde jag mig att den kan vara mer användbar än Arduinos så kallade Pro Micro som historiskt ofta används för tangentbord. Raspberry Pi Pico har fler användbara pinnar än Arduinos dito, är snabbare och är biligare.
Alternativ till framtiden skulle vara att testa något ur Stm32-s sortiment. Men där kände jag att jag var ute på för djupt vatten för att sätta det på ett projekt som jag från början inte visste om det skulle fungera.
Den färdiga designen
Den färdiga designen av kretskortet
Jag vet inte riktigt hur mycket mycket detaljer som är vettiga att förklara om designen i KiCAD. Grundläggande för mekaniska tangentbord är att man har en matris med en mängd aktiva pinnar, som slås på och av, och en mängd passiva pinnar, som man avläser, för att se vilken knapp som är tryckt för tillfället. På så sätt så behöver man inte läsa av varje knapp för sig. (Det hade krävt att processorn hade 64 pinnar) istället så kan man nöja sig med färre.
Hade jag velat göra det enkelt för mig hade jag haft till exempel 5 aktiva pinnar (en för varje rad) och sen 14 passiva pinnar (en för varje kolumn), totalt 21 stycken. Jag lyckades genom att arrangera om knapparna komma ner till 8x8=16 pinnar. På så sätt fick jag även lite pinnar över till kontroll av musen.
Så här blev den färdiga PCB-designen när jag fått den hem i brevlådan. Jag har här satt på headers som gör att jag kan montera och ta bort komponenter allt eftersom jag testar vad som fungerar. Detta skulle visa sig väldigt användbart.
Mjukvaran
Efter en del programmerande så fick jag igång mjukvaran (sk firmware) på tangentbordet. Det var lite problematiskt eftersom jag började att utveckla till Raspberry Pi Pico och jag inte hade tillgång till en seriell monitor utan fick nöja mig med att felsöka genom att blinka på olika sätt från mikrokontrollerns inbyggda LED.
Det löste sig dock, och jag lyckades både skriva text och kontrollera musen från mikroprocessorn.
Det dök upp lite saker som jag inte hade föreställt mig. Till exempel visade det sig att vanliga tangentbord inte vanligtvis stödjer mer än 6 tangenter. När man söker på det på internet så är den vanliga uppfattningen att det är ett hårdvaruproblem som man kan löas med att sätta dioder mellan tangenterna, men så är alltså inte fallet. Det finns möjlighet att använda ett utökat protokoll som gör det möjligt att kunna trycka ner samtliga knappar på tangentbordet och få dessa registrerade i datorn, men då finns en risk att man inte kan använda tangentbordet i datorns BIOS.
Jag bestämde mig rätt snabbt för att jag antagligen inte kommer trycka ner mer än 6 knappar samtidigt (jag kanske behöver det om jag bygger ett stenografi-tangentbord i framtiden, men inte innan det). Att kolla upp det där utökade protokollet satte jag upp på min långsiktiga att göra lista (alternativt listan "att inte göra"). Jag gjorde också en snabb koll med mitt nuvarande tangentbord, och det verkar ha samma begränsning utan att jag någonsin märkt något problem med det.
Så här kan man redigera tangentbordslayouten till mitt tangentbord. Här kan man se två lager.
Ett annat intressant designval var hur jag skulle sätta upp layout på tangentbordet. Jag bestämde mig för att använda formatet CSV som jag sedan skrev ett program för att generera kod för mikroprocessorn av. En viktig fördel med detta är att jag kan redigera layouten i exempelvis Libre Office Calc (eller Excel om man är en normie).
Jag tog namnen för tangenterna från specifikationen för USB-tangentbord. Eftersom olika länder har olika layout så heter inte knapparna samma sak som det tecken som man får när man trycker på knapparna. Jag är van vid sånt eftersom jag kör Dvorag, men det är värt att notera.
Sånt som inte gick som jag hade tänkt mig.
Förvånansvärt nog så fungerade knapparna finemang på tangentbordet. Jag hade förväntat mig att jag skulle
Tyvärr så visade det sig att den module med en trackball som jag hade tänkt använda för att kontrollera musen var trasig. Jag hade beställt två stycken, men när jag skulle testa nummer två så föll den i bitar.
Jag hade tidigare gjort experiment med en liten analog joystick. Jag tänkte att jag skulle sätta dit den istället, men insåg då till min besvikelse att jag i min iver att få iväg tangentbordet hade satt de analoga pinnarna som skulle behövts för att läsa av joysticken på att läsa av tangentbordsmatrisen. Jag tänkte på det när jag drog vajrarna för Esp32 processorn, men det den programmvaran är inte i ett sånt skick att jag kan testa joysticken än.
Det jag hade tänkt som alternativ för att kontrollera musen. Till vänster en joystick, mitten och till höger två Blackberry trackballs som visade sig vara defekta. Den högra har till och med ramlat sönder.
Jag hade parallellt beställt hem ett tangentbord med en pointerstick för en gammal thinkpad-laptop. Jag har hört gott om dessa, och det är möjligt att den hamnar på tangentbordet i framtiden. Som det är nu så har jag dock inte tid att få fast den på tangentbordet, så det får vänta till nästa uppdatering av tangentbordet.
En sk pointer-stick, liggandes på tangentbordet som den skruvats bort från.
Nästa steg
Jag har bestämt mig för att jag ska löda fast tangenterna på sidorna så att tangentbordet fungerar som mina gamla tangentbord och lösa problemet med muskontroll senare.
Man blir ända lite stolt
Det är också en del arbete i att bygga plattor för att hålla tangenterna i på rätt plats och i rätt vinkel (laserskurna plattor från makerspacet är planen) och en botten. (Antingen 3d-printad eller utskuren i trä med CNC-maskin). När det är klart kan jag lägga mer tid på att få pointer-sticken att fungera som den ska.
Men vintern kommer, och det är lite oklart hur mycket tid jag kan plöja ner i det här projektet framöver.
Andra inlägg från bloggen
2024
Använda cpp som ett skriptspråk (2024-12-03)
Mekaniskt tangentbord Lasersköld L1 del 1 (2024-11-14)
Alphasmart neo 2 font editor (2024-10-11)
Bloggen är äntligen fyttad (2024-09-24)
2022
Figurer i skuggan (2022-06-04)
2018
prestandatest pa morgonen c (2018-11-21)
2017
Framsteg och frustration (2017-08-31)
2015
fix audacity startup bug on ubuntu 1510 (2015-11-24)
git subtree (2015-06-21)
add native code to android studio (2015-06-21)
2014
Ingenting (2014-11-08)
Äldre inlägg...