Workshop detail header
Workshop notes

Mechanical Bitcoin movement

Build logs, machining experiments, watchmaking notes, and lessons from trying to make a mechanical watch shaped by Bitcoin.

This is the main record of the project: what worked, what failed, what changed, and what I learned along the way.

2025/07/21 23:13 UTC
TLDRThe THREE.js CAM demo took its first flight, and it's as exciting as it sounds—think spinning cutters and twirling axes in a browser-based sandbox that's mimicking real machine paths. Watching the toolpath come to life with dynamic movement makes all those coding hours worthwhile. If you're curious, dive into the interactive playground to see this virtual machining magic for yourself. šŸ› ļøāœØ
Show more Show less

Big moment—time to push pixels into motion and see if the browser-based CAM sandbox behaves like a real machine. Spoiler: the cutters danced, the A-axis twirled, and I grinned like a kid with a brand-new loupe. 😊

Watching the path morph in real time made all those late-night refactors worth it. The spindle spins, the passes layer up, and the code footprint shrinks with every arc conversion.

Curious? Load the sandbox, drop a few points, and watch the tools trace air:

Explore the interactive toolpath playground ā†’

Read standalone post

2025/07/19 17:29 UTC
TLDRToday's G-Code update is a game-changer for smoother CNC operations: automatic pass-count adjusts cuts for different materials, arcs are now cleaner, and tool changes are seamless with new M6 support. The new code structure, with its tidy headers and footers, reduces machine downtime and stress, making programming more efficient and satisfying. If you're running a CNC, this update means less manual intervention and more precision—give it a spin and see for yourself! šŸš„šŸ”§
Show more Show less

Today the toolpath builder got a healthy dose of refinement—little tweaks that make the code cleaner, the machine happier, and me way less stressed. Here’s the highlight reel:

  • More passes, smarter chips. Added automatic pass-count logic so the engine tweaks depth and step-over based on cutter diameter. Brass, steel—each material now gets just enough nibbles to keep chatter away without wasting machine time.
  • Arc simplification. Goodbye clunky point-to-point lines! A quick geometry pass converts eligible segments into slick G2/G3 moves. Fewer commands, smoother motion, prettier cutter marks. The spindle feels like it’s gliding on rails. šŸš„
  • Tool-change support. We finally speak fluent M6. Pick one cutter for rough, another for finish, and the post inserts a safe retract, spindle stop, and automatic offset call. No more pausing the CNC mid-cycle to swap tools by hand.
  • G-Code header & footer polish. Kicked off a tidy preamble—units, work offsets, RPM, coolant—so every file starts the same. The footer parks axes, shuts the flood, and drops a cheeky comment that logs cycle time. Consistency really is underrated bliss.
  • Visual reference on every angle. Each time the A-axis rotates, the viewer drops a translucent ā€œghostā€ of the cutter at the new orientation. It’s like leaving breadcrumbs in 3-D space—one glance tells you if the tool is clear of clamps before committing chips.

Watching the code scroll now feels oddly satisfying: fewer characters, cleaner arcs, and that crisp header/footer sandwiching everything into a neat package. Next on deck? I think I'll try it on the machine with an empty stock, but with a mill. šŸ”§āŒšļø

Explore the interactive toolpath playground ā†’

Read standalone post

2025/07/17 22:24 UTC
TLDRDialing in a tool-centering camera is a precision task, almost like a watchmaker's job, but the effort pays off. With a dual-screen setup, neat wiring, and the perfect camera angle, getting those ultra-close shots has become more efficient and civilized. The challenge now is refining the Y-axis tool-centering routine for consistent accuracy, and once the A-axis rotation is perfected, it's full steam ahead with carbide bits. šŸš€
Show more Show less

Took a breather from grinding CVD-tipped carbide bits and gave my eyes (and ears) a treat—camera alignment day! Getting the lens perfectly in line with a tool that’s barely thicker than a hair turned out to be its own little horological adventure.

Today’s mini-wins:

  • Dual-screen holder rig. Whipped up a two-arm stand so the inspection cam and its monitor hover as one unit. No more craning my neck between desk and machine—just glance, tweak, cut.
  • All wired, zero spaghetti. USB, power, HDMI—routed and zip-tied so nothing snags a moving axis. The garage looks… well, almost civilized. 😌
  • Found the sweet angle. A few degrees off-vertical gives just enough depth to judge tool height without hiding the cutting edge in glare. The moment the flute catches the light, you know you’re on plane.

Because the shot is crazy close-up, even stepping in front of the lens nudges the frame. The tripod quivers, focus wobbles—but it’s promising. A chunkier base or maybe a bit of mass-loading clay should calm those micro-tremors.

sketch sketch

Most machinists center a tool by reading the tip’s X/Y, subtracting half the diameter, and calling it good. Easy math—unless your headstock boasts a full Y-axis (tool height) like mine. That third coordinate means the classic ā€œdiameter Ć· 2ā€ trick only gets me halfway. I’m experimenting with a quick probe routine: kiss the tool off a ceramic block, capture the video zero, then jog Y until the flute vanishes beneath a reference line on-screen. Still rough, but at least it’ll be repeatable.

Next up: heading back to those carbide-bit toolpaths—the last puzzle piece is rotating the A axis after every pass so the cutter always meets fresh stock. Lock that in and the chips can finally fly. šŸ”„šŸ› ļø

Read standalone post

2025/07/15 13:10 UTC
TLDRThis blog dives into a slick browser-based toolpath generator using THREE.js and React, transforming sketch or point-cloud inputs into animated, precise cutter paths without the hassle of G-code. Key highlights include spindle animations that visually indicate RPM and load issues, a parametric feed rate that color-codes speed, and easy geometry integration with JSON snippets. The real game-changer? It's all about geometry-driven intent rather than raw code, making it both user-friendly and safer for precision tasks. Perfect for those looking to streamline and visualize their CNC processes! šŸ› ļø
Show more Show less

Another sprint in the virtual workshop and the browser-based toolpath generator keeps getting sharper. What started as a proof-of-concept—rendering cutter sweeps in THREE.js—now feels like a pocket-CAM you can open in a tab. The latest drop trades raw G-code import for something a little smarter: you sketch or paste a cloud of points, choose an offset distance, and the engine morphs that outline into a tight, back-and-forth tool dance complete with automatic retracts. No post-processor, no syntax errors—just pure geometry turned into motion.

Milling-bit animations. The spindle finally spins on screen! Each virtual tool carries its own loop keyed to your feed-slider, so a 12 000 RPM rougher whirls visibly faster than a 2 000 RPM finisher. It’s more than eye-candy: the motion helps spot mismatched step-overs at a glance—if the cutter’s screaming yet progress crawls, you know the chip load is off.

Parametric feed rate. Instead of parsing an F-word from G-code, a single slider now drives the linear feed for every segment the engine creates. During playback the toolpath hue shifts from cool blues at gentle feeds to warm ambers when you start pushing the limits. One glance tells you if your brass rough pass is baby-slow or your carbide micro-bit is about to cry.

Plug-and-play geometry. A refactor of the component library means adding new cutter shapes or diameters is basically a one-liner. Drop a JSON snippet—{ "type": "ballEnd", "diameter": 0.12 }—and the scene pulls in a pre-scaled STL, mounts it in the spindle, and wraps collision boundaries around the business end. Ideal when you’re juggling watch-scale tooling: need a 0.07 mm carbide ball nose? Pop it in, hit save, done.

Scroll-through collision hunt. The timeline now sports a buttery scrollbar that lets you scrub every move frame-by-frame. Potential crashes flash crimson, the camera snaps to the offending vertex, and the point-cloud offset updates live so you can widen clearances without playing detective. On a 4-axis barrel-arbor job—thousands of tiny A-rotations—that feature already saved me hours of forehead-denting.

Shape morphing instead of G-code. Here’s the big architectural twist. Rather than feeding the simulator raw NC code, you define intent: points that describe the part’s silhouette or an engraving loop. The engine expands that outline by your chosen distance, zigzags across the interior with an automatic step-over, and inserts retract hops at the boundaries. It then feeds those moves straight into the animation layer. Less control for now, but zero chance of a missing G00 sending the spindle through the table. Baby steps, but safe ones.

Tidy React hooks. Under the hood, React keeps state crisp while THREE.js handles shaders and meshes. I tossed out the imperative spaghetti, replaced it with functional hooks, and tidied context so the codebase finally feels as clean as the renders. Next stop: physics shaders so the chip-fling direction changes when the spindle tilts. Because why not? šŸ› ļø

Explore the interactive toolpath playground ā†’

Read standalone post

2025/07/12 15:33 UTC
TLDRI just laid out a 3-stage plan to craft micro-cutters from solid carbide using a 4-axis CNC, all before making the first cut. The stages—coarse roughing, detail roughing, and edge finishing—are meticulously planned to ensure precision and a flawless finish. While Fusion 360 lacked some finesse, I created a custom toolchain to overcome its limitations, aiming for perfection in crafting intricate watch parts. šŸš€
Show more Show less

Quick Recap āš™ļø

Hey there, fellow watch-tinkerers! I’m still deep in big-whiteboard territory—sketching every wheel, pivot, and bridge for my future movement while learning the nuances of a freshly built 4-axis CNC setup. No chips have flown—yet—but today I pinned down the machining playbook for two fully-sintered carbide micro-cutters. Each cutter will sculpt module 0.13 teeth on both the wheel and its mating pinion. Laying rock-solid foundations now should make first-cut day feel almost calm. šŸ™‚

Explore the interactive toolpath playground ā†’

Today’s Deep Dive: Simulating the 3-Stage Cutter Strategy

Both cutters share the same three-step journey; only the final edge profile changes—one hugs the broader wheel involute, the other traces the slimmer pinion flank:

  1. Stage 1 – Coarse Roughing
    Planned tool: ⅛″ (3.175 mm) CVD round-end mill from Harvey Tool
    Workpiece: Ƙ 6 mm solid-carbide blank
    Simulated spindle: 30 000 RPMā€ƒ|ā€ƒRadial DOC: 8 µmā€ƒ|ā€ƒAxial step-down: 60 µm

    This first pass slims the 6 mm blank to about 2.2 mm in the cutting zone. Fusion 360’s adaptive roughing, paired with an 8 % synthetic-coolant mix, keeps simulated spindle load under 40 % and temperatures steady.

  2. Stage 2 – Detail Roughing
    Planned tool: 1 mm CVD square-end mill
    Simulated spindle: 35 000 RPMā€ƒ|ā€ƒRadial DOC: 4 µmā€ƒ|ā€ƒAxial step-down: 40 µm

    This pass shapes the shank relief and rough involute flanks to ±0.02 mm, leaving 30 µm for finishing. A mist-plus-air blast in the simulation prevents heat spikes while the A-axis keeps the blank rolling smoothly.

  3. Stage 3 – Edge Finishing
    Planned tool: the same 1 mm bit, side-milling with its flute edge
    Simulated spindle: 38 000 RPMā€ƒ|ā€ƒRadial DOC: 1 µmā€ƒ|ā€ƒAxial step-up: 5 µm

    Pure climb cuts deliver a predicted mirror finish of Ra ≤ 0.15 µm. Wheel and pinion curves are saved as separate ā€œtraceā€ paths, swapped in at post time.

Where Fusion 360 Fell Short—and the DIY Detour šŸ› ļø

Fusion handled bulk removal nicely, but it simply wouldn’t allow multipass refinement when using multi-axis strategies like Swarf or Flow. Rather than compromise, I built a home-grown toolchain: TypeScript + THREE.js for 3-D visualization, plenty of trig to unwrap toolpaths, and ChatGPT to sanity-check the math. The script now exports blend-free G-code with helical lead-outs—something Fusion can’t (yet) do—so every line is under my control.

Target metrology: OD 2.000 ± 0.005 mm, tooth height 0.300 ± 0.003 mm—numbers I’ll verify in situ once the cutters arrive. Imagine neon toolpaths swirling like a galaxy instead of metal chips and you’ll have the idea. šŸš€

Next Steps šŸ”§

  • Receive & loupe-inspect the Harvey Tool CVD mills (20Ɨ check on every flute).
  • Clock run-out to < 3 µm in the ER-20 collet system.
  • Dry-run Stage 1 G-code above a foam dummy to confirm clearances.
  • Tweak coolant-nozzle positions for uninterrupted chip evacuation.

Sign-off & Call-to-Action

Thanks for following along! If you’ve broken-in CVD tooling or have hard-won tips for ultra-fine gear cutting, I’d love to hear them—drop a reaction below or reach out on Nostr at @bitcoinwatchmaker. Your insights help turn these plans into perfectly cut teeth. šŸ™Œ

Read standalone post

2025/07/10 17:27 UTC
TLDRFusion 360's manufacturing extension isn't cutting it (literally) for precise multi-pass G-code tasks, frustrating even after forking out for it. So, instead of settling, I whipped up a custom solution using Vite and THREE.js to generate the G-code I needed. Sometimes DIY is the only way to get what you want, especially in CNC milling. šŸ’»āœļø
Show more Show less

OH MY GOD. Fusion is great... but it can be painful.

All I wanted was a simple G-code pass — just take the CVD-coated mill bit and slowly shape it, one layer at a time.

But nope. Even after paying for the manufacturing extension, Fusion won't do it. Swarf? No multi-pass. Rotary parallel? Same story. Always goes deep. Always skips the careful steps I need.

What is this? this is a tool to cut the gear teeth which are super specific, delicate, so im having to mill fully sintered carbide, with diamond coated (CVD) tools, freaking carbide is what cuts everything else... this according to chatgpt is the limit of what can be done in CNC... not bad for a newbie haha

So... time for the long route. Built a Vite app. Hooked it up with THREE.js. Loads an STL and spits out the G-code I actually want šŸ’»āœļø

Normally I cant opensource things due to the NIHS rules being implemented everywhere, this I can if anyone wants it let me know

Read standalone post

2025/07/10 16:29 UTC
TLDRThe Train-of-Wheels script just got a significant upgrade: it now assembles everything from wheels to rubies with a single click and fine-tunes rotations for perfect symmetry. The standout? A Bitcoin 10-minute complication that’s ready to tick along blockchain time. Next, the focus shifts to crafting precise carbide bits for ultimate watchmaking precision. šŸ› ļøāŒšļø
Show more Show less

Big milestone today—the script now spins up wheels, staffs, and a full mainspring barrel in one click, then drops rubies into custom holders like it’s dealing cards at Monte Carlo.

Materials snap into place too—brass for wheels, polished steel for staffs, deep-red ruby jewels, and a flash of blued steel where it counts—so the CAD preview already looks heat-blued and bench-ready.

The real magic? A tidy joint system that lets me dial each rotation until the whole train lines up in picture-perfect symmetry. I also reworked the clearances between wheels so the bridges drop in clean and pick up those sweet 0.07 mm chamfers without a fuss. Watching it lock in is pure watch-nerd bliss.

Bonus win: after some head-scratching I finally found the sweet spot for the Bitcoin 10-minute complication—a pinion driving a wheel that meshes with an inner gear. Woah, can’t wait to see that block-time tick! ₿

Next up: diving into milling fully-sintered carbide bits shaped to match each tooth profile—turning pixels into cutting edges one micron at a time. Stay tuned! šŸ› ļøāŒšļø

sketch sketch

Script also adds the cuts so the wheel and pinion can be joined

sketch

Read standalone post

2025/07/03 20:08 UTC
TLDRI'm refining my watch design by choosing specific jewels for different parts: olive ring jewels with dual oil cups for the center and fourth wheel staffs, and a mix of olive/bombe and straight ring jewels for the escapement. I've also introduced a jewel holder, which will make maintenance easier and might allow for some cool material experiments like heat bluing. šŸ”§šŸ”µ
Show more Show less

Kept pushing the script forward — this thing’s growing fast.

Settled on three jewel types. For the center and third wheel staffs, I’m using olive ring jewels with 2 oil cups on the bottom (dial side), and olive/bombe ring jewels on top (plate side).

Fourth wheel gets the same: olive with 2 oil cups. For the escapement, I’m going with one oil cup olive jewel on the bottom and a straight ring jewel with oil cup facing the dial.

Also added a jewel holder to the mix. Makes future servicing easier šŸ”§ and gives me room to explore materials and maybe some heat bluing šŸ”µ

sketch sketch

Olive ring jewel with 2 oil cups

sketch

Olive/Bombe ring jewels

sketch

Straight ring jewel with oil cup

sketch

Read standalone post

2025/07/02 20:42 UTC
TLDRRealized a tiny error in my calculations could throw everything off, so I went back to basics: recalculated gear ratios with AI's help and aligned everything to NIHS standards. Now, it’s precise and ready for the next steps, like adding Bitcoin features and jewel positions, one careful step at a time. šŸ› ļøšŸ“
Show more Show less

Rushed ahead a bit... then realized the numbers weren’t lining up. Even the tiniest error matters here.

So I paused. Took a step back. Recalculated everything šŸ”

Wrote a script — with a little help from AI šŸ¤– — to find the exact gear ratios I need. No guessing. Just clean math.

Then came the drawing script, built to match those ratios and follow NIHS standards to the dot šŸ“

Now it feels solid. Precise. On track.

I’ll keep building on this — adding the Bitcoin complication ā›“ļø, jewel positions šŸ’Ž, and initial bridges. One step at a time.

sketch sketch sketch

Read standalone post

2025/06/18 19:44 UTC
TLDRYour lathe is finally set up and ready to work after a lot of trial and error, including rebuilding it from the ground up due to some serious manufacturer issues like vibrations and bad software. You’ve now got a solid tool setup and tackled a steep learning curve with electronics, thanks in part to some crucial help from Alexis. Next up: refining your machining skills and creating some intricate mechanical art. šŸŽØšŸ› ļø
Show more Show less

After weeks of learning, mistakes, and exciting breakthroughs — the lathe is finally good to go! šŸ› ļø

I had to remake the backplate three times due to different layouts. The lathe's travel is limited, so I had to get creative. But now it’s dialed in and solid.

āš ļø Manufacturer Woes (Mucho NO recommendo)

To be honest — the manufacturer did a terrible job on this lathe. It came with:

  • Insane vibrations
  • Super loud noise during operation
  • Broken and unconfigurable software
  • Default tool change macro that literally caused a collision 😤

That mess sent me down the rabbit hole of rewiring, reprogramming, and rebuilding much of the system from scratch. Painful… but I now know the machine inside out!

lathe setup

šŸ”© Current Tool Setup (4 Tools)

  1. HSS Cutting Tool — hand-ground by me at a 45° angle. My first toolmaking experiment!
  2. Micro 100 Grooving Tool — fantastic for tight grooves and channeling.
  3. Cutout Tool — great for partying shapes with high precision.
  4. Drill Fixture — holds fixed drills securely for consistent center holes.

āš™ļø Motor: The Real Challenge

motor setup

The motor was the trickiest part. I used a Teknic ClearPath Integrated Servo Motor, paired with a power supply, analog send unit, and 22 AWG cables. I’ve never worked with electronics before — so learning to use a multimeter, solder, crimp, and protect everything properly was a major win.

wiring setup

Big thanks to Alexis — couldn’t have done this without his help! šŸ™

šŸŒ€ Spindle & Drive

I went with a Power Twist V-belt. Pulleys are almost 1:1, and even though there’s some drop in RPM (from 2520 to 2320), it feels solid and precise so far.

belt setup

āœ… Past Weeks Recap

  • Polished the keyless works, winding mechanism, bridges, and barrel arbor
  • Aligned the Elara 4th axis to within 0.01°
  • 3D printed the case, revised leg length to avoid scratches
  • Built a new brass fixture for 3.0mm stock (no more Loctite hacks!)
  • Achieved 2μm precision in XYZ on the Elara mill
  • Got replies from Incabloc and updated the balance staff accordingly
  • Started grinding my own lathe tools from HSS bar stock
  • Published all blog updates via Nostr — auto-summarized with ChatGPT

šŸ”® What’s Next?

  • Finish the balance staff with final jewel specs
  • Cut, test, and compare Micro 100 vs HSS tools
  • Design and fabricate the elusive crown gears
  • Improve pulley ratios and optimize RPM at the spindle
  • Figure out how to secure the movement inside the case
  • Start polishing and finishing parts for real assembly!

Super excited for what’s coming! Let’s make some beautiful, tiny mechanical art šŸŒ€āœØ

Read standalone post

NOSTR:

npub1nvhq9vgkpahlugwcf3jsnpaq5lj3w3rk6lknnvf9r8h8ft2ja2asaqcn2a
npub1nvhq9vgkpahlugwcf3jsnpaq5lj3w3rk6lknnvf9r8h8ft2ja2asaqcn2a
Copyright 2025 The bitcoin watchmaker