Hirdetés

Új hozzászólás Aktív témák

  • Tomika86

    senior tag

    Sziasztok!

    Ez a lookup tábla működőképes lehet?
    Tudom, próbáljam ki :)
    NTC hőmérőket a Beta modell alapján nem bírtam bekalibrálni, hogy ne legyen 9fokosnál kisebb különbség és nem is lineáris a hiba.
    Azt ajánlották, hogy adjam meg táblában, így az ADC értéket leolvasva a tényleges hőfokokat vinném be a tömbökbe.
    Köszönöm
    float mytemp[] = {130.1,120.1,110.2,100.3,90.5,80.2,70.1,60.4,50.5,40.5,30.2,20.3,10.4,0.3,-1.1,-2.4,-3.1,-5.5,-6.4,-8.4,-10.2,-15.3,-16.6};
    int myADC[] = {952 ,945 ,936 ,911 ,889 ,862 ,824 ,780 ,717 ,647 ,552 ,445 ,336 ,240,230 ,227 ,216 ,206 ,184 ,176 ,165 ,133 , 131};

    void setup() {
    Serial.begin(9600); // Serial Communication is starting with 9600 of baudrate speed
    }
    void loop() {
    float hofok;
    hofok = temperature(); // Interpoláció függvény meghívása
    Serial.println(hofok); // Interpolált érték kiiratása
    }

    // Interpolációs függvény az ADC értékhez milyen hőmérséklet tartozik
    float temperature() {
    int adc = analogRead(A1); // 0 <= PV < = 1023 ===> ADC
    for (int i = 0 ; i <= 22 ; i = i+1) {
    if (adc <= myADC[i] && adc >= myADC[i+1]) {
    adc = (adc - myADC[i]) / (myADC[i+1]-myADC[i]) * (mytemp[i+1]-mytemp[i]) + mytemp[i]; // Interpoláció
    goto END_IF;
    }
    }
    END_IF: // IF ADC IS BEYOND LIMITS YOU MIGHT GET WRONG VALUES.
    adc=adc; // PV =PROCESS VARIABLE ====> TEMPERATURA CON UNIDADES DE INGENIERIA
    return adc;
    }

Új hozzászólás Aktív témák