Ha die Roland, :-)

Dank voor de tip, ik ga er naar kijken als de metinggen die lopen klaar zijn.
Ik was er wel al achter dat het zelfs bij auto tuning nog niet optimaal was.
Minuten lang regeld hij de temperatuur op 0,01C nauwkeurig en dan loopt hij op met daarna weer "wild" terug regelend.
Het blijft dan wel binnen de +- 0,1C wat nog steeds heel goed is.
Ik denk dus dat de auto tuning niet echt optimaal werkt of de problemen die jij aantipt daar het gevolg van zijn.

Groet,
Bram

Ik heb hier nog twee documentjes die ik ooit heb gebruikt om een heater in te regelen. Je bent vrij om ze te gebruiken.

In het eerste document bepaal je de systeemrespons door doelzoeken te gebruiken. De parameters die daar bij horen stop je in het tweede document en dan rol len daar de optimale PI of PID parameters uit.

Ik schrijf wel op waar je wat invult als je aangeeft dat je het ook echt wilt gebruiken. Het is makkelijker dan het lijkt en het is een robuuste methode.

Even zo tussen door,
Heeft het niet meer zin om een constructie te maken waarbij de hoogste en laagste gemeten waarde niet meegenomen wordt?
Weet dat het een uitdaging voor je gaat worden ;-)

Daarbij heb ik nog een tip voor je, de loop van de ADC samples met de helft te verkorten. Dit wordt mogelijk door in je eerste meeting loop gelijktijdig je tweede loop te integreren.

Hi Heren, :-)

MdBruin,
Met het meten van 12 samples ben ik begonnen en dan de hoogste en de laagste weg gooien en dan sommeren en daarna door 10 delen.
Maar zoals ik het nu doe, met 50 a 100 metingen middelen werkt voor nu goed genoeg voor mijn buitenoven.
Ik ben niet aan het zoeken naar een perfecte regelende buitenoven, dan doe ik het wel volledig lineair *grin*
Maar hoor toch graag jullie inzichten aan, want die zijn voor de toekomst misschien handig.

necessaryevil,
Dat geld ook voor jouw Excel sheets, dat zal mijn begrip van de P.I.D. beter maken en zoals ik er nu snel evn naar gekeken heb. snel de goede instelling kan gaan bepalen.
Alle info is welkom dus als je het wilt opschrijven graag!

Voor een indruk betreffende hoe "traag" de variaties bij de binnenoven terecht komen het onderstaande plaatje, na 1 uur nog niet op temperatuur.
http://www.bramcam.nl/Arduino/Testoven/TestOven-26.png

Het heeft 1 uur geduurd om van 23C naar 36,5C te gaan voor de binnenoven als deze niet gestookt wordt.
De temperatuurstijging komt dus door de warmte overdracht van de buitenoven naar de binnen oven.
Ik heb de twee 5K precisie NTC's niet met elkaar vergeleken, er kan uiteindelijk ongeveer 1C tussen zitten doordat ze 0,5% zijn.
Zoals nu al blijkt is er een erg grote tijdconstante tussen de buitenoven en de binnen oven.
Deze wordt nog groter omdat bij de nieuwe zending ovenbuisjes die ik besteld had,
de binnen ovenbuis 20% langer heb gekozen om meer plek te hebben voor de sensoren en het aantal referentie IC's.

Nu weer even werken!
Groet,
Blackdog

Oke, hier komt 'ie:

sheet 1: Het bepalen van de eigenschappen van het systeem door middel van een test/meting. Uit deze test komt een mooi grafiekje. We hebben eigenlijk geen grafiek nodig, maar de vergelijking voor die grafiek, maar dat gaan we excel laten doen.

Je zet je datalogger (o.i.d) aan op tijdstip nul. Zet je oven aan op een bepaald vermogen (dit mag overigens ook gewoon nul zijn) en wacht todat de boel stabiel is. Vervolgens verander je op tijdstip "tstep" het vermogen van de oven. Je mag de waarden zelf kiezen, nouja, niet helemaal, er moet wel aan de volgende eisen voldaan:

  • Je moet tijdens de test temperaturen zien waarbij je de oven ook wilt gebruiken. Soms is dit trial en error.
  • Het verandering in vermogen moet groot genoeg zijn om de verandering in temperatuur meetbaar te krijgen.
  • Je moet de test pas beginnen als de temperatuur constant is
  • Nadat je het vermogen wijzigt

zorg dat je dit weet:

  • tstep: tijdstip waarop je de stap zet
  • M: verandering van vermogen (verhoging is een positief getal, verlaging is een negatief getal)
  • y0: de temperatuur aan het begin van de test

Geef de meting maar aan mij, dan prop ik 'm wel in de excelfiles. Dat is voor mij ook wat makkelijker, dat scheelt het schrijven van lappen tekst.
Het resultaat zijn 3 getallen die je voor je controller gebruikt.

Hi necessaryevil, :-)

Als eerste dank voor het meewerken.
Dan even in mijn woorden om te laten zien of ik het goed begrijp.

Ik zorg er voor dat de oven die ik wil testen reeds op temperatuur is, stabiel.
Laten we uitgaan van 40C.
Dan kan ik door een trucje aan mijn sensor input van de Arduino (schakelbare verzwakker) na de TMP37 deze verzwakker inschakelen.

Dan geef ik op hoeveel "Watt" er werd opgenomen toen de oven stabiel was.
Nu gebruik ik de spanningsverzwakker truc en denkt de ovencontroler dat de temperatuur zeg 0,2C te laag is en hij gaat dan weer stoken om dit weer op 40C te krijgen (eigenlijk 40,2C)
Ik noteer het tijdstip dat ik de truc start en de tijdstip dat de temperatuur weer stabiel is.

Ook geef ik dan door wat het start vermogen was en het vermogen dat wordt verbruikt om de waarde van 40,2C te berijken.
Zoals het nu staat is het ongeveer 4-Watt als het stabiel is en 13-Watt als de oven aan het stoken is, Dit alles boven de "preheath" temperatuur waar het normaal om gaat.

Heb ik dit zo goed begrepen?

Groet,
Blackdog

Uhmmn, nee, maar ik was dan ook iets vergeten uit te leggen :-)
Namelijk dat je de regelaar niet gebruikt en dat je meerdere meetpunten nodig hebt. Je moet echt een grafiekje kunnen maken.

Het idee is dat je het vermogen handmatig gaat veranderen en kijken wat er gebeurt. De regelaar doet dus niets.

Je zet dus eerst je verwarmingselement op vermogen P1 (bijv. 4W) je wacht totdat de boel stabiel is, en daarna zet je het verwarmingselement op vermogen P2 (bijv. 13W) en je wacht weer tot alles stabiel is.

Mbt. 18°C instellen om 40°C te halen, kan je in de regelaar geen Ofsett programeren?

En voor de verschillende waarden met het meten, ik meen ooit gelezen te hebben dat je de controller eerst in "sleep" zet dan de meting doen, en dan weer verder hobbelen, zodat andere processen geen invloed op de ADC hebben? (of gold dit alleen voor PIC's , voor mij lang geleden)

Hi necessaryevil,

Oooo, dat maakt het alleen maar makkelijker.
Als ik klaar ben met de meting die nu nog even loopt zal ik die meting gaan uitvoeren.

De lopende test
Zolang duurde het totdat de binnen oven bijna op de temperatuur van de buitenoven is gekomen.
4 uur op het plaatje en hij is er nog niet helemaal...
http://www.bramcam.nl/Arduino/Testoven/TestOven-27.png

De temperatuur is net gestopt met oplopen, de resolutie is 0,001C en de variatie kan dan ook het meetinstrument zijn...
De binnen oven staat nu op 39,031C bij bijna 4,5 uur datde oven aanstaat.

Ik heb het loggen opnieuw gestart in hoge resolutie modus om te kijken of ik variatie kan terug vinden van de 0,1C die de P.I.D. controler rammelt, ik vermoed van niet.

Groet,
Blackdog

Ik denk dat wat jij zegt in iedergeval iets specifieks is.

Nog even:
Je zet inderdaad je controller uit, je meet namelijk de eigenschappen van je oven, op basis van die eigenschappen ga je een controller 'ontwerpen'.
Wat je veranderd is het vermogen, je meet de temperatuur.

Hi necessaryevil,

Mijn ervaringen zijn eigenlijk alleenmet kleine lineair geregelde oventjes.
De meeste zijn gemaakt om enkele onderdelen te verwarmen.
Daar heb ik aardig wat kennis mee opgedaan en ik kreeg het ook vaak snel en goed regelend,
doordat ik er al snel achterkwam dat een zeer goede kopeling van de verwarming met de sensor je veel kan winnen.

Dit heb ik nu ook toegepast in de voor mij grote oven, zoals je in dit topic vind.
Hier ga ik nog een stap verder door een dual oven te maken met wat intelligentie.
Of ik nu echt de P.I.D. regelaar ga gebruiken voor de buitenoven is nog niet zeker.
Ik wil wat metingen gaan doen door de wikkelingen van de buitenoven met 50Hz aan te sturen
en dan met mijn audio meetset het resulterende veld te meten in de buiten en de binnen oven.

De P.I.D. software wil ik goed gaan begrijpen, daarom ga ik ook wat testjes doen met de gele vermogens weerstand en de Arduino P.I.D. software.
Ook jouw info kan dan helpen bij het verkrijgen van inzicht.

Hier een voorbeeldje van de REX-C100 die zich vreemd gedraagt, maar dat kan een gevolg zijn van wat Roland aangeeft.
Minuten lang houd hou de oven perfect op temperatuur, zie het vlakke stuk in onderstaande foto.
Dat is grotendeels binnen 0,015C en daarna gaat hij weer aan de wandel.
In dat vlakke stuk geeft hiij op dat moment nog steeds korte pulsjes energie aan de oven, het regelsysteem is dan echt nog in werking.
http://www.bramcam.nl/Arduino/Testoven/TestOven-28.png

Groet,
Blackdog

Ik heb ook alleen maar ervaring met kleine verwarmingen, maar mijn definitie van klein is wat anders (6). 1 kW ofzo. Dat was voor een proefopstelling van een destillatie unit

Hier is een voorbeeld van een staptest. Het zijn geen verzonnen waarden, ik heb deze test ook echt gedaan op bovenstaande unit. Op t = 314 sec heb ik het vermogen van het verwarmingselement handmatig veranderd van 30% procent naar 37% (zwarte lijn) De temperatuur veranderd van 70 graden naar 87 graden (groene lijn).

staptest:

Heb je zometeen een logfile? Ik heb namelijk de hele grafiek nodig.

Hi necessaryevil,

Ga je mij opjagen! *grin*

Ik kan je een grafiekje laten zien en een tabel en die maak ik met de hand.
Ik kan nu niet automatisch de drie eenheden in een grafiek stoppen tijdens het meten.
Jammer genoeg...
Dat wordt echt handwerk, maardaar zit ik niet mee, dat laat ik hier wel vaker zien :-)

Er schiet me nu te binnen dat ik mijn scoop misschien kan programmeren zodat hij de temperatuur en het vermogen aangeeft.
Even wat proberen vanavond.

Groet,
Blackdog

Uhm, ben je een whiskey stoker? slurp lekker...

Je zat er niet ver naast met je whiskey. Het ging wel om een mengsel van water en alcohol, maar niet met het doel om drank te stoken. Ik heb voor mijn afstudeeropdracht een besturingsprogramma en een SCADA interface voor een pilot scale destillatieunit gemaakt (ca. 5m hoog). Daarna heb ik diverse regelaars ingeregeld.

Dit ding wordt nu (is mij verteld) gebruikt om eerste jaars studenten kennis te laten maken met SCADA systemen.

Waarom alcohol en water? Nou het is goedkoop, de dampen zijn niet schadelijk en de temperatuur ligt ver genoeg uitelkaar om het mengsel te scheiden met destillatie.

//edit
Ik zou het overigens niet willen drinken. Het spul zit al een tijdje in die kolom en het ziet er aardig troebel uit. Ik weet ook niet wat er ooit allemaal in die kolom gezeten heeft en wat er aan de alcohol is toegevoegd. Men wil namelijk ook nog alleens wat gif toevoegen aan dat soort alcohol zodat er geen accijns betaald hoeven te worden.

[Bericht gewijzigd door necessaryevil op (23%)]

Oh, nog even iets. Je kunt ook gewoon de temperatuur tegen de tijd loggen en dan opschrijven wanneer je het vermogen hebt veranderd en met hoeveel. Dat vereist maar 3 notities (vermogen aan begin, vermogen na wijziging, tijdstip van wijziging)

Hi Marius,

Deze:
Daarbij heb ik nog een tip voor je, de loop van de ADC samples met de helft te verkorten.
Dit wordt mogelijk door in je eerste meeting loop gelijktijdig je tweede loop te integreren.

Waar zit het voordeel dan in de tijd, de processor moet toch altijd beide handelingen doen?

Ik denk er steeds meer aan om een van de Teensy microcontrolers te gaan gebruiken.
Voordeel is ondermeer een AD converter met een hogere resolutie tot 13 bit goed te gebruiken en 1x een 12 bit DAC uitgang.
Hiermee wordt het wel heel simpel om een lineaire regeling voor mijn buitenoven te maken.
En ruime voorraad aan processorkracht geheugen enz, maar een goedkope Nano die bijna alles regeld is natuurlijk ook leuk.

Ik heb ondertussen ook de corectiefactor voor de TMP37 getest en deze werkt, natuurlijk is dit een "1-Punt" kalibratie maar voldoende voor mijn toepassing.
Deze week ook mijn temperatuursensor kalibrator in een doosje bouwen, zodat deze goed bruikbaar wordt voor de oventesten waar ik mee bezig ben.
Dit mini oventje heeft de beste PT100 sensor die ik voor normaal geld kon kopen en ga er dan vanuit dat rond de 40C de temperatuur binnen 0,1C nauwkeurig is.

Er is in de binnen oven geen enkele invloed te vinden va nde 0,15C variatie van de P.I.D. geregelde buitenoven.
Er is wel een variatie maar die is zover ik het nu kan zien niet gerelateerd met de buitenoven.
Waarschijnlijk luchtdruk en tocht gerelateerd in de meetruimte.
De variatie over blijft binen 0,03C.

necessaryevil
Ik ga er aan werken :-)

Groet,
Blackdog

Je 1ms vertraging?

Ik snap niet waarom je zo moeilijk doet over een PID regeling; je doet net alsof dat betekend dat je verplicht bent de oven te PWM'en, maar voor de hele 4W kun je dat toch ook gewoon lineair doen? Je zult toch zelf ook wel inzien dat je daarmee veel mooier kan regelen dan met zo'n bang-bang controller.

Hi SparkyGSX, :-)

Natuurlijk weet ik allang dat ik het lineair prachtig kan krijgen.
Maar dat kan eventueel met grote condensator waarden gepaard gaan voor de loop stabilisatie.
Als het EM veld niet te veel stoort, kan de buitenoven met minder onderdelen toe en ik heb wat nieuws geleerd :-)

Een P.I.D. is een intelligente bang bang controler die precieze energie pakketjes stuurd voor het bereiken van een equilibrium.
Waarom er mee stoeien? Omdat ik graag leer en graag ondervind/onderzoek wat de voordelen en beperkingen zijn van dit soort regel electronica.

Binnen oven equilibrium vemogen
Update over de binnen oven, deze heb ik met een LAB voeding aaangestuurd zodat deze op 42C komt te staan.
Hiervoor is bij de 40,29C van de buiten oven en 21C Lab temperatuur maar 210mW nodig, bij 3V en 71mA schommeld hij rond de 42C.
Door enorm in te zoomen kan ik nu en verband zien maar dit zit tegen de resolutie en drift van mijn meetinstrument aan.
In tijd verschoven schat ik 0,0002C per 0,1C van de buiten oven.
Voor hele precieze metingen gaat mij dat erg veel tijd kosten, dit ga ik niet doen, de waarde van 210mW voor de binnen oven
is een goed uitgangspunt om te weten voor de opbouw van de lineaire regeling voor deze binnen oven.

Nu weer verder met het sleutelen aan de software.

Groet,
Blackdog

In je 1ms vertraging welke nu 2x gedaan wordt.

Buiten temperatuur loop 100x 1ms vertraging
Binnen temperatuur loop 100x 1ms vertraging

Als je dus in 1x de loop beide metingen laat doen heb je 0.1s minder vertraging in de sample loops zitten.

Nog een tip, ga aanleren op millis(T) te gebruiken. (T is de tijd in milli seconden)
Voordeel is dat je je processor niet op slot zet en dat deze nog kan reageren. Delay(T) word in het begin aangeleerd maar het is eigenlijk beter om millis(T) te gebruiken.

Hi Marius,

Ik zie dat gewoon niet...
Dan heb ik het over die 1ms delay, nu dus wel, dank je.
Ik heb de delay er even uit gekegeld en de sample waarde naar 400 gezet.
Dit om te kijken hoe de sensor reageert op aanraking.

Later zal ik je opmerking om de sensor metingen na elkaar te zetten, ook uit te proberen.

Groet,
Bram

Geen probleem toch, houd mij opzich ook scherp op niet dingen te kort proberen te vermelden. Zoals je zelf weet af en toe knap lastig.

Opzich is de aanpassing redelijk makkelijk.
Direct onder je buiten temperatuur meting zet je je binnen temperatuur meting.
Zou de rest apart houden. Je zou dus de constructie kunnen maken van de loop voor de samples en dan de scheiding van de verwerking van de gegevens apart. Houd het voor je een stuk overzichtelijker.

Hi,

In een vrij uurtje heb ik even aan de code gesleuteld zoals ondermeer Marius aangaf.
Wat omschrijvingen aangepast en gespeeld met de smpl waarde.

Ook is het display aangepast naar een 20x4 type, als je weet wat alle variabelen zijn, dan is het eigenlijk makkelijk om te switchen van type.
Het positioneren van de waarden is nog het meeste werk.

Ook heb ik de tekst die vast staat in het setup stukje geplaatst, ik luister echt wel naar jullie ;-)

/*
  NoiseAmp Amsterdam - V0.2  Date: 10 okt 2016
  Dual Oven voor een spannings referentie

  Deze software controleerd voor beide ovens de "preheat"
  Deze "preheat" brengt bijde ovens snel tot vlak bij de de gewenste temperatuur en schakeld dan over op een precisie regeling
  De sensoren voor de "preheat" schakelen uiteindelijk een relais die de verwarmings wikkelingen van parallel naar serie schakelen
  zodat het opgenomen vermogen bij de precisie regeling dan maar 1/4 is van de "preheat" status.

  
  De status van de oven is op een LCD display zichtbaar
  
  -----------------------------------------------------
  ** Binnenoven instellingen **
  Oven temperatuur:               42C
  "preheat" temperatuur           40C

  ** Buitenoven instellingen **
  Oven temperature:               40C
  "preheat" temperature           38C
  -----------------------------------------------------
  
 */

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7);         // 0x27 (0x3F) is het I2C bus addres for een ongemodificeerde PCF8574 12c naar parallel interface print 


// Variabelen voor de binnen oven
float tempI;                                        // Variabelen waar uiteindelijk na berekening de temperatuur in geplaatst word voor de binnen oven
float bitI;                                         // Waarde van een enkele bit (Is Ref spanning / 1024) voor de binnen oven
float adcTempI= 0;                                  // Gemiddelde waarde van het aantal genomen monsters voor de binnen oven
word i = 0;                                         // Tijdelijke variabel nodig bij het tellen van het aantal monsters voor de binnen oven
unsigned long tempReadingI;                         // Tijdelijke buffer voor het sommeren van de monsters voor de binnen oven
const byte tempPinI = 1;                            // Set de gebruikte analoge ingang voor de TMP37 sensor in de binnenoven
const word smplI = 400;                             // Set het aantal te nemen monsters voor de binnenoven
const float setOvenI = 42.00;                       // Set de binnenoven temperatuur
const float preHeathI = 40.00;                      // Set de PreHeath temperatuur voor de binnenoven
const int correctI = 4;                             // Correctie waarde om de temperatuur meting te kalibreren voor de binnenoven

// Variabelen voor de buiten oven
float tempU;                                        // Variabelen waar uiteindelijk na berekening de temperatuur in geplaatst word voor de buitenoven
float bitU;                                         // Waarde van een enkele bit (Is Ref spanning / 1024) voor de buitenoven
float adcTempU = 0;                                 // Gemiddelde waarde van het aantal genomen monsters voor de buitenoven
word u = 0;                                         // Tijdelijke variabel nodig bij het tellen van het aantal monsters voor de buitenoven
unsigned long tempReadingU;                         // Tijdelijke buffer voor het sommeren van de monsters voor de buiten oven
const byte tempPinU = 0;                            // Set de gebruikte analoge ingang voor de TMP37 sensor in de buitenoven
const word smplU = 400;                             // Set het aantal te nemen monsters voor de buitenoven
const float setOvenU = 40.00;                       // Set de buitenoven temperatuur
const float preHeathU = 38.00;                      // Set de PreHeath temperatuur voor de buitenoven
const int correctU =  1;                            // Correctie waarde om de temperatuur meting te kalibreren voor de buitenoven


const float uref = 1.0734;                          // De gemeten interne Referentie spanning van de microcontroler, nodig voor de berekening van de temperatuur

void setup() {
  analogReference(INTERNAL);                        // Geeft opdracht aan de compiler om de interne referentie spanning van de gebruikte Arduino Nano te gebruiken (gemeten spanning 1.0734V)
  Wire.begin();                                     // Start de i2c bus voor weergave van de wwarden op het display
  Serial.begin(9600);                               // Start de serieele monitor voor debugging
  
// Steld het gebruikte display in
  lcd.begin (20,4);                                 // Steld het type LCD in: 16 x 2, met de achtergrond verlichting "aan"
  lcd.setBacklightPin(3,POSITIVE);                
  lcd.setBacklight(HIGH);                           // Zet de achtergrondverlichting van het display aan

// Variabelen/Settings voor de buitenoven uitgangen
  pinMode(10, OUTPUT);                              // Maakt van pin-10 een uitgang, doel is de Gate sturing van de buitenoven
  pinMode(11, OUTPUT);                              // Maakt van pin-11 een uitgang, doel is de relais sturing van de preheath van de buitenoven
  digitalWrite(10, LOW);                            // Startwaarde uitgang 10, "uit" de ingestelde temperatuur is nog niet bereikt
  digitalWrite(11, HIGH);                           // Startwaarde uitgang 11, "aan" de ingestelde temperatuur voor de "preheat" is nog niet bereikt en de uitgang is hierom hoog

// Variabelen/Settings voor de binnenoven uitgangen
  pinMode(12, OUTPUT);                              // Maakt van pin-10 een uitgang, doel is de Gate sturing van de binnenoven
  pinMode(13, OUTPUT);                              // Maakt van pin-11 een uitgang, doel is de relais sturing van de preheath van de binnenoven
  digitalWrite(12, LOW);                            // Startwaarde uitgang 10, "uit" de ingestelde temperatuur is nog niet bereikt
  digitalWrite(13, HIGH);                           // Startwaarde uitgang 11, "aan" de ingestelde temperatuur voor de "preheat" is nog niet bereikt en de uitgang is hierom hoog

//plaats vaste waarden op het display voor de buiten oven
     lcd.setCursor (9,0);                           
     lcd.print("Buiten Oven"); 
     lcd.setCursor (11,1);                           
     lcd.print("PHu = "); 
     lcd.setCursor (0,1);                           
     lcd.print("Oven = "); 

//plaats vaste waarden op het display voor de binnen oven
     lcd.setCursor (9,2);                           
     lcd.print("Binnen Oven"); 
     lcd.setCursor (11,3);                           
     lcd.print("PHi = "); 
     lcd.setCursor (0,3); 
     lcd.print("Oven = "); 
}


void loop () {

// Hier worden de TMP37 Sensoren gemeten en de waarden ongezet in temperatuur

// Berekening buiten oven temperatuur
  adcTempU = 0;                                           // Maakt de adcTemp variabel weer leeg, voor een nieuwe meting
  tempReadingU = 0;                                       // Maakt de tempReading variabel weer leeg, voor een nieuwe meting

  for(int u = 0; u < smplU; u++)                          // Hier wordt de analoge ingang "x" maal gemeten, x = de variabele "smpl"

  {
  tempReadingU +=analogRead(tempPinU);
  }
  
  adcTempU = tempReadingU / smplU;                       // Deelt de som van de metingen door het aantal monsters "smpl"
  tempU = (adcTempU + correctU) * (uref/1024.0) /0.02;   // Verrekend de verwerkte monsters met de TMP37 kalibratie waarde, referentie spanning, de ADC resolutie en het aantal V/C van de TMP37 en plaatst deze in de variabel "tempU"                              


// Berekening binnen oven temperatuur
  adcTempI = 0;                                          // Maakt de adcTemp variabel weer leeg, voor een nieuwe meting
  tempReadingI = 0;                                      // Maakt de tempReading variabel weer leeg, voor een nieuwe meting
  
  for(int i = 0; i < smplI; i++)                         // Hier wordt de analoge ingang voor de binnen oven "x" maal gemeten, x = de variabele "smplI"

  {
  tempReadingI +=analogRead(tempPinI);
  }
  
  adcTempI = tempReadingI / smplI;                       // Deelt de som van de metingen door het aantal monsters "smplI"
  tempI = (adcTempI + correctI) * (uref/1024.0) /0.02;   // Verrekend de verwerkte monsters met de TMP37 kalibratie waarde, referentie spanning, de ADC resolutie en het aantal V/C van de TMP37 en plaatst deze in de variabel "tempI"                              

// Einde conversie analoge input naar temperatuur


  delay(1);


// Vergelijkingen schakelmomenten buiten oven

  if (tempU > setOvenU) {                                 // Deze vergelijking kijkt of de oventemperatuur al is bereikt, als dit zo is, dan wordt uitgang "10" laag en wordt de verwarming afgeschakeld
     digitalWrite(10, HIGH);
     lcd.setCursor (7,1);                           
     lcd.print("On "); 
   } else {
     digitalWrite(10, LOW);
     lcd.setCursor (7,1);                           
     lcd.print("Off");
   }

  if (tempU > preHeathU) {                                // Deze vergelijking kijkt of de "preheath" temperatuur al is bereikt, als dit zo is, dan wordt uitgang "11" laag en worden de verwarmings elementen omgeschakeld van parallel naar serie
     digitalWrite(11, LOW);
     lcd.setCursor (17,1);                           
     lcd.print("Off"); 
   } else {
     digitalWrite(11, HIGH);
     lcd.setCursor (17,1);                           
     lcd.print("On ");
   }

  lcd.setCursor (0,0);                                    // Plaatst de temperatuur van de oven op positie "9 op regel "0"
  lcd.print(tempU);
  lcd.print((char)223);                                   // Plaatst het "°C" achter de temperatuurwaarde
  lcd.print("C");



// Vergelijkingen schakelmomenten binnen oven 

  if (tempI > setOvenI) {                                 // Deze vergelijking kijkt of de oventemperatuur al is bereikt, als dit zo is, dan wordt uitgang "10" laag en wordt de verwarming afgeschakeld
     digitalWrite(12, HIGH);
     lcd.setCursor (7,3);                           
     lcd.print("H = On "); 
   } else {
     digitalWrite(12, LOW);
     lcd.setCursor (7,3);                           
     lcd.print("Off");
   }

  if (tempI > preHeathI) {                               // Deze vergelijking kijkt of de "preheath" temperatuur al is bereikt, als dit zo is, dan wordt uitgang "11" laag en worden de verwarmings elementen omgeschakeld van parallel naar serie
     digitalWrite(13, LOW);
     lcd.setCursor (17,3);                           
     lcd.print("Off "); 
   } else {
     digitalWrite(13, HIGH);
     lcd.setCursor (17,3);                           
     lcd.print("On ");
   }

  lcd.setCursor (0,2);                                 // Plaatst de temperatuur van de oven op positie "0 op regel "0"
  lcd.print(tempI);
  lcd.print((char)223);                                // Plaatst het "°C" achter de temperatuurwaarde
  lcd.print("C");

}


Het enige wat ik nog moet testen zijn de digitale uitgangen van één van de sensoren, dat hoop ik in de loop van de dag te kunnen doen.
Hieronder het 20x4 display waarmee ik de code ga testen op de ovens.
http://www.bramcam.nl/Arduino/Testoven/TestOven-29.png

Er moten nog wat vergelijkingen bij in de code, maar deze zijn afhankelijk van de electronica die de ovenweerstanden aansturen.
Deze staan ondertussen "half" op schema en moet natuurlijk eerst af zijn voor ik echt kan gaan testen.

Voor ik dat doe, ga ik eerst de testjes doen waar necessaryevil om vroeg.
Dit zal ik voor de buitenoven en de binnen oven gaan doen.

Nu is het tijd voor de lunch!

Groet,
Blackdog

Bijna hetzelfde idee, echter zit er nu geen 1ms tussen de metingen meer. Weet niet of het wenselijk is dat er strak na elkaar word gemeten?

Zo bedoelde ik het:


void loop () {
 
// Hier worden de TMP37 Sensoren gemeten met 1ms tussen pauze

  adcTempU = 0;                                           // Maakt de adcTemp variabel weer leeg, voor een nieuwe meting
  tempReadingU = 0;                                       // Maakt de tempReading variabel weer leeg, voor een nieuwe meting
  adcTempI = 0;                                           // Maakt de adcTemp variabel weer leeg, voor een nieuwe meting
  tempReadingI = 0;                                      // Maakt de tempReading variabel weer leeg, voor een nieuwe meting
  
  for(int u = 0; u < smplU; u++)                          // Hier wordt de analoge ingang "x" maal gemeten, x = de variabele "smpl"
 
  {
  tempReadingU +=analogRead(tempPinU);
  tempReadingI +=analogRead(tempPinI);
  millis(1);      // werkt gelijk aan delay(1) echter blijft de processor bereikbaar
  }

// Berekening buiten oven temperatuur
 
  adcTempU = tempReadingU / smplU;                       // Deelt de som van de metingen door het aantal monsters "smplU"
  tempU = (adcTempU + correctU) * (uref/1024.0) /0.02;   // Verrekend de verwerkte monsters met de TMP37 kalibratie waarde, referentie spanning, de ADC resolutie en het aantal V/C van de TMP37 en plaatst deze in de variabel "tempU"                              
 
// Berekening binnen oven temperatuur
 
  adcTempI = tempReadingI / smplU;                       // Deelt de som van de metingen door het aantal monsters "smplU"
  tempI = (adcTempI + correctI) * (uref/1024.0) /0.02;   // Verrekend de verwerkte monsters met de TMP37 kalibratie waarde, referentie spanning, de ADC resolutie en het aantal V/C van de TMP37 en plaatst deze in de variabel "tempI"                              
 
// Einde conversie analoge input naar temperatuur

Groeten,
Marius.

Bram, ik mis even wat je met je binnen- en buitenoven bedoelt.

2 aparte ovens eigenlijk.
De oven aan de buitenkant helpt om de oven aan de binnenkant stabieler te houden. (De buitenkant koelt makkelijker af waardoor de temperatuur aan de binnenkant minder stabiel kan zijn, opgelost door aan de buitenkant de temperatuur stabiel te houden).