Atrocious_Hackpad
A 9 key macropad with a rotary encoder, 9 sk6812 leds and a oled display
Total time spent: 41.5 hours
So for clarification, didn't realized i needed to journal for a starter project (dumb from my part ik) but thankfully (and luckily) i did have a local repo that i had from the beginning, i'll attach an screenshot to each day that i commit something TT
May 28 :suspect:
After doing Solder, i thought that i could do the hackpad YSWS. I didn't do the tutorial first, i just kinda based what i did from there. So here it goes:
For a long time i wanted to mess around with a display so this was the perfect opportunity. I wanted to use all the 16 keyswitches, without thinking on how it would be placed on the pcb.
Then, i realized, i didn't want to make it big or sort of medium sized. I wanted it to be small, compact, not taking too much space from my desk.
So i ended up with the choice of using 9 keyswitches for the hackpad, an oled and also wanted to use the leds, just didn't know how to connect them.
Time Spent: 2.5 hours
May 29 :suspect:
After skeeming through the hackpad channel, i learned how to connect the rotary encoder that i could do a matrix + connecting the leds in series so i didn't use all of the gpios, that i could use global labels in kicad so i didn't need to connect them directly.
WHAT, THAT'S GENIUS :interrobang:
Also included the rotary encoder and oled display. Ended up with a :goat: ed schematic
Time Spent: 3 hours
May 31 :suspect:
night owl :sigma_male:
With the schematic done, i placed the components to the pcb tab to resemble a macropad.
I didn't really sketch or made a certain design for the pcb, so i just went with it and kinda liked it!
Learned from Solder and did some rounded corners, might have over did it tho.
Finished for the day by starting to trace the connections, although i didn't want to use a lot of vias, this took a lot of time and it was super late so i left it mid tracing
Time spent: 5 hours
June 1 :rage1:
Sooo... i didn't like the shape after all, so i changed to have less rounded things, finally added some ground fills, looks so professional!
Time Spent: 2 hours
June 2 :rage3:
Started to add silkscreen art, mainly to personalize my pcb further, i wanted to make it mine, to show what i liked, learned that i could draw on figma and export it as svg.
I saw a super cool silkscreen art that i wanted to recreate since making Solder and discovered a nice little tool called Ditherlicious, it let's you apply the same dither effect on images.
BTW this is NOT recommended, Kicad makes individual objects for each point, so avoid using multiple ones with the same effect
So of course i wanted to be happy and added this:
Time Spent: 4 hours
June 5 :rage4:
I AGAIN changed the pcb outline, i wanted to fit the silkscreen art without having to worry about where to place it, so i just made the outline be a rectangle with rounded courners
Pcb with new silkscreen art
And also, found out you can actually add the rotary encoder to the matrix
Time Spent: 3.5 hours
June 6 :rage4:
I have a fusion version that goes from June 6, i imported the Orpheuspad on june 4 but since i didn't have anything else from that day i just went from june 6
I started the design on Fusion by first doing the basic layout of the keys and making a basic case
But i didn't want to leave it at that, so, based on how Orpheuspad designed the heatset inserts and being slightly inclined, i decided i wanted to integrate that to my design.
AND THAT WAS A PAIN IN THE BUTT! :hurtrealbad:
Time Spent: 3 hours
June 7 :goberserk:
By measuring the dimensions in kicad and looking at the examples of the key switch on the guide, i made the sketches in fusion and on a notebook to have both in digital and physical.
I needed to add the holes for the rotary encode and the oled so this are the sketches i made, to get the measurements just right.
I learned so much actually, it felt so amazing when i extruded a sketch and the cut or join action was right, so satisfying!
This sketches were made from june 7 to june 8
Time Spent: 4 hours
June 8 Part 1 :goberserk:
this is a late night session from june 7, night owl v2
So from the late night session i started to work on putting the holes for the oled and rotary encoder, added the mounting holes for the screws, also using the ones from the pcb.
Time Spent: 2 hours
June 8 Part 2 :finnadie:
Wanted to make it fit perfectly, didn't want thin walls so the heatset inserts have enough to go around melting the 3d print
This was an awful experience, it was fun
So after a full afternoon of making the holes both for the screws and heatset inserts, i added the covers for the heatset insert holes, so they are not visible and they fit!
Time Spent: 5 hours
June 9 :feelsgood:
I've not been mentioning the bottom cover, the reason is it was an easier process, almost an immediate process
The usb-c hole is in the wrong orientation lol, but i changed it later
I was finally finishing the top cover design, added some text, and made it so it looks not so plain
That's also the case for the bottom cover, and if you see close enough, at the side of the usb c port, there's a support designed for the pcb due to only having 3 mounting holes, which would make it unstable, so that's the reason it's there.
And to finish it, the inclination that also function as the support for the macorpad!
I've added some text and as you see theres the holes for the screws and honestly, i'm really proud of this, i learned so much and this has only sparked a motivation in me to make more projects, thank you!
Time Spent: 4 hours
June 10 :godmode:
So this is the final design
I wanted to go with black on the top and inclined part because if it gets dirty it doesn't show as much, and the blue in the middle so it resembles Tron!
For the code, i made 4 layers, each one with different functions. ``` keyboard.keymap = [
[ #LAYER 0: NUMPAD
KC.N7, KC.N8, KC.N9, RAISE,
KC.N4, KC.N5, KC.N6,
KC.N1, KC.N2, KC.N3
],
[ #LAYER 1: Media Keys
KC.NO, KC.BRIU, KC.NO, MIDDLE,
KC.MPRV, KC.MPLY, KC.MNXT,
KC.NO, KC.BRID, KC.NO
],
[ #LAYER 2: DAILY [TBD, will think of it when i have it in-person!]
KC.N7, KC.N8, KC.N9, MIDDLER ,
KC.N4, KC.N5, KC.N6,
KC.N1, KC.N2, KC.N3
],
[ #LAYER 3: LEDs animation
KC.RGB_MODE_KNIGHT, KC.RGB_MODE_SWIRL, KC.RGB_MODE_BREATHE, BASE,
KC.RGB_HUD, KC.RGB_ANI, KC.RGB_HUI,
KC.N1, KC.RGB_AND, KC.RGB_TOG
],
] ``` and for each layer i wanted the oled to display different stuff, to differentiate each layer
display.entries = [
ImageEntry(image="me.bmp", x=0, y=0, layer=0),
ImageEntry(image="kevin.bmp", x=0, y=0, layer=1),
ImageEntry(image="oneil.bmp", x=0, y=0, layer=2),
ImageEntry(image="hc.bmp", x=0, y=0, layer=3),
TextEntry(text="Layer 0", x_anchor="T", y_anchor="R", layer=0),
TextEntry(text="Layer 1", x_anchor="T", y_anchor="R", inverted=True, layer=1),
TextEntry(text="Layer 2", x_anchor="T", y_anchor="R", inverted=True, layer=2),
TextEntry(text="Layer 3", x_anchor="T", y_anchor="R", inverted=True, layer=3),
]
As for the rotary encoder, for now it will only increase or decrease the volume
encoder_handler.map = [
((KC.VOLD, KC.VOLU),), #Layer 0 NUMPAD
]
Time Spent: 3 hours
June 12 :godmode:
Added some supports? Idk but i added this to make the assembly easier
Time Spent: 0.5 hours Video of the assembling
https://github.com/user-attachments/assets/44710b4c-f038-4628-ad3c-8864bbcb4045