Problemas Con LCD keypad shield +Uno

Hola a todos, soy nuevo en el grupo. Estos realizando una estufa de laboratorio con una heladera + un caloventor , una sonda ds18b20 y dos relés, Arduino UNO y LCD keypad Shield, eso es básicamente lo que utilizo. La idea en mantener una temperatura seteada, prendiendo la heladera en caso de queres bajar la temp o el caloventor en caso de querer subir la temperatura. El tema es me que me funciona todo bien pero calienta el Arduino y me lo termino arruinando, primero creí que era uno viejo que venia usando, pero paso lo mismo con uno que adquirimos , no se si es el modulo LCD keypad que va montado sobre el Arduino o algo que estoy haciendo mal en el programa. Dejo diagrama y codigo ver si ustedes que tienen mas experiencia me pueden dar una mano.

CODIGO

#include <OneWire.h>                              //Incluimos esta libreria  para enviar y recibir datos por un único cable
#include <DallasTemperature.h>                    //Incluimos esta libreria  para utilizar el sensor DS18b20
#include <LiquidCrystal.h>                        //Incluimos esta libreria  para el display LCD

#define Pin 3                                     //Declaramos el pin donde se conectará el bus de datos (conecto la Sonda)
#define TEMPERATURE_PRECISION 12                  //Define la precision de la muestra del DS18B209, 9 a 12 bits
 
OneWire ourWire(Pin);                             //Se establece el pin declarado como bus para la comunicación One Wire de la sonda
DallasTemperature sensors(&ourWire);              //Se declara una variable u objeto para nuestro sensor
DeviceAddress Sonda0;                             //Tipo definido como una array de 8 bytes (uint8_t) o sea Vector donde se almacenan las MAC de las sondas

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);              // Definimos pines para Display LCD Keypad shield Arduino 

int indicFrio = 0;                                // Se utilaza para indicar con e1 asterisco si esta prendido el compresor
int indicCalor = 0;                               // Se utilaza para indicar con e1 caracter grado si esta prendida la calefaccion
int indicOFF = 0;                                 // Se utilaza para indicar con e1 caracter # que esta apagado el compresor y la resistencia
int tecla = 0;                                    // Variable que recibe lo ingresado por A0
int caso;                                         // De acuerdo a que boton presiono entro en un caso del switch
int ledFrio = 2;                                  // Salida para el control del relé de Refrigeracion Pin 2      
                                                  // Tiene que ser un número pin inferior al del pin de entrada de la sonda esto no se porque
int ledCalef = 11;                                // Salida para el control del relé de Calefaccion Pin 11             
float tempTrab =15;                               // se guarda la temperatura Maxima ingresada, por defauld es 15°
float tempActual;                                 // se guarda la temperatura del sensor 



/////////////////////////////// Carácter especial Para el simbolo de grado en binario en display ///////////////////////////////////////////////////
//////////////////////////////     con caracter de 40 puntos , 8 verticales y 5 horizontales     //////////////////////////////////////////////////

byte gradoC[8] = {
                  0b00111,
                  0b00101,
                  0b00111,
                  0b00000,
                  0b00000,
                  0b00000,
                  0b00000,
                  0b00000
                 };


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
void setup() {  
                pinMode(ledFrio,OUTPUT);                                // salida control del rele de Refligeracion
                pinMode(ledCalef,OUTPUT);                               // salida control del rele de Calefaccion
                pinMode(10,OUTPUT);                                     // salida control Display LCD
                lcd.createChar(1, gradoC);                              // Creamos caracter grado centigrado y lo guardamos en 1
                sensors.begin();                                        // Inicialización de los sensores

                sensors.setResolution(Sonda0, TEMPERATURE_PRECISION);   //Definimos la resolocion de Bit del sonda 0
                               
                lcd.begin(16, 2);                                       // Inicializamos el Display LCD
                lcd.setCursor(0,0);                                     // Posicionamos el cursor en la fila 0 columna 0
                lcd.print(" Temp. Actual ");                            // Imprime un título en la primera línea del display
                
                digitalWrite(10, HIGH);                                 // Iluminacion LCD inicialmente Prendida
                digitalWrite(ledCalef, HIGH);                           // Relé de Calefaccion inicialmente apagado
                digitalWrite(ledFrio, HIGH);                            // Relé de Refrigeracion inicialmente apagado
                
             }

void loop() {  
      
      sensors.requestTemperatures();                    //Se envía el comando para leer la temperatura
      tecla = analogRead(A0);                           // lee el pin de entrada Analogico A0 y guardo en Tecla
      if (tecla <= 50)                    caso = 3;     // Tecla derecha Seleccion temperatura Maxima
      if ((tecla <= 200) & (tecla > 50))  caso = 1;     // Tecla Arriba 
      if ((tecla <= 350) & (tecla > 200)) caso = 2;     // Tecla Abajo
      if ((tecla <= 500) & (tecla > 350)) caso = 5;     // Tecla Izquierda Seleccion temperatura Minima
      if ((tecla <= 850) & (tecla >500))  caso = 4;     // Tecla Selec  Scroll en el display
  delay(100);
  

   
  switch (caso){
    
    case 1:                                  // Caso 1 si esta prendida la iluminacion del LCD y presiono tecla Arriba la apago
    lcd.setCursor(0,1);                      // Posicionamos el cursor en la fila 1 columna 0
    lcd.print(" Apago Display  ");           // Imprime leyenda en LCD 
    delay(1000);
    caso = 0;                                // Pongo en 0 caso antes de salir des esta condicion
    digitalWrite(10, LOW);                   // Apago la iluminicacion del LCD
    break;

    case 2:                                  // Caso 2 si esta apagada la iluminacion del LCD y presiono tecla Abajo la prendo
    digitalWrite(10, HIGH);                  // Prendo la iluminicacion del LCD
    lcd.setCursor(0,1);                      // Posicionamos el cursor en la fila 1 columna 0
    lcd.print("Enciendo Display");           // Imprime leyenda en LCD 
    
    delay(1000);
    caso = 0;                                // Pongo en 0 caso antes de salir des esta condicion
    break;

    
    case 3:                                  // Caso 3 si presiono la Tecla derecha entro a modificar la tempera de trabajo
    temperaturaTrabajo();                    // llamo a funcion temperatura Trabajo
    break;
    
    //case 5:                                  // Caso 5 si presiono la Tecla  Izquierda entro a modificar la tempera minima
    //temperaturaMinima();                     // llamo a funcion temperatura Minima
    // break;
     
    case 4:                                  //Caso 4 si presiono la Tecla a la selec hago scroll y muestro leyenda      
    lcd.setCursor(16,0);                         
    lcd.print("By Alan Sabetta");            // Imprime un título en la primera línea del display
    lcd.setCursor(16,3);
    lcd.print("    CINDEFI   ");             // Imprime un título en la primera línea del display scroll 16 posiciones (longitud de string) a  la izquierda
                                                                                                 
    for (int posiConta = 0; posiConta < 16; posiConta++) {     // scroll hacia la izquierda
    
    lcd.scrollDisplayLeft();
    // espera un bit:
    delay(50);
    }
    delay(3000);
    
    lcd.clear();                            // Borro la pantalla del LCD
    lcd.setCursor(0,0);                     // Posicionamos el cursor en la fila 0 columna 0
    lcd.print(" Temp. Actual ");            // Imprime un título en la primera línea del display
    caso = 0;                               // Pongo en 0 caso antes de salir des esta condicion
    break;                                  // si anulamos este break, cada vez que usamos caso 4, pasa al 5
    
    default:
    lcd.setCursor(0,1);                     // Posicionamos el cursor en la fila 0 columna 1
    lcd.print("    ");                      // Imprimo la leyenda en LCD
    lcd.print(tempActual);                  // Se lee e imprime la temperatura en grados Celsius
    lcd.print(" ");                         // Imprimo la leyenda en LCD
    lcd.write(1);                           // escribimos el simbolo grado
    lcd.print("C    ");

/////////////////////////////////// Control de relés de Calefaccion y Refrigeracion ////////////////////////////////////////////////////////////////////// 
         
      tempActual = (sensors.getTempCByIndex(0)+2.7);   // se le suma 2 para compensar la dif de Tem entre la hubicacion del sensor y el centro de la estufa
     
      if ((tempActual >= tempTrab-1) & (tempActual <= tempTrab)){ //Histéresis de 1 grado Celsius    
            
            digitalWrite(ledFrio, HIGH);        // Apago en compresor refrigeracion Logica inversa para modulo 1 Relay 
            digitalWrite(ledCalef, HIGH);       // Apago la resistenia de calegaccion Logica inversa para modulo 1 Relay
            indicFrio = 0;                      // Control del asterisco en el display indicando compresor OFF
            indicCalor = 0;                     // Control del simbolo grado en el display indicando compresor OFF
            indicOFF = 1;                       // Control del simbolo grado en el display indicando compresor OFF y Resistencia OFF
      }
       
     if (tempActual < tempTrab-1){            //Histéresis de 1 grado Celsius   T < Temperatura de Trabajo
      
            digitalWrite(ledFrio, HIGH);          // Apago en compresor refrigeracion Logica inversa para modulo HL-54S
            digitalWrite(ledCalef, LOW);          // Prendo la resistenia de calegaccion Logica inversa para modulo HL-54S
            indicFrio = 0;                        // Control del simbolo asterisco en el display indicando compresor OFF
            indicCalor = 1;                       // Control del simbolo grado en el display indicando compresor ON
            indicOFF = 0;                         // Control del simbolo grado en el display indicando compresor OFF y Resistencia OFF
      }

       if (tempActual > tempTrab){            //Histéresis de 1 grado Celsius    T > Temperatura de trabajo
            
            digitalWrite(ledCalef, HIGH);         // Apago la resistenia de calegaccion Logica inversa para modulo HL-54S
            digitalWrite(ledFrio, LOW);           // Prendo en compresor refrigeracion Logica inversa para modulo HL-54S
            indicFrio = 1;                        // Control del simbolo asterisco en el display indicando compresor OFF
            indicCalor = 0;                       // Control del simbolo grado en el display indicando compresor ON
            indicOFF = 0;                         // Control del simbolo grado en el display indicando compresor OFF y Resistencia OFF
      }
      
          
      if (indicFrio == 1){
         lcd.setCursor(15,0);               // Posicionamos el cursor en la fila 1 columna 13
         lcd.print("*");                    // Asterisco añadido en el display
      }
 
      if (indicCalor == 1){
         lcd.setCursor(15,0);               // Posicionamos el cursor en la fila 1 columna 13
         lcd.write(1);                      //  escribimos el simbolo grado
      }
      
      if (indicOFF == 1){
         lcd.setCursor(15,0);               // Posicionamos el cursor en la fila 1 columna 13
         lcd.print("#");                    //  escribimos el simbolo grado
      }


     
      } // Fin de switch case


} // Fin de programa

////////////////////////////////////////////// Funcion Temperatura de Trabajo Seteada //////////////////////////////////////////////////////////////////////////////////////

void temperaturaTrabajo(){              // Control de temperatura. Ajuste de la temperartura de trabajo


        caso = 4;                       // entro cuando caso es igual a 4 o sea que se presiono la tecla Derecha
    
        lcd.setCursor(0,1);             // Posicionamos el cursor en la fila 0 columna 1  
        lcd.print("T Trab:");           // Imprimo la leyenda en el LCD
        lcd.print(tempTrab);            // Muestro la temperatura Maxima actual en LCD
        lcd.print(" ");                 // Imprimo la leyenda en el LCD
        lcd.write(1);                   // Escribimos el simbolo grado
        lcd.print("C  ");               // Imprimo la leyenda en el LCD
        lcd.blink();                    // Muestra el cursor LCD parpadeante.
        delay(500);
      
     while(caso == 4) {                 // Cuando se presiona la tecla Selec entro a este while
        delay(100);
        
        tecla = analogRead(0);                              // Leo que tecla se presiona si subir o bajar
        
        if ((tecla <= 850) & (tecla >500))                  // Tecla de menú
        caso = 0;                                           // Pongo caso en 0 
                                                              
        if ((tecla <= 200) & (tecla > 50)){                 // Tecla Arriba
          tempTrab = tempTrab + 0.1;                        // Incrementos de 0.1 grados y lo guardo en tempMax
        }
        
        if ((tecla <= 350) & (tecla > 200)){                //Tecla abajo
          tempTrab = tempTrab - 0.1;                        // Decrementos de 0.1 grados y lo guardon en tempMax
        }
       
        
        lcd.setCursor(0,1);           
        lcd.print("T Trab:");
        lcd.print(tempTrab);
        lcd.print(" ");
        lcd.write(1);                   // escribimos el simbolo grado
        lcd.print("C  "); 
        
    } //Fin While
    
      lcd.setCursor(1,1);
      lcd.noBlink();                   // Dejo de mostrar el cursor LCD parpadeante.
      lcd.print("   ");
      lcd.print(tempTrab);
      lcd.print(" ");
      lcd.write(1);                    // escribimos el simbolo grado
      lcd.print("C  ");
      lcd.print("   ");
      delay(1000);
      lcd.setCursor(1,1);
      lcd.print("      OK       ");
      delay(1000);
            
} // Fin Funcion Temperatura Trabajo

Hola,
Conectó el +5V directamente al pin 3 del arduino.

Hola Ruilviana, gracias por responder, esta mal el diagrama, pero fisicamente esta bien, el cable amarillo sale después de la resistencia de 4K7 y va al pin 3. Ahora veo si puedo editar no se si me deja, soy nuevo en el Foro.

Moderador
No edites un esquema, comentario sobre el que te hacen observaciones salvo cuando no respeta las normas.
Deberías haber posteado el nuevo esquema para que se viera que entendiste y ahora no queda el comentario de @ruilviana como descolocado.

Ok, lo tendre en cuenta para la próxima.

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