Last year I wrote about how we built a monster fog machine in Kaunas Makerspace for a NoTrollsAllowed hackercamp and during that event we noticed that sometimes it’d be nice to have it automatically dispense smoke so that we wouldn’t have to always be around to do it. Now that this year’s hackercamp is coming we thought of making this add-on until the event.
We wanted to make it as simple as possible and to be able to control it remotely with any device. For those reasons we chose ESP32. It would need to have a web interface and a captive portal for easy access.
The features that we wanted are pretty basic – to manually release smoke by pressing a button and to make it do that automatically by setting delay and duration times.
For it to actually work, ESP32 needs to communicate with the machine somehow. That is the controller needs to see when the heating blocks are ready and needs to see the liquid status.
First of all we made a nice looking web interface that’ll sit on ESP32 as a captive portal (the code can be found on KMS github here).
For ESP32 to know when the heating blocks are ready, the controller takes a reading from halogen bulbs that are used as indication lights in MFM. Whenever the light is on, the heating block is not ready. But how does an ESP32 know when they are ready? by using a simple AC sensing circuit that detects when AC voltage is flowing to the lights. This is the diagrams we used (also available on Falstad here):
Ok, how about the liquid status?
For that we used a liquid sensor that tells us if a canister is empty or not and mounted that on a steel rod with a 3D printed holder (model for the holder is here).
And lastly a case to hold everything was needed, I made that in OnShape and laser-cut it from 4mm plywood (the model can be cloned from here)
And then we just assembled everything.
The algorithm how it works is like this:
On the manual tab, when you press the Spray button, it starts ejecting smoke until all of the heating blocks gets cold or liquid runs out, after which the machine stops itself. You can stop the machine at any point until then also.
On the automatic tab, you have to set two parameters – time before spray (delay before each spray) and spray time (for how long will the machine produce smoke) – and then press Start. It’ll start doing its thing until you stop it. The process only stops itself when the liquid runs out.
In reality, when we started using it, we saw several design flaws, but the biggest problem was that ESP32 would restart itself from time to time randomly. It could help using different threads, but not sure yet.