惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
小众软件
小众软件
The Cloudflare Blog
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
美团技术团队
WordPress大学
WordPress大学
罗磊的独立博客
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Last Week in AI
Last Week in AI
月光博客
月光博客
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
GbyAI
GbyAI
B
Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
Creating a Pulsing Conducting Baton - Part 1
bertwagner · 2026-05-18 · via Hacker News: Show HN

Train Wreck

The last time I watched a high school band nearly fall apart mid-performance was when the relatively new, certainly nervous band director started the piece off much faster than what the students could play.

I felt bad for the students, the director, and the audience. I cringed watching it, and I sat there silently hoping that the group could keep control of the piece until finally barreling through to the end. As they did, I could feel the audience let out a sigh of relief as we applauded for not witnessing a complete train wreck.

This experience sparked the idea to build a discreet metronome that could be embedded in the handle of a conducting baton. It would pulse vibrations into the conductor's fingertips and palm, discreetly indicating the correct tempo.

A traditional baton and its eventual technological replacement A traditional baton and its eventual technological replacement.

This post outlines the challenges I encountered and the steps I took to turn this idea into reality.

Cramming in All the Parts

From the outset I knew this would be a challenge to build because I would have to fit a lot of components into a small footprint:

  • Input(s) to set the tempo.
  • A way to display the selected tempo.
  • Some type of motor to vibrate the baton handle.
  • A button(?) to turn the device on/off.
  • A chip to run the code and connect all the components.
  • A rechargeable battery, and USB-C plug for charging.

After ordering a variety of components to play around with and seeing what felt best, I settled on: - A rotary encoder with push switch to handle dialing in the tempo and turning the device on/off. - An OLED display for showing the tempo. - A LiPo battery and prebuilt USB-C LiPo charging board. - An ATtiny84 to run the show.

Coding Blind: When Agents Can't See the Hardware

While I regularly use Claude Code for developing websites and python scripts, this was the first project I'd use it to write, compile, and flash the code onto a microcontroller. My setup didn't let me debug directly on the microcontroller, so the coding agent never knew whether its changes worked.

Normally when I use a coding agent to help me, I instruct it what the expected outcome should be and it can keep throwing metaphorical spaghetti against the wall until it sees what sticks (because it knows what the definition of success is). In this scenario, it would develop the code and then I would have to physically push some buttons on the hardware to test whether the code worked or not. I was part of the feedback loop back to Claude Code, updating it with what behaviors were happening on the physical device. This was a slow process, taking up to 30 seconds to write code, flash it, and test whether the changes were working.

Another challenge with this project was that even though the code running on the ATtiny is simple, getting Claude Code to correctly understand how the various hardware components were wired together was a nightmare.

Initially I tried providing data sheets to Claude so it could understand the pinouts of each part. That didn't work great, so eventually I used that information to populate the CLAUDE.md file with both component pinouts and how they were all wired to each other. I didn't keep track of exactly how many times I was burned by Claude hallucinating an incorrect connection between component pins, but it was frequent enough to be frustrating.

Trying to get this information as clear as possible in CLAUDE.md eventually helped, but it still was not perfect. Every time Claude modified the code, I had to check that the working pin numbers stayed put.

First Time Trusting a $5 PCB

Breadboard prototype Breadboard prototype.

With the breadboard working, I started packing everything into the smallest footprint I could. I've never used custom PCBs (sometimes to my detriment), but for this project I thought it would be necessary in order to cut down on the bulk of wires between the components.

I chose KiCad for developing the board, since it seemed popular and capable of doing everything I needed it to do. This video on YouTube by HTM Workshop was amazing at walking me through the whole process from drawing the schematic to submitting the order to the PCB manufacturer. The KiCad schematic The schematic in KiCad.

The first thing I needed to create was the schematic. Picking components and wiring them was straightforward, including creating custom components that weren't in the KiCad built-in library. Once I completed the schematic, I printed it out and had my 8-year-old son build it on breadboard to ensure the schematic was accurate. He had fun building a "real circuit," and I got a free QA tester to double check my work.

3d render of the board from KiCad 3d render of the board from KiCad.

With the schematic complete, I then had to select the packaging of parts for my circuit. I chose all through-hole parts (because that's what I had available from breadboarding the design), and it was at this stage I realized the final device would probably be too bulky. I pressed ahead anyway, figuring I should reserve judgement until I held an assembled board.

After labelling the components on the board for easier assembly, I sent the design to JLCPCB and a couple of weeks later the custom-made PCBs arrived in the mail: Manufactured PCB Look at all those connections I don't need to run wires between.

Assembling, Printing, and Rethinking

Front of the device displaying the tempo Front of the device displaying the tempo.

Back of the device with everything crammed in Back of the device with everything crammed in. The tape is temporarily holding down the battery.

Soldering the components to the PCB was easy (for $5 shipped, I think this is worth doing for all of my future projects) and soon I had a working device.

Watch this video on YouTube

The last step was to 3d print a handle enclosure. I struggled to get the design I wanted in Fusion 360 because I only have experience modeling boxes. For the handle to be comfortable to hold, it would need to be a little bit more organic:

A case that doubles as the handle Trying to design something that will be comfortable to hold and 3d print well.

Eventually I got an acceptable version and printed it:

3d printed case handle I didn't bother cleaning up this print since it was throwaway, but it confirmed that the printing quality would be good enough for what I wanted.

I knew this design would be too large for most hands, so I didn't finish fully modeling it. I did want to test the new wood PLA I bought for this project however, so I still printed the unfinished model to test its ability to be sanded smooth (it took to sanding well).

Things to Change in V2

While this first version is functional, it still needs to be smaller. To achieve this, I want the next iteration to include the following improvements:

  • Integrate the open source Adafruit LiPo battery charging circuit directly onto my PCB to save space.
  • Use SMD components where I can to save space.
  • Maybe look into a linear resonant actuator instead of a pager motor. This might end up being easier to fit into the enclosure than the motor.
  • Add mounting holes to the PCB. I thought I could 3d model a perfect fit, but quickly realized this is a giant pain. It's way easier to model some screw posts and mount the board to those.
  • Plan to attach the vibrating motor and encoder dial to the enclosure instead of mounting them directly to the PCB.

Overall I'm thrilled with how this initial version came out and I'm excited to begin working on the next version.