Edge Impulse public project: https://studio.edgeimpulse.com/public/1015905/live
GitHub repository: https://github.com/KutluhanAktar/Mini-figurine-Cataloger-and-Listing-Tracker-w-Hermes-Agent
Demonstration video: https://youtu.be/tL-Sh6nD75k
Description
As an enduring hobby from my childhood, I have collected a plethora of mini-figurines from different brands, limited editions, categories, and themed production lines over the years, including but not limited to Happy Meal, Kinder Surprise, Funko, and Hasbro. Since I was not able to display all of them due to a lack of available space, I had been mulling over cataloging all of my mini-figurines with extensive detail in the form of a web-based application. Thus, I decided to develop this AI-powered mini-figurine cataloger. Although I am not keen on selling all of my collection, I wanted to enable the application to track eBay and Amazon listings of the target figurines and the adjacent collectibles to get a grasp of the market price and availability of my collection. Also, I decided to make the application to generate pamphlets (simple HTML pages) for each figurine while conducting market analysis to track new listings. As I decided to use the Hermes AI agent to track eBay and Amazon listings, my workflow was quite straightforward for market analysis and pamphlet generation, since the Hermes agent provides an intuitive structure for creating skills manually, adjusting them via chat, and scheduling cron jobs for periodic tasks such as processing web-scraped product listings. Even though the Hermes AI agent handles the market analysis, it is not required to execute the mini-figurine cataloging operations since I programmed the application from scratch. To enable the agent to run as deterministically as possible, I tasked it to only update existing listing variables and generate the pamphlet in HTML as a separate file. In this regard, the application can operate without showing any web-scraped listings and is capable of cataloging mini-figurines, even if the Hermes agent is excluded. I decided to program the web-based mini-figurine cataloger application on Arduino UNO Q by employing the Arduino App Lab development environment, providing foundational building blocks (Bricks). Since UNO Q is a compact but extremely powerful development board, I was able to run the Hermes AI agent locally. Thus, enabling the Hermes agent to update listing information, stored as individual JSON database files for each figurine, was quite straightforward. Of course, it would not be a worthy mini-figurine cataloger without the feature of automated yet comprehensive figurine photographing. Thus, I decided to build a rig enabling the App Lab application to capture 360ยฐ pictures at varying camera distances automatically. To achieve this automation, I designed a rotary platform swiveling the target mini-figurine and a linear camera slider moving the attached USB camera โ Logitech Brio 4K webcam. Since I wanted to design the rig as compact as possible, I decided to take a different approach for detecting the platform angles and the camera distances, and utilized two TCRT5000 infrared (IR) sensor modules. It is a well-known optical reflective sensor for line tracking robots due to its ability to easily differentiate white from black; the former bounces back IR radiation from the emitter to the phototransistor, while the latter absorbs the IR radiation to the point of avoiding phototransistor trigger. Instead of using stepper motors, I employed two Pololu high-power micro metal gearmotors due to their small footprint. For swiveling the target mini-figurines, I decided to design a rotary platform based on the worm gear-wheel mechanism, which reduces the cataloger rigโs footprint considerably and locks the platform base from moving when the cataloger rig is idle, since the worm gear-wheel mechanism is inherently non-back-drivable. For moving the camera slider, I simply designed a GT2 belt-driven mechanism. Since there were no suitable GT2 pulleys for the gearmotors, I modified an existing GT2 20T pulley model to produce a custom 3D-printable one. While I was working on the cataloger rig design, I decided to lighten the platform base to emphasize the target figurine details, especially for vintage figurines, and create unique background icons related to the figurine category and aesthetic. For the lighting source, I decided to utilize a WS2813 RGB LED strip and enable the user to adjust the lighting manually via buttons or remotely via an RGB color picker wheel presented by the mini-figurine web interface. For the background icons, I decided to design custom magnetic ornaments and added an electromagnet to the rig in order to attach and change the ornaments in accordance with the target figurine effortlessly.- 1. Overview
- 2. Overview
- 3. Overview
- 4. Overview
- 5. Overview
- 6. Overview
- 7. Overview
- 8. Overview
- 9. Overview

Development process, linking the Hermes AI agent with an Arduino App Lab application, and final results
As mentioned in my previous UNO Q-based project, the development process differs quite a bit from my usual AIoT project development routine since the Arduino App Lab provides all of the required modules, packages, and the built-in Arduino Router background Linux service, constructed to capitalize on the dual-brain (MPU-MCU) nature of UNO Q. Within the confines of the Arduino App Lab development environment, although I still utilized specific programming languages to develop the different aspects of the mini-figurine cataloger App Lab application, Arduino for programming the STM32 microcontroller (MCU), Python for the application backend (Qualcomm MPU), and HTML, CSS, JavaScript for the web interface, as a whole, I built a single application that the App Lab runs and manages. Considering the usage of the built-in Bricks (Docker containers) and web socket, I highly recommend inspecting the official Arduino UNO Qย specificationsย andย tutorials.
Step 1: Creating the Arduino App Lab application and setting up the electrical components
First, I collected the electrical components I needed to achieve the mini-figurine cataloger rig features I envisioned and defined the UNO Q-component pin connections. Since UNO Q has the exact same pinout as the usual Arduino Uno, declaring pin connections was quite straightforward. I specifically selected the Pololu DRV8835 dual motor driver shield to control two micro metal gearmotors (also from Pololu) since this shield is tailored to the Arduino Uno.- Since the Pololu DRV8835 motor driver shield comes disassembled, I soldered its components to complete the PCB via my TS100 soldering iron. Also, I soldered male jumper wires to the Pololu micro gearmotors to be able to connect them easily to the dedicated screw terminal blocks on the shield.
- To connect the IC-177 push buttons to the UNO Q, I also soldered male jumper wires. To insulate all wire connections, I utilized heat-shrink tubing.
- 1. Assembly
- 2. Assembly
- 3. Assembly
- 4. Assembly
- 5. Assembly

- To provide stable 5V to gearmotors through the driver shield, the Grove electromagnet, and the Grove WS2813 RGB LED strip, I employed an external 5V / 4.0A switching power supply with a DC jack. To make this external power supply breadboard-friendly, I utilized a female DC-barrel-to-wire jack, splitting positive (5V) and ground (GND) wire lines.
- After declaring the pin layout and connecting the electrical components to the UNO Q for initial testing, I created the mini-figurine cataloger App Lab application.
- While testing the LED strip, I noticed that the first LED always turns green permanently due to signal noise (fluctuations). Thus, I added a 330 Ohm resistor to the signal (data) line of the LED strip, connected to the UNO Q, to avoid current fluctuations.


- Then, I installed the required sketch libraries. Thankfully, all libraries were available in the provided App Lab library collection, so I did not need to modify any libraries due to incompatibilities.
- If you encounter errors regarding the Arduino_RouterBridge library, download it manually since it was removed from the later versions of the bundled Zephyr platform (Arduino UNO Q Board).
- 1. Library
- 2. Library
- 3. Library

- To develop mini-figurine cataloger features, I added these Bricks.
- Audio Classification | GitHub
- WebUI - HTML | GitHub
- 1. Bricks
- 2. Bricks
- 3. Bricks

Step 2: Collecting audio samples directly from UNO Q via the Edge Impulse CLI
Since some of my mini-figurines do not have a stable base, they are prone to falling while the rotary platform swivels. Thus, I decided to build an audio classification model to detect figurine falls in order to suspend the cataloging process to let the user reposition the figurine and resume the process without producing unsolicited figurine photographs. Fortunately, the Logitech Brio 4K USB webcam comes with a built-in microphone. Thus, I was able to collect audio samples directly from the UNO Q and run the trained audio classification model on the Arduino App Lab without needing a secondary microphone.- First, I signed in to my Arduino account on the Arduino App Lab, which is required to deploy and run EI models on the App Lab through the provided Bricks, in this case, the Audio Classification Brick.


- Then, I created a new project on my Edge Impulse Enterprise account and selected the target development board as Arduino UNO Q.


- Although there is a built-in pipeline to obtain trained Edge Impulse models, the App Lab does not let the user collect samples directly from Arduino UNO Q yet. Thus, I set up the Edge Impulse CLI on the UNO Q via the built-in App Lab terminal to be able to access video and audio streams produced by the Brio webcam on the Edge Impulse Studio.


- After setting up the Edge Impulse CLI, I connected to my Edge Impulse account, selected the associated project, assigned the Logitech Brio webcamโs built-in microphone as the primary audio source, and name the device.
- 1. EI Set
- 2. EI Set
- 3. EI Set

- Nonetheless, as I was trying to collect audio samples on the built-in App Lab terminal, I encountered some connection issues. Thus, I resumed collecting audio samples on the native terminal in the SBC mode.


- After moving to the SBC mode, I was able to see the UNO Q on the Edge Impulse Studio without any connection errors and start collecting audio samples while providing labels and sample durations.
- Since the gearmotors driving the worm gear and the custom GT2 pulley work continuously while cataloging the target mini-figurines, I collected audio of gearmotors turning as the background noise (normal) samples. I chose the background noise sample duration as 5 seconds, as this state should be the norm for the neural network model.
- 4. EI Set
- 5. EI Set
- 6. EI Set
- 7. EI Set
- 8. EI Set
- 9. EI Set
- 10. EI Set
- 11. EI Set
- 12. EI Set
- 13. EI Set

- Then, I collected audio of figurines falling at different angles and heights to construct an extensive dataset. I selected the sample duration as 2 seconds since the falling happens abruptly without many repetitions.
- 14. EI Set
- 15. EI Set
- 16. EI Set
- 17. EI Set
- 18. EI Set

- background_noise
- model_fall

Step 2.1: Building and training an audio classification model with Edge Impulse
An impulse (an application developed and optimized by Edge Impulse) takes raw data, applies signal processing to extract features, and then utilizes a learning block to classify new data. For my application, I created the impulse by employing the Audio (MFE) processing block and the Classification learning block. Edge Impulse supports splitting raw audio samples into multiple windows by adjusting the parameters of the Time series data inputs.- Window size โ size of data that will be processed per classification, in milliseconds
- Window increase (stride) โ sliding window in milliseconds to go over longer samples
- First, I opened theย Impulse design โก Create impulseย section and selected the mentioned blocks. I left the block configurations as defaults. To complete the impulse creation, I clickedย Save Impulse.
- To modify the raw audio features in the applicable format, I navigated to the Impulse design โก MFE section and clicked Save parameters to apply default settings.
- Then, I proceeded to click Generate features to extract the required features for training by applying the MFE signal processing block.
- After extracting features successfully, I navigated to theย Impulse design โก Classifierย section and applied the default neural network settings and architecture to achieve reliable accuracy and validity.
- After training the audio classification model, Edge Impulse evaluated the accuracy asย 95.5%. This precision score, although really close to the final testing results, should be viewed as a narrow estimation due to the modest validation set.
- 1. EI Train
- 2. EI Train
- 3. EI Train
- 4. EI Train
- 5. EI Train
- 6. EI Train
- 7. EI Train
- 8. EI Train
- 9. EI Train
- 10. EI Train
- 11. EI Train

Step 2.2: Evaluating the model accuracy and deploying the validated model
- First, to obtain the validation score of the trained model based on the provided testing samples, I navigated to the Impulse design โก Model testing section and clicked Classify all.
- After applying the trained model to the testing samples, Edge Impulse evaluated the model accuracy as 100.00%.
- 1. EI Test
- 2. EI Test
- 3. EI Test
- 4. EI Test

- To deploy the validated model optimized for my hardware, I navigated to the Impulse design โก Deployment section and searched for UNO Q.
- I chose the Quantized (int8) model variant (optimization) to achieve the optimal performance while running the deployed model.
- Finally, I clickedย Buildย to deploy the model. However, contrary to the usual deployment procedure, I did not utilize the downloaded EIM binary since the Arduino App Lab provides a pipeline to link Edge Impulse projects to import deployed models directly.
- As mentioned in the previous steps, I had already signed in to my Arduino account on the Arduino App Lab. Thus, I only needed to click Go to Arduino and open the App Lab to link this Edge Impulse project to my Arduino account via the built-in pipeline.
- After linking the project, I navigated to the Audio Classification Brick configurations, installed my audio classification model for detecting figurine falls, and selected it as the primary Brick model.
- 1. EI Deploy
- 2. EI Deploy
- 3. EI Deploy
- 4. EI Deploy
- 5. EI Deploy
- 6. EI Deploy
- 7. EI Deploy

Step 3: Programming the Arduino sketch executed by the STM32U585ย (MCU)
๐ sketch.ino โญ Include the required sketch libraries.- As explained in the following steps, I utilized the second infrared sensor to detect the relative camera holder distance by marking the black GT2 timing belt with white electrical tape. Thus, to avoid detecting the same marker while tracking the next marker, I added an offset (padding) duration once the first slider position is found. The function waits until the given offset time passes before starting to track the successive position marker.
- As mentioned earlier, I decided to detect figurine falls via an audio classification neural network model. Thus, I enabled the function to check the EI model detection results as rotating the platform. If a fall is detected, the function immediately stops the code flow and waits until the user manually confirms that the target figurine placement is corrected.
- Similar to the slider position markers, I utilized printed white points on the worm wheel to determine the angle of the rotary platform via the first infrared sensor. Thus, to avoid detecting the same point while tracking the next point, I added an offset (padding) duration once the first platform angle is found. The function waits until the given offset time passes before starting to track the successive angle point.


Step 4: Programming the Python script (backend) executed by the Qualcomm QRB2210 microprocessor (MPU)
According to the App Lab application structure, this Python script behaves as the application backend and manages all data transfer processes, Brick features, and interconnected services. ๐ main.py โญ Include the required system and high-level Brick libraries.- To bundle all the functions to write a more concise script, I used a Python class.
- I excluded this function from the class since the proprietary self parameter prevents it from being executed as a callback function by the Audio Classification Brick.


Step 5: Developing a feature-rich web interface hosted directly by the Arduino App Lab
As mentioned earlier, the built-in WebUIย Brick handles hosting of the mini-figurine cataloger web interface. Thus, I was able to program the web interface directly on the Arduino App Lab. For the interface frontend, including the RGB color picker wheel, I employed Google Gemini for easy mockup and developed the features I envisioned on top of the Gemini mockup. It helped quite a bit to shorten my development process since I do not enjoy frontend development :) Please refer toย the project GitHub repositoryย to inspect all code files. ๐ socket.io.min.js- This script includes the necessary functions to communicate with the Python backend via WebSocket.



- Please refer to the project GitHub repository to review the cataloger web interface CSS (styling) file.

- This file contains the latest mini-figurine catalog, which gets updated dynamically by the Python backend, considering the latest market analysis conducted by the Hermes AI agent, and the figurine information form to start the cataloging procedure for a new figurine.
- Please refer to the project GitHub repository to review.
- 1. Code
- 2. Code
- 3. Code

- This file contains the RGB color picker wheel and LED strip sequence options by angle.
- Please refer to the project GitHub repository to review.


Step 5.1: Ensuring the exported App Lab application operates as anticipated
- I edited the app.yaml file via the GNU nano text editor to add a description and change the application icon (emoji).


- Please refer toย the project GitHub repositoryย to download the applicationโs ZIP folder.
- To import the mini-figurine cataloger App Lab application, navigate toย Create new app + โก Import Appย and select the downloaded ZIP folder.


- Once you import the mini-figurine cataloger App Lab application, it comes with the default configurations for the Audio Classification Brick (glass-breaking). Thus, as explained in previous steps, please make sure to link your Arduino account to Edge Impulse Studio to employ my publicly available Edge Impulse audio classification model for detecting figurine falls.

Step 6: Installing the Hermes AI agent on UNO Q
- Since the Arduino UNO Q splits storage into a limited root partition and a larger user partition (/home/arduino), installing the Hermes AI agent via the usual method directly to the root might induce storage issues in the long run.
- Thus, I redirected the temporary directories, cache, and application storage to the user partition before executing the installer.
- I configured the environment variables to make sure the Hermes agent and its package manager (uv) would be installed and built entirely within the user partition (/home/arduino).
- Then, I restarted the shell profile on the terminal provided by the Arduino App Lab.

- After making the required configurations, I navigated to the user partition and installed the Node.js tarball archive file. Then, I extracted the Node packages into the user partition to avoid a system-wide installation.

- Once the environment is safely partitioned, I executed the Hermes AI agent installer redirecting to the user partition (โdir flag). I skipped the setup wizard for configuring the required settings individually (โskip-setup flag). Then, I updated environment paths again.
- 1. Install Hermes
- 2. Install Hermes
- 3. Install Hermes

- After installing the Hermes AI agent successfully into the user partition, I proceeded with setting up the LLM provider, which is required as basically the agentโs thinking agency.
- I entered the command below on the terminal and selected the Google Gemini as the provider since I already had an established Gemini account. Nonetheless, you can select any other provider that is most convenient to your workflow.

- To obtain the required key, I openedย Google AI Studioย and created a new API key specific to this project.
- After obtaining the AI Studio API key, I assigned it to the Hermes agent on the terminal and selected the default model as gemini-3.1-flash-lite-preview.
- 1. Add LLM Key
- 2. Add LLM Key
- 3. Add LLM Key
- 4. Add LLM Key
- 5. Add LLM Key
- 6. Add LLM Key
- 7. Add LLM Key

- Finally, I reviewed the agent system status by running the built-in diagnostic tool on the terminal.

Step 6.1: Creating a specific Hermes skill to track mini-figurine listings
Actually, creating new skills is quite straightforward with the Hermes AI agent since it lets the user add skills by merely asking via chat and is able to pick up skills from usual repeated conversations. Nonetheless, since I needed a stable skill executing steps as deterministically as possible while tracking the listings for the target mini-figurine and updating its JSON database file, I decided to create my custom Hermes agent skill manually.- First, I navigated to the Hermes agent skills folder and created a new folder with the name of my custom skill โ latest-figurine-market-analysis. Then, I created the SKILL.md file.


- Via the GNU nano command-line text editor, I modified the skillโs markdown file with the necessary instructions, step-by-step procedure, and trigger command to make it run as deterministically as possible.

- After creating my custom skill, I checked its status by running the built-in Hermes skill tracker.

- After seeing that my custom skill was working as expected, I initiated a new chat session and started activating my skill repeatedly to review its results on some dummy figurine folders and files.
- 1. Chat Test
- 2. Chat Test
- 3. Chat Test

- I noticed some missteps while calculating average market prices and faulty JSON variable names for consecutive skill executions. Thus, I directly asked the Hermes agent to modify the skill to rectify these issues. Then, the agent revised the skillโs markdown file accordingly, and I did not encounter any errors afterward.
- It even created an additional markdown file to better grasp my JSON database file structure to avoid variable errors.
- 1. Skill Improve
- 2. Skill Improve
- 3. Skill Improve

- Finally, after executing the revised skill, the Hermes AI agent was able to find the latest cataloged mini-figurine, read its information from the associated JSON database file (status.json), search for exact or adjacent collectible listings on eBay and Amazon, update the associated JSON database file (hermes_updates.json) with the web-scraped listing information, including the estimated average market prices, and generate a detailed pamphlet as an HTML file (hermes_pamphlet.html) for the given figurine, including the captured figurine images by the mini-figurine cataloger rig.
- 1. Skill Working
- 2. Skill Working
- 3. Skill Working

Step 6.2: Setting up Firecrawl to solve web scraping issues
Although my Hermes skill was performing great, there was still a critical issue with finding eBay and Amazon listings. Even though the Hermes agent was able to find superficial product information online via built-in browser tools, it could not scrape eBay and Amazon to find accurate listings due to bot protection, leading to hallucinated listing links, titles, and prices.
- First, I created a Firecrawl account and obtained a free trial API key, which lets the agent scrape 1,000 pages every month and is more than enough for this use case.

- After obtaining the Firecrawl API key, I opened the built-in Hermes tool configuration wizard on the terminal and activated the Firecrawl integration.
- 1. Crawl Issues
- 2. Crawl Issues
- 3. Crawl Issues
- 4. Crawl Issues

Step 7: Modelingย the mini-figurine cataloger rig 3D components
As mentioned earlier, I wanted to build a compact mini-figurine cataloger rig that can adjust the rotary platform angle and the camera slider position automatically, enabling the cataloger App Lab application to capture 360ยฐ images of the target figurine at different camera distances. To control the rotary platform movement without increasing the rig footprint, I designed a unique worm gear and wheel mechanism driven by a micro metal gearmotor. To move the camera slider, I modified an existing GT2 20T pulley design to make it compatible with the micro metal gearmotor, enabling the gearmotor to drive the slider via a GT2 timing belt. As discussed, I also designed a stand containing the WS2813 RGB LED strip, helping set up a scenery for different figurine categories and aesthetics. As a frame of reference for those who aim to replicate or improve this cataloger rig, I shared the design files (STL) of all 3D components as open-source onย the project GitHub repository. ๐จ I sliced all the exported STL files in Bambu Studio and printed them using my Bambu Lab A1 Combo. Since I decided to utilize TCRT5000 infrared sensors to determine the platform angle and the slider position, the color theme of the associated parts must be black and white. Thus, I utilized these PLA filaments while printing 3D parts of the cataloger rig:- eSun eStars-PLA Galaxy Black
- eSun ePLA-Matte Deep Black
- eSun ePLA-Matte Milky White
- eSun ePLA-HS Grey
- โ๏ธ Arduino UNO Q (Step) |ย Inspect
- โ๏ธ Pololu Micro Metal Gearmotor [LP, MP, and HP] (Step) |ย Inspect
- โ๏ธ GT2 - 20T Pulley (Step) |ย Inspect
- 1. Overview
- 2. Overview
- 3. Overview
- 4. Overview
- 5. Overview
- 6. Overview
- 7. Overview
- 8. Overview
- 9. Overview

Step 7.a.1: Designing the rig base consisting of a rotary platform driven by a worm gear-wheel mechanism and aย WS2813 LED strip stand
- First, I modeled the worm gear via the built-in Thread plugin by selecting the trapezoidal thread for 16 mm height and 4 mm pitch (TR16x4).


- Then, via intersecting the worm gear, I extrapolated the features required to create the worm wheel. I used the usual gear diameter formula to calculate the worm wheel diameter based on the number of teeth I required:
- After completing the worm gear-wheel mechanism, I designed the cataloger rig base around it, which is compatible with the Arduino UNO Q.
- I specifically separated all of the rig base components and made them attachable via M2 screws, such as the platform shaft, gearmotor cases, and the unique TCRT5000 infrared sensor mounts, preventing complex support requirements. In this regard, I was able to overhaul and replace modified components effortlessly to solve clearance issues as I was assembling the cataloger rig.
- 1. Platform
- 2. Platform
- 3. Platform
- 4. Platform
- 5. Platform
- 6. Platform
- 7. Platform
- 8. Platform
- 9. Platform
- 10. Platform
- 11. Platform
- 12. Platform
- 13. Platform

- As I wanted to enable the WS2813 RGB LED strip to show angle-based sequences, I decided to design a circular mount with gaps per pixel (LED). Nonetheless, since the strip has a length of 1 meter (1000 mm), it was not possible to print the circular mount as a single component, considering the total circumference of the 1000 mm strip length and the additional padding required for cable management.
- Thus, I designed the circular strip mount as four parts, fastenable via M2 screws through the strengthening support pins.
- The circular mount connects to the LED strip stand, which is compatible with the Grove electromagnet, directly via M2 screws.
- 1. LED
- 2. LED
- 3. LED
- 4. LED
- 5. LED
- 6. LED
- 7. LED
- 8. LED

Step 7.a.2: Printing and assembling the rig base
- I sliced the rig base with 10%ย sparse infill density and left the other settings at default.
- I sliced the circular LED strip mount parts with critical tree supports only. For the strengthening support pins, I increased the wall loop (perimeter) number to 3.
- I sliced the LED strip stand with critical tree supports and 10%ย sparse infill density. For the rotary platform base, I applied the same density but left the other settings at default.
- I sliced the worm wheel by increasing the wall loop (perimeter) number to 4 so as to make it sturdier against the applied torque and stress. I also utilized the built-in painting tool to highlight the angle points with white on the black body. As mentioned earlier, the black and white contrast is required to enable the infrared sensor to detect angle points.
- Again, considering the applied torque and stress, I also increased the wall loop (perimeter) number to 4 for the worm gear.
- 1. Slicer
- 2. Slicer
- 3. Slicer
- 4. Slicer
- 5. Slicer
- 6. Slicer
- 7. Slicer
- 8. Slicer
- 9. Slicer
- 10. Slicer
- 11. Slicer
- 12. Slicer
- 13. Slicer
- 14. Slicer
- 15. Slicer
- 16. Slicer

- After printing the components, I started to assemble the mini-figurine cataloger rig.
- First, I assembled the four parts of the circular LED strip mount via M2 screws and nuts through the strengthening support pins.
- Then, I connected the circular LED strip mount to the LED strip stand via M2 screws.
- 1. Assembly
- 2. Assembly
- 3. Assembly
- 4. Assembly
- 5. Assembly
- 6. Assembly

- I attached the Arduino UNO Q to its dedicated spot via M2 screws, providing space for the bottom expansion headers (JMEDIA and JMISC).
- I also fastened two mini breadboards right next to the UNO Q to make electrical component connections.
- 7. Assembly
- 8. Assembly
- 9. Assembly

- I connected the LED strip stand to the rig base via M2 screws. Then, I connected the separated rig base components, including the front stand of the camera slider, via M2 screws through the bottom of the rig base.
- Since I sliced the separated rig base components, including the platform shaft and the custom GT2 20T pulley, with the camera slider parts, please refer to the following steps to review their slicer settings.
- 10. Assembly
- 11. Assembly
- 12. Assembly
- 13. Assembly
- 14. Assembly
- 15. Assembly

- Before attaching the platform shaft, I assembled the worm wheel, pivoted via aย 17mm ID groove ball bearing. Since I designed the worm wheel and the platform shaft with features to let the plastic expand to establish a press (friction) fit connection between them through the groove ball bearing, the wheel rotates smoothly on the shaft, facing the white angle points at the bottom.
- I also attached the four 3 cm M3 hex standoffs, carrying the platform base, to the worm wheel.
- Then, I attached the platform shaft to the rig base via M2 screws.
- 16. Assembly
- 17. Assembly
- 18. Assembly
- 19. Assembly
- 20. Assembly
- 21. Assembly
- 22. Assembly
- 23. Assembly
- 24. Assembly

- I established the electrical component connections on the UNO Q and attached them to their dedicated slots and holders on the rig base and the LED strip stand.
- I placed the gearmotors directly into their holders, providing loose friction fit connections. I positioned the Grove WS2813 LED strip directly into the circular mount, providing windows (gaps) for each pixel (LED).
- 25. Assembly
- 26. Assembly
- 27. Assembly
- 28. Assembly
- 29. Assembly
- 30. Assembly
- 31. Assembly
- 32. Assembly
- 33. Assembly
- 34. Assembly
- 35. Assembly

- Then, I attached the worm gear to the Pololu 100:1 micro metal gearmotor. I specifically designed the worm gear to snap fit to the gearmotor shaft.
- After testing the worm gear-wheel mechanism, I secured the 100:1 micro metal gearmotor by closing the motor holder cap via M2 screws.
- 36. Assembly
- 37. Assembly
- 38. Assembly

Step 7.b.1: Designing the camera slider based on a GT2 belt-driven mechanism
- I designed the camera slider mechanism to be driven by a single GT2 timing belt and balanced by two rods and two supports fixed to the rig base.
- Instead of designing cylindrical supports, I gave them flat bases to make them print-friendly.
- Since the commercial GT2 20T pulleys were not compatible with the Pololu 298:1 micro metal gearmotor shaft, I modified an existing GT2 20T pulley STEP file to create a custom printable pulley.
- I designed the front and back stands of the slider to ensure that my custom GT2 20T pulley and the GT2 16T idler pulley with bearing (3mm bore) are aligned perfectly to drive the GT2 timing belt attached to the camera holder. I modeled the back stand to have an M3 screw pass through in order to secure the idler pulley.
- I designed the camera holder considering the measurements of the Logitech Brio 4K USB webcamโs clip.
- I also added slots to pass the two ends of the GT2 timing belt through the camera holder, which can be secured via anย aluminium GT2 belt fixing piece (clamp). Furthermore, I designed three printable belt fasteners in the case of installing the timing belt without the aluminium clamp.
- The slider supports, connecting the back stand, the front stand, and the rig base via M2 screws to establish a sturdy slider footing, has highlights for calibrating the camera distances โ 5 cm, 10 cm, and 15 cm. The camera holder has indicators to align the mentioned highlights while marking the timing belt for calibration.
- 1. Slider
- 2. Slider
- 3. Slider
- 4. Slider
- 5. Slider

Step 7.b.2: Printing and assembling the camera slider
- I sliced the camera slider rods and supports with 10%ย sparse infill density. Via the built-in painting tool, I emphasized the camera distance calibration highlights on the supports with white.
- Since I decided to utilize the high-tolerance grey PLA filament for these parts, I sliced the camera stands, the custom GT2 20T pulley, and the separated rig components together. I increased the wall loop (perimeter) number to 4 for the custom GT2 pulley and to 3 for the second TCRT5000 infrared sensor mount.
- Via the built-in painting tool, I emphasized the camera distance calibration indicators on the camera holder with white.
- 1. Slicer
- 2. Slicer
- 3. Slicer
- 4. Slicer
- 5. Slicer
- 6. Slicer
- 7. Slicer
- 8. Slicer
- 9. Slicer
- 10. Slicer
- 11. Slicer

- First, I attached my custom GT2 20T pulley to the Pololu 298:1 micro metal gearmotor shaft, which has a friction fit connection.


- Before assembling the camera slider, according to my initial feature diagnosis, I noticed that the first TCRT5000 infrared sensor was too close to the worm wheel to distinguish its black body from the white angle points. Thus, I modified the first infrared sensor mount.

- Then, I secured the 298:1 micro metal gearmotor by closing the motor holder cap via M2 screws.

- After completing the rig base component connections, I started to assemble the camera slider.
- First, I passed the two rods through the Brio camera holder.


- Then, I attached the rods to the front and back slider stands and fastened them via M2 screws.


- I attached the GT2 16T idler pulley to the back stand by passing an M3 screw through its bearing with a 3 mm bore.


- Then, I installed the GT2 timing belt between the custom GT2 20T pulley and the GT2 16T idler pulley. I passed the two ends of the timing belt through the dedicated slots on the camera holder and secured them via the aluminium GT2 belt fixing piece (clamp).
- 1. Assembly
- 2. Assembly
- 3. Assembly
- 4. Assembly
- 5. Assembly
- 6. Assembly

- After installing the timing belt, I combined the slider supports with the back stand, the front stand, and the rig base via M2 screws, which balances the camera holder jerk while being driven by the gearmotor.

- Before closing the platform base, I tested the rotary platform and the camera slider movements manually via the analog joystick. I also ensured that the first TCRT5000 infrared sensor could detect the white angle points on the bottom of the worm wheel while rotating at full speed.
- 1. Movement Test
- 2. Movement Test
- 3. Movement Test
- 4. Movement Test
- 5. Movement Test
- 6. Movement Test
- 7. Movement Test

- As discussed, I wanted to utilize the second TCRT5000 infrared sensor to determine the camera distance by detecting white markers on the GT2 timing belt.
- To calibrate the required markers, I aligned the calibration highlights on the slider supports and the calibration indicators on the camera holder. Once they are aligned, I draw lines on the belt corresponding to the position right under the second infrared sensor. Then, I utilized white electrical tape to create white markers on the drawn lines.
- 1. Calibration
- 2. Calibration
- 3. Calibration
- 4. Calibration
- 5. Calibration

- After calibrating, I ensured that the second TCRT5000 infrared sensor could detect the white distance markers fastened to the timing belt while moving at full speed.

- After concluding testing, I attached the platform base to the rig base via M3 screws through the four 3 cm M3 hex standoffs connected to the top of the worm wheel.
- 1. Platform Base
- 2. Platform Base
- 3. Platform Base

- Finally, I attached the Logitech Brio 4K webcam to the camera holder via a zip tie and connected it to the UNO Q via the UGREEN 5-in-1 USB hub (dongle).
- 1. Brio
- 2. Brio
- 3. Brio
- 4. Brio
- 5. Brio

Step 7.c: Designing and printing custom background magnetic ornaments
- As mentioned earlier, I decided to create unique background icons depending on the target figurineโs category, brand, theme, and production line while capturing its pictures on the mini-figurine cataloger rig.
- To effortlessly attach and replace these background icons, I decided to design them as magnetic ornaments, having rectangular neodymium magnets (W: 5 mm x H: 10 mm x D: 2 mm) at the center.
- According to my most common mini-figurine categories, including McDonaldโs Happy Meal, I selected applicable black and white logos and turned them into printable objects (magnetic ornaments) in Fusion 360. I specifically designed the ornaments protruding each color layer by layer, which reduces the total print time and the discarded filament amount considerably. I also added features to expand the plastic so as to affix the rectangular neodymium magnets via a press (friction) fit connection.
- 1. Logo Design
- 2. Logo Design
- 3. Logo Design
- 4. Logo Design

- Then, I sliced all ornaments to print them in accordance with their color themes via the built-in painting tool.
- 1. Logo Slicer
- 2. Logo Slicer
- 3. Logo Slicer
- 4. Logo Slicer
- 5. Logo Slicer
- 6. Logo Slicer
- 7. Logo Slicer
- 8. Logo Slicer
- 9. Logo Slicer
- 10. Logo Slicer

- After printing all ornaments and fastening their neodymium magnets at the center, I was able to effortlessly attach them to the electromagnet on the LED strip stand as background logos while photographing mini-figurines.


Outcome: Cataloging mini-figurines automatically and the Hermes AI agent-assisted market analysis (eBay and Amazon)
๐ฆ๐โ๏ธ๐ธ The mini-figurine cataloger rig allows the user to control the rotary platform and the camera slider movements manually via the analog joystick.- Joystick X-axis [Right] โก Platform [Rotate Right]
- Joystick X-axis [Left] โก Platform [Rotate Left]
- Joystick Y-axis [Up] โก Slider [Move Front]
- Joystick Y-axis [Down] โก Slider [Move Back]

- 1. Magnets
- 2. Magnets
- 3. Magnets
- 4. Magnets
- 5. Magnets





- Angle: 0ยฐ
- Angle: 90ยฐ
- Angle: 180ยฐ
- Angle: 270ยฐ
- Angle: 0ยฐ - 180ยฐ
- Angle: 90ยฐ - 270ยฐ
- Angle: 360ยฐ
- OFF
- Control button [A] โก Next sequence
- Control button [B] โก Change pixel color
- Control button [C] โก Previous sequence
- 1. Strip Adjust
- 2. Strip Adjust
- 3. Strip Adjust
- 4. Strip Adjust
- 5. Strip Adjust
- 6. Strip Adjust
- 7. Strip Adjust
- 8. Strip Adjust
- 9. Strip Adjust
- 10. Strip Adjust
- 11. Strip Adjust


- 1. Homing
- 2. Homing
- 3. Homing
- 4. Homing




- spider-man_funko_camera_1_platform_1.jpg
- spider-man_funko_camera_3_platform_4.jpg
- 1. Capture
- 2. Capture
- 3. Capture
- 4. Capture
- 5. Capture






- status.json
- hermes_updates.json








- 1. Hermes
- 2. Hermes
- 3. Hermes
- 4. Hermes
- 5. Hermes
- 6. Hermes
- 7. Hermes

- 1. Serial
- 2. Serial
- 3. Serial
- 4. Serial
- 5. Serial

- 1. Next Figurine
- 2. Next Figurine
- 3. Next Figurine
- 4. Next Figurine
- 5. Next Figurine
- 6. Next Figurine
- 7. Next Figurine
- 8. Next Figurine
- 9. Next Figurine
- 10. Next Figurine

Scheduling a cron job for tracking listings and further improvements
- Of course, it would not be feasible to run the market analysis skill for every cataloged mini-figurine manually to track the latest eBay and Amazon listings. Thus, I created a cron job to execute the market analysis skill for each cataloged figurine for every day at 8 AM and 8 PM.
- Fortunately, setting cron jobs with the Hermes AI agent is as simple as asking via chat.

- After setting up the cron job, I made sure it is running in the background via the built-in agent tool.

- Once I saw that the market analysis cron job was active, I ran the analysis cron job manually via the built-in agent tool by utilizing its job ID to review the automatically tracked eBay and Amazon listings for each cataloged mini-figurine.

- If you do not prefer interacting with the Hermes AI agent on the terminal, you can set up the built-in integration tools so as to chat with the agent via your favorite messaging platform, such as Telegram or Discord.
Project GitHub Repository
The projectโs GitHub repository provides:- Code files
- The mini-figurine cataloger App Lab applicationโs ZIP folder
- 3D component design files (STL)
- Edge Impulse audio classification model (EIM binary for UNO Q)
- Hermes AI agent skill files (markdown)





























































































































































































































