Skip to main content

Steinhart -- Hart and Beta thermistor temperature model in Python and C. Implementation and utilities

Project description

Thermistor utilities

A python based library implementing models to convert thermistor values from temperature to resistance and vice versa.

Steinhart--Hart model

Implementation precision

SH resistance to temperature chart SH temperature to resistance chart

How to use

# import the Steinhart--Hart and or the Beta converter
from thermistor_utils import SH_converter

Create a converter from A, B, and C coefficients:

A, B, C = (0.0008402250578523375, 0.00025963477647737156, 1.5674403473853433e-07, )
conv = SH_converter(A, B, C)

If they're not available the converter could compute the values from three evenly spaced readings of temperature and resistance.

Create the converter from temp/res readings:

readings = (
    (0, 27445),
    (25, 10000),
    (50, 4160),
)
conv = SH_converter.from_points(readings)

Printing the coefficients in a form suitable for subsequent use in python and C:

print(repr(conv))

# SH_converter(0.0008402250578523375, 0.00025963477647737156, 1.5674403473853433e-07, 0, 50)

print(conv.to_cstr())

# {0.0008402250578523375, 0.00025963477647737156, 1.5674403473853433e-07, 0, 50}

# compact but less precise representation
# (inverse of coefficients and no temperature range)
print(conv.to_cstr(compact=True, with_temps=False))

# {1./1190, 1./3852, 1./6379828}

Use the reference implementation in C (example-1.c):

#include <stdio.h>
#include <thermistor_utils.h>

int main(void)
{
    struct sh_s coefficients = {
        0.0008402250578523375,
        0.00025963477647737156,
        1.5674403473853433e-07
    };

    // 25C to Ohm and 10k Ohm to Celsius
    double  R_at_25   = sh_resistance(coefficients, 25),
            T_at_10000 = sh_temperature(coefficients, 10000);

    printf("25 Celsius -> %.0f Ohms\n", R_at_25);
    printf("10k Ohms   -> %.0f Celsius\n", T_at_10000);
}

To compile and run from the examples directory:

$ mkdir -p ../bin
$ gcc -o ../bin/example-1 \
    -I../src/include \
    ../src/sh_converter.c \
    -lm \
    example-1.c

$ ../bin/example-1
25 Celsius -> 10000 Ohms
10k Ohms   -> 25 Celsius

Beta model

Implementation precision

Beta resistance to temperature chart Beta temperature to resistance chart

How to use

# import the Steinhart--Hart and or the Beta converter
from thermistor_utils import Beta_converter

Create a converter from beta values:

beta, R0, T0 = (3380, 10000, 25)
conv = Beta_converter(beta, R0, T0)

Printing the beta values in a form suitable for subsequent use in python and C:

print(repr(conv))

# Beta_converter(3380, 10000, 25)

print(conv.to_cstr())

# {3380, 10000, 25}

Use the reference implementation in C (example-2.c):

#include <stdio.h>
#include <thermistor_utils.h>

int main(void)
{
    struct beta_s bpar = {3380, 10000, 25};

    // 25C to Ohm and 10k Ohm to Celsius
    double  R_at_25   = beta_resistance(bpar, 25),
            T_at_10000 = beta_temperature(bpar, 10000);

    printf("25 Celsius -> %.0f Ohms\n", R_at_25);
    printf("10k Ohms   -> %.0f Celsius\n", T_at_10000);
}

To compile and run from the examples directory:

$ mkdir -p ../bin
$ gcc -o ../bin/example-2 \
      -I../src/include \
      ../src/beta_converter.c \
      -lm \
      example-2.c

$ ../bin/example-2
25 Celsius -> 10000 Ohms
10k Ohms   -> 25 Celsius

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thermistor_utils-0.0.4.tar.gz (5.3 kB view hashes)

Uploaded Source

Built Distribution

thermistor_utils-0.0.4-py3-none-any.whl (8.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page