Porque la pantalla LCD se pone borrosa y los rele siempre los tengo encendidos

Tengo un problema en el que todo el tiempo la pantalla LCD se me pone borrosa y los rele siempre los tengo prendidos, y yo quiero que esten apagados cuando yo lo indique. Al momento de cargar el programa se me presenta ese problema.

Es la primera vez que me pasa este problema, desde que incorpore los rele a mi circuito.

Sin mucha molestia me podrian ayudar con eso. Aqui les dejo el codigo.

#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>


RTC_DS3231 rtc;

#define countof(a) (sizeof(a) / sizeof(a[0]))
const byte COLUMNAS = 3;
const byte FILAS = 4;
char hexaKeys [FILAS][COLUMNAS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[FILAS] = {8, 7, 6, 5}; 
byte colPins[COLUMNAS] = {4, 3, 2};

LiquidCrystal_I2C lcd (0x27,2, 1, 0, 4, 5, 6, 7);

Keypad teclado = Keypad( makeKeymap(hexaKeys), rowPins, colPins, FILAS, COLUMNAS); 
String n1, n2;
String o1, o2;
String f1, f2;
String d1, d2;
int t, t1;
int p, p1;
int u, u1;
int c, c1;
int i=0; int j=0;
int b=0; int e=0;
int z=0; int r=0;
int s=0; int m=0;
int hora_actual;
int minuto_actual;
int ledrojo = 9;
int motor1 = 10;
int motor2 = 11;
int bomba_de_agua = 12;
int ledverde = 13;
int sensordelsuelo= A0;
int porcentajesensorsuelo;
int sensordelluvia= A1;
int valor;
int fotoresistencia=A2;
int valorfotoresistencia;
int porfotoresistencia;
String dia;
String hora_de_encender_bomba;
String hora_de_apagar_bomba;
String hora_de_encender_motor;
String hora_de_apagar_motor;
String lec [2];
String loc [2];
String lic [2];
String luc [2];
String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};

void setup() {
   Wire.begin();
  rtc.begin();
  Serial.begin(9600);
  //Serial.print("hola");
 //rtc.adjust(DateTime(__DATE__, __TIME__));
  pinMode(ledrojo, OUTPUT);
  pinMode(ledverde, OUTPUT);
  pinMode(motor1 , OUTPUT);
  pinMode(motor2 , OUTPUT);
 pinMode(bomba_de_agua , OUTPUT);
 lcd.setBacklightPin(3, POSITIVE);
 lcd.setBacklight(HIGH);
  lcd.begin(20, 4);
  lcd.clear();

}
void activarbomba()
{
  String h,h1;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Activar bomba:");

  while(i<2){
  
  char key = teclado.getKey();
  if (key){
  n1 = key;
  h=h+n1;
 t=h.length();
  i++;
  }

lec[0]=h;
  }

  if(t==2)
{
  while (j<2){
  char key = teclado.getKey();
  if(key){
   n2=key;
  h1=h1+n2;
  t1=h1.length();
 j++;
  }
  }
}


hora_de_encender_bomba =h+":"+h1;
lcd.setCursor(0,1);
lcd.print(hora_de_encender_bomba);

lec[1]=hora_de_encender_bomba;

delay(1500);

 t=0; i=0; j=0;
}

void desactivarbomba()
{
      String a,a1;
  lcd.clear();
    lcd.setCursor(0,2);
  lcd.print("Desactivar bomba:");

   while(z<2){
  
  char presionar = teclado.getKey();
  if (presionar){
  f1 = presionar;
  a=a+f1;
  c=a.length();
  z++;
  }
loc[0]=a;
  }

  if(c==2)
{
  while (r<2){
  char presionar = teclado.getKey();
  if(presionar){
   f2=presionar;
  a1=a1+f2;
  c1=a1.length();
 r++;
  }
  }
}

 hora_de_apagar_bomba =a+":"+a1;
lcd.setCursor(0,3);
lcd.print(hora_de_apagar_bomba);

loc[1]= hora_de_apagar_bomba;
delay(1500);
lcd.clear();

 c=0; z=0; r=0;
}

 void activarmotores()
 {
 String w, w1;
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Activar motores:");

 while (b<2)
 {
  char pulsar = teclado.getKey();
    if (pulsar){
  o1 = pulsar;
   w=w+o1;
  p=w.length();
  b++;
    }
  luc[0]=w;
 }


    if(p==2)
{
  while (e<2){
  char pulsar = teclado.getKey();
  if(pulsar){
   o2= pulsar;
  w1=w1+o2;
p1=w1.length();
 e++;
  }
  }
}

 hora_de_encender_motor = w+":"+w1;
 lcd.setCursor(0,1);
 lcd.print(hora_de_encender_motor);
 luc[1]= hora_de_encender_motor;
 delay(1500);

 lcd.clear(); 

 p=0;  e=0;  b=0;
 }

 void apagarmotor()
 {
  String q, q1;
 lcd.clear();
 lcd.setCursor(0,2);
 lcd.print("Desactivar motores:");

  while (s<2)
 {
  char presionar = teclado.getKey();
    if (presionar){
  d1 = presionar;
  q=q+d1;
  u=q.length();
  s++;
    }
  lic[0]=q;
 }

     if(u==2)
{
  while (m<2){
  char presionar = teclado.getKey();
  if(presionar){
   d2= presionar;
  q1=q1+d2;
u1=q1.length();
 m++;
  }
  }
}
  hora_de_apagar_motor = q+":"+q1; 
 lcd.setCursor(0,3);
 lcd.print(hora_de_apagar_motor);
 lic[1]= hora_de_apagar_motor;
 delay(1500);

 lcd.clear(); 
 u=0;  e=0;  b=0;

 }

//void encenderled()
//{
 // digitalWrite(ledrojo, HIGH);
//}

//void apagarled()
//{
 // digitalWrite(ledrojo,LOW);
//} 

void prendermotores()
{
  digitalWrite(motor1 , HIGH);
  digitalWrite(motor2 , HIGH);
}

void apagarmotores()
{
  digitalWrite(motor1 , LOW);
  digitalWrite(motor2 , LOW);
}

void endencerbomba()
{
  digitalWrite(bomba_de_agua , HIGH);
 // digitalWrite(ledrojo, HIGH);
}

void apagarbomba()
{
  digitalWrite(bomba_de_agua , HIGH);
}
void loop() {
   digitalWrite(motor1 , LOW);
  digitalWrite(motor2 , LOW);
 char teclear = teclado.getKey();
   DateTime now = rtc.now();
  

 switch(teclear)
 { 
   case '*':
   activarbomba();
   desactivarbomba();
   break;

   case '#':
   activarmotores();
   apagarmotor();
   break;
 }
  
    dia = daysOfTheWeek[now.dayOfTheWeek()];
    hora_actual = now.hour();
    minuto_actual = now.minute();

      String ho= String (hora_actual);
  String mi= String (minuto_actual);
  String hora2 = ho+":"+mi;
    
      lcd.setCursor(0,0);
  lcd.print(hora2);

  lcd.setCursor(7,0);
  lcd.print(dia);
  lcd.setCursor(0,1);
  lcd.print("Regando:");
  lcd.setCursor(11,1);
  lcd.print("temp:30°C");
      int humedad= analogRead(sensordelsuelo);
   porcentajesensorsuelo= map(humedad, 0, 1023, 0 ,100);
   lcd.setCursor(8,3);
   lcd.print(porcentajesensorsuelo);
  lcd.print("%");
   delay(1000);
  
   valor = analogRead(sensordelluvia);

    valorfotoresistencia= analogRead(fotoresistencia);
     porfotoresistencia= map(valorfotoresistencia, 0, 1023, 0 ,100);
     lcd.setCursor(12,2);
     lcd.print(porfotoresistencia);
     lcd.print("%");

   if(hora2 == hora_de_encender_bomba )
   {
     endencerbomba();
    lcd.setCursor(10,1);
    lcd.print("          ");
    lec[1]= "";
    hora_de_encender_bomba = "";
    lcd.setCursor(8,1);
    lcd.print("SI");
   }
   else(hora2 == hora_de_encender_bomba);
    {
    lcd.setCursor(8,1);
    lcd.print("NO"); 
    }
   if(hora2 == hora_de_apagar_bomba)
   {
     apagarbomba();
    lcd.setCursor(10,1);
    lcd.print("          ");
    loc[1]= "";
    hora_de_apagar_bomba = "";
}

      if(hora2 == hora_de_encender_motor)
   {
     prendermotores();
    lcd.setCursor(10,1);
    lcd.print("          ");
    luc[1]= "";
    hora_de_encender_motor = "";
}

      if(hora2 == hora_de_apagar_bomba)
   {
     apagarmotores();
    lcd.setCursor(10,1);
    lcd.print("          ");
    lic[1]= "";
   hora_de_apagar_bomba = "";
   }

  // if (valorfotoresistencia <= 306)
  // {
  //   endencerbomba();
   //  lcd.setCursor(8,1);
   // lcd.print("SI");
  // }

  // if (valorfotoresistencia <= 306 &&  humedad  >= 409) 
  // {
  //  apagarbomba();
 //  }

  // if (humedad >= 409)
  // {
   //  endencerbomba();
  //  lcd.setCursor(8,1);
  //  lcd.print("SI");
 //  }

  // if (valor <= 1000 && humedad >= 409)
 //  {
  //  apagarbomba();
  //  digitalWrite(ledverde , HIGH);
  // }
}

Si usas módulos reles de arduino tu error es que para encender un rele debes ponerle LOW y para apagarlo HIGH.
cambia lo anterior por esto

void prendermotores() {
  digitalWrite(motor1 , LOW);
  digitalWrite(motor2 , LOW);
}

void apagarmotores() {
  digitalWrite(motor1 , HIGH);
  digitalWrite(motor2 , HIGH);
}

Seguramente problema de alimentación.
¿Cómo estás alimentando todo?

ya los cambie y sigue igual

por el cable que se conecta a la computadora

Subí un esquema de las conexiones por si algo está errado.

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