lectura erronea sensor LM35

Hola a todos
espero que esta sea sea sea e sitio idóneo para plantear mi duda. Estoy haciendo un pequeño montaje con una ldr y con un sensor de temperatura LM35. El caso es que en principio todo parece correcto y las lecturas creo que son buenas, pero en cuanto se encienden los leds consecuencia de que baja la luminosidad, el sensor LM 35 empieza a marcar datos que no son normales (50º C y más)
Estoy seguro de que el programa se podría hacer mucho mejor, pero con ms conocimientos de momento no llego a más. Si alguien me pudiera indicar que es lo que puede estar pasando o como corregirlo se lo agradecería.
Saludos

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Variables constantes para pines
const int transistorPin=12;
const int tmpsensorPin=A0;
const int ldrPin=A1;
const int led1Pin=11;
const int led2Pin=10;
const int led3Pin=9;
//Variables para almacenar valor sensores y temperatura
int ldrValor;
int tmpsensorValor;
float temperatura;

LiquidCrystal_I2C lcd(0x27,16,2);

//Configuración
void setup(){
  lcd.init();                     
  lcd.backlight();
  pinMode(led1Pin,OUTPUT);
  pinMode(led2Pin,OUTPUT);
  pinMode(led3Pin,OUTPUT);
  pinMode(transistorPin,OUTPUT);
  //Serial.begin(9600);
}
//Programa
void loop(){
  ldrValor=analogRead(ldrPin);
  tmpsensorValor=analogRead(tmpsensorPin);
  //temperatura=((tmpsensorValor*5.0/1024)-0.5)*100;
  temperatura=tmpsensorValor*0.488; //LM35
  lcd.setCursor(0,0);
  lcd.print(temperatura);
  lcd.setCursor(0,1);
  lcd.print(ldrValor);
  delay(500);
  /*Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print("    ");
  Serial.print("Luminosidad: ");
  Serial.println(ldrValor);
  delay(300);*/
  if (ldrValor<500){                        
    digitalWrite (led1Pin,1); 
    digitalWrite (led2Pin,1);
    digitalWrite (led3Pin,1);
  }
  else {                                            
    digitalWrite (led1Pin,0); 
    digitalWrite (led2Pin,0);
    digitalWrite (led3Pin,0);            
  }
  if(temperatura>30){
    digitalWrite(transistorPin,1);
  }
  else{
    digitalWrite(transistorPin,0);
  }
}

A primera vista no hay nada raro en el código.

Sería de ayuda que pongas el esquema de conexión (con hacerlo a mano alcanza) tal cual lo tienes tú, para ver si el problema viene por ese lado.

Saludos

PD: si usas una protoboard revisa que no tenga falsos contactos, es algo muy común.

Gracias por la respuesta. Adjunto esquema, pero yo creo que por ahí no está el problema. Ya te digo que antes de variar a luminosidad, la lectura del sensor de temperatura parece correcta (unos 22º C)

Si el conexionado están tal cual el esquema, olvidaste poner resistencias a los pines que alimentan los diodos LED, vas a "quemar" unos o los otros (ponle resistencias de al menos 220 ohms en serie). Y en paralelo con el motor tienes que poner un diodo de protección con el cátodo (el lado de la rayita) hacia positivo, sino puedes quemar el mosfet (que imagino es del tipo digital sino también le falta una resistencia como mínimo). Eso es lo más preocupante que encuentro.

Y por supuesto olvidaste el display que aparece en el código, pero no es tan importante si no lo vemos ya que interpreto que funciona.

Lo único que se me ocurre es que el consumo de los LED por no tener resistencias, esté generando problemas.
¿Seguro el problema aparece cuando encienden los LED y no cuando activa el motor?

Por otro lado, edita el post y pon la imagen como adjunto en lugar de poner el link (Pulsa donde dice "Attachments and...").

Saludos

Moderador
No había leído el comentario de @gatul solicitando a @fsanvil459 que ponga la imagen como adjunta y yo sin querer lo modifiqué pero ya corregí mi error y dejo el pedido de que lo haga @fsanvil459 como corresponde y para que aprenda.
Google Drive funciona bien pero si algo le pasa a tu disco o cuenta y se pierde el contacto el enlace se cae.
De modo que nada mejor que el repositorio de Arduino.cc para guardar imagenes y archivos.

Pido disculpas al moderador y en general al foro por no haber hecho las cosas según las normas. Ha sido por mi novatez y espero que no vuelva a ocurrir.
Respecto a lo que me plantea @____gatul, si, efectivamente faltan resistencias y diodo, no las pongo por no saturar el montaje, y dudo mucho que su ausencia sean la causa de que el sensor LM35 lea de forma incorrecta. Este empieza a dispararse en su lectura cuando se encienden los leds, y de hecho el desconectado el motor para comprobar que este no era la causa. Voy a probar cambiando el sensor a un TMP36 que he conseguido, quizás el otro se haya deteriorado.....
De todas formas, muchas gracias por tu respuesta y atención. Ah, si, el LCD no esta en la imagen, uso un simulador que no incluye LCD I2C y por eso no lo puse.
Muchas gracias

Es simple, desconecta los LED y fijate si al poner los puertos en HIGH sin los LED se repite el problema.

Saludos

Revisa si al encender los led no cae la tensión de alimentación del LM35,
Los leds son diodos, y por lo tanto elementos alineales, la corriente se dispara.
Considero que son muy necesarias esas resistencias de 220 ohms y el diodo (o quizás un capacitor de .1 uf x 50 V en paralelo al motor para suprimir las chispas del colector

Moderador:
Por favor mira el privado que te he enviado.

Muchas gracias por vuestras respuestas. Lo he desmontado pero cuando vuelva a hacerlo comprobaré todo lo que me habéis sugerido.

Imagen correctamente puesta por petición del moderador

Hi,
Una sugerencia es de anadirle un condensador de 470uf 16 voltios y uno de .1uf al los 5 voltios del protoboard. Tambien mencionas que cuando enciendes los leds pierden intensidad quire decir que estas usando mas corriete que de la que puede suplir la fuente de VCC te puedes suplir. Trata los condensadores pero tienes que resolver el por que pierden los leds intensidad. Posiblemente necesita un PS de mas corriente.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.