La conversión precisa de una lectura analógica a grados Celsius en Arduino comienza leyendo el data sheet y termina validando en el monitor serial. Aquí verás, paso a paso, cómo del factor de escala de 10 milivolts por grado se deduce el multiplicador 0.48828125 y cómo aplicarlo sin errores en el código.
¿Cómo convertir la lectura analógica a grados celsius?
Comprender la relación entre voltaje, resolución y temperatura es clave. El data sheet indica un comportamiento lineal: linear +10 millivolts per degree centigrade scale factor. Con una alimentación de 5 volts y referencia analógica de 5 volts, la salida del sensor se interpreta en milivolts y luego en grados.
¿Qué indica el data sheet sobre 10 mV por grado?
Factor de escala: 10 mV por grado desde cero.
Cada grado Celsius suma 10 mV a la salida.
Límite del sensor: 150 grados Celsius en la práctica, aunque el cálculo usa el rango teórico.
¿Qué rol tienen 5000 mV y 1024 pasos de resolución?
5 volts de referencia equivalen a 5000 mV.
Rango teórico: 5000 mV dividido entre 10 mV por grado da 500 grados.
La resolución analógica de Arduino ofrece 1024 pasos posibles.
El cálculo matemático usa el rango teórico para derivar el factor por paso.
¿Cómo se obtiene el multiplicador 0.48828125 para Arduino?
Primero se calcula cuántos grados corresponden a un paso del ADC. Luego se aplica ese factor a la lectura RAW para convertirla a temperatura.
División clave: 500 ÷ 1024 = 0.48828125.
Ese valor es el multiplicador que convierte la lectura analógica a grados Celsius.
Se aplica directamente sobre la variable de temperatura.
¿Cómo aplicarlo en el código de Arduino?
Multiplica la lectura por el factor correcto.
Asegúrate de escribir el punto decimal al inicio del número.
// Ejemplo de aplicación del factor// tempC contiene la lectura analógica preprocesada (RAW)tempC = tempC *0.48828125;// factor derivado de 500/1024
Si escribes 48828125 en lugar de 0.48828125, obtendrás un resultado absurdo.
Tras corregir el punto, compila y sube el sketch: uploading, done uploading, abre el monitor serial.
¿Cómo validar la medición y resolver errores comunes?
La comprobación práctica confirma que el cálculo es correcto y ayuda a detectar detalles al programar.
Lectura ambiente: alrededor de 22 grados Celsius en el monitor serial.
Prueba térmica: calienta el sensor con la mano y observa cómo sube de inmediato; con una taza de café llegó a 29.
Error típico: números enormes y negativos indican que faltó el punto decimal en el multiplicador.
Corrección: coloca el 0. al inicio del factor y vuelve a subir el código.
Siguiente paso: imprimir la variable en un LCD en lugar de solo enviarla al monitor serial.
¿Tienes dudas sobre el cálculo, el factor de escala o el envío al LCD? Comenta qué parte quieres profundizar y qué sensor estás usando.
Cálculo del Multiplicador para Convertir Lecturas de Sensor a Celsius
Cálculo del Multiplicador para Convertir Lecturas de Sensor a Celsius
Recursos
Resumen
La conversión precisa de una lectura analógica a grados Celsius en Arduino comienza leyendo el data sheet y termina validando en el monitor serial. Aquí verás, paso a paso, cómo del factor de escala de 10 milivolts por grado se deduce el multiplicador 0.48828125 y cómo aplicarlo sin errores en el código.
¿Cómo convertir la lectura analógica a grados celsius?
Comprender la relación entre voltaje, resolución y temperatura es clave. El data sheet indica un comportamiento lineal: linear +10 millivolts per degree centigrade scale factor. Con una alimentación de 5 volts y referencia analógica de 5 volts, la salida del sensor se interpreta en milivolts y luego en grados.
¿Qué indica el data sheet sobre 10 mV por grado?
Factor de escala: 10 mV por grado desde cero.
Cada grado Celsius suma 10 mV a la salida.
Límite del sensor: 150 grados Celsius en la práctica, aunque el cálculo usa el rango teórico.
¿Qué rol tienen 5000 mV y 1024 pasos de resolución?
5 volts de referencia equivalen a 5000 mV.
Rango teórico: 5000 mV dividido entre 10 mV por grado da 500 grados.
La resolución analógica de Arduino ofrece 1024 pasos posibles.
El cálculo matemático usa el rango teórico para derivar el factor por paso.
¿Cómo se obtiene el multiplicador 0.48828125 para Arduino?
Primero se calcula cuántos grados corresponden a un paso del ADC. Luego se aplica ese factor a la lectura RAW para convertirla a temperatura.
División clave: 500 ÷ 1024 = 0.48828125.
Ese valor es el multiplicador que convierte la lectura analógica a grados Celsius.
Se aplica directamente sobre la variable de temperatura.
¿Cómo aplicarlo en el código de Arduino?
Multiplica la lectura por el factor correcto.
Asegúrate de escribir el punto decimal al inicio del número.
// Ejemplo de aplicación del factor
// tempC contiene la lectura analógica preprocesada (RAW)
tempC = tempC * 0.48828125; // factor derivado de 500/1024
Si escribes 48828125 en lugar de 0.48828125, obtendrás un resultado absurdo.
Tras corregir el punto, compila y sube el sketch: uploading, done uploading, abre el monitor serial.
¿Cómo validar la medición y resolver errores comunes?
La comprobación práctica confirma que el cálculo es correcto y ayuda a detectar detalles al programar.
Lectura ambiente: alrededor de 22 grados Celsius en el monitor serial.
Prueba térmica: calienta el sensor con la mano y observa cómo sube de inmediato; con una taza de café llegó a 29.
Error típico: números enormes y negativos indican que faltó el punto decimal en el multiplicador.
Corrección: coloca el 0. al inicio del factor y vuelve a subir el código.
Siguiente paso: imprimir la variable en un LCD en lugar de solo enviarla al monitor serial.
¿Tienes dudas sobre el cálculo, el factor de escala o el envío al LCD? Comenta qué parte quieres profundizar y qué sensor estás usando.
Adjunto el código para los que tienen el sensor DHT11. usando la librería para este sensor
#include <DHT11.h>
int pin=2;
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600);
}
void loop()
{
int err;
float temp, hum;
if((err = dht11.read(hum, temp)) == 0) // Si devuelve 0 es que ha leido bien
{
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.print(" Humedad: ");
Serial.print(hum);
Serial.println();
}
else
{
Serial.println();
Serial.print("Error Num :");
Serial.print(err);
Serial.println();
}
delay(1000); //Recordad que solo lee una vez por segundo
}```
Sketch con librería “DHT sensor library” de Adafruit
es necesario instalar tambien “adafruit unified sensor”
#include "DHT.h" //libreria DHT sensor library Adafruit
#define DHTPIN 2 // pin usado para recibir la medición
#define DHTTYPE DHT11 // impirtante verificar que sea el sensor que estamos usando
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Inicializamos comunicación serie
Serial.begin(9600);
// Inicializamos el sensor DHT
dht.begin();
}
void loop() {
// Esperamos 2 segundos entre medidas
delay(2000);
// Leemos la humedad relativa
float h = dht.readHumidity();
// Leemos la temperatura en grados centígrados (por defecto)
float t = dht.readTemperature();
// Leemos la temperatura en grados Fahrenheit
float f = dht.readTemperature(true);
// Comprobamos si ha habido algún error en la lectura
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Error obteniendo los datos del sensor DHT11");
return;
}
// Calcular el índice de calor o sensación térmica en Fahrenheit
float hif = dht.computeHeatIndex(f, h);
// Calcular el índice de calor o sensación térmica en grados centígrados
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Sensación Térmica: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
El profe a veces "se hace la picha un lío". Quizás en su esfuerzo por explicar muy bien todo se olvida de explicar sencillo. En resumen de esta clase es hacer una regla de tres para pasar de las unidades de medición del sensor a grados Celsius.
Gracias profe, se que lo haces con buena intención.
Otra forma de que funcione, es usando map(). Sería de la siguiente manera:
Tenemos 5V que entrega el arduino, y sabemos que el LM35 requiere 10mv por cada 1 ºC de variación, entonces, si queremos saber cuántos grados podría leer el sistema sería:
5V / 10mV/ºC = 500 ºC
Esos 500 º C nos puede dar el sistema, pero ojo: El fabricante nos dice que leerá hasta los 150 ºC. Entonces, usamos la regla de tres con la función map(), para calcular los valores:
int tempC = 0.0; //valor de la temperatura en Celsius
const int sensorTemp = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
tempC = map(analogRead(sensorTemp), 0, 1023, 0, 500);
Serial.println(tempC);
delay(500); //El delay sirve para apreciar el dato más lento
}
Hola a todos, necesito ayuda.
Puede un Arduino uno trabajar continuamente 24/7, o sino que controlador me recomiendan?
La aplicación es para el control de temperatura para un cuarto con pollos
Yo lo hice con un TMP36 que me daba una lectura analógica de 20 a 358. Y este funciona con temperatura de -40 a +125ºC entonces le hice un map a esos valores. Pero en algunas mediciones se descuadra por 1 grado :(
Estoy probando con el sensor TMP36, segui los pasos de otros tutoriales y de este, pero me da valores sin sentido, cambiando constantemente y elevados. Creo que el sensor vino fallado :/