Engineering

Outreach

Resources

Enrichment

Summer School

Mechatronics Studio

Contact Us   

Mechatronics Learning Studio

 

Electric Tea Maker

Abdulelah Alhemaiyd, Omar Dowidar, Zeyad Kandil, Mechanical Engineering, University of Ottawa

 

Abstract

For ELG2336, every year students are asked to create a project including both an electrical component as well as a mechanical component.  The project should be useful perform a specific task efficiently.  For our project, we decided to be innovative and design something that was not similar to any other projects, let alone anything that we have seen before; a motion activated tea maker.

Introduction

The goal of this project was to provide customers with an easy everyday usable electric kettle that could prepare a warm cup of boiling water just by sensing motion. A good example of the applications of this tea kettle would be when a person wakes up in the morning, the motion sensor detects movement and begins preparing your warm cup of boiling water, allowing you to decide what to do with it, either make Nescafé, tea or any other warm beverage.  This idea is very realistic, as most people that wake up in the morning have limited time to prepare tea, and this device facilitates the process.

Materials and Tools Used:

ˇ         Arduino Uno Microcontroller

ˇ         1 Motion Sensor

ˇ         1 continuous servo motor

ˇ         1 limited (180˚) servo motor

ˇ         4 AAA batteries

ˇ         2 up to 40kg pulleys

ˇ         Conducting wires (Red, Black, White)

ˇ         Breadboard

ˇ         Soldering iron

ˇ         Wood plank

ˇ          Electric water boiling kettle

ˇ          White fishing rope

ˇ         Aluminum screws

ˇ         15oz Hammer

ˇ         Screw Driver

ˇ         Plastic Reel

ˇ         Epoxy

ˇ         Super Glue

ˇ         Velcro post its (secure kettle to stand)

System Operation

First, the motion sensor detects movement and sends a signal through the arduino board to pin 4 which is connected to the limited servo motor, which then switches the kettle on.  The limited servo is mounted to the Tea Kettle with tape, and has a small nail attached to the end of it in order to push the switch from the off position to the on position.  The next thing that the micro controller does is send a signal to pin 5 which is connected to the continuous servo.  The signal that it sends off to the continuous servo, tells the servo to wait two minutes before beginning to reel the wire in through the pulleys and tilt the kettle over causing the boiling water to be poured in to a mug which is at a lower level.  Pictures Below explain the mechanism more clearly:

Using Ductape we managed to secure the limited motion servomotor to the side of the tea kettle.  By attaching a screw to the button and a nail to the rotating servomotor, it became easier for us to switch the tea kettle on.

The next picture shows the Pulley that are connected the wood stand with nails which can be seen below:

The following picture is a of the arduino board with the voltage wire (red) ground wire (black) two pin wires (white) and the motion sensor. The reason we placed the motion sensor on the board itself and not on a breadboard was so that we would not require to use a resistor.

The next Picture shows the limiting mechanism that stops the kettle from tilting over.

Finally, the last picture shows the continuous servo tied down to the frame along with the power source, bread board and arduino board.  The reason that the continuous servomotor was left opened was because everytime it is connected to a power source it must be calibrated manually.

Complications And Resolutions

    The most challenging part we faced was setting up the servomotors programming the servomotors.   It was very difficult to get the servomotor that was attached to the kettle to press the button on the kettle and switch it on as we had to convert a rotational motion in to a translational motion, however we managed to solve this problem by attaching a screw to the button using super glue and attaching a nail to the rotating servomotor head.  Now when the nail comes in contact with the screw, it causes the kettle to switch on.

Another problem that we faced was programming the continuous servomotor.  There were relativley no tutorials online on how to do this which was very difficult, but after taking the servomotor appart, we discovered that there was a small screw inside the servomotor that could be used to calibrate it. The major problem was that we could not get the servomotor to stop, it would perform a specific command and then keep spinning for an infinite amount of time. This screw controlled where the 0 point was.  The 0 point is where the servo motor does not spin clockwise or counterclockwise.  After figuring this out, we now had to program how to start and stop the servomotor.  Continuous servomotors are different to those that are limited as continuous servomotors have time and speed as their controlable paramters, where as limited servomotors can be controlled by defining a specific positon and programming the servomotor to move relative to that specific position.  After a lot of experimentation, we managed to get the continuous servomotor to rotate clockwise twice and counterclockwise twice, then stop. 

Also, after using the epoxy to glue the reel on to the servomotor in order to secure it into place, the reel broke from the constant testing, so we had to find another alternative for a more sturdy reel and managed to use a more sturdy plastic reel with a thicker layer of epoxy to hold it in place.

When we attempted to fill the whole kettle with water, we  noticed that the servomotor was to weak to lift the weight of the full kettle, and as a final resort we decided to put enough water to heat one mug of warm water.  This is also a safety precaution as the final position the kettle is in is perpendicular to the ground, and if too much water is in it, the water will overspill.

Another problem that we faced was that the hinge attached to the wood frame was not limited in any way, so the kettle would tilt over. We counter acted this problem by securing the moving wood piece with a rope to the frame so that it would stop when it was perpendicular to the frame.

 Circuit Diagram

Our circuit consisted of two servomotors, a motion sensor and a power source all in parallel.

Conclusion

If this project were to be designed again, we would not use a continuous servomotor, but would find a way to use a limited servomotor instead, as they are much easier to program and use.  Also, we would add more pulleys to the system and a larger power source in order to reduce the load on the servomotor and provide the servomotor with a larger voltage, causing it to produce more power.  The project as a whole was a success as we got it to be fully functioning after approximately 40 hours of work.  The code that we used was relatively complicated, however was easy to put together as there were many sample codes online for both limited servomotors and motion sensors, so as stated above, the only challenging part about the project was to program and fully control the motion of the continuous servomotor.

Appendix

Arduino Code for Project:

#include <Servo.h>

Servo myservo;
Servo myservo2;

int pos;

int calibrationTime = 10;

long unsigned int lowIn;

long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

int pirPin = 12;
int pirPos = 13;

void setup(){
myservo.attach(4);
myservo2.attach(5);
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(pirPos, OUTPUT);
digitalWrite(pirPos, HIGH);

Serial.println("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++)
{
Serial.print(calibrationTime - i);
Serial.print("-");
delay(1000);
}
Serial.println();
Serial.println("done");
while (digitalRead(pirPin) == HIGH) {
delay(500);
Serial.print("."); 
}
Serial.print("SENSOR ACTIVE");
delay(1000);
}

void loop(){

if(digitalRead(pirPin) == HIGH){
for(pos = 180; pos > 0; pos -= 1)
{
myservo.write(180);
delay(200);
}
for(pos = 0; pos < 240; pos++)
{
myservo2.write(pos);
delay(30);
}
myservo2.write(90);

if(lockLow){ 
lockLow = false; 
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
} 
takeLowTime = true;
}

if(digitalRead(pirPin) == LOW){

if(takeLowTime){
lowIn = millis();
takeLowTime = false;
}

if(!lockLow && millis() - lowIn > pause){

lockLow = true; 
Serial.print("motion ended at ");
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}