Termistore 4.7K + Arduino

Ciao a tutti, ho un termistore da 4.7K che vorrei utilizzare per misurare una temperatura...

ho visto sul playground di arduino e ho trovato questo:

Termistore

Però il mio dubbio è: visto che il mio è da 4.7K , devo utilizzare una resistenza diversa da quella di 10K utilizzata nel circuito schematizzato nel link precedente?

GRAZIE

ciao, più è bassa la resistenza che gli metti per fare il partitore di tensione (o collegamento a mezzo ponte) più corrente gli fai scorrere dentro, ed essendo anche lui una resistenza, lo fai scaldare, cosa che vuoi evitare perché se no non misura la temperatura giusta. Dall'altro lato però modificare il rapporto delle resistenze ti fa cambiare la sensibilità.

Sìsì ho capito...ma dico, poi dovrei calibrarla io???

beh allora hai capito che puoi usare una resistenza da 10k da mettere in serie e devi solo modificare il valore della resistenza del termistore nel codice, perchè tanto per fare la conversione usa le formule per le termoresistenze e non una tabella con i valori preimpostati. Un minimo di calibrazione mi sa che ce n'è bisogno...non saprei quanto buono può essere il risultato che puoi aspettarti...l'unica è provare!!

Grazie....allora provo e ti faccio sapere!!!

sorry / desolé
i don’t speak italian / je ne parle pas italien
use this code which is for 4.7K thermistor / utilise ce code qui est pour les thermistances de 4.7K
i made research on the net and calculate the right parameters / apres pas mal de recherche sur le net, j’ai pu calculer les bonnes valeurs

#include <math.h>
//Schematic:                                      modified 4.K by forex2
// [Ground] ---- [10k-Resister] -------|------- [Thermistor] ---- [+5v]
//                                     |
//                                Analog Pin 0

double Thermistor(int RawADC) {
 // Inputs ADC Value from Thermistor and outputs Temperature in Celsius
 //  requires: include <math.h>
 // Utilizes the Steinhart-Hart Thermistor Equation:
 //    Temperature in Kelvin = 1 / {A + B[ln(R)] + C[ln(R)]^3}
 long Resistance;  double Temp;  // Dual-Purpose variable to save space.
 Resistance=((10240000/RawADC) - 10000);  //   Calculation is actually: Resistance = (1024 * BalanceResistor/ADC) - BalanceResistor
 Temp = log(Resistance); // Saving the Log(resistance) so not to calculate it 4 times later. // "Temp" means "Temporary" on this line.
 Temp = 1 / (0.0012954816 + (0.00023539242 * Temp) + (0.00000011285038 * Temp * Temp * Temp));   // Now it means both "Temporary" and "Temperature"
 Temp = Temp - 273.15;  // Convert Kelvin to Celsius                                         // Now it only means "Temperature"

 // BEGIN- Remove these lines for the function not to display anything
  Serial.print("ADC: "); Serial.print(RawADC); Serial.print("/1024");  // Print out RAW ADC Number
  Serial.print(", Volts: "); printDouble(((RawADC*5)/1024.0),3);   // 5 volts is what my USB Port outputs.
  Serial.print(", Resistance: "); Serial.print(Resistance); Serial.print("ohms");
 // END- Remove these lines for the function not to display anything

 // Uncomment this line for the function to return Fahrenheit instead.
 //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert to Fahrenheit
 return Temp;  // Return the Temperature
}

void printDouble(double val, byte precision) {
  // prints val with number of decimal places determine by precision
  // precision is a number from 0 to 6 indicating the desired decimal places
  // example: printDouble(3.1415, 2); // prints 3.14 (two decimal places)
  Serial.print (int(val));  //prints the int part
  if( precision > 0) {
    Serial.print("."); // print the decimal point
    unsigned long frac, mult = 1;
    byte padding = precision -1;
    while(precision--) mult *=10;
    if(val >= 0) frac = (val - int(val)) * mult; else frac = (int(val) - val) * mult;
    unsigned long frac1 = frac;
    while(frac1 /= 10) padding--;
    while(padding--) Serial.print("0");
    Serial.print(frac,DEC) ;
  }
}

void setup() {
 Serial.begin(115200);
}

#define ThermistorPIN 0   // Analog Pin 0
double temp;
void loop() {
 temp=Thermistor(analogRead(ThermistorPIN));           // read ADC and convert it to Celsius
 Serial.print(", Celsius: "); printDouble(temp,3);     // display Celsius
 Serial.println("");                                   // End of Line
 delay(100);                                           // Delay a bit... for fun, and to not Serial.print faster than the serial connection can output
}

sisi prova prova, che sono un po' arrugginito su queste cose...mi ricordo però che quando avevo fatto qualche prova io, avevo scoperto che il logaritmo è mooooolto approssimato e quindi il risultato che esce non è proprio il massimo

@forex2: your code is wonderful, it works well, but i want to understand well it, if you have time i will post here some questions, and I hope you'll answer to me!!!

Thank you!!!

p.s. I have this circuit:

Schematic: [Ground] ---- [10k-Resister] -------|------- [Thermistor] ---- [+5v] | Analog Pin 0

i had the same problem you had, because examples comes with 10K thermistor and i had the 4.7K one
so i took the code here
then i searched on the web a datasheet corresponding to my thermistor
even if there is no part number i think that thermistor should have quite the same parameters
of course you’ll have to check between different temperatures
i found a datasheet : B57164K by epcos
then i found different value of r regarding different value of temp
i did then use the calculator here
to find the 3 parameter A, B and C used in this formulae:
Temperature in Kelvin = 1 / {A + B[ln(R)] + C[ln(R)]^3}

Thermistor B57164K.pdf (356 KB)