Buenas, las temperaturas que me da son 380 ºC y etc
No se si el problema esta en el sensor o en que no estoy convirtiendo en celsius las medidas que toma el sensor
alguien que pueda ayudarme??
Gracias
Buenas, las temperaturas que me da son 380 ºC y etc
No se si el problema esta en el sensor o en que no estoy convirtiendo en celsius las medidas que toma el sensor
alguien que pueda ayudarme??
Gracias
Hola,
El lm35 es analógico, lo tienes que poner en un pin analógico, por lo tanto tendrás una lectura entre 0 y 1023, con la función map lo mapeas a lo que necesites.
¿como lo estás haciendo? Si pones el código seguro que alguien te puede ayudar.
Hola, si, lo tengo conectado a un pin analógico y uso este codigo:
//Cargo la librería math.h y defino B y R0 (necesarios para leer la temperatura)
#include <math.h>
const int B=4275; // B value of the thermistor
const int R0 = 100000; // R0 = 100k
const int pinTemp = A0; // Grove - Sensor de temperature conectado a A0
float temp, temp_med = 0; // Temperatura en ºC
float acum = 0, Vout; // variables secundarias
float res = 0.010; // en V/ºC
int i, num_muestras = 100;
void setup()
{
Serial.begin(9600);
pinMode(pinTemp, INPUT);
}
void loop()
{
//incio del calculo de la temperatura
acum = 0;
temp_med = 0;
//Calculamos primero para el Lm35C
for (i = 0; i < num_muestras; i++) {
Vout = analogRead(pinTemp) * 0.00488758553275; // step * V/step = V
temp = Vout / res; // V/(V/ºC) = ºC
acum += temp;
temp_med = acum / num_muestras;
delay(10); // Al tener 10 milisegundos y tener 100 muestras tardara 1 segundo en hacer el bucle.
}
Serial.print(temp_med);
Serial.println(" ºC");
//Fin del calculo de la tempertura
}
Y los resultados que me da son:
384C
383.62 ºC
384.42 ºC
383.93 ºC
384.59 ºC
384.32 ºC
384.24 ºC
384.65 ºC
383.87 ºC
etc.
Hola,
Por eso recomiendan poner el código de primeras.
Bien lo primero seria sacar del for temp_med = acum / num_muestras;
Primero acumulas todo y luego haces la media.
¿Que temperatura se supone que tendria que leer? solo por curiosidad, los factores de multiplicación parecen estar bien, seria valor del pin * 4,88758...... y luego el resultado /10.Pero de la forma que lo tienes está un poco dificir de ver a la primera.
De todas formas, si nos puedes indicar que lectura tiene el pin A0, puedes hacer Serial.print(analogRead(pinTemp));
¿Puedes hacer otra prueba?, cambia
Vout = analogRead(pinTemp) * 0.00488758553275; // step * V/step = V
por
Vout = 70 * 0.00488758553275; // step * V/step = V
Con estó te tendria que dar 34,16
Hola,gracias a todos.
Ya esta resuelto, el problema es que estaba usando:
float R = 1023.0/((float)a)-1.0;
//Calculo R si alimentamos a 3.3V
y debía usar:
float R = 1023.0/(3.3/5*(float)a)-1.0;
//Calculo R si alimentamos a 5V
Por lo tanto, se ha quedado así:
void loop()
{
//incio del calculo de la temperatura
int a = analogRead(pinTempSensor );
float R = 1023.0/(3.3/5*(float)a)-1.0;
R = 100000.0*R;
float temperature=1.0/(log(R/100000.0)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
Serial.print(“temperature = “);
Serial.println(temperature);
Serial.println(” ºC”);
delay(2000);
//Fin del calculo de la tempertura