We all have things we want to control and toggle quite frequently - be that our smart home electronics, a script at home, or we just need a timer for our tea.
Any sane person would stick to apps or a small web interface to suit their needs, but that is the boring way out.
The less boring one is to create a wearable device based on the ESP32-Pico and pack it so full of sensors that it's impossible *not* to control anything with it! (Though the usefulness of such controls may be arguable)
Gesture recognition, a microphone, air quality, pulse-oximeter, IR beacon location - at the very least!
Follow this project and join me on the journey to rework Tap from the ground up, with all the knowledge I gained since attempting it for the first time.
Oh, and yes, it looks like the Voyager's EMH Holo Emitter.
How have things gone with this project lately, you may ask? I may or may not have forgotten to add a few project logs in between... That would be my bad.
But the good news is, the PCB design is almost complete! And it is a gorgeous looking nest of wires.
Without a four-layer board design, this would have been nigh impossible, and even with the two extra layers it can be quite a squeeze! Luckily a clean, horizontal/vertical layout makes it much more headache-free.
As mentioned in the previous log, the main battery charge IC had to be replaced. This was managed quite nicely, and the resulting mess of wires can be seen down below - the STM32 was squeezed in next to a USB-C port and now controls most of the power sequencing.
One of the changes resulting from further component shortage is that this STM now also includes USB connection, and the Power-Only USB-C port was replaced with a USB2.0 port. This will allow Tap to act as USB HID, and perhaps I will even utilize a fake mass storage device to write the ESP32 binaries onto the IC to update it that way? Who knows!
In any case, now that all components are fitted and most of the wiring has been completed, it is only a matter of polishing the design, double-checking tolerances, and ordering the PCB!
A lot of components are, sadly, out of stock, which will inevitably lead to a long wait on some materials. It is unclear how long it will take to actually assemble and build the badge due to this - some components are back in stock by the end of this year, some might not recover in a year, some I can leave out...
In any case, we will see when we get there. And until then, there will be plenty of other projects to work on and polish - a rework of the Smart Home and LZRTag, a little Christmas gift, and perhaps even a simple "DIY Goto" for a Telescope we wanted to acquire :)
There is a bit of a problem with Tap right now... Or, well, everything in general.
The chip shortage seems to have grown just a little further outward, and captured the battery charge IC that I was initially planning to use. There are alternative models, of course, but... I thought, why not try and replace it with components I am more comfortable with using. The BGA is very tricky to solder, after all.
This, however, turned out to be tricky. This single charger IC has so much functionality all in this little module:
- 1.8V LDO
- 2x Load switch
- Button reset circuit with power on/off
- ADC for battery measurement
At first I wanted to use discrete components to fill this gap, but that quickly turned into a bit of a mess, because for the button reset function alone you need three new ICs.
But... What about a separate controller? Something low powered, like an STM32L0 at low clock speed. This would be able to control the load switch, it has an ADC, and might even provide extra GPIO pins if necessary.
And then it hit me - it can do a lot more than this. It can, for example, take over the SPI slave role required to extract the camera feed of the ADPS gesture sensor, something the ESP might struggle with. It could act as battery gauge, estimating battery current over a resistor.
Best of all, it could read the ESP32's UART log output.
When the ESP crashes, it dumps a crash message to UART, which cannot be rerouted to, ex., MQTT or Bluetooth, because it's crashed. But the STM? It could happily receive the crash message, buffer it, and then write it onto the OLED screen that is built in, or send the crash message back to the ESP once it rebooted so it can be sent to a log server.
Even though STMs are in short supply and a bit more expensive, I did find that digikey still has the STM32L051 series - at 4€ in single quantity, but better than nothing.
This will, of course, take further work to program and get right, but it could elevate the badge even further.
More importantly, this STM external coprocessor could be reused in a large number of other projects to fill in some of the gaps that the ESP leaves in terms of analog, power consumption and IO pin count.
I will have to play with the idea and report back!
The board is both growing and shrinking - the former in the number of components that are already placed on the board, the latter in the amount of space that is still available for things.
All in all, the sensor slot has been populated pretty much completely, with only a few components left to sprinkle in such as support capacitors.
The rest of the board has also gotten models for programming, the illumination and signalling LEDs, as well as a few other components - FreeCAD has been especially helpful in the creation of missing 3D models for things such as the speaker and OLED screen.
A few components are still missing - mounting holes for the M1 screws to keep the casing together, and a little bit of passive circuitry all around.
The OLED screen might also change position a little, as currently it is quite squished in, though I always knew this would be the case.
She's looking better with every update, and with a few more hours of gently placing everything where it belongs, she's ready to order!
That is, if we can find a manufacturing service up for the task. This board features a rather large number of unusual footprints with individual parts that might throw a P&P machine off...
Input on where to get this done is greatly appreciated.
Also, for those wondering how big this PCB is in reality, here's a 1:1 scale print:
As the description of this project already describes, TapV2's main purpose is to be a playground of various sensors and other bits of data processing. Not for any specific reason, mind you - a lot of these elements here are just sensors we'd love to try out, or that we might find useful once a year and would like to have on hand.
Some of them may even be genuinely useful!
Right now we are still in the process of squishing the sensors we already selected as close together as possible and might go ahead and add one or two more if we find them interesting enough. Perhaps the comments could even recommend something to add to the arsenal.
For now, the list is already quite capable. Going from left to right we have:
A pulse oximeter that can measure pulse and SpO2 levels when the user places their finger on it.
An LSM6DSM 6-axis gyro (although almost all MEMS gyros are out of stock for a few years - this one might have to be retrofitted somehow, or salvaged from another board)
An APDS-9500 gesture sensor. Although simple looking at first, this little device sports a 60x60 pixel IR array that can act like a rudimentary camera, potentially even enough to read QR codes! It is the main motivation for this board, and will hopefully serve us well.
A BME680 air quality sensor. Aside from the standard humidity, temperature and pressure, the 680 also reads "Volatile Compounds" that correlate roughly to how used-up the air is, and can give warnings about low air quality.
A I2S MEMS microphone, used for simple whistle command input as well as Fourier Frequency analysis. Being able to isolate that one frequency that's annoying you should always be easy.
And STM ToF LIDAR with about 1m range in good conditions. Not only will it replace a slide rule, it could also be used to automatically measure vibrations up to 50Hz!
The very rightmost components are for communication, such as a "On-Ground" WiFi antenna chip, and a IR module.
One last potential candidate as sensor is an ambient brightness and UV meter, to warn about excessive solar radiation, however the only part we could find for this has a big "Not recommended for new design" label across the datasheet, so it's a "maybe".
Oh, and those squares that are lined up next to every sensor module? Those are 1.8mm sized NeoPixel clones, to illuminate each sensor's status and readouts - mainly to look flashy and interesting.
Let's see how hard it is to wire everything up. There is a reason why we chose automated assembly and 4-layer boards right from the conception of the project!