Project started as most do with one plan in mind and then scope creep takes over.
I liked the idea of a voice controlled assistant like Amazon Alexa, Goggle Assistant, but never really crazy about a microphone connected to some cloud service in the ether..
So why not build my own offline voice control with integration into home automation, security..etc
This turned into a modular smart speaker completely designed in Fusion 360 with a 3d printed, compact modulare body. Adding an efficient yet powerful amplified speaker system, microphone array, raspberry pi zero w with full network and bluetooth connectivity.
Now performing a simple task like turning a light on with a simple voice command, does not require reaching out to the cloud to perform something locally on my network.
I know, I know why a web interface, well just like any network connected "appliance", I think it will prove to be useful for setup, configuration and control of things that are not voice control friendly.. I also figured it might be good for diagnosis of issues, and to check status.
For a web interface I decided to go with a nice and compact minimal web server. I figured I try my hand at flask, a simple python based web server that offers pretty nice features and makes it pretty easy to setup a basic web app in no time.
There is still alot of work but in no time I managed to get a basic login page setup:
And managed to whip up a basic bootstrap template and a few pages:
Worked through a number of issues over the past week or so, mostly trying to increase the consistency of the voice recognition service. By adding SoX filters and options we are able to drastically clean up the audio and improve consistency in the service.
A simple mqtt client was built in python, this should allow for home automation integration with Home Assistant server. I managed to test it a number of times and it seems to be fairly consistent from cli runs. Voice command functionality could still use more fine tuning, but it appears to be working overall.
After talking with a few people I have had the opportunity to get alot of great feedback and ideas which I think should be pretty simple to implement over time.
Finally finished the assembly and managed to cram everything into the case.
I had to do a few additional mods to try to mitigate some of the noise I was getting from the amplifier.
After looking up the PAM 8403 ic I found out that there is a mute pin (active low), so after cutting the trace, soldering a wire and connecting it to a gpio pin, I have mute control on the pi.
I also threw together a quick stereo ground loop isolator with a couple small 1:1 transformers, some protoboard, and some audio jacks from an old sound card.
This helps quite a bit with noise, but the amplifier still seems to pick up some emi interference from the Pi, (you can hear when your ssh'd in and sending keystrokes)..
I also picked up a dedicated microphone amplifier, its much smaller then the original one I built and much more sensitive, so now you can pic up peoples voices from the other room.
Other then that everything seems to be running good.