Does pretty much what it says in the name. I use my printer quite a bit, and I cannot constantly monitor large prints as they can take hours. I started with the idea that I could remotely control the power to the printer to turn it off and on after a print or just before so I could start printing if I wasn't nearby. I then thought, maybe I should include a thermometer to measure the ambient temperature, and what if I had motion sensing capability to sense if the printer was actually moving.
I had read stories of printers overheating due to failed parts or an issue printing and nearly catching fire. If the printer isn't moving while printing I'd like to know, if the temperature is too high, I'd like to know and if there is any smoke, I'd really like to know! A cut off might also be useful, so how about if any of those things are detected that power is automatically cut off?
As I use a windows 10 computer and Repetier-Server to control my printer I started writing a Visual Studio application to control the printer and use the API to communicate with Repetier-Server to receive the printer's status periodically. Using this information I could tell when the printer was printing, how far it was into printing, how much was left, etc.
I connected an Arduino 101 to the computer and connected it to Visual Studio using the com ports, this way I could communicate with the Arduino, tell it to turn on/off a relay, receive temperature, motion and smoke detection. I connected a relay to the Arduino and connected that to the printer's power source. I wired up a perf board with a 4k7 Resitor and an Dallas 18B20 temperature sensor and an MQ-2 smoke sensor to the Arduino. I also connected a button to the arduino, which when pushed, will turn on the power to the printer as a manual control.
The Visual Studio app polls the Arduino once a second for information, receiving back whether the printer is on/off, if it is moving, the temperature and if any smoke has been detected. It also polls Repetier-Server every 3 seconds. First it receives basic information, names of printers etc. Once a printer is selected it then asks for basic printing information about that printer which is then displayed within the main form of the app.
If a checkbox to monitor movement has been ticked, the application monitors the printer status and once a print starts it waits for 5 minutes (for the printer to heat up) and then if the Arduino detects no motion before the printer has finished, it cuts power. Another checkbox indicates to the application if temperature cut off should be enabled, if the ambient temperature goes over a defined amount, the Arduino cuts power. And finally if any smoke is detected at any time, it cuts power.
The application works in both server mode (directly connected to the Arduino) and client mode (the application connects to another copy of the application running in server mode) so everything can be monitored and controlled remotely.
It's a little rough around the edges as I ran short on time for debugging and testing everything but the program works. I added in a PHP page but it proved to complicated to add. I was also working on a filament detector and connecting over Bluetooth but time proved a problem.