Projects

A robot arm that loads cartridges without mistakes

I integrated a robot arm with our labeling machines: it puts each perfume in its cartridge and leaves it linked, with nobody scanning anything.

Details

Year Since February 2026
Outcome Two machines in parallel, no manual scanning
Tools Python, Flask, PostgreSQL, Robot arm

How it works

  1. 1 Order a labeling machine opens an order for a product
  2. 2 Notice the WMS tells the arm which order and product it is
  3. 3 Labeling two machines run at once with different products
  4. 4 Loading the arm puts each bottle in its cartridge
  5. 5 Link every bottle is tied to its cartridge
  6. 6 Close the order closes without waiting for the arm

Context

After labeling, warehouse staff loaded the perfumes into cartridges by hand and scanned each one to know what was inside. With two labeling machines running different products at the same time, it was easy to put a bottle in the wrong cartridge, and a mistake there carried all the way to picking.

What I did

I integrated a robot arm with the labeling machines. Every time a machine opens or closes an order, the WMS notifies the arm’s controller with the order and the product, so the arm knows what is coming out of each machine. The arm puts each bottle into the right cartridge and every perfume ends up linked to its cartridge, without anyone scanning.

At first, closing an order waited for the arm’s response, which took 15 to 20 seconds, and with retries it could hang for up to 54. I moved that call to the background and closing is now instant.

Outcome

Both labeling machines run in parallel with different products, and loading cartridges no longer depends on someone scanning every bottle correctly.

What I learned

If a process depends on a person scanning the same thing a hundred times in a row, the failure isn’t the person’s, it’s the process. And a slow machine should never hold up the main flow: you notify it and move on.