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   

 }

}