# Coffeeholic

## Keep your coffee at the best codition

Created: January 28th, 2015

0

### Scenario

I am a coffeeholic who really cannot live without coffee for a day and care about keeping my coffee jar in the right temperature in order to keep my coffee bean in the best condition. COFFEHOLIC provides you to track your coffee in real time, and alarms you when you should add coffee beam. So COFFEEHOLIC updates the temperature every few seconds and show the specific temperature in the cloud variables. Also the "coffeealarm" tells you "add" and "good" so that you don't have to worry you don't have coffee to drink today!

### Process

The logic process is like: define whether the coffee jar has coffee(force sensor) for 3 seconds --> if yes then turn off the red light --> keep updating data every 3seconds (when data is updated the green light will blink) --> temperature shows "number" and coffeestatus shows "add" or "good" -->repeat

Firstly I drew a rough sketch to clarify the logic and the big structure of my code. I tweaked a little bit from temperature sensor code in the github and added some for loops and if statements for LEDs. The problem I met is how to rewrite the word characters into variables because I found out that the status always showed "add" no matter what, so I spent some time to figure out to use array (thanks to the help from my classmate).

### Material Used

* Spark

* Temperature sensor x1

* Force sensor x1

* 10nF capacitor x1

* 1k resistor x2

* 10k resistor x1

* jumper x alot

### Next Steps

I am planning to add photosensor to track how many times you drink coffee today. Also can combined with special sensor to track humidity is available. In the future I also can make Coffeeholic send picture to you when you are run out of coffee!

0
``````int redPin = D0;
int greenPin = D1;
// Define a pin that we'll place the FSR on
// Remember to add a 10K Ohm pull-down resistor too.
int fsrPin = A0;
// Create a variable to hold the FSR reading
// Create a variable to store the force number.
int force = 0;
// Define the Pin the Temperature sensor is on
int tempPin = A1;

char coffee[4];
// Create a variable that will store the temperature value
double temperature = 0.0;

void setup()
{

Spark.variable("temperature", &temperature, DOUBLE);
Spark.variable("coffeealarm", coffee, STRING);
// Configure the pins to be outputs
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
// configure A1 to be temp input
pinMode(tempPin, INPUT);
// Initialize both the LEDs to be OFF
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
}

void loop()
{
//hold FSR for 3 seconds first then blink red LED for 3 seconds

// Map this value into the PWM range (0-255)
// and store as the led brightness
force = map(fsrReading, 0, 4095, 0, 255);

//wait 3 seconds
delay( 3000 );
//check force
if(force > 5 )
{
strcpy(coffee, "good");
turnoffLED( D0 );
turnonLED( D1 );

}
else
{
turnoffLED( D1 );
turnonLED( D0 );
}

// The returned value from the Core is going to be in the range from 0 to 4095
// Calculate the voltage from the sensor reading
double voltage = (reading * 3.3) / 4095.0;
// Calculate the temperature and update our static variable
temperature = (voltage - 0.5) * 100;

blinkLED(D1,3); //blick 3 times to show the data is updated

delay(100);

}

//turnon LED
void turnonLED(int pinNumber)
{

digitalWrite( pinNumber, HIGH );

}

//turnoff LED
void turnoffLED(int pinNumber)
{

digitalWrite(pinNumber, LOW);

}

void blinkLED( int pinNumber, int times )

{

for( int i = 0 ; i < times ; i++ )

{

digitalWrite( pinNumber, HIGH );

delay( 500 );

digitalWrite( pinNumber, LOW );

delay( 500 );

}

}

void checkFSR()
{

// Map this value into the PWM range (0-255)
// and store as force
force = map(fsrReading, 0, 4095, 0, 255);

//wait 3 seconds
delay(3000);
if(force > 1 )
{
turnoffLED(D0);
turnonLED(D1);
}
else if(force < 1);
{
turnoffLED(D1);
turnonLED(D0);
}
}``````
Click to Expand
0
https://vimeo.com/117985202