Termometro digital en C

Hola, esta es la parte del código, pero no resulto, da valores como de 60 grados para arriba y segun lo que modifique por debajo de menos cero. en internet hay otros ejemploc con otras formulas pero , aqui el problema no es el datasheet, para mis es problema de formula y calculos.
Es un divisor lo que se arma , tengo una resistencia de 100K en serie con el termistor, de ahi a la Pi Pico, cualquier cosa me da. Y lo mas triste que muestran en youtube videos con formulas y les indica en los Arduino, pero no utilizo arduino. Estoy seguro que es problema de calculos. por eso capaz alguien tiene el correcto :cry:

Código:
import machine
import utime
from math import log
import tm1637

sensor_temp = machine.ADC(0)

BETA = 3950

reading = sensor_temp.read_u16()

        celsius = 1 / (log(1 / ( 65535 / reading - 1)) / BETA + 1.0 / 298.15) - 273.15
        display.temperature(int(celsius))
 
¿Pero como está conectada la NTC? Eso va a influir mucho.

Edito, se ve que te movieron la pregunta a otro hilo porque este habla de C

La pregunta, no obstante, sigue en pie. ¿Como está conectada la NTC?
 
EL NTC es ese que parece una gotita de vidrio que son de dupont, de 100k que esta en serie con una resistencia de 100k, entonces, un extremo de la resistencia esta a 3.3V, el otro extremo esta con una de las patas del termistor que de ahi tambien va a la salida del micro, y el otro extremo del termistor a masa. Creo que me explieque bien , sino tendria que subir un dibujo.
Bueno asi conectado me esta dando 60 grados. lo que tiene de bueno la Pi pico que tambien tiene incorporado su propio medidor y me esta dando bien ese y con ese lo estoy comparando. El valor que me tendria que dar seria 28 Grados ahora. Siempre en centigrados estoy hablando

Termistor PI.jpg
 
Última edición:
cualquiera hay montones de ejemplos igual son con arduinos lo habia escrito arriba de todo, en fin cual es el problema, olvidense que hable de youtube, porque sino se dispersa. ahi presente el problema y ve si me pueden ayudar
 
olvidense que hable de youtube, porque sino se dispersa. ahi presente el problema y ve si me pueden ayudar
Si no ponés lo conexión del NTC que te pidió @Scooter ni decís cual circuito has usado, solo te puedo indicar que veas este video y hagas lo que dice ahí. Lo de Arduino es puramente anecdótico y el código de cálculo funciona para cualquiewr microntrolador.
 
Dr. Zoidberg , no te comprendo si coloque el esquema y explique como coloque el NTC, nose que es lo que quieren saber ??
Ese video que colocaste ya lo vi y no me sirvio tampoco. Por eso estoy consultando si alguno probo para que me diga como esta el codigo que coloque. Y lo del NTC esta como figura mas arriba que coloque hasta una imagen.
Estoy seguro que el error esta en el programa, no en la electronica es sencilla la conexion. el problema estan en las lineas , algo esta mal y nose que es por eso la consulta.
 
Última edición:
Dr. Zoidberg , no te comprendo si coloque el esquema y explique como coloque el NTC, nose que es lo que quieren saber ??
Quería ver el circuito original, por que existe la posibilidad que hayas cambiado algún valor que no debías cambiar.
Ese video que colocaste ya lo vi y no me sirvio tampoco.
Que es lo que no te sirvió??? La lectura del ADC y el cálculo son completamente triviales...suponiendo que tenés correctas las constantes de Steinhart-Hart.
No hay mucha ciencia ahí...

Y esto que tiene que ver con la ecuación de Steinhart-Hart que aparece en el video????
reading = sensor_temp.read_u16()

celsius = 1 / (log(1 / ( 65535 / reading - 1)) / BETA + 1.0 / 298.15) - 273.15
display.temperature(int(celsius))
Los logaritmos son naturales (ln) y nó decimales (log). La ecuación es un polinomio de tercer orden y en tu ecuación no hay nada de tercer orden...o la constante asociada vale 0???
No has publicado ningun dato necesario, así que no esperes respuesta maravillosas.
 
... Por eso estoy consultando si alguno probo para que me diga como esta el codigo que coloque. Y lo del NTC esta como figura mas arriba que coloque hasta una imagen.
Estoy seguro que el error esta en el programa, no en la electronica es sencilla la conexion. el problema estan en las lineas , algo esta mal y nose que es por eso la consulta.

dcsalg: Las respuestas de los NTC no son todas iguales, si googleás tablas de diferentes fabricantes vas a ver que son parecidas, pero lo suficientemente diferentes para que no te sirvan unos coeficientes al azar.

Empeorando las cosas, aproximar por un logaritmo es válido alrededor de los 25°C , de 60°C para arriba necesitás mas términos (La ecuación de Steinhart-Hart a la que se refiere Dr Zoidberg)

Empeorando mas todavía, ni vos ni nosotros conocemos los coeficientes reales de TU ntc, por lo tanto si pensás medir temperatura en un rango amplio vas a tener que hacer un ensayo para hacer una tabla T vs ADC (necesitás un termometro de referencia)


El circuito que proponés está pensado para medir temperaturas alrededor de 25° . Para un rango 25° +-20° (5°...45°) la respuesta es bastante lineal y no necesita corrección. Pero en un rango mas amplio sí, y además el valor de la resistencia superior debe ser igual al del NTC en el medio del rango.
Es decir, si apunto medir entre 0° y 100° , la resistencia debe tener el valor del ntc a 50°.
 
Acá publiqué una página que muestra exactamente el mismo código y muestra las salidas en ADC crudo y en Centigrado; https://www.forosdeelectronica.com/threads/limpieza.182192/post-1425815

Pagina la cual muestra las sospechas del Doc. Usa una resistencia de 10K para el divisor y no de 100k. Ademas que la NTC también es de 10K o al menos eso calculo yo ya que en una animación, a 24° la salida digital es 33500 que en tensión es de aproximadamente 1.6V, dado que el valor del NTC es a 25° se puede suponer de 10K (1.5V de salida a 25° dado que el divisor es con una resistencia de 10K).

Según internet: Pagina 1 y pagina 2, el beta no depende del divisor resistivo sino de la resistencia del NTC a dos temperaturas por lo que el beta de una NTC de 10K es totalmente diferente a la de una de 100K aunque la relación entre el NTC y la resistencia del divisor sea la misma.

A calcular se ha dicho!!!!!

(En la pagina 2 hay calculadoras automáticas, solo hay que ingresar los parámetros que pide ;)).
 
Así a bulto parece que el código está para un adc de 16 bits porque divide por 65535 y si no me equivoco debería de dividir por 4096 que son 12 bits.
Qué entretenido es ver tantas soluciones cuando alguien lo único que quiere es que le den el código esperado. :LOL:
Contesto y sigo el hilo porque me interesa a mí. A él ya vi hace tiempo que no le interesa lo más mínimo.
 
Qué entretenido es ver tantas soluciones cuando alguien lo único que quiere es que le den el código esperado. :LOL:

O sea que todos los viejites contestones han sido "vistimas" de la ingeniería social de un novato recién llegado muuuy pícaro...

La sigo, pero sin código alguno. Según ví en varios foros esos ADC de los Raspberry y ESP32 de muchos bites, los últimos bits solo son ruidos, así que los programadores no los tienen en cuenta.

Pienso que un NTC de 100k, a 3v! ya entra en conflicto con la impedancia del ADC, hay que mirar detenidamente la hoja de datos del micro en cuestión.
Esto se solucionaría con un AO seguidor, adaptando las impedancias, pero si ni el código entiende, menos éste hardware.

Yo no usaría nada esas formulas, creo que consumen mucha memoria del programa, emplearía una tabla, seguramente en la memoria flash. Y siempre teniedo en cuenta que los NTC corrientes no son para un rango de temperatura muy grande.
 
Exactamente, aparte a 3.3V me parece bastante alto el valor de 100k...
Lo pensé en un momento, lo que sucede que tengo este de 100KΩ, si probas con uno de 10KΩ se aproxima mas a los valores, lo que quiero hacer es tomar la temperatura de un compresor de una heladera me pareció una buena opción, están los 18b20 que lo que tiene de bueno que no es como el termistor y si da los datos mas fáciles. Pero la realidad es utilizar un termistor.
Y la verdad bastante rompe es el termistor para tomar una temperatura y si mostré el código que mas de uno se JACTA y se ríe arriba de los mas viejetis que de seguro yo tengo mucha mas edad que ellos lo hice para ver que opinaban del código, pero Bueno pero veo que se ríen algunos en vez de hablar serio como puse yo pero Si no entienden de la vida algunos menos van a entender de código. haciendo referencia al alguien que puso "pero si ni el código entiende, menos éste hardware." pero la consulta fue real no para que salgan con algo así algunos.

pero DJ T3 gracias, por responder.
 
Última edición por un moderador:
El ADC del Arduino es de 10 bits mientras que el de la PI pico es de 12, supongo que el código también estará adaptado a eso.
De lo que comparti que se fue al F29;
We do have to put this formula in our code, so let's focus on understanding the two key parameters here:
- The 'x' at the bottom refers to the value we get from the ADC.
- The β (beta) value is different for different thermistors, and it represents a thermistor's exact relationship with temperature.

The astute among you may have also recognized the 65535 in the denominator, which we saw in the previous tutorial. It's equivalent to (2^16 - 1), which is the maximum value that the 16-bit ADC on the Pico will output. The even more astute may recognize the number 273.15, which is the constant factor for converting temperature between Celsius and Kelvin. And the astutest of all will notice that the number 298.15 is just the temperature 25 °C converted to Kelvin. But none of that really matters for writing the MicroPython program, so don't stress 😌
 
Atrás
Arriba