Ja u siebie też mam PID, aby nie było, że krytykuję

Dlatego też pytam się czy udało Ci się coś lepszego zaimplementować - może byłaby okazja "pożyczyć" kod
Model Predictive Control jest na papierze lepsze, ale kluczowe jest "mogłoby" - ktoś musiałby to sprawdzić. Mnie zaciekawił z powodu części predykcyjnej - grzanie w termobloku ma dosyć dużą bezwładność. Drugi termoblok który posiadam ma o wiele mniejszą masę, więc mam przestrzały nawet o 10C (musiałbym to lepiej wyregulować).
PID jest najłatwiej zaimplementować (trochę trudniej dobrać parametry), ale niestety służy tylko do sterowania układami liniowymi. Tutaj, z racji, że przepływ wody jest nieuwzględniany w zwykłym PID sterującym temperaturą mamy układ nielinowy (zakładając, że grzanie samego termobloku jest liniowe). Można do sterowania zastosować PID, ale musimy mieć parametry dla kilku punktów pracy (każdy dla jakiegoś zakresu przepływu). Dla takiego punktu możemy dokonać linearyzacji i sterować jakby był to zakres liniowy. Na studiach przedstawionym przykładem był układ sterowania jednego z myśliwców - dla całego zakresu parametrów lotu było kilkadziesiąt nastaw regulatora.
Piszę trochę opisowo i w uproszczeniu, bo nie wiem którzy z czytających będą mieli jaki zakres wiedzy (a jak gdzieś się mylę to proszę o poprawę - studia były już jakiś czas temu i nie pracuję w branży automatyki).
Do MPC musiałbym odświeżyć wiedzę z teorii sterowania i zrozumieć ten kontroler, bo tego nie poruszaliśmy w toku studiów. Z przeglądu który ostatnio robiłem wygląda najciekawiej.
@Krakus pod arduino nie ma, ale są w C:
github.com/DanielMartensson/CControl
github.com/DanielMartensson/Adaptive-Control - a tutaj opracowane kontrolery w środowisku symulacyjnym (matlab/octave lub xcos)
Wracając do kwestii sterowania w ASCASO 57mm - dużym problemem jest początkowe napełnienie komory, duża ilość wody musi zostać pobrana w tym momencie i znacznie spada temperatura termobloku. Jak pamiętam to zwykle następował spadek o ~7-8 stopni i natychmiastowe uruchomienie grzałki. Później przepływ jest w miarę stały. Możliwe, że wystarczyłoby rozróżnić te dwa sposoby działania.
Teraz mam inny układ - wstawiłem dodatkowy termoblok, który wstępnie podgrzewa wodę do 80C. Ułatwia to sterowanie głównym blokiem. Największym problemem jest to, że nie mam sprzętu do pomiaru temperatury wody (grupa 57mm). Eksperymentowałem z termistorami za wyjściem z termobloku, ale mają za dużą bezwładność. Niektóre zaparzenia kawy mam świetne, ale pod koniec czuć goryczkę która mogłaby wynikać z zbyt wysokiej temperatury pod koniec ekstrakcji.
Więc na razie z racji niepowodzeń zrobiłem przerwę i wróciłem do Roty.
Edit:
Mam PID o trzech zestawach parametrów - nagrzewanie ekspresu, ekstrakcja i powrót do nastawionej temperatury po ekstrakcji.
Podoba mi się to rozwiązanie - proste i skuteczne. U siebie mam na razie PID tylko z jednym zestawem parametrów. Preinfuzje mam hybrydową - coś a'la slayer - mogę sterować ilością cykli pompy na sekundę do ustalonego ciśnienia (sterowanie przepływem, zwykle do 2-3 bar), mogę też ten krok pominąć, od razu dobić do 2-3 bar i podtrzymać. Na razie sterowanie jest bardzo proste bo całość to prototyp. Wykorzystuję u siebie ESP32 + ADS1115 i mam cykl sterowania co 1ms dla pompy, co 4ms dla pid. Pozwala mi to sterować pompą na prostym if(target - current) > offset). U mnie czujnik ciśnienia jest zamontowany na miejscu ujścia do zaworu pary, więc tymczasowo ekspres jest tylko do espresso.