[{"content":" This article is a work in progress, some sections may be incomplete and will be updated as I continue working through this project. Intro # If you\u0026rsquo;re a musician and haven\u0026rsquo;t played with a looper pedal, I\u0026rsquo;d highly recommend it. More likely, if you\u0026rsquo;re reading this article, you already know how fun playing with a looper is and how much creativity it can enable with your instrument. Many people even gig solo with a looper pedal allowing them to perform as a one-man band. To do this, however, a simple one-track looper like the BOSS RC-1 I\u0026rsquo;ve been using up until this point is very limiting. With fully featured multi-track loop stations like the BOSS RC-600 and Sheeran Looper X costing upwards of $1000, I decided to start developing a versatile open-source multi-track loop station that can be built with common hobbyist modules.\nI\u0026rsquo;m intending it to be viable as an all-in-one type pedal that lets you plug in a guitar (or other electric instrument), MIDI controller, microphone, and hop right into creating \u0026ldquo;full band\u0026rdquo; sounding live loop performances with no extra equipment required.\nIntended Features # Starting perhaps somewhat ambitious, in this first version I\u0026rsquo;m aiming to include the following features:\nAt least 4 Loop tracks with start and stop switches (double tap sucks) Built-in MIDI player to allow for drum or synth loops to be created right in the pedal Built-in drum loops (and a way to upload your own) 2x Instrument and MIDI (USB) inputs Touch screen display with UI Stereo outputs and headphone jack out Tap tempo and measure sync (start and stop loops on beat 1) Basic built-in effects that can be turned on per track or assigned to a switch Design Considerations # Before even making a schematic or ordering any parts, some research must be done and design decisions must be made.\nStereo # One question that matters for downstream decisions is: how important are stereo inputs and outputs? It adds potentially unnecessary complexity, especially if the most common use case is plugging into a single amplifier or getting mixed to mono anyway if performing live. However, actually getting stereo effects like chorus, ping pong, and being able to mix the loop tracks on the pedal would be pretty sick if using dual amps, headphones, monitors, or a PA system. Dual outputs would also allow for drums to go to one output with mono guitar to the other, and other options that can be added in software later.\nFor this prototype build, I\u0026rsquo;m looking at using a sound card with only two input channels, and I think using these as a mono instrument input and a microphone input is likely more useful than stereo instrument inputs. I will include stereo outputs though to allow for track mixing/stereo effects. Later in doing a custom board design, dual instrument inputs plus a mic can be added by using more channels on the codec than the sound card supports.\nHardware # Main Electronics # This project calls for a processor with a powerful enough CPU to record, mix, and play multiple audio tracks in real time, while also running a display with a UI. Importantly, it also requires enough RAM to store multiple tracks in memory and an ADC + DAC to convert audio from analog to digital and back.\nFor these core functions, I decided to use a Raspberry Pi 4B paired with a HiFiBerry DAC+ ADC sound card. These are easy to prototype with thanks to the GPIO header pins, but also make transitioning to a more professional setup later relatively smooth using the Compute Module 4 and the ADC/DAC (PCM1863/PCM5122) chips directly. The one problem is that Linux is not a real-time system by default, but with some OS modifications it should be able to get down to \u0026lt;10ms latency.\nFor the UI, I want to use a touchscreen display just as a personal preference since there will be many menu options, and navigating menus with rotary encoders is annoying in my opinion. I may implement support for knob navigation in the future, but if you\u0026rsquo;re following along and would prefer to save money with a non-touch screen and encoders feel free to fork the project and modify it yourself.\nThe screen needs to fulfill a few requirements:\nDSI connector (ribbon cable). SPI would possibly interfere with the audio card, and HDMI would add unnecessary bulk and cables within the assembly (on top of likely being harder to implement in a future PCB). IPS display. An IPS display that provides a good viewing angle is a necessity for a display down in front of you on the ground. Capacitive touchscreen. Almost goes without saying, but the resistive touchscreens you need to press down with a stylus won\u0026rsquo;t work for this. Controllable backlight and decent brightness. Within these criteria I selected a ~$50 5\u0026quot; monitor off of Amazon.\nSupporting Circuits # Buffer Circuit\nIf an instrument is plugged directly into the sound card, it needs to come from a low impedance source or the sound quality could be affected.\nAn electric guitar has high impedance so we need a circuit with high input impedance to match the guitar and low output impedance to match the sound card, ideally while not modifying the signal at all.\nMicrophone Preamp\nThe pedal will have an XLR input for a dynamic microphone, but before the signal can go to the sound card it needs to be amplified. For this a small amplifier circuit is required which for the prototype I\u0026rsquo;ll be using a MAX4466 and SM2167 based amplifier/compressor module.\nConnectors and Switches # Instrument Jacks\nSince we will be implementing stereo outputs and eventually stereo inputs, we need to be able to detect if a cable is connected to the \u0026ldquo;R\u0026rdquo; jack to determine if the output is mixed to mono or not. This means we\u0026rsquo;ll need switched input jacks.\nInternal Wiring\nTo avoid picking up noise from the raspberry pi I\u0026rsquo;m planning on using shielded cable, and potentially copper foil if the\nSwitches\nOf course, 10 footswitches will also be needed. Eight for the loop tracks and two programmable for toggling settings. These will be momentary, with any toggling happening in software and so that a double tap or hold can be detected.\nPower\nIdeally the Raspberry Pi 15W USB-C charger would be enough to power everything, the preamp and buffer should draw very little current, but the documentation on the touchscreen and how much it draws was unclear. The plan is to use the 5V rail on the Raspberry Pi to power everything and use RC filters before the buffer/preamp to avoid noise from the Pi affecting the audio input. If this noise is unavoidable or if other power issues arise, another power supply solution may be needed.\nEnclosure # A large standard cast aluminum enclosure could be used for this build, but I\u0026rsquo;d like to design it to be more compact with two \u0026ldquo;stair steps\u0026rdquo; for the play and stop switches. For the prototype I\u0026rsquo;m going to 3D print it in PLA, and use conductive tape if noise is an issue.\nTo get an idea for the dimensions, layout, and assembly process I quickly made a draft model in FreeCAD.\nThis model looked good in terms of the screen and switch placements but there were some things I got wrong at first, such as: the audio output placements interfering with the Raspberry Pi, the structure being unoptimized for 3D printing, and the screen mounting being basically un-assemblable.\nUsing these lessons learned in the draft version, I \u0026hellip; (next model to be completed)\nBOM # This spreadsheet details all the used hardware and the costs.\nSoftware # To get the Raspberry Pi processing audio with as low latency as possible, the normal desktop Raspbian OS is not the best idea. Using Raspberry Pi OS Lite strips away the unnecessary desktop environment while a UI can still be implemented using the DRM (Direct Rendering Manager).\nReal Time Kernel # To ensure that the UI doesn\u0026rsquo;t take priority over audio processing, we apply the PREEMPT_RT Linux kernel patch. This allows the kernel to be interrupted at any time, and for you to give processes priority over others.\n(Step by step instructions may be moved to a separate article)\nPi Set Up Instructions These instructions apply to a fresh install of Raspbian OS Lite (Debian 13 Trixie) as of May 2026. Your mileage may vary.\nTo do this, open a shell on the raspberry pi via ssh or by plugging in a monitor and keyboard.\nInstall some prerequisites and download the kernel source\nsudo apt update sudo apt install git bc bison flex libssl-dev make libncurses5-dev build-essential cd ~ git clone --depth=1 --branch rpi-6.12.y https://github.com/raspberrypi/linux cd linux Then generate the config file and open the configuration menu\nmake bcm2711_defconfig make menuconfig In this menu navigate to General setup -\u0026gt; Preemption Model -\u0026gt; Fully Preemptible Kernel (Real-Time)\nThen save and exit\nEdit the config file to make the version clear Set CONFIG_LOCALVERSION to \u0026ldquo;-v8-rt\u0026rdquo; or similar\nBuild the Kernel with\nmake -j4 Image.gz modules dtbs Chill for the ~2 hours it takes to compile, then install the kernel modules\nsudo make modules_install Copy the kernel and device tree files into the boot partition\nsudo cp arch/arm64/boot/Image.gz /boot/firmware/kernel_rt.img sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/ sudo cp arch/arm64/boot/dts/overlays/*.dtbo /boot/firmware/overlays/ sudo cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/ Then edit /boot/firmware/config.txt and make the following changes:\nFind the [all] block and add kernel=kernel_rt.img right below it Add dtoverlay=hifiberry-dacplusadc to enable the HiFiBerry drivers Disable the onboard audio by changing dtparam=audio=on to off Now reboot the pi and check that the real-time kernel is running with uname -a\nReal Time Privileges # Now that the kernel is set up we need to enable our system to allow more priority to be given to the audio server, and to prevent memory from ever being moved from RAM to the SD card.\nAdd the user to the audio group\nsudo usermod -a -G audio $USER Create a audio.conf file with sudo nano /etc/security/limits.d/audio.conf and place the following in and save\n@audio - rtprio 95 @audio - memlock unlimited Check by rebooting and checking ulimit -l and ulimit -r\nThese should be \u0026ldquo;unlimited\u0026rdquo; and \u0026ldquo;95\u0026rdquo;\nStartup Config # Set the pi to auto login on boot by using sudo raspi-config and navigating to System Options -\u0026gt; Auto Login and enabling auto login.\nAudio Server # To set up PipeWire first install the needed packages sudo apt install pipewire pipewire-audio-client-libraries pipewire-jack\nMake a local config in the home directory\nmkdir -p ~/.config/pipewire cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/ and edit the file. Uncomment and modify the following lines in the context.properties section\ndefault.clock.rate = 48000 default.clock.allowed-rates = [ 48000 ] default.clock.quantum = 64 default.clock.min-quantum = 64 default.clock.max-quantum = 64 Then set PipeWire to start automatically on boot\nsystemctl --user enable --now pipewire pipewire-pulse wireplumber Set the mix levels by opening alsamixer then hitting f6 and selecting the HiFiBerry card. Set \u0026ldquo;Digital\u0026rdquo; to -3.5db gain. Exit and save the settings with sudo alsactl store\nMaking Sounds # jack-keyboard fluidsynth -a jack -j -m jack /usr/share/sounds/sf2/FluidR3_GM.sf2 slgui -l 2\npw-link jack-keyboard:midi_out fluidsynth-midi:midi_00 pw-link fluidsynth-midi:left sooperlooper:common_in_1 pw-link fluidsynth-midi:right sooperlooper:common_in_2 pw-link sooperlooper:common_out_1 alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink:playback_FL pw-link sooperlooper:common_out_2 alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink:playback_FR Mic Inputs:\npw-link alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_6__source:capture_FL sooperlooper:common_in_1 pw-link alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_6__source:capture_FR sooperlooper:common_in_2 Effects # For built-in effects, I\u0026rsquo;m going to be using the open-source Guitarix and LSP (Linux Studio Plugins). The plan is to use the LV2 plugin format which inherently decouples the audio processing and UI, allowing the custom pedal UI to control the effects through OSC or MIDI. To use these plugins a host is required to manage and provide an interface to interact with them. For this I will be using mod-host from the MOD Project which handles the routing of multiple effects internally and provides one simple input and output for PipeWire/JACK.\nflowchart LR In[Input] --\u003e Fx[Effects] Fx --\u003e Loop(SooperLooper) Loop --\u003e Out[Output] M[MIDI] --\u003e Syn[Fluid Synth] Syn --\u003e Loop Syn --\u003e Out ","date":"14 April 2026","externalUrl":null,"permalink":"/projects/open-loop-multi-track-looper-pedal.-prototype-design/","section":"","summary":"","title":"Open Loop: Multi-Track Looper Pedal. Prototype Design (WIP)","type":"projects"},{"content":" Intro # This article documents the process of designing and building my most recent side project: a small CNC router capable of cutting aluminum. It was intended as a one-off with materials I happened to have on hand, but if you are working on a similar project or are just interested in the process of a project like this then keep reading as I cover all my design decisions and the troubleshooting process on the journey from blank page to working machine. If you\u0026rsquo;d like to view all resources associated with this project including the CAD files, see Resources.\nBackground # I was inspired to start this project when I was given some scrapped lead screws and linear rails, as well as a deal on a good amount of aluminum extrusion. Already owning most of the needed components, and wanting the ability to make my own wood and aluminum parts, I decided to take on the challenge of designing and building this machine.\nBefore this project I had some experience working with CNC routers, but this was my first time designing a 3 axis machine myself. This means there were many learning opportunities along the way.\nDesign # Requirements # Before opening up CAD, I first listed out my requirements to design around. It would have to:\nUse the parts I have on hand. For the sake of cost, and to make use of my ever growing stockpile. Be able to cut aluminum, to give the option of making stronger parts for future projects. Fit in a small space, smaller than a square meter. I would love to have a large table sized router but just don\u0026rsquo;t have the space for one right now. Design Decisions # Using What Ya Got # I first took stock of what usable parts I already owned:\n200 mm linear rails with guides High quality but questionable condition 380mm ball screws 1020 (1x2\u0026quot;) aluminum extrusion 2x NEMA 17 stepper motors An arduino and TMC2208 stepper motor drivers A 24V power supply A 3D printer (to make parts, not the printer itself) Using all these parts saved hundreds of dollars, but limiting myself to them also introduced some challenges:\nWould butting the 200mm linear rails up against each other allow the guides to run smoothly? How would I align them to be parallel, and how would I mount them to the 1020 extrusion? The ball screws were for a custom application. How would I modify them to work in this case? If damaged are they repairable? Would the stepper motors and drivers provide enough torque? How will the ball screws be secured? Can the stepper drivers take the axial load or are custom bearing blocks needed? Before going ahead with the design, I did some research to answer these as best I could.\nAsking some co-workers and reading some forum posts, I was satisfied that butting the rails up against each other should work for a reasonable amount of time as long as they were properly aligned. As for mounting, I couldn\u0026rsquo;t find T nuts that would work for the linear rails and for 1\u0026quot; extrusion, so I decided to order some 2020 T nuts and after trying them found that they should work.\nOne of the ball screws felt like it was jamming in one direction, but after working it in a little bit it seemed fine (foreshadowing?) Either way they seemed functional enough and would be easy to make shorter with an angle grinder.\nTo estimate if my NEMA 17 stepper motors would work I ballparked the amount of force they would produce with my 4mm pitch ball screws, and compared it to the numbers from this paper I found that included an analysis of aluminum milling forces. It found the cutting forces to range between 40N and 120N. Using the 42Ncm stall torque rating of the motors I\u0026rsquo;m using, the 4mm pitch of the ball screws, and estimating a 70% efficiency, and plugging those into this formula: \\(F = \\frac{2\\pi \\cdot T \\cdot \\eta}{L}\\) I found that the motors should produce around 461.8N.\n$$F = \\frac{2\\pi \\times 0.42\\,\\text{Nm} \\times 0.70}{0.004\\,\\text{m}} = 461.8\\,\\text{N}$$This seemed workable with a large margin of safety, though if you\u0026rsquo;re questioning if the stall torque rating is what should be used when cutting happens at speed.. You\u0026rsquo;d be right, and there will be more on that later.\nI also realized that most off the shelf ball screws came with bearing blocks that took the axial load - the lengthwise pressure on the shaft, whereas my naked ball screws didn\u0026rsquo;t. If the motor bearings themselves could take this load it would be convenient, and it seemed like some other budget routers also used hanging ball/lead screws without support. For more confidence, I used this chart posted on a machinist forum post from someone asking a similar question.\nAssuming my motors were similar, it seemed like the 40-120N would be well within the normal bearing life range for an average of 2000mm/min (500rpm with a pitch of 4mm/rotation) so I didn\u0026rsquo;t worry about designing load bearing bearing blocks.\nCutting Metal # In doing research on what would be required for the machine to cut aluminum, I found that rigidity would be the deciding factor on if it would be capable. Now I wouldn\u0026rsquo;t know where to start on analyzing the actual force being applied to a complex assembly like this and what would bend, so I decided to look for examples of hobby level routers that can cut metal, and how they were constructed.\nI looked at many machines that used similar materials to what I had, such as Ivan Miranda\u0026rsquo;s which used a combo of aluminum framing, linear rails, and 3D printed parts to cut even steel. So I figured my materials should be workable. I decided to use PLA for the printed parts as it is actually both stiffer and stronger than other common materials, at least until it snaps, but that\u0026rsquo;s a good thing for rigidity. One potential issue is that PLA can creep - deform over time under constant tension. But that would be a problem for future me.\nUPDATE: Future me here. Around 10 months since first setting up the router all the hardware used to fasten PLA did need another ~1/8 turn re-torque, but nothing shifted or had any issues after this adjustment. Worst case the heat set inserts may eventually need to be re-set deeper if they pull out after a few re-torques but the PLA gets a thumbs up for now.\nOne notable choice was whether to go with a fixed or moving gantry. With a moving gantry the entire X axis moves to produce Y movement, whereas with a fixed gantry the bed moves instead.\nMoving Gantry Fixed Gantry I ultimately decided on a fixed gantry. Although this reduces the working area in the Y direction, I was more confident in the rigidity of a fixed X axis mounted with extrusion, as opposed to 3D printed parts coupling the x axis to a gantry.\nDimensions and Layout # Size wise, I wanted this to be portable and able to fit on a desk. I was okay with a relatively small build volume, so I looked for similar sized projects for inspiration and found the open source MilkCr8 CNC project.\nMakers-On-Tap/milkcr8-cnc Home of the Milkcr8 CNC Machine null 21 5 Referencing the available CAD model was very helpful for planning the initial layout. Knowing that the linear rail spacing and positioning worked well on that machine at least was reassuring while completing the rest of the design from scratch. Although this project is intended as a one-off, the files used for this project are available in the CAD section as well in case you want to open them up in FreeCAD for similar inspiration.\nElectronics # To power and control the machine a few different components are needed.\nRequirements:\nA controller - receives G-code instructions and translates them to motor driver signals. Also connects any switches, coolant pumps, spindle controllers, or other devices integrated into the machine. Motor Drivers - receive directions from the controller and actually provide the power to send the motors to the requested position. Stepper or servo motors - can be moved to precise positions with open or closed loop control respectively. Power supply - the controller and motor drivers must be given the proper voltage with enough current to operate correctly. Spindle or router - the actual cutting tool which can be controlled with a VFD in the case of a spindle or turned on manually with a router. In my case I already owned an arduino with a CNC shield attached, TMC2208 motor drivers, NEMA 17 stepper motors, and a 24V 5A power supply. All that I needed to buy new was the cutting tool.\nI decided on buying a router instead of a spindle for both price and simplicity\u0026rsquo;s sake, but went for a router that takes an ER-11 collet which allows for the use of any generic collet and therefore many different tool sizes.\nWith the components decided upon I made up this simple block diagram to visualize how they would all connect. Figuring the drivers might need some cooling, I integrated some 5V fans and an indicator light as well. While an E-Stop is always a good idea for a machine like this, I made it so the power to the drivers is wired through a large power switch instead, so flicking it off will stop movement no matter what.\nSimple Electrical Block Diagram To keep the electronics tidy, safe, and cooled, I also designed an electrical enclosure. This was done later in the process after doing some tests with the electronics setup exposed.\nCAD # This was the most complex assembly I had made using FreeCAD so far, but the new (at the time) assembly workbench in the 1.0 version of the program made it easier. I posted some videos sharing the assembly knowledge I learned along the way which you can view here: Tutorial, Tips\nKnowing this was a one off project, I modelled this just for my own reference and printing purposes. I didn\u0026rsquo;t model every single detail, but enough to make the parts and know they would fit together. As it turns out modelling every screw would have made this faster, as I did miss a couple hardware fitting details the first time.\nThis is the model after revisions made later in the process.\nIf you\u0026rsquo;d like to check it out in FreeCAD yourself for reference you can download the CAD files here.\nAssembly # Getting Parts # Procuring the parts was pretty easy with a few exceptions. The custom ball screws required M20 x 1mm nuts which were actually pretty hard to find. I ended up having to buy them from a Finning CAT supply store as hardware meant for excavator windshield wipers. I also couldn\u0026rsquo;t find T-Nuts made for the 1010 imperial sized aluminum extrusion, so I had to order ones made for 2020 and hope for the best. The price of free I guess.\nOverall the initial manufacturing/assembly process went smoothly. Just a matter of printing parts, cutting aluminum extrusion and ball screws to size, and making sure the frame fit together.\nElectronics Testing # Next I set up and tested the stepper motors, drivers, and controller to ensure everything was working as expected. I used NEMA 17 stepper motors, TMC2208 drivers (more on these later), and an arduino with a CNC shield. I tested the drivers/motors, controller connections, and G-code sending with UGS (Universal G-code Sender) separately. I did this to both learn about how the setup works more thoroughly, and so I would know these are not the issue if a problem comes up later with the whole thing assembled.\nYour browser does not support the video tag. Testing the controller by sending G-code Final Assembly # With everything prepared I started the final assembly. Though, as expected, it revealed a few changes that needed to be made. I had to modify the Y axis bearing mount, modify a corner bracket to make room for a ball screw coupler, and had to redesign some Z axis mounting parts due to them interfering when assembling.\nNow it was time to put everything together. Using a straight edge and calipers to ensure all the rails were spaced correctly and parallel and crossing my fingers that I wouldn\u0026rsquo;t have to immediately take the whole thing apart again, it was pretty satisfying seeing it actually come together according to plan.\nTo my surprise As expected, it even moved smoothly on the first go.\nYour browser does not support the video tag. First test of the assembled router Although the router was now basically assembled, it was far from finished. It still needed a real spoilboard with workholding anchors and an enclosure for the electronics, but at this stage it was ready for testing.\nContinued Development and Testing # First Cuts # With the machine fully assembled, it was time for a \u0026ldquo;hello world\u0026rdquo; first cut. For this cut I used a makeshift spoilboard made of some thin plywood, and duct taped the stock material to it.\nDespite some chattering and chipping the first cut came out pretty good. It was a great feeling finally seeing the results of all the effort it took to get to this point, but now it was time for a harder test - aluminum.\nThis cut was quite loud and chattery with lots of vibration, but it actually did cut a mostly square pocket without breaking which I was impressed by.\nVery satisfied with the initial testing, the next step was making a better spoilboard.\nSpoilboard # For the spoilboard and workholding I bought a board of 1/2\u0026quot; thick MDF along with some threaded inserts.\nAfter fastening the spoilboard down to the bed, it was time for another test. This time did not go so smoothly\u0026hellip;\nYour browser does not support the video tag. Spoilboard test finds the first issue Ball Screwed # The Z axis ball screw was getting jammed, but only when moving down. I noticed this when I was first assembling the ball screw and it seemed to get better when working it back and forth, but clearly screwing it a few times and praying did not do the trick. After some research I theorized that some balls must have gotten past the return on the top side of the nut - probably after some attempted maintenance in the past and likely the reason I found it in the scrap bin. This means that instead of the balls recirculating back to the groove and rolling between the screw and nut, some were just rubbing up against the seal on the top part of the nut.\nSo I had to screw the nut off, but if you\u0026rsquo;ve ever had to take a ball nut off the screw for the first time you\u0026rsquo;ll know there is nothing more terrifying. The balls are captured between the screw grooves and the nut, so taking the nut off means risking the balls flying everywhere and beginning a very tedious re-assembly process. A cylinder the same size as the ball screw would have helped here, but I needed to access the balls anyways.\nAlthough I couldn\u0026rsquo;t get every ball back in the track they started in, removing the few balls that were indeed jammed past the top ball return fixed the issue. Is this ball screw going to live forever? Probably not. Does it actually work now? Yessir.\nIt wasn\u0026rsquo;t time to get too excited though, as I was re-assembling the Z axis I noticed something else that didn\u0026rsquo;t look quite right\u0026hellip;\nCoupler Wobble # The coupler between the motor shaft and ball screw was clearly not aligned for both X and Y axes, despite my efforts to shim them to size during assembly.\nYour browser does not support the video tag. That\u0026rsquo;s not supposed to wiggle like that What happened was on top of cheaping out on solid couplers instead of flexible ones, I also mis-sized them. I measured the diameter of the shaft end to be 10mm and assumed both sides were the same, but turns out the side I planned to couple to was actually 9.5mm. Nothing some business card and heat shrink shims can\u0026rsquo;t fix.\nTorquing Out # Though the Z axis was moving well and the screw wobble gone, the problems were not. This was meant to be a yin-yang symbol, but the cut was slow and glitchy. It seemed like it was struggling and dragging the toolhead through mud as it cut.\nThe steppers were skipping steps (the rotor slips out of sync with the stator orientation resulting in no movement at all) as soon as you turned the speed up past ~2500mm/min as you can hear in this clip.\nYour browser does not support the video tag. Moving the Y axis quickly results in rough sounding movement and skipping steps This was happening for both the X and Y axes even though the carriages moved smoothly when disconnected from the ball nuts, the ball nuts themselves spun without resistance, and my earlier calculations suggested that there should have been lots of torque to spare. I ensured the current limit was set to the maximum on the driver, and tried lowering the microstep counts, all to no avail.\nAfter some banging my head against a wall, I found that the TMC2208 motor drivers I was using were by default in a mode (stealthchop) that reduced noise but had reduced torque in practice especially at higher speeds. I also had some cheaper simpler A4988 drivers on hand but had assumed that the more expensive ones would be better in every way.\nI was incorrect, as after setting up and switching to the A4988 drivers, the machine worked at much faster speeds despite the motors being noisier (this doesn\u0026rsquo;t matter at all compared to the sound of a router cutting.)\nYour browser does not support the video tag. Movement after switching drivers In retrospect I realized that I was cutting it way closer to my initial limits than I thought with these motors. Using the following curve we find that the pull out torque at \\(\\dfrac{2000\\textrm{mm/min}}{4\\text{mm}}=500\\text{rpm}\\) is around 1100gcm.\nCredit: StepperOnline PDF This converts to around 10.79Ncm or 0.108Nm which when plugged into our earlier calculation comes to:\n$$F = \\frac{2\\pi \\times 0.108\\,\\text{Nm} \\times 0.70}{0.004\\,\\text{m}} = 118.75\\,\\text{N}$$Which is right at the upper end of the 40N-120N cutting forces I was expecting. This leaves basically no room for error especially at even higher speeds like the 2500mm/min that it was stalling out at with no load. At least the A4988 was able to produce closer to this ideal torque. The TMC2208 could produce more in a different mode, but changing it is a somewhat involved process (more on this later.)\nWith this issue resolved I finished off the spoilboard with some threaded inserts and moved on to the next step.\nElectronics Enclosure # Up until this point I had just been using the exposed arduino powered by a bench top power supply. It was time to set up a permanent solution to power, cool, and protect the components. To this end I planned and modeled the enclosure as shown earlier in the design section. After some printing, soldering, and wiring, there were still a couple hiccups; the internet arduino CAD model I got didn\u0026rsquo;t match up perfectly with my cheap clone and I had to rip the power jack off. It also didn\u0026rsquo;t start up properly until I tried to measure the buck converter voltage with a multimeter and it sparked, but then it worked ever since. Electroshock therapy I guess.\nFirst Real Test # With the enclosure and wiring now in a more permanent and portable state, it was time to try making a real functional part: a small aluminum clamp for work holding.\nThis is where a few things came together to result in me being glad I bought the cheapest endmill set I could find.\nA large factor was my own inexperience in setting up CAM toolpaths, dialing in feeds and speeds, and not using lubricant/coolant for most of the cutting. The cut ultimately failed due to the tape/glue workholding failing, reinforcing my decision to make a clamp as the first order of business.\nAside from this, however, there were also clearly some rigidity issues. Watching the footage the router seemed to flex along the X axis, and the spoilboard (which needed standoffs due to the inserts sticking out,) had a lot of vertical flex to it.\nThe bed would be the first issue to tackle, by simply replacing the 3D printed bed (which was not meant to be a permanent solution) with a bed made of the 1/4\u0026quot; MDF.\nNew Bed and New Problems # To make the new bed I had to drill a bunch of holes in precise positions; good thing I now had a machine that makes this easy.\nI had it cut some holes for mounting to the linear rails, the Y axis coupler, and some large holes for threaded inserts. This went well at first, until I noticed the holes started to not line up with where they were supposed to be, and it started drilling a second hole only millimeters away from the hole it just drilled.\nI assumed the drivers may have been overheating as they will stall when this happens. My suspicions seemed confirmed when I reached into the enclosure and nearly burned my finger touching the heatsink, so I ran the rest of the cut in 5 minute increments which gave it time to cool and allowed it to finish.\nThe bed with some errors due to overheating motor drivers The MDF was much stiffer than the 3d printed bed, as expected.\nNow for some reason here I decided to give another go at cutting the clamp even though I would have to use the bed directly as a spoilboard and the driver issue meant pausing and waiting for it to cool constantly. What could go wrong?\nSecond Real Test # With a stiffer bed and some ideas to try for feeds, speeds, and lubricant, I gave the aluminum clamp another go. This was a good learning opportunity for dialing in feeds and speeds as well as trying out both oil and isopropyl alcohol as lubricants. This time it finally completed with only one endmill down and only some minor defects.\nThe stair step type look was from me not fully tightening the Y axis coupler and it slowly loosening off over the course of the cut, and the slot was from losing the zero position after one of the pauses to let the drivers cool. These issues aside, I was quite happy with how this turned out.\nSpoilboard (again) # I decided to make another spoilboard to top the MDF bed so the bed itself wouldn\u0026rsquo;t need to get remade when replacing it. This time after cutting the holes, threading the inserts, and testing the clamps, I surfaced the bed so it would be level relative to the tool. I definitely should have waited to do the inserts until after surfacing, as running the surfacing cut with the threaded inserts only a couple millimeters deep past the surface was pretty nerve wracking. However, after screwing some in further as needed it finished without self destruction.\nThere was, however, noticeable patterning which seemed due to the router being able to flex in the Y direction.\nThe spoilboard slightly patterned due to the router mount flexing under load More Rigid Mounting # The whole router was able to flex slightly while the carriage stayed rigid, so it was clear that the thin mounts I had made to clamp onto the router were not doing the job.\nAfter modeling and printing a much beefier mount the flex was reduced substantially. Now there was just the overheating issue to handle.\nCooling Things Down # I really didn\u0026rsquo;t want to have to redesign the whole electrical enclosure, so the first thing I tried in order to cool the drivers was to put a shield between the power supply and the drivers. That did nothing, so next I tried to swap back to the TMC2208 drivers which had much larger heatsinks and to change them into \u0026ldquo;spreadcycle\u0026rdquo; mode which should let them produce more torque.\nThis was more complicated than I thought it would be, as it required soldering some pads on the module, connecting to it through a USB to UART adapter and permanently setting some bits in the chip with software.\nAfter all the effort to set those up, they started stalling in around a minute of constant movement, whereas the ones I replaced lasted around 6. So I had no choice but to bite the bullet and design a new enclosure with improved cooling.\nI ran another test with a very makeshift setup of a 12V PC fan blowing over the drivers and it actually worked.\nThe set up with a fan directing air over the drivers with a paper duct After 20 minutes of constant running the drivers barely felt warm, so I designed a new enclosure with a duct directing air from a 12V fan over the drivers.\nIt went together well enough and after another test it worked as expected, finally no stopping cuts every 5 minutes to let things cool down.\nClamp Cutting # It was time for an attempt at the second workholding clamp, this time with improved rigidity, well cooled drivers, better tuned feeds and speeds, better G-code pathing, and a 1/4\u0026quot; endmill instead of a 1/8\u0026quot; one.\nYour browser does not support the video tag. Second Clamp Cut Using the previous workholding clamps, iso for coolant, and quite conservative settings, this cut had the best result so far. The part came out within 0.1mm of the design which impressed me!\nResults and Experiments # After this last test I was finally satisfied in calling this project finished. Though there are many more upgrades and changes that I could make, I resisted the urge I have of scope creeping projects until they never get done, which you may be able to relate to.\nOn the list of eventual upgrades are:\nCreating a dust shoe and vacuum system Setting up functional end stops for automatic homing Re-designing ball nut couplers for increased rigidity and using threadlocker Modifying the router to be controllable with G-code as a spindle But for now, it was time to experiment with what the machine could actually do.\nV-Carve # Using a V shaped bit, you can carve 2d objects using the depth of the bit to thicken the line. This is a functionality built into the FreeCAD CAM workbench, and I did a couple tests with it starting with this simple Hello.\nI made a quick mandala carving which didn\u0026rsquo;t come out perfect, as I learned that MDF can rip out when cutting small delicate pieces with a large depth of cut. The Z axis nut coupler also loosened off causing the router to drop near the end and gouge the piece, a lock nut/threadlocker will prevent this in the future.\nAcrylic Light Up Sign # With a little bit of scrap acrylic, I made a very small engraved acrylic sign and a mount to light it up with LEDs.\nAluminum With Chamfer # To test the chamfer bit I created a small engraved aluminum medallion. Unfortunately I messed up the G-code for the first go at chamfering all the engraved edges causing it to crash and lose the zero point, so it didn\u0026rsquo;t come out perfect, but the chamfer around the edge of the circle still worked well.\nSurfacing # The final test I did was to run a roughing and surfacing operation. FreeCAD doesn\u0026rsquo;t have great functionality for this so I used the free online tool Kiri:Moto to generate these paths instead.\nThis one came out quite nice for a simple test.\nSign and Planter # Some time after the initial build, I had a family event which I made a couple intentionally cheesy woodworking gifts for. The machine stood up well and had no problems cutting small details into black walnut and white oak with a 2mm end mill. I set it up in a cardboard enclosure to contain the sound and dust.\nFinal Thoughts # Overall this project was a lot of fun, and kept me busy and learning during a period in my life where I had a lot of time on my hands. When it comes to designing machines like this I still have a lot to learn, but am very satisfied with the experience I gained making it, and with the usable finished product.\nIf you have any thoughts, tips, or questions feel free to reach out to me or leave a comment on the youtube video (to be released).\nResources # Design Files # FreeCAD Files\nCNC Router Electrical\nSoftware Tools Used # GRBL\nUniversal G-CODE Sender\nFreeCAD\nKiri:Moto\nConfigurator for TMC2208 driver\nResearch References # Milk Cr8 CNC Project\nAnalysis of the Effect of Trochoidal Milling on the Surface Roughness of Aluminium Alloys after Milling\nStepper motor axial loading - Hobby Machinist forum post\nNEMA 17 Stepper Torque Curve - StepperOnline\n","date":"24 December 2025","externalUrl":null,"permalink":"/projects/cncrouter/","section":"","summary":"","title":"Desktop CNC Router","type":"projects"},{"content":" Intro # At the start of 2024 I was working on an online robotics course in my free time, and wanted to create a simple robot to apply some of the theory I was learning. After some research I decided a basic SCARA (Selective Compliance Articulated Robot Arm) style would be an easy place to start, with only 2 degrees of freedom plus a simple end effector.\nI did this project some time before putting this website together and only completed a rough (somewhat) working prototype, but the build and results will be documented here.\nBuild # I had a couple NEMA 17 stepper motors, a pulley and belt kit with belts of various sizes, some bearings, and an Arduino on hand. After ordering some small stepper drivers, I decided to design a simple prototype using just these components. Using FreeCAD I modeled up an arm with equal link arm segment lengths and 4:1 gear ratios from the motors to each joint using the belts I had.\nYour browser does not support the video tag. A simple simulation using the basic modelled links The first joint connecting the base and link was fully press fit, with bearings pressed into the base and a keyed pulley and shaft pressed through the bearings. The motor is simply attached with screws and an adjustable tensioner using bearings as an idler is then installed.\nThe first test using simple code with Arduino, A4988 stepper drivers, and the base plus a test part connected to the joint confirmed the electronics and joint mechanics worked.\nYour browser does not support the video tag. A simple test for the electronics and first joint Assembling the second and third link (arm segments) went well except for the belt skipping due to low tension.\nThis was fixed with a sleeve over the tensioner bearings.\nAfter retrofitting some microswitch end stops for homing, and some Arduino coding, it homed successfully.\nYour browser does not support the video tag. Homing using limit switches After writing some code and fitting a servo controlled pen as the end effector, I tried some simple drawing movements starting with a square. My code definitely had some issues to start, with pulse timing being a problem. I also simply had the joints move from one angle to another calculated angle based on the location given, which resulted in these arcs. Interpolation would be required to make the lines straight.\nYour browser does not support the video tag. A simple test with a servo actuated pen. Attempting to draw a square I then wrote a simple script to draw concentric circles, generating 180 points around each. This resulted in a relatively more accurate drawing, but still nothing pretty.\nfor (int i = 0; i \u0026lt; 8; i++) { for (int j = 0; j \u0026lt; 180; j++) { x = ((40 - i*4) * cos((double)j * 2 / (180 / PI))) + 193; y = ((40 - i*4) * sin((double)j * 2 / (180 / PI))); moveToPos(\u0026amp;lastPosition, x, y, 120); if (j == 0) { penServo.write(penDownDeg); delay(200); } if (j == 179) { penServo.write(penUpDeg); delay(200); } } } Your browser does not support the video tag. A simple test for the electronics and first joint Conclusion # My plan from this point was to program the controller to accept streaming G-code and to write a G-code sender program which could convert an SVG to G-code, and then interpolate points for smooth lines. I got as far as accepting a G-code command through serial and moving to a location, as well as converting a test SVG file to G-code using Vpype, but never got the controller and sender fully working before becoming busy with other things in life.\nSome things that I\u0026rsquo;m looking forward to improving on the next similar project are:\nRigid joints using better bearings and properly joined links (flange/retaining ring) Efficient gearing - to experiment with harmonic/cycloidial drives Better controller code using a more powerful microcontroller Different and more useful end effectors For now I\u0026rsquo;m calling this version of the arm complete as a first experiment, and taking the lessons learned for another robot arm build in the future.\nThis was a rough prototype, but if you want to take a look at the CAD or code, it\u0026rsquo;s available to download here.\n","date":"25 March 2024","externalUrl":null,"permalink":"/projects/scara-arm-v1/","section":"","summary":"","title":"SCARA Arm V1","type":"projects"},{"content":" Intro # I\u0026rsquo;ve enjoyed playing fighting games for a long time, but my hands don\u0026rsquo;t always enjoy them as much as I do. Taking inspiration from tented keyboards that promise better ergonomics when typing, I decided to design a fightstick-style controller that would allow for a more natural hand angle in the same way.\nAn example of an ergonomic keyboard This project was completed some time before putting this website together, but I will include the design process in retrospect as well as the files and bill of materials for anyone wanting to take inspiration from or recreate this project.\nDesign # The plan was to design a 3D printed enclosure, then connect up some off the shelf components that would plug and play for PC gaming. To dip my feet in, I first decided to use this cheap electronics set\nBut I wasn\u0026rsquo;t impressed, and quickly changed my mind once it arrived. I decided to use a better quality board that played well with PS4, as well as a good Sanwa arcade stick and buttons. For the board I decided on the Brook Fighting Board PS3/PS4 as it would plug and play with PC and PS4. These all came to around $80 CAD, which is what I paid for my initial small uncomfortable stick anyway.\nAfter playing around with a few design iterations I arrived at a symmetrical tented enclosure printed in two parts and joined with hardware to try out.\nI slotted the components in and it assembled well for the most part, but was too wide and wasn\u0026rsquo;t any more comfortable than the mini stick I had been using up to this point.\nAfter another iteration where the stick half wasn\u0026rsquo;t tented, I decided to squash it down to a more compact size with standoffs for mounting perfboard with wiring in mind. I also switched to 24mm buttons, as the 30mm buttons I used on the first iteration had to be spaced out more than I liked.\nBuild # The case print had a noticeable layer shift halfway through, but given the print time on the old ender clone printer I had at the time and because this controller was just for me, I used it anyway. (Yes I could have better optimized this for printing and probably could have run it without supports as well)\nThe Brook board could be directly soldered to every switch, but for ease of modification, I wired up all the connections to screw terminals using a small perfboard.\nAfter assembling all the components by press fitting, heat setting inserts, and screwing, I completed the wiring according to the diagram on the Brook board product page.\nThe bottom plate came out slightly too large causing a small layer split when installed, but once again it was perfectly functional for personal use. With the controller complete, I tested it for Street Fighter 6 on the PC and it worked great. The CAD model made using FreeCAD as well as all components used are in the resource links at the end of the article.\nResources # CAD # FreeCAD and STL files: download\nComponents Used # Brook Universal Fight Board: AliExpress\n10x 24mm Sanwa Buttons: AliExpress\n1x 30mm Sanwa Button: AliExpress\nSanwa Arcade Stick Red Ball Top: Amazon\n20x14 perfboard and mini screw terminals (optional)\n10x M4 heat set inserts\n10x M4 screws\n4x washers\nZip ties for organization\nUSB cable, button wires/connectors, and black 24mm buttons used from this cheap kit but your own wire, broken out USB cable, and spade connectors or solder can be used instead.\nAssembly Tips # A 3D printer, filament of choice, and soldering equipment are required.\nFor wiring instructions see the Brook Product Page and connect P1-4 to the top row, K1-4 on the bottom row, and start/select to the buttons on the back. I connected the thumb button to L3 for custom binding in your game of choice.\n","date":"17 December 2023","externalUrl":null,"permalink":"/projects/custom-fightstick-controller/","section":"","summary":"","title":"Custom Fightstick Controller","type":"projects"},{"content":"","date":"14 April 2026","externalUrl":null,"permalink":"/projects/","section":"","summary":"","title":"","type":"projects"},{"content":"My name\u0026rsquo;s Dysen, and this site is where I\u0026rsquo;ll mainly document my personal projects and work I\u0026rsquo;d like to share. You can contact me here\n","date":"14 April 2026","externalUrl":null,"permalink":"/","section":"Dysen Kennedy","summary":"","title":"Dysen Kennedy","type":"page"},{"content":"Hi, I\u0026rsquo;m Dysen. I graduated from SAIT (Southern Alberta Institute of Technology) in 2021 with a diploma in electrical engineering technology, where I discovered a love for working with electrical, computer, and manufacturing tech. Since then, I\u0026rsquo;ve enjoyed taking on 3D modeling/printing, electronics, and programming projects both at work and at home. This is mainly what I\u0026rsquo;ll be posting on this site as a reference for others looking to take on similar projects, as those posts have helped me many times in the past.\nOutside of this, I\u0026rsquo;ve had many, maybe too many, other interests (I\u0026rsquo;m not great at any of them). I\u0026rsquo;ve enjoyed nerding out about fitness and nutrition since 2018, and have helped friends get comfortable in the gym and lose weight by eating right and prepping meals based on macros. Video games were a big part of my life growing up, for fun, to socialize, and for competition. While I achieved some decent results in a couple of these, for the past few years BJJ has been my main sport to scratch that competitive itch as well as to train cardio in the most fun way possible. Since being given my first guitar at 12, I\u0026rsquo;ve also loved playing and listening to music, and I\u0026rsquo;m enjoying exploring the intersection of music and technology, starting with the looper pedal that I\u0026rsquo;m developing now. Finally, I\u0026rsquo;ve been snowboarding since I could walk thanks to my dad bringing me out to the mountains of Alberta whenever he could while I was growing up, and I still get out there when I can.\n","externalUrl":null,"permalink":"/about/","section":"Dysen Kennedy","summary":"","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}]