[SOLUCIONADO] Valores muy altos en LM35

Buenas noches!

Estoy intentando hacer un proyecto modificado de “Andruino” al cual he añadido un interruptor para conmutar y un LM35 conectado a A0 para leer la temperatura exterior.

Puedo decir que la parte que se dedica a activar y desactivar el relé funciona a la perfección (dejando de lado alguna mejora que se podría hacer en cuanto a conmutación con el interruptor) pero los valores que me da el sensor son de alrededor de 440, en lugar de la temperatura que debería mostrar.

He probado a conectar solo el sensor en una proto (sin el resto del montaje) y los valores son correctos, por lo que he llegado a pensar que podría ser ruido, o que el cableado del sensor es más largo de lo recomendable, ¿qué me aconsejáis?

Este es el eléctrico esquema eléctrico. El SN74LS86N que aparece en el esquema son puertas lógicas XOR que uso para conmutar con el interruptor.

Y este es el código:

#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip("mi IP"); //IP
EthernetServer servidor(80);

int sensor = A0;
float grados;

int PIN_LED = 8;
String readString = String(30);
String state = String(3);

void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED,OUTPUT);
  digitalWrite(PIN_LED,LOW);
  state = "OFF";
}

void loop()
{
  EthernetClient cliente = servidor.available();
  
  if(cliente)
  {
    boolean lineaenblanco = true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c = cliente.read();
        if(readString.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString.concat(c); //Almacenar los caracteres en la variable readString
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED = readString.indexOf("LED=");
          if(readString.substring(LED,LED+5)=="LED=T")
          {
            digitalWrite(PIN_LED,HIGH);
            state="ON";
          } else if (readString.substring(LED,LED+5)=="LED=F")
          {
            digitalWrite(PIN_LED,LOW);
            state="OFF";
          }

          grados = analogRead(sensor);                   
          grados = 5.0*grados*100.0/1024.0;

                              
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println("Refresh: 5"); //Refresca la web cada 5 segundos
          cliente.println();
          delay(250);        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>LUZ Y TEMPERATURA</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>LUZ Y TEMPERATURA</h1>");
          cliente.print("
");
          cliente.print("Temperatura: ");
          cliente.print(grados);
                    
          cliente.print("

");
          if(state == "OFF"){
            cliente.println("<input type=submit value=");
            cliente.print(state);
            cliente.println(" style=width:200px;height:75px onClick=location.href='./?LED=T\'>");
          }
          else{
            cliente.println("<input type=submit value=");
            cliente.print(state);
            cliente.println(" style=width:200px;height:75px onClick=location.href='./?LED=F\'>");
          }         
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString="";
        }
      }
    }
  }
}

Hola Fusible. No entiendo el porque de 74LS86. veo que el interruptor no tiene resistencia a masa. Por otro lado el LM35 según he visto en la hoja de datos tmb tiene una resistencia a gnd. Las conexiones de GND intenta que todas lleguen al Arduino, en especial las del LM35. Revisa eso.

Gracias por tu respuesta surbyte.

Lo del 74LS86 fue un extraño arrebato de nostalgia, sé que podría haberlo hecho a través de programación.

La idea es poder conmutar el interruptor que tengo en la pared con la del android de esta forma:

int. pared int. android salida

0 0 0 0 1 1 1 0 1 1 1 0

En cuanto al resto, volveré a soldar la placa con tus recomendaciones y te cuento.

Buenas tardes!

Decir que he solucionado el problema, y aunque no acabo de entender el por qué de esta manera si funciona, lo importante es que funciona. Os cuento por si a alguno le ayuda:

Después de rehacer la placa mejorada, siguiendo los consejos de surbyte, y después de conectar todo el jaleo de cables, etc. seguía teniendo el mismo problema.

Por probar, me di cuenta de que sin conectar el LM35 a la entrada analógica me mostraba valores de 1023, así que pensé en probar a ponerlo a 0 para inicializarlos con un "analogWrite(A0, 0)" (también pensé: que tontería, cuando le diga que lea el valor del sensor me lo va a machacar), y sorpresa! ha dado resultado!

Donde antes tenía valores altísimos, ahora tengo lecturas normales, que no se si son reales hasta que no las compare con otro sensor y otro arduino que tengo por ahi, pero son normales.

Fusible:

Te recomiendo le des una mirada a este post Como logro hacer un promediador en mi sketch, quizas te sea util para “filtrar” tus lecturas.

Suerte!