1. Dette nettstedet bruker informasjonskapsler (cookies). Ved å fortsette å bruke dette nettstedet, samtykker du til vår bruk av informasjonskapsler. Lær mer.
  2. Hei der Gjest, bli medlem ved å gå til medlemsregistreringen
    Fjern notisen

Første bryggeprosjekt - vvb - Arduino DIY

En tråd i 'DIY' startet av Harald Sande, 13 Mar 2017.

  1. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Hei.

    En kompis og jeg er i oppstarten på vårt første bryggeprosjekt. Vi er helt uten erfaring med brygging, så her kan det dukke opp noen dumme spørsmål etter hvert. Vi har en plan om å bruke en varmtvannstank til oppvarming, mesking og koking.
    Temperaturstyringen lager vi selv med et temperaturstyrt rele (ssr) som skrur på/av strømtilførsel til varmekolbe(r). Dette er Arduino-basert og vil videreutvikles etter hvert som vi ser an behov til å bli mer og mer automatisert. Legger ved bilde av prototypen på temperaturstyringen.
    [​IMG]


    Sent from my iPhone using Tapatalk
     
    #1 Harald Sande, 13 Mar 2017
    Sist redigert: 26 Apr 2017
    JEG og sonicx liker dette.
  2. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Så, vi er kommet lengre i prosessen, og jeg plages med koden til Arduinoen. Mye er på plass, men problemet kommer når jeg skal bruke keypad til å velge en forhåndsprogrammert oppskrift. Jeg vil at programmet da skal kunne stegmeske, altså sjekke en temperatursensor og skru av/på varme dersom den ligger innenfor riktig temperatur. Etter en viss tid skal temperaturgrensen endres og holdes en viss tid, før den endres igjen. Problemet slik koden er nå, er at er at den sjekker temperaturen bare en gang, før den går tilbake til "velg program fra lista"-beskjeden på LCD. Er det noen Arduino-/C-kyndige som har gode råd om hvordan jeg kan få den til å repetere dette if-utsagnet i et forhåndsvalgt tidsintervall?


    #include <Keypad.h>
    #include <LiquidCrystal.h> //includes libraries for hardware
    #include <OneWire.h>
    #include <DallasTemperature.h>

    #define ONE_WIRE_BUS 2 //datacable for temp.sensor on digital pin 2
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire); //send oneWire-reference to Dallas Temperature

    float step1Temp;
    unsigned long step1Time;
    float step2Temp;
    unsigned long step2Time;
    float step3Temp; // defining the different steps (if several) in the mashing-process as decimals (temperature) and integers (time).
    unsigned long step3Time; // values will be defined later in the program, depending on which recipe is chosen by pressing a key on a keypad
    float step4Temp; // keypad has 12 keys - potentially 12 preset recipes
    unsigned long step4Time; // new recipes requires altering of program (replacing existing recipe)
    float step5Temp;
    unsigned long step5Time;

    float tempInC = sensors.getTempCByIndex(0); //simplified name for comparing temperature

    LiquidCrystal lcd(13, 14, 15, 16, 17, 18); //digital pins for LCD

    const byte ROWS = 4; //Keypad has 4 rows
    const byte COLS = 3; //keypad has 3 columns

    char keys[ROWS][COLS] = {
    {'1','2','3'},
    {'4','5','6'}, //defining keypad structure
    {'7','8','9'},
    {'#','0','*'}
    };

    byte rowPins[ROWS] = { 9, 8, 7, 6 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.

    byte colPins[COLS] = { 12, 11, 10 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.


    Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //constructing keypad




    const int onLed = 3; //LED on digital pin 3. this LED will light up when the heater is on
    const int offLed = 4; //LED on digital pin 4. this LED will light up when the heater is off
    const int relayPin = 5; //relay for switching power to heater on digital pin 5


    void setup() {

    sensors.begin();
    lcd.begin(16,2);

    lcd.println("Velkommen til"); //welcome message printed on LCD
    lcd.print("GL bryggerier");
    delay(6000); //wait 6 seconds - for brewers to enjoy message

    }

    void loop() {

    lcd.println("Velg program fra"); //instructs brewer to chose program by pressing a single key on keypad
    lcd.println("lista. 0-9"); //numbers 0-9 will match beer names on a written list on the wall

    char key = kpd.getKey(); //requesting key input

    if(key == '1'){
    lcd.println("Du har valgt:"); //LCD informs you what type of beer you have chosen
    lcd.print("India Pale Ale"); //'1' is a preset IPA recipe
    step1Temp = 74;
    step1Time = 1800000;
    step2Temp = 70;
    step2Time = 1000000;
    step3Temp = 67; //temperature and time values are set according to a IPA recipe
    step3Time = 700000; //these are just random values for the example
    //step4Temp = ;
    //step4Time = ;
    //step5Temp = ;
    //step5Time = ;
    delay(6000); //wait 6 seconds so you can read about the choice

    sensors.requestTemperatures(); //command to receive temperature reading
    sensors.getTempCByIndex(0); //sends temperature in degrees Celsius

    //initiating step 1
    if (tempInC < step1Temp)
    { digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
    digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
    digitalWrite (offLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }

    else
    {
    digitalWrite (relayPin, LOW); //heater off
    digitalWrite (offLed, HIGH); //white LED on, indicates heater off
    digitalWrite (onLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }


    //initiating step 2
    if (tempInC < step2Temp)
    { digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
    digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
    digitalWrite (offLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }

    else
    {
    digitalWrite (relayPin, LOW); //heater off
    digitalWrite (offLed, HIGH); //white LED on, indicates heater off
    digitalWrite (onLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }


    //initiating step 3
    if (tempInC < step3Temp)
    { digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
    digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
    digitalWrite (offLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }

    else
    {
    digitalWrite (relayPin, LOW); //heater off
    digitalWrite (offLed, HIGH); //white LED on, indicates heater off
    digitalWrite (onLed, LOW);
    lcd.println("Temperatur:");
    lcd.print(tempInC); //LCD prints temperature
    lcd.setCursor(1,6);
    lcd.print("Celsius");
    }

    }

    }
     
  3. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Hvis koden stopper her og venter på input fra keypad:

    char key = kpd.getKey();

    Ville jeg flyttet hele denne biten til void setup(), for den skal vel bare kjøre en gang?

    Kode:
    
    lcd.println("Velg program fra"); //instructs brewer to chose program by pressing a single key on keypad
    lcd.println("lista. 0-9"); //numbers 0-9 will match beer names on a written list on the wall
    
    char key = kpd.getKey(); //requesting key input
    
    if(key == '1'){
    lcd.println("Du har valgt:"); //LCD informs you what type of beer you have chosen
    lcd.print("India Pale Ale"); //'1' is a preset IPA recipe
    step1Temp = 74;
    step1Time = 1800000;
    step2Temp = 70;
    step2Time = 1000000;
    step3Temp = 67; //temperature and time values are set according to a IPA recipe
    step3Time = 700000; //these are just random values for the example 
    //step4Temp = ;
    //step4Time = ;
    //step5Temp = ;
    //step5Time = ;
    delay(6000); //wait 6 seconds so you can read about the choice
    
     
    #3 Amarillo, 26 Apr 2017
    Sist redigert: 26 Apr 2017
    Harald Sande liker dette.
  4. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    I stedet fo if-else ville jeg heller gått for while-looper.
    Noe som dette:

    Kode:
    time = millis();
        while (time + millis() < step1Time) {
          // din kode her
    .
    .
    .
        }
    Du trenger egentlig ikke noe kode i void loop() hvis du gjør det på denne måten. Hvert steg vil gå til forhåndsprogrammert tid er oppnådd, og så vil koden gå til neste steg.
    I hver while-loop legger du sjekk av temperatur, slår elementer av og på og sender temperaturen til displayet.
     
    Harald Sande liker dette.
  5. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik

    Perfekt! Jeg tenkte å kanskje kjøre all kode i setup når du sa det med keypad i setup i forrige innlegg. Vil det være mulig å lage en funksjon med fem steg (meskesteg), og kun plotte stegTemp og tid ut fra valgt oppskrift?


    Sent from my iPhone using Tapatalk
     
  6. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Er ikke helt sikker på hva du mener med funksjon med fem steg, men hvis du f.eks. har 5 meskesteg ville jeg ha laget 5 while-looper som sjekker tid. Inne i loopen kalles en funksjon som leser temperaturen fra sensor og skriver til displayet. Så sjekkes temperatur mot programmert temperatur og elementer slås av/på. Sparer noen linjer på det, og koden blir mer oversiktlig.
     
    #6 Amarillo, 26 Apr 2017
    Sist redigert: 26 Apr 2017
  7. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Det funker helt sikkert.
    Litt vanskelig å forklare hva jeg mener, men i og med at jeg skal bruke keypad med 12 taster for å velge øltype (det vil potensielt kunne ligge 12 oppskrifter inne), må jeg lage 12x5 = 60 while looper. Jeg har også fått litt hjelp på arduino.cc-forumet. Der mener de at jeg kan lage en funksjon f.eks.
    void function step1(unsigned int step1Time, float step1Temp)
    Hvor da step1Time og step1Temp blir definert ut fra hvilken tast/oppskrift man velger. Skal se om jeg får til en kombinasjon av while og funksjon, så holder det å lage 5 while-looper.
     
  8. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Du trenger bare 5 looper fordi du kjører bare ett meskeprogram om gangen.
    Du må bare legge inn 12 'oppskrifter' som dette:

    if(key = '1'){
    step1Temp = 47;
    step1Time = 1800000;
    step2Temp = 56;
    step2Time = 1000000;
    .
    .
    }

    if(key = '2'){
    step1Temp = 56;
    step1Time = 1100000;
    step2Temp = 70;
    step2Time = 1200000;
    step3Temp = 67;
    .
    .
    }

    Du bruker dermed de samme variablene, men setter forskjellige verdier på dem ut fra oppskrift.
    Variablene blir universelle og kan brukes i de samme loopene.
    Har du en oppskrift med f.eks. bare 3 meskesteg, så settes bare de to siste tidene til 0 så funker det også.

    Håper dette var forståelig, ikke enkelt å forklare kode med ord :confused:
    Men det er nok flere måter å gjøre dette på.
     
    #8 Amarillo, 26 Apr 2017
    Sist redigert: 26 Apr 2017
  9. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    En mulig kombinasjon av while og funksjoner:

    Kode:
     void getTempPrintLcd(); {
        sensors.requestTemperatures();
        tempInC = (sensors.getTempCByIndex(0));
        lcd.println("Temperatur:");
        lcd.print(tempInC);
        lcd.setCursor(1, 6);
        lcd.print("Celsius");
      }
    
      void elementOn() {
        digitalWrite (relayPin, HIGH);
        digitalWrite (onLed, HIGH);
        digitalWrite (offLed, LOW);
      }
    
      void elementOff() {
        digitalWrite (relayPin, LOW);
        digitalWrite (onLed, LOW);
        digitalWrite (offLed, HIGH);
      }
    
      time = millis();
      while (time + millis() < step1Time) {
        getTempPrintLcd();
        if (tempInC < step1Temp) elementOn()
          else elementOff()
          }
    
      time = millis();
      while (time + millis() < step2Time) {
        getTempPrintLcd();
        if (tempInC < step2Temp) elementOn()
          else elementOff()
          }
     
    Harald Sande liker dette.
  10. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Dette ser strøkent ut. Nydelig med god hjelp - takk!
    Nå må bare Megaen komme i posten så jeg får koblet kretsen også, får ikke plass til alt på Uno..;)


    Sent from my iPhone using Tapatalk
     
  11. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Bare hyggelig å kunne hjelpe.
    Et lite tips som dere kan tenke på, jeg ville heller brukt en nodemcu i stedet for Arduino.
    Programmeringen og funksjonen er helt lik, men enheten kobles til wifi.
    Da kan dere hente ut data til nettsider og styre enheten via telefonen med f.eks. Blynk og pensjonere både display og keypad.

    Funksjonen blir kanskje ikke veldig mye bedre, men kulhetsfaktoren vil øke med flere hakk. :cool:
    Men når dere først har startet med Arduino er det nok best å få alt til å fungere på den først og så evt. ta et nytt skritt etterpå.
     
  12. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Hehe, takk for tipset:) det går an å bygge ut det samme med arduino ved hjelp av et wifi eller 4g shield. Vi kommer nok til å bevege oss i den retningen etter hvert som koden sitter og vi har fått litt erfaring med bryggingen.
    PS: ikke se bort fra at det kan dukke opp flere spørsmål her


    Sent from my iPhone using Tapatalk
     
    Amarillo liker dette.
  13. TorfinnS

    TorfinnS
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Båtsfjord
    Står varmeelementet rett inn i mesken? Kan se ut som du har tenkt på en termostatfunksjon for å styre varmen? I såfall kan det være litt vanskelig å holde en konstant temperatur, litt avhengig av hvordan elementet er plassert. Du kan få overskyting av temp. En bedre løsning vil være å programmere en PI funksjon, evt PID. Det er jo litt mer arbeid å programmere en pid fra scratch.

    https://no.m.wikipedia.org/wiki/PID-regulator
     
    Harald Sande liker dette.
  14. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Takk for tipset. Varmelementet står rett inn i mesken ja, det går ca 4/5 inn i tanken, ca 25cm fra bunn. Jeg er ikke så dyktig at jeg kan programmere en PI eller PID enda, men om det viser seg nødvendig, må man kanskje prøve det og. Har du erfaring med overskyting av temp med en slik temp-styring? Hvor mye vil man kunne gå over i så fall, og i hvor stor grad vil det påvirke kvaliteten på produktet?
     
  15. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Nå har jeg forsøkt å skrive om koden, og den er blitt til dette:
    Kode:
    key = kpd.getKey(); //checking for pressed key
    
      while (key == NO_KEY){     
      lcd.print("Velg program fra");
      lcd.setCursor(0,1);
      lcd.print("lista...  0-9   ");
    }
    if (key == '1') {   //valg 1 er IPA. Sett inn meskeverdier for IPA.
      step1Temp = 47;
      step1Time = 1800000;
      step2Temp = 56;
      step2Time = 100000;
      step3Temp = 65;
      step3Time = 700000;
      step4Temp = 0;
      step4Time = 0;
      step5Temp = 0;
      step5Time = 0;
    }
    
    else if (key == '2') {
      step1Temp = 49;
      step1Time = 1300000;
      step2Temp = 59;
      step2Time = 1100000;
      step3Temp = 67;
      step3Time = 600000;
      step4Temp = 0;
      step4Time = 0;
      step5Temp = 0;
      step5Time = 0;
    }
    
    //COMNTINUE ELSE IF FROM 3-9
    
    
    step1(step1Time, step1Temp);
    step2(step2Time, step2Temp);
    step3(step3Time, step3Temp);
    step4(step4Time, step4Temp);
    step5(step5Time, step5Temp);
    elementOff();
    lcd.clear();
    lcd.print("Mesking ferdig");
    //make buzzing victorymarch
    }
    
    void loop() {
    }
    
    void getTempPrintLcd() {    //function to read and print temp from sensor
      sensors.requestTemperatures();
      tempInC = (sensors.getTempCByIndex(0));
      lcd.print("Temperatur:");
      lcd.setCursor(0,1);
      lcd.print(tempInC);
      lcd.setCursor(6,1);
      lcd.print("Celsius");
    }
    
    void elementOn() {        //function to turn relay/heat-element and red LED on
      digitalWrite (relayPin, HIGH);
      digitalWrite (onLed, HIGH);
      digitalWrite (offLed, LOW);
    }
    
    void elementOff() {       //function to turn relay/heat-element and white LED on
      digitalWrite (relayPin, LOW);
      digitalWrite (onLed, LOW);
      digitalWrite (offLed, HIGH);
    }
    
    void step1(unsigned long step1Time, float step1Temp) {  //function to read step1 time and temp and turn heat on or off according to temperature and time passed
      unsigned long then1 = millis(); //registers milliseconds passed since program start
      while(millis()-then1 < step1Time){
        getTempPrintLcd();
        if (tempInC < step1Temp) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    
    void step2(unsigned long step2Time, float step2Temp) {  //function to read step2 time and temp and turn heat on or off according to temperature and time passed
      unsigned long then2 = millis(); //registers milliseconds passed since program start
      while(millis()-then2 < step2Time){
        getTempPrintLcd();
        if (tempInC < step2Temp) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    
    void step3(unsigned long step3Time, float step3Temp) {    //function to read step3 time and temp and turn heat on or off according to temperature and time passed
      unsigned long then3 = millis(); //registers milliseconds passed since program start
      while(millis()-then3 < step3Time){
        getTempPrintLcd();
        if (tempInC < step3Temp) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    
    void step4(unsigned long step4Time, float step4Temp) {    //function to read step4 time and temp and turn heat on or off according to temperature and time passed
      unsigned long then4 = millis(); //registers milliseconds passed since program start
      while(millis()-then4 < step4Time){
        getTempPrintLcd();
        if (tempInC < step4Temp) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    
    void step5(unsigned long step5Time, float step5Temp) {    //function to read step5 time and temp and turn heat on or off according to temperature and time passed
      unsigned long then5 = millis(); //registers milliseconds passed since program start
      while(millis()-then5 < step5Time){
        getTempPrintLcd();
        if (tempInC < step5Temp) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    Her har jeg laget en funksjon for hvert steg. Da jeg var ferdig med det, slo det meg at jeg muligens kan lage bare en stegfunksjon, og sette forskjellige temp- og tidsverdier i den, slik?:

    Kode:
    key = kpd.getKey(); //checking for pressed key
    
      while (key == NO_KEY){     
      lcd.print("Velg program fra");
      lcd.setCursor(0,1);
      lcd.print("lista...  0-9   ");
    }
    if (key == '1') {   //valg 1 er IPA. Sett inn meskeverdier for IPA.
      step1Temp = 47;
      step1Time = 1800000;
      step2Temp = 56;
      step2Time = 100000;
      step3Temp = 65;
      step3Time = 700000;
      step4Temp = 0;
      step4Time = 0;
      step5Temp = 0;
      step5Time = 0;
    }
    
    else if (key == '2') {
      step1Temp = 49;
      step1Time = 1300000;
      step2Temp = 59;
      step2Time = 1100000;
      step3Temp = 67;
      step3Time = 600000;
      step4Temp = 0;
      step4Time = 0;
      step5Temp = 0;
      step5Time = 0;
    }
    
    //COMNTINUE ELSE IF FROM 3-9
    
    
    steps(step1Time, step1Temp);
    steps(step2Time, step2Temp);
    steps(step3Time, step3Temp);
    steps(step4Time, step4Temp);
    steps(step5Time, step5Temp);
    
    elementOff();
    lcd.clear();
    lcd.print("Mesking ferdig");
    //make buzzing victorymarch
    }
    
    void loop() {
    }
    
    void getTempPrintLcd() {    //function to read and print temp from sensor
      sensors.requestTemperatures();
      tempInC = (sensors.getTempCByIndex(0));
      lcd.print("Temperatur:");
      lcd.setCursor(0,1);
      lcd.print(tempInC);
      lcd.setCursor(6,1);
      lcd.print("Celsius");
    }
    
    void elementOn() {        //function to turn relay/heat-element and red LED on
      digitalWrite (relayPin, HIGH);
      digitalWrite (onLed, HIGH);
      digitalWrite (offLed, LOW);
    }
    
    void elementOff() {       //function to turn relay/heat-element and white LED on
      digitalWrite (relayPin, LOW);
      digitalWrite (onLed, LOW);
      digitalWrite (offLed, HIGH);
    }
    
    void steps(unsigned long timer, float tempLimit) {  //function to read step time and and temp and turn heat on or off according to temperature and time passed
      unsigned long then = millis(); //registers milliseconds passed since program start
      while(millis()-then < timer){
        getTempPrintLcd();
        if (tempInC < tempLimit) {
          elementOn();
        }
        else{
          elementOff();
        }
      }
    }
    Vil noen av disse funke? Vil begge? Den andre løsningen er mer sexy i så fall.. :)
     
    #15 Harald Sande, 27 Apr 2017
    Sist redigert: 27 Apr 2017
  16. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Harald Sande liker dette.
  17. TorfinnS

    TorfinnS
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Båtsfjord
    Ikke annet enn det vi har på vårt system. Men det er med rims og litt annerledes. Vi har stor termisk masse i elementet, og kan overskyte temperaturen med 5-7 grader. http://www.behindbarsbrewery.net/2017/04/19/mesketemperaturens-pavirkning-pa-det-ferdige-olet/
     
    Harald Sande liker dette.
  18. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    Synes det ser bra ut, spesielt den siste utgaven.
    Dette bør funke, det er bare å teste med temperatursensor og en led for varmeelement så luker du fort ut småfeil (hvis det er noen).
     
    Harald Sande liker dette.
  19. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Bør vel legge til en elementOn til step1Temp er oppnådd.. Ellers ble jeg litt usikker på om jeg burde prøve å legge inn PID-regulering med en gang - må si jeg ikke helt henger med på koden du linket til/hvordan den kan integreres. Jeg må vertfall legge inn et slingringsmonn på kanskje +-0.3 grader, så ikke releet går av og på riktig hele tiden...
     
  20. Harald Sande

    Harald Sande
    Expand Collapse
    Registrert bruker

    Bosted:
    Malvik
    Kode:
    //CONTINUE ELSE IF FROM 3-9
    
      sensors.requestTemperatures();
      tempInC = (sensors.getTempCByIndex(0));
      while(tempInC < (step1Temp-0.1)) {
        elementOn();
      }
    
    steps(step1Time, step1Temp);
    steps(step2Time, step2Temp);
    steps(step3Time, step3Temp);
    steps(step4Time, step4Temp);
    steps(step5Time, step5Temp);
    
    elementOff();
    lcd.clear();
    lcd.print("Mesking ferdig");
    //make buzzing victorymarch
    }
    Noe sånt. Element vil ikke skrus av og på mellom hver temp-sjekk
     

Del denne siden