Espresso machine met Arduino

Pagina: 1
Acties:

Onderwerpen


Acties:
  • +1 Henk 'm!

  • Teus.espresso
  • Registratie: Augustus 2007
  • Laatst online: 22:24
De afgelopen jaren heb ik een aantal machies verbouwd en prototype espresso machines gebouwd.
De eerste was nog puur electronica componenten maar de latere machines hadden micro controllers als aansturing.
Ik heb een een stuk geschreven hoe een machine met temperatuur sturing via de Arduino is gebouwd inclusief schema's en voorbeeld code.
Afbeeldingslocatie: https://tweakers.net/i/qMnxdoUSXJ7zyv9Y9_QN2fqMCpw=/800x/filters:strip_icc():strip_exif()/f/image/IjnTz3DXNqtz37x5XFj7azUJ.jpg?f=fotoalbum_large

[ Voor 37% gewijzigd door Teus.espresso op 16-11-2024 16:00 ]


Acties:
  • +2 Henk 'm!

  • Teus.espresso
  • Registratie: Augustus 2007
  • Laatst online: 22:24
De meeste koffie machines hebben een temperatuur regeling die werkt op basis van een schakelaar die afhankelijk van de temperatuur (of druk) de verwarming in- en uitschakelt. De bandbreedte waarmee ze schakelen is ergens tussen de 5 en 10 graden. Die 5 of 10 graden is dus het verschil tussen het koudste moment vlak voordat de verwarming inschakelt en het heetste moment meteen nadat de verwarming uitschakelt.

Voor koffie maken is temperatuur een zeer belangrijke factor die smaak en doorlooptijd bepaalt. Als het dus lukt om de bandbreedte te verkleinen dan lukt het beter om herhaaldelijk de beste smaak uit de koffie te halen.
Om die temperatuur stabiliteit te verbeteren, bouwen producenten PID controllers in. Een PID systeem werkt met een temperatuur sensor, een regeleenheid die op basis van gemeten temperatuur en doel temperatuur een electronische schakelaar (SSR of Solid State Relais) aanstuurt. Het voordeel van een relais is dat het gemaakt is om heel vaak elektriciteit te schakelen. De regeleenheid kan daardoor heel precies de temperatuur regelen naar vlakbij de doeltemperatuur. De meeste regeleenheden hebben ook een display en bedien toetsen om de doel temperatuur in te stellen. Over het algemeen is 93 graden Celsius de ideale temperatuur.
Afbeeldingslocatie: https://tweakers.net/i/XUv6A5LEGARcoTvTks8r8lUUmCE=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/EFIe1eIP2GYj8Jl52K1s0GwO.jpg?f=user_large
De regeleenheid is niets anders dan een simpele computer met maar één taak. Door de regeleenheid te vervangen door bijvoorbeeld een Arduino kan je zelf de temperatuur regeling gaan programmeren en later functies toevoegen aan de koffiemachine.
Voor een voorbeeld wat er mogelijk is met andere controller boards kan je zoeken op “Gaggiauino”, “meCoffee”, “Ito Leva!” en “Decent Espresso”.
In die uitvoering worden naast de temperatuur regeling ook druk uitlezen en pomp sturing geregeld, timers of flow gebruikt en is er een display en of een app. Het voornaamste doel van dit stuk is om te laten zien dat een machine ombouwen naar PID functie niet heel erg lastig hoeft te zijn. Begin bij de basis en werk vanaf daar naar meer functionaliteit.

Benodigdheden voor de basis;
Controller board zoals Arduino, ESP of iets anders.
-Ik ga een Arduino gebruiken met de Arduino programmeer omgeving
Temperatuur sensor zoals een NTC (is analoog en makkelijk te programmeren) of een digitale sensor (preciezer maar iets lastiger te programmeren).
-Een NTC heeft een kleine afwijking maar daar valt omheen te werken. Een digitale sensor heeft soms minimaal 4Volt nodig dus werkt niet op 3.3Volt boards.
Weerstandje van bijvoorbeeld 10kΩ.
- weerstand waarde is aan te passen in het programma
DA SSR geschikt voor gebruikte Wattage.
-DA wil zeggen kan aangestuurd worden met gelijkstoom (Dc) uit Arduino en je kan er wisselspanning (Ac) mee schakelen. Voor een 1400Watt verwarming heb je een SSR nodig van 1400W/230V= 6 Ampère. Neem dat echter ruim en je komt op minimaal 10A voor een goede kwaliteit en neem een 25A als je ze bijvoorbeeld bij Ali besteld.

De eerste stappen gaan nog zonder de koffie machine.
Sluit de temperatuur sensor aan op de Arduino.
Afbeeldingslocatie: https://tweakers.net/i/twG0jpg2SEEbtYpbQPWHymmS7zk=/800x/filters:strip_icc():strip_exif()/f/image/nIyEBs1StlW9uFZyCxcP72Yw.jpg?f=fotoalbum_large
Schrijf een programma waarbij de voltage gemeten wordt;

const int NtcPin = A0; // Analoog pin voor NTC
const float R1 = 10000.0; // waarde voor 10kΩ weerstand
const float NtcC = 3950.0; // weerstands coëfficient. Varieert per type weerstand
const float NtcR = 10000.0; // weerstand bij 25°C
float temperatuurC;

void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = analogRead(NtcPin); // lees weerstand van NTC
float voltage = sensorValue * (5.0 / 1023.0); // reken waarde om in Voltage uitgaande van 5V start
float resistance = R1 * (5.0 / voltage - 1.0); // reken weerstand uit
float temperatuurK = 1.0 / (1.0 / 298.15 + (1.0 / NtcC) * log(resistance / NtcR)); //Steinhart-Hart reken methode voor temperatuur
temperatuurC = temperatuurK - 273.15; // omrekenen van Kelvin naar Celsius

Serial.print("Temperatuur: "); // Lees waarde via Serial Monitor
Serial.print(temperatuurC);
Serial.println(" °C");

delay(1000); // Wacht 1 seconde
}

Sluit nu de D kant (Input 3-32VDC) van de SSR aan op de Arduino. – op ground en + op een digital out.
Afbeeldingslocatie: https://tweakers.net/i/r5VDWHh4MFfXxq5rMOitZA3vMss=/800x/filters:strip_icc():strip_exif()/f/image/Tf6LZyHOfVTxPLxdr0MgE3KD.jpg?f=fotoalbum_large
Schrijf een programma waarbij de SSR onder de 30 Graden aan gaat en erboven uit gaat;

const int ntcPin = A0; // Analoog pin voor NTC
const float R1 = 10000.0; // waarde voor 10kΩ weerstand
const float ntcC = 3950.0; // weerstands coëfficient. Varieert per type weerstand
const float ntcR = 10000.0; // weerstand bij 25°C
float temperatuurC;
const int boilerPin = 11; // Digitale pin voor de SSR
float boilerDoeltemperatuur = -20.0; // Drempelwaarde in graden Celsius (kan aangepast worden)

void setup() {
Serial.begin(9600);
pinMode(boilerPin, OUTPUT); // maak de SSR pin een uitgang
digitalWrite(boilerPin, LOW); // Zorg ervoor dat de SSR uitstaat bij opstarten
}

void loop() {
int sensorValue = analogRead(ntcPin); // lees weerstand van NTC
float voltage = sensorValue * (5.0 / 1023.0); // reken waarde om in Voltage uitgaande van 5V start
float resistance = R1 * (5.0 / voltage - 1.0); // reken weerstand uit
float temperatuurK = 1.0 / (1.0 / 298.15 + (1.0 / ntcC) * log(resistance / ntcR)); //Steinhart-Hart reken methode voor temperatuur
temperatuurC = temperatuurK - 273.15; // omrekenen van Kelvin naar Celsius

Serial.print("Temperatuur: "); // Lees waarde via Serial Monitor
Serial.print(temperatuurC);
Serial.println(" °C");

if (temperatuurC < boilerDoeltemperatuur) { // Als de temperatuur onder het doel is, zet de SSR aan
digitalWrite(boilerPin, HIGH);
Serial.println("Opwarmen AAN");
} else { // anders zet SSR uit
digitalWrite(boilerPin, LOW);
Serial.println("Opwarmen UIT");
}

delay(1000); // Wacht 1 seconde
}

Op de SSR zit vaak een led die aangeeft of hij aan of uit staat. Je kan natuurlijk Serial.print gebruiken om de waarde in de serial monitor te volgen. Als het goed is gaat de SSR aan en als je de sensor verwarmt met je hand zou hij uit moeten schakelen. Stel als dit goed werkt de boilerDoeltemperatuur in op 80 graden.

****let op!*** vanaf hier wordt het werken aan 230V. Dat kan dodelijk of op zijn minst pijnlijk zijn. Ook is de binnenkant van een koffiemachine heet. Doe voorzichtig en plug de machine pas weer in als alles goed zit. ***Ik ben niet verantwoordelijk voor gevolgen, schade of schande.***
Bevestig de temperatuur sensor aan de buitenkant van de boiler. Plaatsing is in het begin niet heel belangrijk als het maar stevig zit. Komt de sensor los van de boiler dan stopt het verwarmen niet.
Schakel de machine in lees als hij warm is de temperatuur uit via de Arduino Serial monitor. De gemiddelde temperatuur die je afleest gaan we straks gebruiken als doeltemperatuur. Bij een thermoblock of single-boiler machine zal het rond de 93 graden zijn. Bij een warmtewisselaar machine zal de temperatuur rond de 115 graden zijn. Schakel de machine uit, stekker eruit en af laten koelen.
Nu pas gaan we de SSR plaatsen en aansluiten. Een SSR kan heet worden en moet dus met de metalen onderkant tegen metaal worden vast gemaakt. De A kant (24-380VAC) wordt aangesloten tussen de originele thermo- of pressostaat en het verwarmingselement. Door het systeem eerst zo in te bouwen werken de originele onderdelen als een fail-safe.
Afbeeldingslocatie: https://tweakers.net/i/qqsOh0cI3mgG93fftggS_zyfVJU=/800x/filters:strip_icc():strip_exif()/f/image/fzJhvD4ZgKV1VnDFSstLndlv.jpg?f=fotoalbum_large
Schakel eerst de Arduino in en vervolgens de koffie machine. Als het goed is verwarmt de machine nu naar ongeveer 80 graden. Niet ideaal om koffie te zetten (en de stoomfunctie van een warmtewisselaar werkt in zijn geheel niet) maar het is een controle stap.
Werkt dit naar behoren (ik raad een test tijd aan van ongeveer een half uur) schakel dan de machine uit en programmeer de eerder gemeten temperatuur als boilerDoeltemperatuur in de Arduino.
Na inschakelen van de machine zou hij moeten opwarmen naar de goede temperatuur. Test of dit zo is. Het is wel zo dat de originele onderdelen en de controller beide de temperatuur proberen te regelen. Dat is voor deze test niet erg.
Werkt dit ook goed (ik raad aan dit ongeveer een uur te testen) dan kan de machine weer uit, stekker eruit en afkoelen.
Afbeeldingslocatie: https://tweakers.net/i/oybdAEwBqH8mlp1R6z869CckSNQ=/800x/filters:strip_icc():strip_exif()/f/image/WFQmlptvl2BP3ntWU7lUZhJH.jpg?f=fotoalbum_large
Nu kunnen we de originele temperatuur regeling buiten spel zetten. De SSR zit aangesloten op het verwarmingselement (dat blijft zo) het andere draadje gaat naar de thermo- of pressostaat. Trek nu het andere draadje op de thermo- of pressostaat los en sluit die aan op de SSR. Je houdt nu dus één draad over en de thermo- of pressostaat heeft geen aangesloten draadjes.
Bij opnieuw inschakelen van de machine wordt de temperatuur alleen geregeld door de Arduino. Gefeliciteerd de basis temperatuur regeling werkt nu.
***waarschuwing voor warmte wisselaar machines. De boiler is nu temperatuur gestuurd. Als het vacuum ventiel afgesloten blijft bij een machine die uit staat dan loopt de druk te hoog op in de boiler en zal de drukbeveiliging bij 2,5 bar ineens een hoop stoom afblazen. Dit is een risico bij alle PID warmtewisselaars en heeft niks met deze modificatie te maken.

Code verbeteren;
Het nadeel van enkel sturen op doel temperatuur is dat de temperatuur bij de eerste keer opwarmen te hoog oploopt. Dat is niet heel erg en fabrikanten gebruiken dat tegenwoordig als fast heat of andere marketing termen. Om de overshoot te verminderen kunnen we de opwarming te verminderen in de buurt van de doel temperatuur of echte PID coderen.
Opwarming verminderen kan door een functie te beschrijven die verschil tussen huidige en doel temperatuur meet. Met die functie kan je een steeds kortere inschakeltijd van de SSR definiëren in combinatie met een korte pauze per cycle. Zo gaat de SSR steeds korter aan naarmate de temperatuur omhoog gaat terwijl de machine wel goed reageert op temperatuur dalingen.
Echte PID vraagt wat meer experimenteren met de verschillende factoren.
In de Arduino code kan je een PID library importeren. Begin met de PID_Basic.ino. Die verwerk je in de code. Daarna komt het tunen. PID werkt met drie factoren. In de code zijn ze voorgeprogrammeerd als Kp=2, Ki=5, Kd=1. Door de verschillende waardes aan te passen werkt de PID agressiever of juist rustig. De Kp is de vermenigvuldig factor tussen huidige en doeltemperatuur, de Ki is fout correctie factor en Kd is de demper die overcorrectie tegen gaat. Speel met de verschillende waardes om een stabiel maar snel reagerend systeem te maken.
Als PID of andere temperatuur regeling goed werkt wordt het tijd voor de kersen op de taart. Vanaf hier komt de Arduino echt van pas en is de fantasie de enige beperking.
Mogelijke uitbreidingenen;
Controle lampjes van de machine via de Arduino
Schakelaar aansluiten als timer of monteren van flowmeter voor koffie zetten eventueel uitgebreid met pre-infussie. Dit vereist pomp sturing via de Arduino.
Dan kan er ook een waterbak sensor komen die koffie maken niet toe staat als de waterbak leeg is eventueel met knipperende controlelampjes.
Aansluiten van druksensor om werkdruk te meten.
Variabele pomp sturing om pressure profile mogelijk te maken.
Display aansluiten.
Remote sturing eventueel met een app.
Counters inbouwen als hulp voor onderhoud meldingen
Tweede verwarmingselement aansturen bij dual boiler machines of de verwarmde kop van Bezzera machines.

Zelf heb ik een Bezzera kop op de machine en wil een encoder gaan gebruiken als pomp sturing. Zodra ik daar verder mee ben zal ik dat hier delen.
Ik nodig jullie ook uit om zelfbouw machines te delen.

[ Voor 90% gewijzigd door Teus.espresso op 16-11-2024 15:46 ]


Acties:
  • 0 Henk 'm!

  • Teus.espresso
  • Registratie: Augustus 2007
  • Laatst online: 22:24
***gereseverveerd***

Acties:
  • +1 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Leuk projectje, ik ben hier ook mee bezig geweest. Maar let aub even op de formatting van je tekst.

Het is echt interessant qua hobby maar lastig lezen nu.

Ik heb elektra-inbouwmaterialen over? Kopen? Zie: hier