The creator of this project, APTechnologies, came up with the idea for the storage cabinet by observing that he would run into trouble when organizing his component library. Rather than having to go across the workshop to get each part, he wanted a way to consolidate everything into one place for easy finding. The system works by first having the user search for a part on an adjacent screen, and then the associated bin will light up if the component is found in the system.
The storage solution is comprised of a 35 x 12 grid of drawers, which gives ample space for parts. The drawers are laid out according to the spacing between the LEDs in the strip (30 LEDs/meter). They are meant to be printed individually and then slotted in, plus they come in several different sizes.
Each drawer was 3D-printed on a Prusa Mk2S with PLA filament at a .2mm layer height. In order to minimize filament consumption, wall thicknesses are kept very thin, but even with this savings, 5kg of filament was required to fabricate the parts. There is also a small articulating arm that juts out from the side for the HDMI display.
The primary way to interact with the system is through the terminal, which runs a Python 3 script. It begins by checking the text file for data integrity, where it then gets parsed and loaded into an object. Data is stored in CSV-style fashion, with the ID being the first column, the associated LEDs in the second, and finally the quantity in the third column. All subsequent values are optional and simply loaded by the user when the parts is located. A regex is used to parse the user's request, including searching for a component, changing its quantity, adding a new part, and removing a component.
According to the project's creator, the choice for hardware components was quite straightforward. He used a Raspberry Pi 4 Model B in conjunction with a generic HDMI monitor to show the command line interface. For power delivery, he opted for a simple 5V adapter to power both the Raspberry Pi 4 and NeoPixel strip. Since the Pi outputs 3.3v signals from its GPIO pins, a level-shifter is needed, in this case a 74AHCT125. There is an option to use an Arduino Uno via UART if the NeoPixel strip is too unreliable, since the Arduino Uno can supply stricter timings.
To add a new part, the command
PI<ledn>:PI<ledn+k>, <quantity>[, optional parameters]:add is sent, which adds a new component to the library. Other commands such as ID<id number> (search for part by ID) and ID<id number>:rm (remove part with that ID) exist to manage added components in the library.
Although the system works well for one place and a small collection of components, it tends to scale poorly when there's a large library or multiple users want to interact with it. One way to solve this issue is to replace the single text file with a relational database such as MySQL, where parts can be stored and indexed in a single table, and other data can be referenced. This gives a very powerful interface for the software to easily search, add, and modify parts without having to read and rewrite the text file constantly.