We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect
Salim Benbouziyane · 674.4K views · 27.6K likes
Analysis Summary
Worth Noting
Positive elements
- This video provides excellent technical insight into I2C communication, the Seesaw framework, and modular PCB design for electronics hobbyists.
Be Aware
Cautionary elements
- The seamless integration of the sponsored resin printer makes professional-grade manufacturing look effortless, which may lead viewers to underestimate the cost and complexity of achieving similar results.
Influence Dimensions
How are these scored?About this analysis
Knowing about these techniques makes them visible, not powerless. The ones that work best on you are the ones that match beliefs you already hold.
This analysis is a tool for your own thinking — what you do with it is up to you.
Transcript
This is Ocreeb, a 12 key macropad that I made last year. I received a lot of feedback and suggestions during the last few months and I decided it was time to design another version. Not only that but I will also try to make a bunch of external modules that snap together in many possible layouts with this custom magnetic connector. Let’s get to it. Last version of this project was a great introduction and I recommend it if you're getting started with this kind of thing. However, for this version there are a few improvements and some completely new features I want to explore. So let’s go over the changes and constraints first. It seems that some of you couldn't get the microcontroller I used before (the KB2040) and I understand that swapping the PCB footprint from the get go isn't for everyone. So for this version I will use the XIAO RP2040 from Seed Studio. It’s small, cheap and available pretty much everywhere. Plus you get to choose from several drop in replacements either from Seed Studio, Adafruit’s QT Py line or others. The only thing to keep in mind is that it only breaks out 11 GPIOs which is definitely not enough for the way things were set up before but there is a way we can make it work. More on that later. In the last design I made the switch plate and the top shell all in one part. Once you solder the switches to the board it’s pretty much closed off. You can’t access the pcb from the other side without desoldering all of them. So this time we will do two things: Add support for hotswap sockets and decouple the plate from the rest of the enclosure. The two encoders in the previous version required 6 pins. Given that we don’t have a lot of GPIOs this time, we're going to have just one. But in exchange we'll add the much-asked-for OLED screen. I will be using one of these widely available I2C modules to display layer changes and maybe other information. I got inspired to do the previous project after using the Creativity Console by Monogram. A standout feature of the console is these connectors. They allow you to rearrange modules into various shapes and layouts, tailoring to diverse workflows. I wondered for a while if I could pull off something similar for the macropad and It was until I watched this video by Zack Freedman that reignited my interest in the idea. You should definitely check out this project BTW. Link down below So the idea would be to be able to attach to the macropad all sorts of different peripherals like encoders, buttons and maybe potentiometers in various combinations. We will need some sort of a grid system with a standard way to connect all the elements. Let me show you what I mean by all this and let’s get started on the prototype. I begin by making the size grid relative to the macropad’s dimensions — where 1 grid unit equals the quarter of the macropad — assuming that the macropad will be a perfect square of course. Each external module could be a multiple of these units. Should have one upstream connection and many possible landings on all remaining sides. All connectors are centered within the grid units. Now, for the connection itself we will need power, ground, 2 pins for I2C and maybe an extra pin to use as an interrupt. For a total of 5 pins and of course the magnets arranged with the right polarity. I went on Digikey and found these that you can get with magnets embedded already. There is only one slight problem: they cost over 10$ each and they come in pairs only (pins and mating part). If I make 5 modules for example I will only need 5 of them with pogo pins and around 30 landing pads. So maybe it’s a good idea to design my own exactly how I needed them. I will be making them out of small PCBs that will interlock with the main board. They'll have two locating features and will be soldered on both sides to castellated pads on the edge, ensuring both mechanical and electrical connections. As for the other upstream connector I will use the exact same part as the landing and add these through-hole pogo pins to the center with a small shroud to keep them aligned and I will be soldering them the exact same way as the other ones. With the connectors more or less figured out, let's discuss how the macropad will communicate with the module. Each one of them should function as an I2C peripheral and the macropad should detect when there is an input event. Given that I’m not a very good programmer and I certainly didn’t want to try and write special firmware to account for each and every scenario on both sides: I did some research first and fortunately, I stumbled upon Adafruit's Seesaw framework which can be configured to give a wide range of capabilities via I2C out of the box. In fact they use it for this exact reason as a near universal system for many of their I2C boards. This is awesome and will save us a ton of work. So exactly like the breakouts our modules we will be running the Seesaw firmware on ATtiny microcontrollers from Microchip. With all this in mind I threw together some parts that are fairly similar to whatever I will be using for the end product — to do a sanity check and see how things work together before making more decisions. Remember when I said that we don’t have enough pins for a regular matrix setup? Well for that reason we will use another technique to scan using shift registers. This only requires 3 pins from our main controller and it’s already supported by KMK, the circuit python firmware running on Ocreeb. To test out the module idea, I connected a Seesaw breakout board. I attached an encoder, a potentiometer, and a button to cover the basic cases we would want in these modules. Now, this extra wire: represents the interrupt in the connector I mentioned earlier. I’m trying to avoid spamming the I2C bus constantly as much as possible and try to leverage the seesaw’s configurable interrupt for the digital inputs. It triggers when there is an interaction on the module and it will clear the flag after we read it from the macropad side. One thing to note here that I allocated only one pin for all the modules in our setup. So we can't pinpoint the exact source of the trigger, any change in that pin's state should prompt a scan of all the modules. I also added this I2C hot swap controller, I’m not sure how useful it would be but since we plan on making removable modules, I thought it’s a good idea to avoid messing with the microcontroller if we disconnect mid com. With these requirements laid out and a basic prototype in hand, let's jump into Fusion 360 and get started on the PCBs. The first thing I did in this step is make these main sketches to derive from them the board outlines and have an easy way to update and tweak the shapes down the line. Everything, from the pogo pin height to the magnet thickness affects these dimensions and I will be referencing these geometries throughout the entire design process. I got to work and layed out 5 boards in total: The main macropad core with six possible attachment points A four rotary encoder module we’ll call Dials. One with two slider potentiometers we'll call Faders. Another one with three switches and an encoder we’ll be calling Combo .. I know right very original. Lastly this funky one using a big ol 60mm CNC encoder and 4 switches. I think this covers a good range of possibilities to start with. So I double checked all the files including the two tiny connectors and sent them all to the PCB Way. While waiting for the PCBs to show up I can get started on the enclosures. Back in Fusion 360 I referenced the 3D PCBs produced in the previous step to design around them. The most crucial piece in my opinion is this section that surrounds the connectors it needs to house the magnets and have precise tolerances where the connectors will interface. I did some tests to see how thin the walls should be to get the magnets as close together as possible and I also had to determine the thickness for the shell to have the pogo pins setting just right on the other part. Next, I dealt with the top part. Including the switch plate, the Oled Screen opening and the fasteners to secure the middle section and the main board. Then, it was the bottom part to close off everything and also act as a diffuser for the RGB underglow. After figuring out the enclosure for the Core macropad I repeated the exact same process for all the modules, reusing parts, patterns and sharing dimensions as much as possible to keep the overall design uniform. With the enclosures completed It’s time for the fabrication and for that I will be using the UltraCraft Reflex 3D printing system by HeyGears, the sponsors of this video. This was my first experience with resin printers and I was happily surprised to be honest. HeyGears created a One-stop production platform to produce commercial-grade parts on a hobbyist level. The build quality of these machines is outstanding and the closed-loop system ensures predictable success and offers a seamless 3D printing experience. I started by loading the resin bottle which the printer detected automatically. It also monitors the resin level and will refill as needed on its own. How cool is that? The first batch for the top parts is done. I put them in the wash station with some isopropyl and sent the proper settings from the slicer directly. HeyGears came up with this cool dual tub system so that you don’t have to fish for parts in the IPA, you simply open this valve into the empty container and collect your parts after the alcohol drains. Next, I removed the supports and put the models in the cure station which again received settings specifically for the shape, material and size of this model directly from the Blueprint slicer. From then it was rinse and repeat untilI went through all the top enclosure parts. Next it’s the translucent bottom parts. I repeated the same steps but this time using the PAT10 resin, a strong and clear material with 88% transparency which works great to diffuse light for the RGB. The quality of these prints is amazing. Straight out of the machine, the only post-processing I did was to sand down the support traces in a few places where I needed a flat surface. I'm really happy with the outcome, and if you've watched any of my previous projects, you would see how much time I spent just to get a decent surface finish. Now that we have all the parts printed it’s time to talk about the keycaps. In the previous version I used these DSA style ones that I got online but this time I modeled this. Heavily inspired from the GRID Set by RAMA WORKS and I’m going to try and print them in custom colors using the UltraPrint Design PAM10 mixable resins. Let me show you how that works. You get this swatch of colors that you reference in a table to get the exact mixing ratios by weight for any of these shades. You can mix batches as needed and you get consistent and repeatable results each time. I tried to stay closer to the original color scheme I had in the previous version and I think it turned out even better this time. If you’re in the market for an all-in-one resin system checkout the UltraCraft Reflex. I will leave a link to it in the description below and Thank you HeyGears for sponsoring this video. Now, Let’s get started on the assembly. All the PCBs finally arrived and I was eager to test the connectors … and of course they didn't fit right away. When designing on-screen all the way zoomed-in, it's easy to overlook some obvious details, like how these tight corners might be a little rounded for example. Well at least I can adjust them slowly by filing until I get a nice friction fit. I got a stencil just for the core macropad PCB to try it out with a hot plate. However, I made sure to pick components with somewhat DIY-friendly sizes. I realized just now that I made this footprint a little too tight and some rework was necessary to connect all the pads properly. Now for the connectors: I glued that small shroud to the receiving part to hold the pogo pins in place temporarily before soldering it to the main board for each module. Before starting the final assembly I needed to lay and glue the magnets in place in the correct order before inserting the PCBs to hold them. So I made this little jig to make sure I don’t mess up their polarities. To upload the Seesaw firmware To the ATtiny chips on all the external modules we will need a UPDI programmer. You can easily make one using a 1K resistor and a USB to Serial cable. I'll put a link to more details on that down below. That’s it. I’m going to call it done and here are the final shots. Now that it’s done we can go over how the code is set up and show you some mistakes and flaws that almost ruined the entire build. The main macropad is still running the KMK firmware. I just made a custom module to handle whatever hardware configuration we have on the other side. This little arrow on the oled is a visual indicator for that interrupt line on the connector. Whether it’s a first connection or an interaction on the module it shows up briefly on the screen. That way if it stays too long we know that something went wrong or actively going wrong. For the analog devices they are set up in a similar way but instead of interrupts they are polled on an interval and send midi control signals for the provided midi notes that way we can attach that to special actions on the computer side. More info on this in the description below. It doesn't matter if you boot with or without the modules as long as they have a proper configuration they will be able to attach later and swap position during runtime without problems which is cool and exactly what I set out to do BUT there is a major flaw in the way the interrupt is handled right now. Remember when I said that a single interaction will trigger a scan for everything? … well that turned out to be a horrible idea when you have a lot of them. What ends up happening is transactions to scan each module start to stack up really quickly and you end up missing sometimes the interactions because it takes you too long to get to the ones that triggered it. With just one or two of the modules it works really great and the delay isn’t very noticeable, also the analog ones aren’t affected a lot by this because they update state on an interval. I’ve tried as a potential solution to encode the I2C address on each module and send it as a custom pulse to the controller on the interrupt that way it knows which of the module is trying to talk and scans just that. It didn’t really work great because It still too slow to read in circuit python and I’m still looking into it and how to make it run better. In the meantime If you have any ideas please let me know in the comments section. The other thing that didn’t work exactly like I anticipated is the magnets. Unfortunately they don't have enough force for this orientation and you can knock the module and disconnect it. On the other hand when you have 2 of them or on the sides they work really great and they have just the right amount of force to keep them secured. If for some reason you still want to build this or just a part of it PLEASE be aware of the issues and limitations I mentioned earlier before pouring time into it. As per usual I will leave all the files in the description down below and so that you know the build is structured in a modular way. You can build just the parts that interests you. You can make just the macropad for example or just a detachable module if you're making a full keyboard and want something like that. it will work great. I also want to warn you that the 3D printed parts in this project are finicky, and very thin in a few places. If you're planning on doing this in FDM expect some post processing to make the tight tolerances work and make them fit nicely. The UltraCraft reflex from HeyGears made it very easy for me to produce precise parts with great surface finish. and lastly I just want to point out even though it’s pretty obvious that I’m not an expert in any of this and what you’re watching is me learning by doing and by failing sometimes. Thank you so much for your time and I will see you in the next one.
Video description
Check out HeyGears UltraCraft Reflex: https://store.heygears.com/referral/reflex036 Join the HeyGears IdeaShapers community: https://bit.ly/41ZgYle 🍃 Grovemade Premium Desk Accessories: Get 10% off using code SALIM10 → https://bit.ly/grovemade-accessories Notepad: https://bit.ly/Grovemade-NotePad Display Rail: https://bit.ly/Grovemade-Display-Rail Vertical Organizer: https://bit.ly/Grovemade-Vertical-Organizer Entire Kit: https://bit.ly/Grovemade-The-Note-Taking-Kit Ocreeb MK2 is the second iteration of my macropad project. This version features the XIAO RP2040, hotswap sockets support, a detachable switch plate, an OLED screen and I'm exploring a fun new idea inspired by the Monogram Creative Console – a custom magnetic connector that lets me attach all sorts of external modules to make different layouts. Join me as I try to design and build the modular macropad system that kind of works 😅 👋 Follow me: https://linktr.ee/salimbenbouz ⚡️ Project links: Github: https://github.com/sb-ocr/ocreeb-mk-2 Instructables: https://bit.ly/3vCNajG 🧪 Project resources: KMK Keyboard Firmware: https://kmkfw.io Adafruit Seesaw Framework: https://bit.ly/Adafruit-Seesaw Using the UPDI Programmer: https://bit.ly/3tX4NtZ MIDI commands into Lightroom actions: https://rsjaffe.github.io/MIDI2LR/ Zack Freedman's project: https://www.youtube.com/watch?v=EWWJ1x2VMJs&t=903s _______________________ ⚙️ Bambu Lab 3D Printers: Bambu Lab A1 https://bit.ly/4gwNFhK Bambu Lab P1S-Combo https://bit.ly/3VW4QBg Bambu Lab X1-Carbon https://bit.ly/3VTKfxx Bambu Filaments https://bit.ly/41RpVRe 🛠 Tools: Autodesk Fusion 360: https://bit.ly/49dQyQN Soldering station: https://geni.us/16zcw5 PEI build plate: https://geni.us/9K0md iFixit Driver Kit: https://geni.us/pE8dvKd Magnetic Helping Hand: https://geni.us/qmbA3W Digital Microscope: https://geni.us/OvfXE Oscilloscope: https://geni.us/rHzAS8 🎬Video gear: Sigma 18-35mm f/1.8 DC Art Lens: https://geni.us/43RyE 90cm Octagonal Softbox: https://geni.us/tXzLg2U Motorized Camera Slider: https://geni.us/CKpHVYp Aputure Amaran 100D Light: https://geni.us/DitmF6 Aputure Amaran PT1C Tube Light: https://geni.us/zcYT Heavy Duty Light Stand with Casters: https://geni.us/W3aZy4Z RØDE VideoMic GO II Microphone: https://geni.us/3gEQb4 RØDE Wireless GO II Microphones: https://geni.us/HTWPS 🎧 Music: Epidemic Sound https://share.epidemicsound.com/cp32b6 _______________________ 00:00 Intro 00:38 Parts and changes 02:25 Prototype 06:00 PCBs 07:05 Enclosures 08:05 3D Printing 12:19 Assembly 15:46 Final result 16:25 Firmware usage and mistakes 18:47 Outro Affiliate links may be included in this page. I may receive a small commission at no additional cost to you. #diy #modular #mechanicalkeyboard #macropad #3dprinting #maker