problema sensor de temperatura

Tengo la Arduino UNO con el ethernet shield 2, tenia un LED y un sensor de temperatura funcionando perfectamente. El LED conectado al pin 9, el display lo tenia asi configurado:

LiquidCrystal lcd(6, 7, 5, 4, 3, 2);

deje libres los pines 10,11,12,13 de la Ethernet y el 0,1 para el puerto serie. Me quedaria disponible el 8 para conectar el piezo para que suene la alarma.

Ethernet Shield2+led+sensor de temperatura todo bien, pero en el momento que meto el display chifla, y me pasa de 27 grados a 19, y oscila muchisimo muchisimo, y creo que baja la intensidad del led.

Alguna explicacion? la placa no puede con todo? La tengo alimentada por usb

puede ser por pines PWM? 6,5,3 son pwm, los otros que intervienen en mi configuracion del display no lo son.

Cambie las conexiones y la configuracion de la liquidCrystal, cambiando el 6 por el 7 y nada.... salen picos y en el display algun valor inconexo

Pon todo el código por favor.

Cual sensor de temperatura estas utilizando?

cristiams:
Cual sensor de temperatura estas utilizando?

Estoy utilizando el sensor que viene con el starter kit, el tmp36

surbyte:
Pon todo el código por favor.

#include <SPI.h> //Aqui incluimos la libreria SPI
#include <Ethernet2.h> //Aqui incluimos la libreria Ethernet
//#include <LiquidCrystal.h>

//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0x3E, 0x66};   //Declaracion de la direccion MAC
IPAddress ip(192, 168, 1, 253); //Declaracion de la IP
EthernetServer servidor(80); //Declaracion del puerto 80

const int sensorPin = A0;
int PIN_LED = 9; //Aqui establecemos la variable PIN_LED como un valor entero
String readString = String(30); //lee los caracteres de una secuencia en una cadena.
//Los strings se representan como arrays de caracteres (tipo char)
String state = String(3);
String alarm="ON";
float umbralMAX=20;
float umbralMIN=10;

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


void loop() {
  //tone(6, 300, 300);
  delay(100);
  //EthernetClient Crea un cliente que se puede conectar a
  //una dirección específica de Internet IP
  int sensorVal = analogRead(sensorPin);
  float voltage = (sensorVal / 1024.0) * 5.0;
  //Serial.print("Volts: ");
  //Serial.print(voltage);
  //Serial.print(", degrees C: ");
  float temperature = (voltage - .5) * 100;
  Serial.println(temperature);
  if(temperature>=umbralMAX || umbralMIN<=temperature)
  {
    digitalWrite(PIN_LED, HIGH);
    if(alarm=="ON"){
      tone(6,300,300);
    }
    if(alarm=="OFF"){
     noTone(6);
      }
    }
   else{
     digitalWrite(PIN_LED, LOW);
     }

  //Serial.println(temperature);
  EthernetClient cliente = servidor.available();
  if (cliente) {
    boolean lineaenblanco = true;
    while (cliente.connected()) {
      if (cliente.available()) {
        char c = cliente.read();
        if (readString.length() < 30) {
          readString.concat(c);
          //Cliente conectado
          //Leemos petición HTTP caracter a caracter
          //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";
            alarm="ON";
          }
          else if (readString.substring(LED, LED + 5) == "LED=F") {
            //digitalWrite(PIN_LED, LOW);
            //state = "OFF";
            alarm="OFF";
          }
           cliente.println("HTTP/1.1 200 OK");
           cliente.println("Content - Type: text / xml");
           cliente.println("Connection: close");
           cliente.println("");
           cliente.println("<? xml version='1.0' encoding='UTF-8' standalone='no' ?>");
           cliente.print("<valores><sensortemp>");
           cliente.print(temperature);
           cliente.println("</sensortemp></valores>");
                         // Cabecera HTTP estándar
                                        /*
                                            cliente.println("HTTP / 1.1 200 OK");
                                              cliente.println("Content - Type: text / html");
                                               cliente.println("Refresh: 5");
                                              cliente.println(); //Página Web en HTML
                                              cliente.println("<html>");
                                              cliente.println("<head>");
                                             cliente.println("<title>LED ON / OFF </title> ");
                                             cliente.println(" </head > ");
                                              cliente.println(" <body width = 100 % height = 100 %> ");
                                                  cliente.println("<center>");
                                                  cliente.println("<h1>LED ON / OFF </h1> ");
                                                  cliente.print("

");
                                                  cliente.println("Volts: ");
                                                  cliente.println(voltage);
                                                  cliente.println(", degrees C: ");
                                             cliente.println(", degrees C: ");
                                              cliente.println(temperature);
                                             cliente.print("

");
                                              cliente.print("



");
                                              cliente.println(" </center> ");
                                              cliente.println(" </body> ");
                                              cliente.println(" </html> ");
                                              */
                          cliente.stop();
                          //Cierro conexión con el cliente
                          readString = "";
                        }
                        }
                        }
                        }
                        }

Aqui os dejo el codigo que estoy utilizando actualmente, el display esta desconectado y tengo metido un piezo. Siento que sea tan caotico, tengo muchas cosas comentadas y estoy haciendo pruebas.

comienza corrigiendo esto

float voltage = (sensorVal / 1024.0) * 5.0;

si la respuesta del AD fuera el máximo, éste sería 1023 y en tu caso el resultado nunca llegaría a 5.00 volts.

float voltage = (sensorVal / 1023.0) * 5.0;

Llendo a tu consulta, no veo nada en el código que justifique la falla.
Porque no conectas el multímetro y vigilas la tensión de 5V que entrega el arduino. Evidentemente pareciera que algun módulo esta consumiendo mas de lo normal.
Comprueba que la tensión de 5V no decaiga al conectar los módulos. Claro que no puedes hacerlo con el Arduino conectado. Pero ve comparando, arduino solo tal valor... ronda lo 5.000 volts p.ejemplo. Con Etherne2 igual, con Display... otra cosa.

surbyte:
comienza corrigiendo esto

float voltage = (sensorVal / 1024.0) * 5.0;

si la respuesta del AD fuera el máximo, éste sería 1023 y en tu caso el resultado nunca llegaría a 5.00 volts.

float voltage = (sensorVal / 1023.0) * 5.0;

Llendo a tu consulta, no veo nada en el código que justifique la falla.
Porque no conectas el multímetro y vigilas la tensión de 5V que entrega el arduino. Evidentemente pareciera que algun módulo esta consumiendo mas de lo normal.
Comprueba que la tensión de 5V no decaiga al conectar los módulos. Claro que no puedes hacerlo con el Arduino conectado. Pero ve comparando, arduino solo tal valor... ronda lo 5.000 volts p.ejemplo. Con Etherne2 igual, con Display... otra cosa.

Tienes razon con lo de 1023, se me fue la pinza y como los valores van de 0 a 1023, no se en q estaria pensando y puse 1024 pq son 1024 valores jaj

pedire un multimetro....teoricamente tiene que funcionar correctamente? habia leido que el ethernet shield pide bastante y por eso me podia fallar

Mira, todo debería funcionar bien, pero... no se pierde nada haicendo una prueba paso a paso. Arrancas con el arduino y luego cada cosa hasta que aparece el problema.
Yo sospecho de la alimentación, pero es mi primer hipótesis.

que crees que falla? la placa Arduino esta alimentada por usb, es que yo creo que debe ser eso… funcionaba todo bien hasta que meti la Ethernet y es como que no puede con todo

Debería poder alimentarla. Busca una fuente de entre 7 y 12VDC para alimentar externamente tu arduino.
Y usas el conector externo.

Repito, por USB debe entregar 500mA o tal vez tengas mal tu USB y no pueda entregar tanta corriente.

Prueba esto rapidamente pon a la salida del TMP36 una pata de una resistencia de 10k y luego la otra pata a tierra del circuito, yo tenia un problema de que si usaba mas de un puerto analogico con ese sensor los valores oscilaban rapidamente como tu dices, creo que en el datasheet del TMP36 dice algo al respecto. Asi me solucione este problema

Creo que quedara como una posible mejora de mi proyecto, ya esta terminado y estoy documentandolo, sin la Ethernet Shield funcionaba todo correctamente y al meterla dejo de funcionar por arte de magia, asi que supongo que estara ahi el problema yo creo.

Y vuelvo a preguntarte. Usaste una fuente externa?

surbyte:
Y vuelvo a preguntarte. Usaste una fuente externa?

es para un proyecto de la universidad y no cuento con el material... uso todo lo de aqui y esta terminado y funcionando sin display. Era opcional por meterle algo mas, el Arduino es lo de menos, lo importante del proyecto era un servidor web que podia conectarse a "n" Arduinos, apagar encender sus sensores y almacenar todos los datos de la temperatura en la base de datos.