App styring av bryggkjele

Kult oppsett! Men enig med han som kommenterte rekkeklemmene på websiden, de er ikke helt gode.

Med tanke på å kjøpe adafruit ting: Mouser selger mye fra adafruit og tilbyr gratis frakt på ordre over 400,-
 
Har hatt blinkblynk gående på arduino i noen dager. Faller svært ofte ut, men kommer alltid inn igjen av seg selv. Men kommando som er sendt om å slå på led, blir ikke alltid utført pga dette. Skal sjekke dette på et annet nett for å kontrollere om det er noe med nettet her. Men lesing av analog inngang funker alltid, når den kommer på nett igjen.

Hvilke elementer har du på Blynk applikasjonen?
Hvor ofte mener du med svært ofte?
Dersom du mister kommunikasjon må du vente til den er koblet opp igjen før du sender ny kommando. Den sender bare når Blynk appen ser en endring i verdi. Den analoge inngangen blir lest uten problemer fordi appen din er satt opp til å hente data fra controlleren hvert x sekund.

En annen ting er hvor ofte du henter data fra Blynk appen. Dersom du forespør veldig mye data veldig ofte har den en tendens til å falle ut. Leste et eller annet sted at dette skyldes at de foreløpig bare har en cloud server oppe.
Du kan prøve å sette opp en lokal Blynk cloud server på en Raspberry Pi (eller en vanlig PC/Mac). Svært enkelt å sette opp selv, men foretrekker foreløpig Blynk sin egen server grunnet hvor enkelt det er

På brygg appen sender jeg 4 variabler fra appen til microcontrolleren og mottar 6 variabler på appen. Har ingen problemer med dette. Den faller ut en sjelden gang, men kobler seg opp etter et par sekunder.
 

TorfinnS

Norbrygg-medlem
Det er slik at den kan falle ut flere ganger pr min. Men har ikke helt kontroll på hvor ofte. Brukte den fra eksemplet i libraryet. Rpi falt også ut men ikke så ofte. Den gikk mange timer.
 
Det er slik at den kan falle ut flere ganger pr min. Men har ikke helt kontroll på hvor ofte. Brukte den fra eksemplet i libraryet. Rpi falt også ut men ikke så ofte. Den gikk mange timer.

Kjedelig,
Bruker du iPhone? Prøv med Android. En kompis som prøvde på det samme oppsettet jeg har, men med iphone. Han slet med at den ofte koblet ofte koblet seg ut.
Blynk er open source og bærer preg av at det er under utvikling. Men de oppdaterer software jevnlig så bedrer seg litt etter litt...
 
Dette er veldig interessant. Har selv kjøpt inn både Arduino og esp8266 og prøvd meg på Blynk, men mine programmeringskunnskaper er dessverre forsatt ikke gode nok til at jeg er spesielt impontert over hva jeg får til:-(
Jada får det til å blinke, men so what !!? Hadde vært utrolig fint hvis du kunne dele mer av koden din og hvordan dette funker da jeg tror det er mange her på forumet som er kunnskapshungrige innen dette temaet her!

Er mange måter å løse dette på.
Begynn med de enkle tingene som å lese inn temperatur og sette en utgang på arduino høy og lav. Koble til en LED og se at du får slått den av og på.

Så begynner morroa. Skal du styre et SSR? I såfall må du sette opp en utgang med PWM slik at du har mulighet til å sette varmeelementet på lavere effekt enn 100%. Dvs du kan ikke sette det lavere enn full guffe, men du kan justere hvor lenge det er slått på og dermed regulere hvor mye effekt som går ut fra elementet over en angitt tid.

På photon gjøres dette med følgende kommando:
analogWrite(utgang, verdi, frekvens);
utgang: porten som SSR er koblet til
verdi: 0-255
frekvens: denne kan typisk settes til 0,25Hz for et slikt oppsett, men Photon klarer ikke lavere enn 1Hz

Forklart på godt norsk vil dette si: du lager et tog med pulser. Hvert tog er 1 sekund langt (1Hz). Dersom du skal sette effekten til 100% kommanderer du 255 ut.
Skal du ha 50% effekt setter du verdi = 128. Da er varmeelementet på i 0,5 sekund, så av i 0,5 sekund.

Når dette er oppe kan du legge til et standard PID bibliotek og begynne å tune denne.
 

TorfinnS

Norbrygg-medlem
Kjedelig,
Bruker du iPhone? Prøv med Android. En kompis som prøvde på det samme oppsettet jeg har, men med iphone. Han slet med at den ofte koblet ofte koblet seg ut.
Blynk er open source og bærer preg av at det er under utvikling. Men de oppdaterer software jevnlig så bedrer seg litt etter litt...
Er Android. Arduinoen og ethernet shield er kinavarer. Det er ikke appen som faller ut men arduinoen. Kommer opp melding i appen om at arduinoen ikke er i nettverket.
 

TorfinnS

Norbrygg-medlem
Er mange måter å løse dette på.
Begynn med de enkle tingene som å lese inn temperatur og sette en utgang på arduino høy og lav. Koble til en LED og se at du får slått den av og på.

Så begynner morroa. Skal du styre et SSR? I såfall må du sette opp en utgang med PWM slik at du har mulighet til å sette varmeelementet på lavere effekt enn 100%. Dvs du kan ikke sette det lavere enn full guffe, men du kan justere hvor lenge det er slått på og dermed regulere hvor mye effekt som går ut fra elementet over en angitt tid.

På photon gjøres dette med følgende kommando:
analogWrite(utgang, verdi, frekvens);
utgang: porten som SSR er koblet til
verdi: 0-255
frekvens: denne kan typisk settes til 0,25Hz for et slikt oppsett, men Photon klarer ikke lavere enn 1Hz

Forklart på godt norsk vil dette si: du lager et tog med pulser. Hvert tog er 1 sekund langt (1Hz). Dersom du skal sette effekten til 100% kommanderer du 255 ut.
Skal du ha 50% effekt setter du verdi = 128. Da er varmeelementet på i 0,5 sekund, så av i 0,5 sekund.

Når dette er oppe kan du legge til et standard PID bibliotek og begynne å tune denne.
I forhold til arduino er dette mye bedre. På arduino ligger frekvensen på ca 490 hz. Det funker dårllig i forhold til å styre ssr. Men med 1hz går det bedre. Jeg har laget en hjemmelaget løsning for arduino der jeg bruker to sek periodetid. (0,5 hz).
 

TorfinnS

Norbrygg-medlem
Til JørgenH: vet du om pid funksjonen til arduino har innebygget anti integrator windup?
Har testet pid eksempelet med rele som følger med biblioteket. Den summerer opp og det tar lang tid før den kommer ned igjen. Typisk integrator windup.
 
Til JørgenH: vet du om pid funksjonen til arduino har innebygget anti integrator windup?
Har testet pid eksempelet med rele som følger med biblioteket. Den summerer opp og det tar lang tid før den kommer ned igjen. Typisk integrator windup.

Nei, du må enten endre standard biblioteket slik du ønsker eller ta høyde for dette i din kode.
Den mest pragmatiske metoden er å kjøre manuell effekt styring frem til du nesten har nådd setpunktet, så aktiverer du PID regulatoren. (Dette kan du programmere Arduinoen til å gjøre selv)
 

TorfinnS

Norbrygg-medlem
Har pid i dag på vanntanken (REX), og tenkte i utgangspunktet å videreføre dette for styring med blynk. Men har kommet til at det egentlig bare er tull å ha pid på vanntanken. Det er overkill. Det vil funke like bra med en termostatfunksjon. Og kanskje legge inn en hysterese på 0,5 grader. Har en vanntank som tar 110 liter og har 6kW elementer i denne. Da lar jeg bare REX stå for den er fin å ha som avlesning av temp når man er i bryggeriet, og så bare frakobler jeg styresignalet til SSR og styrer dette fra Blynk istedet. Har ikke bryggeriet hjemme, så det kan være greit å fjernstarte vannpåfylling og oppvarming av meskevannet, så det er klart til jeg ankommer bryggeriet.

Jeg har også fjernet PID styringen til kokeren. Det funket dårlig så nå har vi kun effektregulering (trinnløs).
 

TorfinnS

Norbrygg-medlem
Er mange måter å løse dette på.

frekvens: denne kan typisk settes til 0,25Hz for et slikt oppsett, men Photon klarer ikke lavere enn 1Hz

Forklart på godt norsk vil dette si: du lager et tog med pulser. Hvert tog er 1 sekund langt (1Hz). Dersom du skal sette effekten til 100% kommanderer du 255 ut.
Skal du ha 50% effekt setter du verdi = 128. Da er varmeelementet på i 0,5 sekund, så av i 0,5 sekund.

Når dette er oppe kan du legge til et standard PID bibliotek og begynne å tune denne.

Hvis man har behov for lavere frekvens enn 1 hz så kan det løses enkelt slik:

unsigned long now = millis();
if(now - windowStartTime>WindowSize)
{ //time to shift the Relay Window
windowStartTime = windowStartTime + WindowSize;
}
if(Output > now - windowStartTime) digitalWrite(RelayPin,HIGH);
else digitalWrite(RelayPin,LOW);

WindowSize kan da f.eks settes til 5000 (ms). // får da en periodetid på 5 sek.

Koden er hentet fra eksempelkoden PID på arduinoen.
 

gle1

Norbrygg-medlem
Har fått Photon´en i hus nå, men trenger litt veiledning til hvordan man setter om PID funksjonen. Den koden du linket til i det første innlegget var vel litt kort for en pid algoritme?
 

msevland

Sentralstyre
... det er vel bare parametersettingen. Selve PID algoritmen ligger helt sikkert i et bibliotek som man kobler inn... uten at jeg har sett nøye på denne :)
 
Har fått Photon´en i hus nå, men trenger litt veiledning til hvordan man setter om PID funksjonen. Den koden du linket til i det første innlegget var vel litt kort for en pid algoritme?

Beklager seint svar, men har vært offline i et par uker

Last inn PID biblioteket direkte fra Particle IDE og se på eksempelet de har satt opp. Dette er et godt utgangspunkt. Jeg synes det greieste er å behandle utgangsverdien som 0-100%.

Du må deklarere PID kontrolleren din i starten av programmet:
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, PID:: DIRECT);
(skal ikke være mellomrom mellom : og DIRECT, men forumet behandler dette som en smiley så la til et mellomrom)

I setup området setter du opp max/min verdier som PID kan kommandere (feks 0-100). (void setup() er ikke komplett, inneholder kun PID for eksempelets skyld)
void setup()
{
myPID.SetOutputLimits(0, 100);
}

I selve loopen din aktiverer du PID når den skal aktiveres. Feks når en knapp i Blynk applikasjonen din er høy:
myPID.SetMode(PID::AUTOMATIC);
myPID.Compute();


Da vil den lese temperaturen i kjelen (Input), sammenligne denne med Setpoint og så endre Output slik at den regulerer seg inn.
Dette forutsetter at Kp, Ki, og Kd er tunet.

En god start er å sette Kp til 50, Ki til 0 og Kd til 0. Så kan du bruke Ziegler-Nichols metode for å tune disse bedre.
 
Topp