WIFI Cooker Control
In Action!
Based on an Arduino, wifi module and stepper motor. Controlled using the Ewelink Android app
The Secret: A Dual Shaft Stepper Motor
The use of a dual shaft motor and the shaft connector means i can manually turn on or off the oven when the remote isnt in use. The original rotary switch is simply mounted behind the motor. There was enough room in my cooker to allow this.
Mechanically mounting the motor to the oven was the hardest part. I used Desktop PC PCI blanking covers as brackets.
The program only turns the stepper motor so far one way then back again, so it was important to make sure when the oven was switched on using the remote, it was also switched off using it aswell, otherwise , if manual control was used, the motor could try to drive the knob the wrong way and the torque would damage something. So far its been working for 2 years flawlessly...Except my wife wants a new cooker so it may have to be removed. Maybe we can get a proper WIFI cooker this time.
HOW IT WORKS
Schematic
Arduino R3
12v supply for Stepper Motor
5v supply for Arduino and modules
Dual Shaft Stepper Motor
WIFI Relay Module
Steper Motor driver Module L9110
Electronics housed in a small box
Fine Tuning the Arduino to get the correct start temperature
Note the use of the PC Power supply as it has both 12v and 5v outputs
Arduino Program:
// Include the AccelStepper library:
#include <AccelStepper.h>
// Define the AccelStepper interface type:
#define MotorInterfaceType 4
// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(MotorInterfaceType, 8, 9, 10, 11);
void setup() {
// Set the maximum steps per second:
stepper.setMaxSpeed(50);
// define trigger switch pin
pinMode(12, INPUT);
// Set the maximum acceleration in steps per second^2:
stepper.setAcceleration(100);
}
void loop() {
if (digitalRead(12) == LOW) {
stepper.enableOutputs(); // enable motor drive outputs
stepper.moveTo(120); // Set target position (200 = one revolution based on motor steps per revolution figure):
stepper.runToPosition(); // Run to position with set speed and acceleration(decellerates on arrival):
stepper.disableOutputs(); //removes motor drive to allow freewheel
}
else { // Move back to original position:
stepper.enableOutputs(); // enable motor drive outputs
stepper.moveTo(0); // Set target position (200 = one revolution based on motor steps per revolution figure):
stepper.runToPosition(); // Run to position 0 with set speed and acceleration:
stepper.disableOutputs(); //remove motor drive to allow freewheel
}
}