January 2017 [Completed]
Code: https://github.com/joshuayuan/carousel-software, https://github.com/joshuayuan/node_partnumber_info, https://github.com/brentyi/digikey_parser
Carousel is an electronic component bag organizer.
Let me explain. As electronic hobbyists, we order many electronic components to solder onto PCBs. These components are shipped in small bags of a variety of rectangular sizes from distributors such as Arrow, DigiKey, or Mouser. A problem arises when you have hundreds of parts, which results in hundreds of boxes, and when youre looking for a specific bag you spend ten minutes sifting through each bag looking for the one you want. So, at PennApps XV, my team of Raphael Chang, Tiffany Cheung, Brent Yi, and I designed an efficient storage system for these bags such that you could also retrieve any bag within seconds. I worked on the software for this system.
To store a bag, scan the barcode on the bag with your mobile device through the web application. Clip a binder clip to the top center of the bag. The carousel will spin such that an empty slot is at the front of the device, with an LED indicating the exact position. Place the binder clip and bag in the slot. To retrieve a bag, input the part description or part number into the application, then the carousel will rotate so that the slot at the front of the device will contain the bag. An LED will indicate which slot position the bag is in. Pick up the binder clip for access to the bag.
Both the hardware and software systems would be equally important for this project to work.
We first thought of a method to physically store many bags and settled on a method of clipping binder clips to the bags, then storing the binder clips. We considered additional methods such as rolling the bags into tubes and storing those, but binder clips were more accessible and streamlined among other properties. The idea of a carousel system was inspired from dry-cleaning systems or vertical revolving car garages. One of the earlier designs had two discs one on top of the other, the bottom with slots to align the bags and the top with slots to hold up the binder clips.
For the user experience, there would be two aspects - storage and retrieval. For storage, we wanted the user to be able to use a mobile device running the application to scan a bags barcode and just drop the bag and clip into a slot. To retrieve the bag, the user should input the part number or a part description into the application and be able to just pick up the binder clip containing the bag from the slot. To do all this, wed need a database to store each bag information with a position, some type of barcode scanner, and software to retrieve part information from the internet given a specific barcode number.
To scan the barcodes, we used a bar code scanning library called zbar. This library would return a string of digits and characters for each barcode it processed, so for bags from Mouser or Arrow with multiple barcodes extra filtering was needed to identify which barcode was related to that part number (there were multiple barcodes for information such as quantity, or manufacturer, etc). The DigiKey bags only had a single barcode, so no extra filtering was needed for that.
The UI should be as simple as possible, with the least number of steps to complete a transaction. There are two buttons at the start to indicate a part retrieval or insertion. At each subsequent step, only the most basic information is displayed or requested. We use Socket.io, a NodeJS module that provides real-time bidirectional communication, to pass information back and forth between the interface and our database. This web application can run on both mobile devices and PCs, as long as youre able to upload an image through a file manager or a camera.
The turntable is currently powered by a DYNAMIXEL Robot Servo which is driven by ROS running on the Node.js server. The server just publishes commands to the ROS driver every time the disc rotates. An Arduino reads digits through its serial port and sets the corresponding LEDs on or off. The Arduino is powered by the computer, and the servo motor is powered with a 12 volt power supply.
Overall this project was a large success. While there were features that couldve been improved, the fact that this device was fully functional is amazing. The 36 hours spent on Carousel was exhausting, and even though we didnt win any awards, I still felt well rewarded to have helped create a working product. With future iterations of this device to improve its functions, Carousel will definitely be rebuilt and actually used. I look forward to continue using various hardware and software technologies to build cohesive systems.