Original posts including reverse engineering here:
http://hackcorrelation.blogspot.com/2013/07/building-new-firmware-for-senseo-coffee.html
http://hackcorrelation.blogspot.com/2013/11/senseo-custom-firmware-update.html
State of the project: pending deployment, some important details are missing:
- SAFETY!
- what's the water temperature used by the original system?
- I don't have a functioning heater/boiler anymore - used the working one for a repair
Hardware - mostly stock, I'm just putting in the MSP430 chip and a regulator. I kept the original board and removed the uC and EEPROM chips.
- three buttons: power, 1 coffee, 2 coffees
- the power button has a small red LED circle around it
- heater controlled via an SCR
- NTC thermistor inside the heater is sampled through a voltage divider
- water sensor is a hall type sensor that detects the floater position inside the water tank
- water pump is controlled via a small transistor
Operation:
- while line voltage is on but the machine is powered off the user can enter service modes via button combinations
- upon powering on the machine starts heating the water, displaying on the LED how hot the water is (PWM)
- if the user requests a coffee, the machine changes is blinking pattern and starts making a coffee once the water is heated
- if there is no water in the tank there is a faster blinking pattern
- if no user input is detected for 30 minutes the machine goes to power off state
- a lot of other safety stuff and under the hood stuff that you kind of expect to work
Why?
The original machine annoyed me (and my work mates) for various reasons:
- once plugged in, it stayed off, so if you used a remote outlet you have to physically move yourself to power on the machine, making the remote outlet kind of useless
- heating the water takes quite a lot of time (90s) and you cannot request a coffee in advance
- that 90s seems like forever because you have no indication how far you are from the target temperature; the led just blinks and then settles to an ON state
- if left unused for a while, the boiler temperature goes down quite a lot; this makes the next coffee colder than normal
Things to do after real-world testing is complete:
- the 2 coffee button is not implemented yet, not sure it is needed. Two presses of the other button achieve exactly the same thing and the water does not cool so much
- LPM3/4. Probably not needed, but I will test initially with a separate battery supply.
- water quantity calibration via a service mode. You should be able to increase/decrease the pump duration in 1 second increments via a service mode and the value saved in flash. The original chip did this
- add a jumper or some kind of configuration mode where you can have the machine prepare a coffee once it's powered on, for remote controlled outlet usage
Code and 'schematic', written for the Energia framework:
/***************************************************************************************
* // LEGEND: < from pin = digital output
* // > to pin = digital input
* // ^ pullup
* // $ analog
* // % pwm
* //
* // MSP430G2231 - on launchpad
* // ----------------- ^
* // |VCC GND| /|\
* // | | |
* // PWRLED %<|P1.0/A0/LED XIN|<^P2.6 CAFBTN |
* // | | |
* // |P1.1/A1 TXD XOUT|>P2.7 HEATER |
* // | | |
* // |P1.2/A2 RXD TEST| |
* // | | |
* // CAF2BTN ^>|P1.3/A3 S2 nRST|------------- /
* // | |
* // NTC/1.8k $>|P1.4/A4 A7/P1.7|< WATERSNS
* // | |
* // PWRBTN ^>|P1.5/A5 A6/P1.6|> PUMP (LED2)
* // -----------------
***************************************************************************************/
// NTC is 0.77k@93C in divider configuration with 1.8k so boiling voltage is less than Vcc*1.8/(1.8+0.77)=0.7*Vcc
// this means that for 3.3V going into divider the boiling point value is > 0.7*1024 = 717;
// 87C is about 0.643*Vcc (658) so cca 58 ADC points hysteresis
// pump debit is marked 2L/min but this does not seem right
//#define DEBUG_ON 1
//#define TEMPERATURE_DEBUG
#include <Energia.h>
static const uint8_t PWRLED = P1_0;
static const uint8_t CAF2BTN = P1_3;
...
Read more »