If you want to dig deeper, you can modify your Workbench Assistant's CircuitPython code. Code & files may be modified over the USB-C connector or you can put your files on an optional MicroSD card. The internal drive & the optional MicroSD card would appear as a pair of mass storage devices when the bot is connected to a computer.
The bot works by analyzing nearby temperatures & firing events when pre-defined patterns are identified. It will trigger other events -- such as turning on the lights -- when code & config allow it to. It uses a AMG8833 IR Thermal Camera, a Adafruit Itsy Bitsy M4 Express microcontroller featuring the Microchip ATSAMD51, a monaural amplifier & an enclosed speaker. It includes a high-velocity 40mm server fan & numerous bright RGBW light 'pixels'. The prototype is powered by a laptop power supply and a pair of MP1584EN buck converters; the production version will be powered by internal lithium ion batteries or via USB-C PD, which can easily provide the bot all the power it needs.
These are features you should expect in production versions of the Workbench Assistant:
- Rugged construction
- Compact size
- Compatible with most tripods & camera mounts
- Available in various anodized aluminum colors
- Available in various rugged plastic colors
- Available with integrated rechargeable batteries & BMS
- Thermal event based lighting effects
- Thermal event based fume extractor fan speeds
- Thermal event based sound effects
- Auto-recalibration when background thermal readings change significantly
- Easy behavior changes without needing to mess with the CircuitPython code
- Able to operate via off-the-shelf USB-C devices, including battery packs
- Optional matching yolk if overhead mount is desired
- Optional 3 foot USB-C cable
- Optional 6 foot USB-C cable
- Optional USB-C AC power adapter
- Optional USB-C DC automotive power adapter
- Optional USB-C battery pack
About the Project
The Workbench Assistant prototype was thought of, designed, built & configured in less than three months in the spring & summer of 2019. It was hand-soldered on proto board with parts from various vendors on Amazon, metal from the local Ace hardware store & features three exceptional parts from Adafruit. The enclosure was quickly designed on some index cards, cut with shears & bent into shape without a metal brake. This was the first project I've worked on requiring a custom metal enclosure & I'm sure it won't be the last.
The Product Vision
The Workbench Assistant will feature all the functionality found in the prototype, but will of course consist of high-quality PCB(s) designed specifically for the device. The metal enclosure will be made of high-quality scratch-resistant laser-cut aluminum. Airflow optimizations are being actively pursued & convenient hardware expansion options will be considered. Variations of the product are expected but all will feature high-quality components & the same API. Suggestions are _more_ than welcome!
* Post-prototype build analysis; user testing
* PCB design
* PCB pre-production tests & revisions
* CircuitPython code refactoring & feature additions (YAML support, etc)
* API beta release & related documentation
* CircuitPython code release & related documentation
* Pre-production QA
* First production run
* Deliver the first Workbench Assistant bots to eager pre-order customers
* and more...
The Early Design Process
The need for a fume extractor in this form factor was realized while working on another project I look forward to discussing soon. A few years ago I modified my standard overhead fume extractor to use a 12V PC fan instead of a 120VAC fan, and eventually added strips of 12V LED lights to turn it into a combo lighting & fume extraction fixture. Given how much soldering I do, I decided I wanted to automate the fixture somehow. After learning about the AMG8833, I realized it would be fairly easy to write software capable of detecting a human, a soldering iron or other things. Since the AMG8833 is a 64 pixel thermal camera, it is possible to compute whether objects are close or far away. This allows the bot to increase fume extractor fan speed if the iron seems to be further away.
With the constraints for the size & shape of the extractor as a starting point, I quickly drew up the design for the enclosure on an index card. I found an old shiny black paper document folder & cut it up to match the design. I cut two short lengths of 12V LED strip, soldered them to a switch, soldered a 40mm fan to another switch. I installed the LED strips above the intake, the switches along the sides, the fan at the rear... and stapled the cardboard together. From there, the challenge was how it would be elevated above the work area. The first thought was a couple creatively placed holes & some pencils. That worked, but was cumbersome. I experimented with integrated folding or telescoping legs, but ultimately decided on a standard 1/4" tripod mount & a tripod from Amazon. I sourced a 1/4" brad hole tee nut & temporarily placed it at the right spot within the cardboard housing. Within just a few hours I had a working proof of concept.
The overall design has changed little since that first cardboard version. I decided an aluminum housing would offer the best benefits: rugged, light-weight & visually attractive. I had not built an aluminum enclosure before & had to learn how. I knew I would likely need a metal brake, but also knew I might be able to make do with a hand-held sheet metal tool & some creative use of other scrap metal. I was able to make the prototype enclosure with a drill, a drill press & those other hand tools. Moving forward, I will be investing in a mid-size metal brake with adjustable fingers. The enclosure was designed with mass production in mind: it is a simple two-piece enclosure held together with screws on the underside. An injection-molded version of the enclosure has also been designed & would allow for more economical product variants. The prototype internals are hand-soldered proto boards featuring a few contrib hardware modules. I prefer hand-soldering prototypes to help facilitate rapid design iteration. Late in the design process I decided to move from a pair of 4-position switches on the outer edges of the product to a pair of flush push-buttons on the underside of the product. This change took little time to implement. All that said, the production version will require PCB(s) which can be efficiently produced on a mass scale. Now that the concept has been proven, I am moving forward with PCB designs using KiCad. In the end the product may have two or three modular mainboards to make for easy DIY customer upgrades if so desired.
Powering the device presented its own set of challenges. USB is typically the go-to solution for devices like these, but comes with a cost: licensing fees & limited wattage. The fallback for more power-hungry devices is a DC barrel plug and yet another DC wall wort. Neither approache seemed appropriate. Enter USB-C with PD functionality. With a relatively inexpensive microchip & a USB-C connector, the device can negotiate power requirements with whatever it is connected to -- be it a laptop, a wall wort, or a battery pack -- up to 100W. Granted, this device will never need that much power. Presently a simple 19V laptop power supply & pair of MP1584EN DC-DC buck converters work great.
I had to decide how the device can be updated with ease. With USB-C confirmed as the preferred power connector, the rest was obvious: update files via that same connector. The device will include internal FLASH storage. How much is still to be decided. Some users may have little need for storage, while others may want to use the device as a portable mass storage device. A MicroSD card slot near the USB-C connector may be the best of both worlds: a small amount of internal storage for the basics, while providing users an easy way to add much more storage.
Finally, I had to write the code. All CircuitPython code must be loaded into FLASH memory before it can be executed. After some testing & discussions, I decided to use a Itsy Bitsy Adafruit M4 Express in the prototype. The object-oriented application is designed to be easily maintainable & customizable. Further, it is optimized to support user customizations via simple changes to audio files, folder structure and/or JSON files. The production version will use YAML config files rather than JSON config files. Wireless connectivity is being considered. Wireless or not, the bot would be able to do what it is supposed to: automatically light things & deal with the fumes.