Don't wanna be here? Send us removal request.
Photo
Final Circuit Diagram for the automatic Tea Steeper.
0 notes
Video
tumblr
Video of the Working final setup, but in a different scenario. After having the temperature checked by the waterproof temperature probe to be above a certain point (25 degrees celsius for this video, to avoid the necessity of working with boiling water), as well as one of the three tea type buttons being pushed, the tea bag is lowered. Instead of waiting for the timer to go off for that particular tea type, the override switch is used to raise the tea bag and reset the machine to be ready for the next usage.
0 notes
Video
tumblr
Video of the Working Final Product! Here, the Tea bag is lowered upon pushing one of the three tea type buttons as well as having the temperature be checked above a certain point. For purposes of demonstration, the temperature was set to work above 25 degrees Celsius so that boiling water would not have to be involved. After being lowered, it is “brewed” for a set amount of time and then raised automatically.
0 notes
Text
Iteration 6, Final Code:Fixed Timers on Tea Types and Implemented the Waterproof Temperature Probe
#include <Stepper.h> #include <OneWire.h> #include <DallasTemperature.h>
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float waterTemp;
//state to keep track of teabag's location. 0 is out of cup, 1 is in cup int teabagState = 0;
/*state to keep track of which tea type has been pressed, to know which timer to use within the raiseBag function. 0 is for when no type is selected, or if tea has finished brewing to reset 1 is for black tea 2 is for oolong tea 3 is for green tea*/ int teaType = 0;
//Tea Type Buttons and states to hold digitalRead values int blackTeaButton = 7; int blackTeaButtonState; int oolongTeaButton = 3; int oolongTeaButtonState; int greenTeaButton = 4; int greenTeaButtonState;
//Tea Type button booleans to store whether a button was pushed bool blackTeaPressed = false; bool oolongTeaPressed = false; bool greenTeaPressed = false;
//Override Button int overrideButton = 5; int overrideButtonState; bool overrideButtonPressed = false;
//LED that turns green to indicate to user that water temp is hot enough int waterHotEnoughLED = 6;
//Optimal brewing Times for different teas, in minutes float blackTeaTime = 5; float oolongTeaTime = 6.5; float greenTeaTime = 3;
//Variables for Timer float currentTime; float passedTime = 0;
//buzzer that makes a sound when tea has finished brewing int buzzerPin = 13;
/*Create variables for the 4 stepper motor 'in' pins and their connected digital inputs on the arduino board*/ int in1Pin = 11; int in2Pin = 10; int in3Pin = 9; int in4Pin = 8;
//variables for number of steps to lower/raise teabag into or out of cup int cupHeight = 1200;
/*Create the Stepper motor, liftStepper (Must be created above setup() and loop(), see the stepper motor documentation online for details)*/ Stepper liftStepper(64, in1Pin, in3Pin, in2Pin, in4Pin);
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); pinMode(in3Pin, OUTPUT); pinMode(in4Pin, OUTPUT); liftStepper.setSpeed(100); pinMode(blackTeaButton, INPUT); pinMode(oolongTeaButton, INPUT); pinMode(greenTeaButton, INPUT); pinMode(overrideButton, INPUT); pinMode(buzzerPin, OUTPUT); pinMode(waterHotEnoughLED, OUTPUT); sensors.begin(); }
void loop() { // put your main code here, to run repeatedly: //Converting currentTime to minutes
//Checking to see if buttons/INPUTS wired correctly //Serial.println(teabagState); //Serial.println(teaType); //Serial.println(blackTeaButtonState); //Serial.println(oolongTeaButtonState); //Serial.println(greenTeaButtonState); //Serial.println(overrideButtonState); //Serial.println(currentTime);
//do we need this here, or in loop somehwere/elsewhere?
if (teabagState == 0) { checkTeaType(); checkWaterTemp(); lowerBag(); }
if (teabagState == 1); { raiseBag(); } }
/*Here, we create our custom function "lowerBag", where we want the bag to lower if any of the tea type buttons have been pressed and the water has been checked to be an adequate temperature for brewing, aka boiling. Do we need a manual down button? */ void lowerBag() { if (teaType != 0 && waterTemp >= 25) { digitalWrite(waterHotEnoughLED, LOW); Serial.println("TEA BAG IS LOWERING"); //lower bag code with stepper motor liftStepper.step(-cupHeight); /*resetting our teaPressed bools so that after bag has been raised, it will be fully reset. Without this reset, the bag will begin lowering again as soon as it is done raising bbecause one of the teaPressed bools would still be true, therefore teaType would still be something other than 0. */ blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = false; /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, raiseBag() and will stop running lowerBag()*/ teabagState = 1; Serial.println("Bag is in Cup"); } }
void checkWaterTemp(){ sensors.requestTemperatures(); Serial.print("Celsius temperature: "); Serial.print(sensors.getTempCByIndex(0)); waterTemp = sensors.getTempCByIndex(0); if (waterTemp >= 25){ digitalWrite(waterHotEnoughLED, HIGH); delay(1000); } }
void checkTeaType() {
int blackTeaButtonState = digitalRead(blackTeaButton); int oolongTeaButtonState = digitalRead(oolongTeaButton); int greenTeaButtonState = digitalRead(greenTeaButton);
if (blackTeaButtonState == 0) { blackTeaPressed = true; Serial.println("blackTeaPressed is true"); oolongTeaPressed = false; greenTeaPressed = false; } else if (oolongTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = true; Serial.println("oolongTeaPressed is true"); greenTeaPressed = false; } else if (greenTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = true; Serial.println("greenTeaPressed is true"); }
if (blackTeaPressed == true) { teaType = 1; Serial.println("teaType is 1/black"); } else if (oolongTeaPressed == true) { teaType = 2; Serial.println("teaType is 2/oolong"); } else if (greenTeaPressed == true) { teaType = 3; Serial.println("teaType is 3/green"); } else { teaType = 0; //Serial.println("teaType is 0/none"); } }
/*Here, we create a custom function "raiseBag, where we want the bag to raise if the manual override button is pressed or if any of the tea timers have finished*/ void raiseBag() {
//Serial.println(teaType); //Serial.println(teabagState); currentTime = millis()/60000; Serial.println(currentTime);
//raise the bag if the override button was pushed int overrideButtonState = digitalRead(overrideButton); if (overrideButtonState == 0){ overrideButtonPressed = true; } if (overrideButtonPressed == true) { Serial.println("TEA BAG IS RAISING"); //code to raise bag with stepper motor liftStepper.step(cupHeight); /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, lowerBag() and not running in raiseBag()*/ teaType = 0; teabagState = 0; overrideButtonPressed = false; }
/*If the override isn't pushed, look at teaType to decide which brewing time to check the timer against, then raise the bag if the timer exceeds that respective tea time*/
if (teaType == 1) { Serial.println("Brewing Black Tea"); if ((currentTime - passedTime) >= blackTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } if (teaType == 2) { Serial.println("Brewing Oolong Tea"); if ((currentTime - passedTime) >= oolongTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } if (teaType == 3) { Serial.println("Brewing Green Tea"); if ((currentTime - passedTime) >= greenTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } }
void playFinishedBrewingSound () { tone(buzzerPin, 261, 1000); }
0 notes
Text
Code Iteration 5: Working Motor Functionality and Button Input
#include <Stepper.h> #include <Stepper.h> #include <DallasTemperature.h>
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float waterTemp;
//state to keep track of teabag's location. 0 is out of cup, 1 is in cup int teabagState = 0;
/*state to keep track of which tea type has been pressed, to know which timer to use within the raiseBag function. 0 is for when no type is selected, or if tea has finished brewing to reset 1 is for black tea 2 is for oolong tea 3 is for green tea*/ int teaType = 0;
//Tea Type Buttons and states to hold digitalRead values int blackTeaButton = 7; int blackTeaButtonState; int oolongTeaButton = 3; int oolongTeaButtonState; int greenTeaButton = 4; int greenTeaButtonState;
//Tea Type button booleans to store whether a button was pushed bool blackTeaPressed = false; bool oolongTeaPressed = false; bool greenTeaPressed = false;
//Override Button int overrideButton = 5; int overrideButtonState; bool overrideButtonPressed = false;
//LED that turns green to indicate to user that water temp is hot enough int waterHotEnoughLED = 6;
//Optimal brewing Times for different teas, in minutes float blackTeaTime = 5; float oolongTeaTime = 6.5; float greenTeaTime = 1;
//Variables for Timer float currentTime; float passedTime = 0;
//buzzer that makes a sound when tea has finished brewing int buzzerPin = 13;
/*Create variables for the 4 stepper motor 'in' pins and their connected digital inputs on the arduino board*/ int in1Pin = 11; int in2Pin = 10; int in3Pin = 9; int in4Pin = 8;
//variables for number of steps to lower/raise teabag into or out of cup int cupHeight = 1200;
/*Create the Stepper motor, liftStepper (Must be created above setup() and loop(), see the stepper motor documentation online for details)*/ Stepper liftStepper(64, in1Pin, in3Pin, in2Pin, in4Pin);
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); pinMode(in3Pin, OUTPUT); pinMode(in4Pin, OUTPUT); liftStepper.setSpeed(100); pinMode(blackTeaButton, INPUT); pinMode(oolongTeaButton, INPUT); pinMode(greenTeaButton, INPUT); pinMode(overrideButton, INPUT); pinMode(buzzerPin, OUTPUT); pinMode(waterHotEnoughLED, OUTPUT); sensors.begin(); }
void loop() { // put your main code here, to run repeatedly: //Converting currentTime to minutes
//Checking to see if buttons/INPUTS wired correctly //Serial.println(teabagState); //Serial.println(teaType); //Serial.println(blackTeaButtonState); //Serial.println(oolongTeaButtonState); //Serial.println(greenTeaButtonState); //Serial.println(overrideButtonState); //Serial.println(currentTime);
//do we need this here, or in loop somehwere/elsewhere?
if (teabagState == 0) { checkTeaType(); checkWaterTemp(); lowerBag(); }
if (teabagState == 1); { raiseBag(); } }
/*Here, we create our custom function "lowerBag", where we want the bag to lower if any of the tea type buttons have been pressed and the water has been checked to be an adequate temperature for brewing, aka boiling. Do we need a manual down button? */ void lowerBag() { if (teaType != 0 && waterTemp >= 25) { digitalWrite(waterHotEnoughLED, LOW); Serial.println("TEA BAG IS LOWERING"); //lower bag code with stepper motor liftStepper.step(-cupHeight); /*resetting our teaPressed bools so that after bag has been raised, it will be fully reset. Without this reset, the bag will begin lowering again as soon as it is done raising bbecause one of the teaPressed bools would still be true, therefore teaType would still be something other than 0. */ blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = false; /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, raiseBag() and will stop running lowerBag()*/ teabagState = 1; Serial.println("Bag is in Cup"); } }
void checkWaterTemp(){ sensors.requestTemperatures(); Serial.print("Celsius temperature: "); Serial.print(sensors.getTempCByIndex(0)); waterTemp = sensors.getTempCByIndex(0); if (waterTemp >= 25){ digitalWrite(waterHotEnoughLED, HIGH); delay(1000); } }
void checkTeaType() {
int blackTeaButtonState = digitalRead(blackTeaButton); int oolongTeaButtonState = digitalRead(oolongTeaButton); int greenTeaButtonState = digitalRead(greenTeaButton);
if (blackTeaButtonState == 0) { blackTeaPressed = true; Serial.println("blackTeaPressed is true"); oolongTeaPressed = false; greenTeaPressed = false; } else if (oolongTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = true; Serial.println("oolongTeaPressed is true"); greenTeaPressed = false; } else if (greenTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = true; Serial.println("greenTeaPressed is true"); }
if (blackTeaPressed == true) { teaType = 1; Serial.println("teaType is 1/black"); } else if (oolongTeaPressed == true) { teaType = 2; Serial.println("teaType is 2/oolong"); } else if (greenTeaPressed == true) { teaType = 3; Serial.println("teaType is 3/green"); } else { teaType = 0; //Serial.println("teaType is 0/none"); } }
/*Here, we create a custom function "raiseBag, where we want the bag to raise if the manual override button is pressed or if any of the tea timers have finished*/ void raiseBag() {
//Serial.println(teaType); //Serial.println(teabagState); currentTime = millis()/60000; Serial.println(currentTime);
//raise the bag if the override button was pushed int overrideButtonState = digitalRead(overrideButton); if (overrideButtonState == 0){ overrideButtonPressed = true; } if (overrideButtonPressed == true) { Serial.println("TEA BAG IS RAISING"); //code to raise bag with stepper motor liftStepper.step(cupHeight); /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, lowerBag() and not running in raiseBag()*/ teaType = 0; teabagState = 0; overrideButtonPressed = false; }
/*If the override isn't pushed, look at teaType to decide which brewing time to check the timer against, then raise the bag if the timer exceeds that respective tea time*/
if (teaType == 1) { Serial.println("Brewing Black Tea"); if ((currentTime - passedTime) >= blackTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } if (teaType == 2) { Serial.println("Brewing Oolong Tea"); if ((currentTime - passedTime) >= oolongTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } if (teaType == 3) { Serial.println("Brewing Green Tea"); if ((currentTime - passedTime) >= greenTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; passedTime = currentTime; } } }
void playFinishedBrewingSound () { tone(buzzerPin, 261, 1000); }
0 notes
Text
Code Iteration 4:Major restructuring of Code from the ground up
#include <Stepper.h>
//state to keep track of teabag's location. 0 is out of cup, 1 is in cup int teabagState = 0;
/*state to keep track of which tea type has been pressed, to know which timer to use within the raiseBag function. 0 is for when no type is selected, or if tea has finished brewing to reset 1 is for black tea 2 is for oolong tea 3 is for green tea*/ int teaType = 0;
//Tea Type Buttons and states to hold digitalRead values int blackTeaButton = 7; int blackTeaButtonState; int oolongTeaButton = 3; int oolongTeaButtonState; int greenTeaButton = 4; int greenTeaButtonState;
//Tea Type button booleans to store whether a button was pushed bool blackTeaPressed = false; bool oolongTeaPressed = false; bool greenTeaPressed = false;
//Override Button int overrideButton = 5; int overrideButtonState;
//LED that turns green to indicate to user that water temp is hot enough int waterHotEnoughLED = 6;
//Optimal brewing Times for different teas, in seconds float blackTeaTime = 5; float oolongTeaTime = 6.5; float greenTeaTime = 3;
//Variables for Timer float currentTime; float passedTime = 0;
//buzzer that makes a sound when tea has finished brewing int buzzerPin = 13;
/*Create variables for the 4 stepper motor 'in' pins and their connected digital inputs on the arduino board*/ int in1Pin = 11; int in2Pin = 10; int in3Pin = 9; int in4Pin = 8;
//variables for number of steps to lower/raise teabag into or out of cup int cupHeight = 1200;
/*Create the Stepper motor, liftStepper (Must be created above setup() and loop(), see the stepper motor documentation online for details)*/ Stepper liftStepper(64, in1Pin, in3Pin, in2Pin, in4Pin);
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); pinMode(in3Pin, OUTPUT); pinMode(in4Pin, OUTPUT); liftStepper.setSpeed(100); pinMode(blackTeaButton, INPUT); pinMode(oolongTeaButton, INPUT); pinMode(greenTeaButton, INPUT); pinMode(overrideButton, INPUT); pinMode(buzzerPin, OUTPUT); }
void loop() { // put your main code here, to run repeatedly: currentTime = millis()/1000;
//Checking to see if buttons/INPUTS wired correctly //Serial.println(teabagState); //Serial.println(teaType); //Serial.println(blackTeaButtonState); //Serial.println(oolongTeaButtonState); //Serial.println(greenTeaButtonState); //Serial.println(overrideButtonState); Serial.println(currentTime);
//do we need this here, or in loop somehwere/elsewhere?
if (teabagState == 0) { checkTeaType(); lowerBag(); }
if (teabagState == 1); { raiseBag(); } }
/*Here, we create our custom function "lowerBag", where we want the bag to lower if any of the tea type buttons have been pressed and the water has been checked to be an adequate temperature for brewing, aka boiling. Do we need a manual down button? */ void lowerBag() { if (teaType != 0) { Serial.println("TEA BAG IS LOWERING"); //lower bag code with stepper motor liftStepper.step(-cupHeight); /*resetting our teaPressed bools so that after bag has been raised, it will be fully reset. Without this reset, the bag will begin lowering again as soon as it is done raising bbecause one of the teaPressed bools would still be true, therefore teaType would still be something other than 0. */ blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = false; /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, raiseBag() and will stop running lowerBag()*/ teabagState = 1; Serial.println("Bag is in Cup"); passedTime = currentTime; } }
void checkTeaType() {
int blackTeaButtonState = digitalRead(blackTeaButton); int oolongTeaButtonState = digitalRead(oolongTeaButton); int greenTeaButtonState = digitalRead(greenTeaButton);
if (blackTeaButtonState == 0) { blackTeaPressed = true; Serial.println("blackTeaPressed is true"); oolongTeaPressed = false; greenTeaPressed = false; } else if (oolongTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = true; Serial.println("oolongTeaPressed is true"); greenTeaPressed = false; } else if (greenTeaButtonState == 0) { blackTeaPressed = false; oolongTeaPressed = false; greenTeaPressed = true; Serial.println("greenTeaPressed is true"); }
if (blackTeaPressed == true) { teaType = 1; Serial.println("teaType is 1/black"); } else if (oolongTeaPressed == true) { teaType = 2; Serial.println("teaType is 2/oolong"); } else if (greenTeaPressed == true) { teaType = 3; Serial.println("teaType is 3/green"); } else { teaType = 0; Serial.println("teaType is 0/none"); } }
/*Here, we create a custom function "raiseBag, where we want the bag to raise if the manual override button is pressed or if any of the tea timers have finished*/ void raiseBag() {
//Serial.println(teaType); //Serial.println(teabagState);
//raise the bag if the override button was pushed int overrideButtonState = digitalRead(overrideButton); if (overrideButtonState == 0) { Serial.println("TEA BAG IS RAISING"); //code to raise bag with stepper motor liftStepper.step(cupHeight); /*once bag has lowered, set teabagState to 1 so that computer is now running within the custom function, lowerBag() and not running in raiseBag()*/ teaType = 0; teabagState = 0; }
/*If the override isn't pushed, look at teaType to decide which brewing time to check the timer against, then raise the bag if the timer exceeds that respective tea time*/
if (teaType == 1) { Serial.println("Brewing Black Tea"); if (currentTime - passedTime >= blackTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; } } if (teaType == 2) { Serial.println("Brewing Oolong Tea"); if (currentTime - passedTime >= oolongTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; } } if (teaType == 3) { Serial.println("Brewing Green Tea"); if (currentTime - passedTime >= greenTeaTime) { Serial.println("TEA BAG IS RAISING"); playFinishedBrewingSound(); //code to raise bag with stepper motor liftStepper.step(cupHeight); //set teabagState = to 1 teaType = 0; teabagState = 0; } } }
void playFinishedBrewingSound () { tone(buzzerPin, 261, 1000); }
1 note
·
View note
Photo
Screenshot of Code Iteration 3: Change to Stepper Motor library
Major change to this code was the shift from using the “AccelStepper” library to the standard “Stepper” library.
Minor changes, restructuring.
***NOTE: while this is is technically the fourth iteration of code, I counted it as the third because the changes were almost insignificant from 1.1 to 1.2, so I jumped in posting from 1.1 to 1.3.
0 notes
Photo
Screenshots from Code Iteration 2: Attempted restructuring of loops and overall logic of code
0 notes
Photo
Code Iteration 1: Basic Code written early on to start approaching functionality and logic of the proposed program.
At this point, absolutely nothing worked
0 notes
Photo
The crane Design Process:
The stepper motor is fixed to a popsicle stick, which is in turn attached to several other popsicle sticks for added stability to ensure durability and that the teabag will consistently go into the cup. The bottom of the supporting structure is then wedged into a base of popsicle sticks, which is tightly wrapped with rubber bands to ensure that the base is secured. The stepper motors turning peg is fixed into a gear, with tape wrapped around the peg to reached a desired level of thickness to stay firmly in place inside the gear. String is wrapped around the gear and tapped on for extra stability. At the end of the string is a standard office paper clamp to hold the teabag.
Built to be very sturdy to ensure a smooth process when raising or lowering the teabag.
0 notes
Photo
Code used to work with the oneWire, DS18B20, waterproof temperature probe.
Libraries downloaded: OneWire and DallasTemperature
Useful Links/ Reference:
Reference Code
https://randomnerdtutorials.com/guide-for-ds18b20-temperature-sensor-with-arduino/
OneWire Documentation from Arduino Playground
https://playground.arduino.cc/Learning/OneWire/
KeyWords for the Dallas Temperature Library
https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/keywords.txt
Helpful Video for Wiring
https://www.youtube.com/watch?v=OMNB-4CXxtU
0 notes
Video
tumblr
Video of the Waterproof Temperature probe in action
0 notes
Text
Overview/Description of Project 1:Automatic Tea Steeper
The problems:
-You are busy in the morning and want to make everything as easy as possible. -Additionally, you may be worried that when trying to brew a cup of tea, the water isn’s hot enough.
-lastly: you know that different types of teas have different optimal brewing times. Brewing too short may not impart enough flavor, whereas brewing too long may end up making the subtle notes of flavor get lost and overtaken by stronger, more bitter tastes.
The Solution:
-Automate the process via Arduino! With the push of a button, the user will be able to lower a tea bag into a cup, and after a set amount of time passes, the tea bag automatically gets raised and a noise is played to notify the user that their tea is finished and ready to be enjoyed.
-The amount of set time before the tea bag raises is the optimal amount of time for that particular tea type. Different buttons on the system can be pushed to choose what type of tea is to be brewed, and each type will have a different, optimal brewing time for that type.
-A waterproof temperature sensor is attached to the unit that can be used to read the temperature of the water before brewing to ensure that liquid is hot enough for brewing purposes.
0 notes
Photo
Initial Circuit diagram from fritzing for the automated Tea Stepper
0 notes