MoreRSS

site iconHackadayModify

Hackaday serves up Fresh Hacks Every Day from around the Internet. Our playful posts are the gold-standard in entertainment for engineers and engineering enthusiasts.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of Hackaday

弗兰肯引擎在15000转时奏响自己的天鹅之歌

2025-12-04 05:00:25

Two four-cylinder engines mechanically linked and exhausting into a trombone.

Back during WWII, Chrysler bodged five inline-6 engines together to create the powerful A57 multibank tank engine. [Maisteer] has some high-revving inline-4 motorcycle engines he’s trying to put together too, but unlike 1940s Chrysler, he also has a trombone… and a lot more RPMs to deal with.

The Chrysler flatheads were revving at a few thousand RPM– their redline was almost certainly in the three-thousand range. [Maisteer] is working at 15,000 RPM, which is where the real challenge of this build lies: the trombone in the image is just for fun. He wanted to use a heavy chain to link the crankshafts, but at that rotational speed, a heavy chain becomes really heavy— or at least, it feels a force many times its weight due to centrifugal force. The lietmotief of this video is a quote by an automotive engineer to the effect that chains don’t work over 10,000 RPM.

That leads to a few problems for the intrepid “not an engineer” that take most of the video to deal with and ultimately doom the engine linkage– for now. Not before he gets an iconic 8-cylinder sound out (plus some fire) out of a trombone, though. Of particular note is the maker-type workflow Hackaday readers will appreciate: he 3D scans the engines, CADs up parts he needs and sends away to have them CNC’d and SLS printed.

Hacking motorcycle engines into cars is nothing new. Hacking them together into franken-engines is something we see less often.

Thanks to [Keith Olson] for the tip! Remember, if you want to toot your own horn– or toot about someone else’s project, for that matter–the tips line is always open.

FLOSS Weekly 第857期:SOC化

2025-12-04 03:30:07

This week Jonathan chats with Konstantinos Margaritis about SIMD programming. Why do these wide data instructions matter? What’s the state of Hyperscan, the project from Intel to power regex with SIMD? And what is Konstantinos’ connection to ARM’s SIMD approach? Watch to find out!

Did you know you can watch the live recording of the show right on our YouTube Channel? Have someone you’d like us to interview? Let us know, or have the guest contact us! Take a look at the schedule here.

Direct Download in DRM-free MP3.

If you’d rather read along, here’s the transcript for this week’s episode.

Places to follow the FLOSS Weekly Podcast:


Theme music: “Newer Wave” Kevin MacLeod (incompetech.com)

Licensed under Creative Commons: By Attribution 4.0 License

3D打印:那台新型彩色打印机

2025-12-04 02:00:41

Art of 3D printer in the middle of printing a Hackaday Jolly Wrencher logo

Color 3D printing has gone mainstream, and we expect more than one hacker will be unpacking one over the holidays. If you have, say, a color inkjet printer, the process is simple: print. Sure, maybe make sure you tick the “color” box, but that’s about it. However, 3D printers are a bit more complicated.

There are two basic phases to printing color 3D prints. First, you have to find or make a model that has different colors. Even if you don’t make your own models (although you should), you can still color prints in your slicer.

The second task is to set the printer up to deal with those multiple colors. There are several different ways to do this, and each one has its pros and cons. Of course, some of this depends on your slicer, and some depends on your printer. For the purposes of this post, I’ll assume you are using a Slic3r fork like Prusa or OrcaSlicer. Most of the lower-priced printers these days work in roughly the same way.

Current State of Color

In theory, there are plenty of ways to 3D print in color. You can mix hot plastic in the nozzle or use multiple nozzles, each loaded with a different color. But most entry-level color printers use a variation of the same technique. Essentially, they are just like single-nozzle FDM printers, but they have three extra pieces. First, there is a sensor that can tell if filament is in the hot end or not. There’s also a blade above the hot end but below the extruder that can cut the filament off cleanly on command. This usually involves having the hot end ram some actuator that pushes the spring-loaded knife through the filament.

The third piece is some unit to manage moving a bunch of filaments in and out of the hot end. Everyone calls this something else. Bambu calls it an AMS while Flashforge calls it an IFS. Prusa has an MMU. Whatever you call it, it just moves cold filament around: either pushing it into the extruder or pulling it out.

Every filament change starts with cutting the filament below the extruder. That leaves the stringy melted part down in the nozzle. Then the extruder can pull the rest up until the management unit can take over and pull it totally out of the hot end/extruder assembly. That’s why there’s a sensor. It pulls until it sees that the extruder is empty or it times out and throws an error.

Then it is simple enough to move another filament back into the extruder. Of course, the first thing it has to do is push the leftover filament out of the nozzle. Most printers move to a bin and extrude until they are sure the color has changed. However,  there are other options.

Even if you push out all the old filament, you may want to print a little waste piece of the new filament before you start printing, and this is called a purge block. Slicers can also push purge material into places like your infill, for example. Some can even print objects with the purge, presumably an object that doesn’t have to look very nice. Depending on your slicer, printer, and workflow, you can opt to print without a purge block, which can work well when you have a part where each layer is a solid color. Some printers will let you skip the discharge step, too, which is often called “poop.”

One caveat, of course, is that all this switching logic takes time and generates waste. A good rule of thumb is to try to print many objects at one time if you are going to switch filament, because the changes are what take time and generate waste. Printing dozens of objects will generate essentially the same amount of waste as printing one. Of course, printing a dozen objects will take longer than a single one, but the biggest part of the time is filament changes, which doesn’t change no matter how many or few you print.

Get Ready to Print

Painting in Orca Slicer

We’ve talked before about creating your own color objects. We’ve even seen how to do it in TinkerCad. Of course, you can also load designs that already have color in them. However, there are several different ways to put color into an otherwise monochrome print.

First, you can take a regular print and use your slicer’s paint function to paint areas with different colors. That works, but it is often tedious, and for complex shapes, it is error-prone. Another downside is that you can’t really control the depth easily, so you get strange filament shifts inside the object if you do it that way.

In Orca, you can select an object in the Prepare screen and then use N, or the toolbar, to bring up the paint color dialog. From there, you can pick a brush shape, pen size, and color. Then it is easy to just paint where you like by left-dragging. You can remove paint by pressing Shift while clicking or dragging. Press the little question mark at the bottom left to see other options.

Once you make a color print, the slicer will automatically place a purge block for you unless you turn it off. Assuming you use it, it is a good idea to drag it on the build plate to be closer to the print, which can shave a few minutes of travel time.

From Many, One

Possibly the easiest way, other than not printing in color, of course, is to have each part of the model that needs to be one color as a separate STL file, as we talked about in the previous post. You tell the slicer which part goes with which filament, and you are done.

In Orca, the best way to do this is to import several STL models at one time. The software will ask you: “Load these files as a single object with multiple parts?” If you agree, you get one object made of individual pieces.

The resulting object won’t look much different until you go to “Process”, on the left-hand side of the screen, and switch from the default Global to Objects. From there, you’ll see the objects and their components. At first, each one will be set to the same color, but by clicking on the color box, you can assign different colors. In the screenshot, you’ll see two identical objects, each with two parts. Each part has a different color. The number is the extruder that holds that color.

Two filament changes are all it takes to make this nice-looking ornament

There is another way, though. You can avoid almost all of the waste generation and extra time if your model is designed so that each layer is a single color. People have done this for years, where you put a pause in your G-code and then switch filament manually. The idea is the same but the printer can switch for you. For example, the Christmas Tree ornament uses two filament changes to print white, then green, then white again. This works great for lettering and logos and other simple setups where you simply need some contrast.

In Orca, you’ll want to slice your model once and switch to the preview tab. Using the vertical slider on the right-hand side, adjust the view until it shows you where you want the filament change. Then right-click and select “Change Filament.” This is the same way you add a pause if you want to change filament manually, for example.

If you use this method, remember to turn off the purge block. You don’t really need it.

Summary

So now, when you unwrap that shiny new multimaterial printer, you have a plan. Get a color model or color one yourself. Then you can decide if you need color changes or full-blown, and waste-prone, color printing. Either way, have fun!

那块充电宝并不那么甜蜜

2025-12-04 00:30:47

An unlikely hit of the last few months’ consumer hardware has been a power bank branded by the German confectionery company Haribo. It first gained attention in backpacking circles because of its high capacity for a reasonable weight, and since then has been selling like the proverbial hot cakes. Now Amazon have withdrawn it from their store over “A potential safety or quality issue”. The industrial imaging company Lumafield have taken a look at the power bank with a CT scanner, to find out why.

As you might imagine, the power bank is all battery inside, with pouch type lithium ion cells taking up all of the space. Immediately a clue appears as to why Amazon withdrew them, as the individual layers of the cells are misaligned, laying open a risk of failure. They also take a look at a set of earbuds from the same source and find something even more concerning — torn electrodes. Thus neither device can be regarded as safe, and the backpackers will have to haul around a little bit more in the future.

You’ll not find the Wrencher on a power bank, but you can be sure if you did, we’d make sure there was an element of quality control at play. Meanwhile we feel slightly sorry for the branding executive responsible at Haribo, who we are guessing has had a bad day. We’ve featured Lumafield’s work here before quite a few times, most recently looking at similar defects in 18650 cells.

在其中我用振动代码创建了一个个人图书馆系统

2025-12-03 23:00:29

When I was a kid, I was interested in a number of professions that are now either outdated, or have changed completely. One of those dreams involved checking out books and things to patrons, and it was focused primarily on pulling out the little card and adding a date-due stamp.

Of course, if you’ve been to a library in the last 20 years, you know that most of them don’t work that way anymore. Either the librarian scans special barcodes, or you check materials out yourself simply by placing them just so, one at a time. Either way, you end up with a printed receipt with all the materials listed, or an email. I ask you, what’s the fun in that? At least with the old way, you’d usually get a bookmark for each book by way of the due date card.

As I got older and spent the better part of two decades in a job that I didn’t exactly vibe with, I seriously considered becoming a programmer. I took Java, Android, and UNIX classes at the local junior college, met my now-husband, and eventually decided I didn’t have the guts to actually solve problems with computers. And, unlike my husband, I have very little imagination when it comes to making them do things.

Fast forward to last weekend, the one before Thanksgiving here in the US. I had tossed around the idea of making a personal library system just for funsies a day or so before, and I brought it up again. My husband was like, do you want to make it tonight using ChatGPT? And I was like, sure — not knowing what I was getting into except for the driver’s seat, excited for the destination.

Vibing On a Saturday Night

I want to make a book storage system. Can you please write a Python script that uses SQL Alchemy to make a book model that stores these fields: title, author, year of publication, genre, and barcode number?

So basically, I envisioned scanning a book’s barcode, pulling it up in the system, and then clicking a button to check it out or check it back in. I knew going in that some of my books don’t have barcodes at all, and some are obliterated or covered up with college bookstore stickers and what have you. More on that later.

First, I was told to pip install sqlalchemy, which I did not have. I was given a python script called books_db.py to get started. Then I asked for code that looks up all the books and prints them, which I was told to add to the script.

Then things were getting serious. I asked it to write a Flask server and a basic HTML front end for managing the books in the system. I was given the Flask server as app.py, and then some templates: base.html to be used by all pages, and index.html to view all the books, and add_book.html to, you know, add a new book. At that point, I got to see what it had created for the first time, and I thought it was lovely for a black and white table. But it needed color.

Yeah, so I’ve been busy adding books and not CSS color keywords to genres lately.

Check It Out

This is a great book, and you should read it whether you think you have a problem or not.

I asked the chat-thing for features and implemented them piecemeal, as you do if you’re not a masochist. First up was a cute little trash-can delete-button for every entry. Then it was time to set up the CheckoutEvent. Each of these events records which book it belongs to, whether it’s a check-out or check-in event, and the timestamp of said event. Of course, then it was time to get the checkout history wired to the front-end and accessible by clicking a book’s title.

All I really had to do was add a history route to app.py, update index.html to make the titles clickable, and create the book_history.html it spat out. Then I had it add the buttons for checking in and out on the new checkout history page, which involved adding routes to app.py as well as a helper to compute the current status.

Then it had me modify the history route and update book_history.html with the actual buttons. And they’re super cute, too — there’s a little red book on the checkout button, and a green book on the check-in.

Barcode Blues

On the index.html page, can you add a barcode number-based search box? And when the user searches, redirect them to the book page for that barcode?

Now it was time to get the barcode scanning situation up and running. I was sure at some point that ChatGPT would time me out for the night since I use the free model, but it just kept helping me do whatever I wanted, and even suggesting new features.

I wanted the barcode handling to be twofold: one, it should definitely pull the checkout page if the book exists in the system, and it should also definitely go to the book-entering page if not.

Yes — that’s a great workflow feature.
We’ll add a barcode search box to your index page, and when someone submits a barcode, the app will:

  1. Look up the book by barcode

  2. Redirect straight to that book’s checkout history page

  3. Show a nice error if the barcode doesn’t exist

I did what it told me, adding a barcode search route in app.py and updating the index() route to use it. I then added its barcode search form to index.html. It was at this point that I had to figure out a way to generate barcodes so I could make little stickers for the books that lack them entirely, or have otherwise obliterated ones.

I have a pretty basic 1D barcode scanning gun, and it won’t scan everything. As I soon found out, it prefers fake EAN barcodes to UPCs altogether. I finally found an online barcode generator and got to work, starting with a list of randomly-generated numbers I made with Excel. I decided I wanted all the fake barcodes to start with 988, which is close enough to the ISBN 978 lead-in, and happens to use my favorite number twice.

We took a brief detour as I asked the chat-thing to make the table to have ascending/descending sorting by clicking the headers. The approach it chose was to keep things server-side, and use little arrows to indicate direction. I added sorting logic to app.py and updated index.html to produce the clickable headers, and also decided that the entries should be color-coded based on genre, and implemented that part without help from GPT. Then I got tired and went to bed.

The Long, Dark Night of the Solo Programmer

I’m of a certain age and now sleep in two parts pretty much every night. In fact, I’m writing this part now at 1:22 AM, blasting Rush (2112) and generally having a good time. But I can tell you that I was not having a good time when I got out of bed to continue working on this library system a couple of hours later.

There I was, entering books (BEEP!), when I decided I’d had enough of that and needed to try adding more features. I cracked my knuckles and asked the chat-thing if it could make it so the search works across all fields — title, author, year, genre, or barcode. It said, cool, we can do that with a simple SQLAlchemy or_ query. I was like, whatever, boss; let’s get crazy.

Can you make it so the search works across all fields?

It had me import or_ and update the search route in app.py to replace the existing barcode search route with a generalized search using POST. Then I was to update index.html to rename the input to a general query. Cool.

But no. I messed it up some how and got an error about a missing {% endblock %}. In my GPT history it says, I’m confused about step 2. Where do I add it? And maybe I was just tired. I swear I just threw the code up there at the top like it told me to. But it said:

Ah! I see exactly why it’s confusing — your current index.html starts with the <h1> and then goes straight into the table. The search form should go right under the <h1> and before the table.

Then I was really confused. Didn’t I already have a search box that only handled barcodes? I sure did, over in base.html. So the new search code ended up there. Maybe that’s wrong. I don’t remember the details, but I searched the broader internet about my two-layer error and got the thing back to a working state many agonizing minutes later. Boy, was I proud, and relieved that I didn’t have to ask my husband to fix my mistake(s) in the morning. I threw my arms in the air and looked around for the cats to tell them the good news, but of course, I was the only one awake.

Moar Features!

I wasn’t satisfied. I wanted more. I asked it to add a current count of books in the database and display it toward the top. After that, it offered to add a count of currently-checked-out vs. available books, to which I said yes please. Then I wanted an author page that accepts an author’s name and shows all books by that author. I asked for a new page that shows all the books that are checked out. Most recently, I made it so the search box and the column headers persist on scroll.

I’m still trying to think of features, but for now I’m busy entering books, typing up check-out cards on my IBM Wheelwriter 5, and applying library pockets to the inside back covers of all my books. If you want to make your own personal library system, I put everything on GitHub.

On the Shoulders of Giants (and Robots)

I couldn’t have done any of this without my husband’s prompts and guidance, his ability to call shenanigans on GPT’s code whenever warranted, and ChatGPT itself. Although I have programmed in the past, it’s been a good long time since I even printed “Hello, World” in any language, though I did find myself recalling a good deal about this and that syntax.

If you want to make a similar type of niche system for your eyes only, I’d say this could be one way to do it. Wait, that’s pretty non-committal. I’d say just go for it. You have yourself and the broader Internet to check mistakes along the way, and you just might like some of the choices it makes on your behalf.

延长保质期:将电子垃圾标签篡改为会议胸牌

2025-12-03 20:00:07

PN26 badge

Ever wonder what happens to those digital price tags you see in stores once they run out of juice? In what is a prime example of e-waste, many of those digital price tags are made with non-replaceable batteries, so once their life is over they are discarded. Seeing an opportunity to breathe new life into these displays, [Tylercrumpton] went about converting them to be the official badge of the Phreaknic 26 conference.

Looking for a solution for a cheap display for the upcoming conference badge, [Tylercrumpton] recalled seeing the work [Aaron Christophel] did with reusing electronic shelf labels. Looking on eBay, he picked up a lot of 100 ZBD 55c-RB labels for just $0.70 a piece. When they arrived, he got to work liberating the displays from their plastic cases. The long-dead batteries in the devices ended up being easily removed, leaving behind just the display and the PCB that drives it.

db9 programmerAnother hacker assisting with the badge project, [Mog], noticed that the spacing of the programming pads on the PCB was very close to the spacing of a DB9/DE9 cable. This gave way to a very clever hack for programming the badges: putting pogo pins into a female connector. The other end of the cable was connected to a TI CC Debugger which was used to program the firmware on the displays. But along the way, even this part of the project got an upgrade with moving to an ESP32 for flashing firmware, allowing for firmware updates without a host computer.

The next challenge was how to handle customizing 200 unique badges for the conference. For this, each badge had a unique QR code embedded in the back of the 3D printed case that pointed to an online customization tool. The tool allowed the user to change which of the images was used for the background, as well as input the name they wanted to be displayed on the badge. Once finished, the server would provide a patched firmware image suitable for flashing the badge. The original intent was to have stations where attendees could plug in their badge and it would update itself; however, due to some 11th hour hiccups, that didn’t pan out for this conference. Instead, [Tylercrumpton] ran the update script on his machine, and it gave him a great opportunity to interact with conference attendees as they stopped by to update their badges.

For the Phreaknic 27 badge, the plan is to once again use electronic shelf labels, but this time to utilize some of the advanced features of the tags such as the EEPROM and wireless communications. We’re eager to see what the team comes up with.