HE BOUGHT 768 CELLS OUT OF RETIRED ELECTRIC BUSES FOR 52 CENTS EACH AND BUILT A MACHINE TO JUDGE THEM

768 thirteen-year-old bus cells for 52 cents each instead of 40,000 dollars — if you can tell the good ones from the junk.

by Within Tolerance

FULL CAD BOM FIRMWARE DOCS

EnergyWorkshop

Built withESP32

difficulty
●●●●○
time
a weekend-plus
license
MIT
repo
repo ACTIVE68 stars
1
Jump to section

COMPAREE VERDICT

This is not a beginner battery project. It is a multi-board custom 6-layer PCB build with ESP32-S2 firmware and a separate hub server and dashboard. The boards work - over 500 cells had been through them when the video was made - but the context is someone who already bought 768 retired bus cells and has to sort them. If you are starting from zero, you do not need five boards; you need one,, and you need to accept that every batch of ten takes at least two hours, so sorting hundreds of cells takes weeks. The internal resistance measurement is what separates this from a basic capacity tester, but it is an optional add-on: the creator modified a YR1035 meter with a USB-to-UART chip and wrote a Python bridge into the hub. The real trap is not the build - it is buying retired cells without knowing what you are doing. A thirteen-year-old A123 cell that sat in a bus is not the same as a shelf-worn consumer cell; some will be perfect, some will be junk, and the only way to know is to test every single one. The tester does that job well, but it does not make bad cells good. If you already have a pile of unknown cells and need to sort them methodically, this is exactly the tool. If you are hoping to build a cheap battery pack by buying retired cells, understand that the sorting is the hard part, not the bargain.

GOOD TO KNOW

  • —MIT licence, no restrictions on commercial use.
  • —Gerbers for a 6-layer PCB and the EasyEDA schematic/PCB source are in the repository; the BOM folder is still a placeholder.
  • —Firmware for the ESP32-S2 boards and the Goblin HQ software (a Node.js hub with SQLite history plus a Next.js web dashboard) are both present.
  • —No enclosure files — the boards sit on a bench or mount however you want.
  • —The optional YR1035 resistance meter connects to a computer over USB after the creator's modification (he added a CP2102 USB-to-UART chip inside it), and a Python bridge sends its readings to the hub; another meter means rewriting that bridge.
  • —The published board already includes fixes over the one in the video: corrected MOSFET orientation, removed reverse-protection FETs, voltage sense before the fuse, moved fan capacitors.

Parts to buy

4 items

From our check of the build. Exact quantities and part numbers are in the creator’s BOM.

  • 6-layer custom PCB (Gerbersfrom the repo files
  • Heat sinks and fansFind
  • 12 V supplyFind
  • FusesFind

BUILDS OF THE WEEK

Five open-source builds worth your weekend, every week.

Checked like this one: what’s really in the repo, what it costs, how hard it is. One email, unsubscribe anytime.

Can I build this?

Printnothing required
Buy6-layer custom PCB (Gerbers in repo; the creator had the five boards made and assembled by a PCB house), parts read off the EasyEDA design because the BOM folder is still a placeholder (ESP32-S2, INA226 current sensors, BQ25622 charger, MOSFETs, thermistors), heat sinks and fans, 12 V supply, fuses, and optionally a YR1035 internal-resistance meter
Toolssoldering iron, 12 V supply, multimeter, USB cable for flashing, a computer to run the Node.js hub and dashboard (Python only for the optional meter bridge)
Skillsintermediate PCB assembly, flashing firmware with PlatformIO, running a Node.js hub and dashboard, understanding of lithium cell safety and charge curves
Timea weekend to build one board and test the stack; multiply by five if you want the full ten-bay setup
CostModerate - dominated by the number of boards you build (each holds two cells); the optional YR1035 meter is a one-off
SafetyYou are handling bare lithium cells that can dump over 100 amps into a short. The cells must not be shorted, punctured, or over-discharged. The tester manages charge and discharge, but you are responsible for not bridging terminals during setup. Heat sinks are required and the build includes temperature monitoring with Alexa warnings, but a fault during test is still a thermal event.

Build at your own risk. Projects involve tools, electronics and sometimes mains voltage — follow the creator’s safety notes.

Videos

Cell Goblin testing bus cells (build by Within Tolerance)

The creator's own build and overview video: the Cell Goblin boards, Goblin HQ software and the 768-cell sorting run.

More builds like this

All projects

Gallery

Start here

Navigation into the creator’s own docs — we don’t rewrite the guide, we route you to the source.

  1. 1.Read the README and the schematic (Firmware is in src/, the Goblin HQ hub and dashboard in hub/ and ui/, and the PCB as Gerbers plus EasyEDA source in hardware/. Open the EasyEDA schematic to understand the charge/discharge loop and the INA current sensing.)
  2. 2.Order one PCB first, not five(Gerbers are in the repo. Build and test one board with the firmware and server before committing to the full set.)
  3. 3.Set up Goblin HQ (Node.js hub + Next.js dashboard)(The server keeps all boards in sync and logs every curve to a database. It is required, not optional.)
  4. 4.Wire in the YR1035 meter over UART(Optional internal-resistance step. The Python bridge in YR1035_reader expects this specific meter (the creator added a USB-to-UART chip inside his); another meter means rewriting the bridge.)
  5. 5.Run the full routine on a known-good cell(The board runs charge, discharge and a final top-up; measure internal resistance separately. Verify the curve in the dashboard history before testing unknown cells.)

Resources

Documentation, files and community threads for this build — we link straight to the original sources and never rehost the creator’s files.

KNOWN ISSUES

  • The project is built around the creator's A123 LiFePO4 cells from retired buses. The firmware also has an 18650 NMC profile, but any other chemistry is not covered, and the board's cell-input pads were laid out for his cells, so check that your holder fits.
  • The YR1035 resistance meter is optional and not a calibrated lab instrument. The creator opened his, added a CP2102 USB-to-UART chip to an empty footprint and wrote a small Python bridge; a different meter means rewriting that bridge.
  • Two hours per batch of ten cells is the minimum the creator quotes; with hundreds of cells and manual swapping between batches, sorting a big pile takes weeks.
  • The board in the video had inverted MOSFETs and other faults; order the current Gerbers from the repo, not a copy of what you see on screen.
  • Retired cells are a gamble. Some will be fine, some will be junk, and the tester does not make bad cells good — it just tells you which ones to throw away. If you are hoping for 768 perfect cells at 52 cents each, the reality is you will reject a percentage and the cost per good cell goes up.
  • Heat sinks and fans are required. The discharge MOSFETs get hot, and the build includes temperature monitoring with Alexa warnings, but you still have to mount the heat sinks properly and ensure airflow.

Can I use this for 18650 cells or other formats?

Partly. The firmware already has a second chemistry profile for 18650 NMC cells next to the default LiFePO4 one, so the charge and cutoff voltages are covered. The board was laid out for the creator's A123 cells, though, and the README lists larger cell-input pads for broader cell-holder compatibility as a planned improvement, so check that your holder fits.

Do I need five boards, or can I start with one?

Start with one. The server supports multiple boards, but building all five at once before you have tested the firmware and the routine is a waste of money.

What does the YR1035 resistance meter actually measure?

It injects a known current and measures the voltage drop to calculate internal resistance. For an A123 cell rated around 70 amps continuous when new, resistance tells you whether the cell can still deliver that current or whether it has degraded.

How long does it actually take to test 768 cells?

At least two hours per batch, and the full five-board setup holds ten cells per batch. 768 cells is therefore 77 batches, roughly 154 hours of machine time at best - weeks of evenings, because you have to swap cells between batches. Internal resistance is measured separately with the meter.

What is the reject rate on retired bus cells?

The project does not give a percentage, and it will vary wildly depending on how the cells were stored and how hard the bus worked them. Some batches will be mostly good, some will be mostly junk. The tester tells you which is which, but it does not change the odds.

Community builds

No community builds yet — be the first, we feature the best ones.

Discussion1

FROM THE COMPAREE TEAM

Over 500 cells tested so far, two hours per batch of ten, and every charge and discharge curve stored in a database. If you were sorting a pile of retired cells, what would you change about the test routine?

CompareeTEAM2mo agoedited

Practical notes from our verification: the repository includes the ESP32-S2 firmware, the Goblin HQ hub (Node.js with a SQLite history), a Next.js dashboard and the PCB design as a 6-layer Gerber zip plus EasyEDA source. There are no KiCad files, and the BOM folder is still a placeholder, so plan to read parts off the EasyEDA design. The YR1035 internal resistance meter is an optional add-on: the builder found its debug UART and wrote a small Python bridge that streams readings into the hub, so a different meter means rewriting that bridge. In the build video the first boards failed because of how the second I2C bus was initialised, a software problem rather than hardware; the hardware README separately lists the board fixes made after the video. Each batch takes at least two hours for ten cells. The 52 cents per cell is what the builder paid for retired bus modules and depends entirely on what surplus you can find; expect rejects, so the cost per good cell goes up. Lithium cells can catch fire, and the README is explicit that you build at your own risk. Correction (4 October 2026): we re-checked this page line by line against the project's own repository, documentation and videos, and fixed errors in earlier versions.

Within Tolerance

Built Cell Goblin to sort 768 retired A123 cells from electric buses for a go-kart battery project. The tester has processed over 500 cells so far, with full charge/discharge curves logged to a database and internal resistance measured separately.

GitHub

Star the project on GitHub

DISCLAIMER

  • Comparee is not the author of the projects featured here. All rights to each project belong to its creator — every page links to the original source, and we never host creators’ files.
  • Information is provided without warranty and may become outdated as projects evolve. Prices are indicative bands only — always check the creator’s parts list for current costs.
  • Building and operating any project is at your own responsibility. Protective equipment, safe workshop practice and compliance with local regulations are the builder’s responsibility.