Nano layouts difference?

Hello!

I've a project and I've been using the Arduino Nano V3 into it.

The problem is that using the 328P-MU model it works, and using 328p-AU model it does not (I think I've written the model names correctly based on an image found at the web). Probably because of some interfearance with the rest of the project.

have you ever passed through something like this?

Thanks!

Don't stop now !

Sorry, first topic. I'll edit and complete it! :wink:

the project:

Please post your sketch, using code tags when you do, and explain what you mean when you say that it does not work

WHen I say it does not work, I mean that when the project is running the same code, in the same hardware, the model which is described on the first picture as "328P-AU" colapses and the model that is describer as "328p-MU" does not, it works just fine. By colapses, I mean that I have to reset the arduino. The project is an irrigation controller.

I've tried to introduce some capacitors to try to avoid some of the interfearance, but it does not worked. So I didn't use the "AU" model back there. The problem is that I'm not able to find the "MU" model now, and I was curios to know if someone have experienced differences in the use of some compatible models of nanos.

Thanks!

As previously requested, please post your sketch

Doubtful the problem is with the processor itself, those chips seem to only differ in the physical packaging. Have you tried more than one of each type board? Could be a hardware problem with a specific board.

Do the boards have the same version of the bootloader? Some of the older bootloader versions had problems with the watchdog timer.

Actually I do not have a skecht because it is too simple (the complex parts are inside each part), but I'll post the parts:

Arduino Nano
Contactor CJX2-1210 1210 12a 3p + 1na
Thermic relay Lr2-d1314 7~10a
transformer 220 vac - 24 vac
Power adapter 5Vdc 1A
4 Key Matrix Membrane Switch (1x4)
8 outputs relay module (5V)
LDC 16x2 with the i2c communication module

Sorry, that didn't translate well. A simple sketch should be easy to post. If you have multiple files, you can still post them consecutively.

Hello David, Thank you for the answer.

I've tested in more than one board, about ten of each layout. I also do not think that the problem is in the processor itself, but I think that it is in the board layout or maybe in some other component. When the contator reacts to the arduino command there is a subtle electrical and magnetical fluctuation, I tried to avoid the electrical fluctuation by adding capacitors to the 5v arduino's source, but it didn't work. So, maybe, if it is really a hardware problem, it is a magnetical interfearance.

About the bootloader, this is one thing that I haven't have thought before, I'll check !

Sorry, I really was not clear in the sentence. What I meant is that I did not actually have made any complex thing, all the complexity are inside the modules that I have bougth, I have just connected they.

Are you using separate power supplies for the arduino and the relay board? If you are using one of the common opto-coupled relay boards, the only connections from the arduino should be the Vcc of the arduino and the eight relay drive lines, with NO ground connection - the arduino only needs to drive the LEDs in the opto-couplers. The relay driver circuitry is then connected to a separate power supply to totally isolate it from the arduino.

Sorry again, I was not even thinking about the code, I was thinking about the hardware, so I've read the sketch and imagined the drawing of the harware....

this is the code, it is really not the smart way to do the job, but is does...

#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h> //adafruit
#include <Wire.h>//nativo
#include <EEPROM.h>//nativo
LiquidCrystal_I2C lcd(0x27, 16, 2);
// constantes - define os pinos


#define pinobotaoInicio   4
#define pinobotaoSeletor  14
#define pinobotaoMais     0
#define pinobotaoMenos    1
#define pinobotaoCancela  3
#define pinobotaoManual   2


#define rele1 6
#define rele2 7
#define rele3 8
#define rele4 9
#define rele5 10
#define rele6 11
#define rele7 12
#define bomba 5

//define estados

#define ATIVO 1
#define INATIVO 0
#define BLIGADO LOW
#define BDESLIGADO HIGH
#define VLIGADO LOW
#define VDESLIGADO HIGH
#define AGUA 1
#define ADUBO 0
#define AddAgua 0
#define AddAdubo 1
#define AddModo 2
#define AddManual 3
#define AddNrele 4
#define Automatico 0
#define Manual 1
#define Ajuste 2
#define INICIADO 0
#define TERMINADO 1
#define NAFILA 2

#define tempomaxagua 30
#define tempomaxadubo 30



//variáveis para debounce dos botões

int tempoDebounce = 50;
int tempoDebounceLongo = 500;
int tempoDebounceSuperLongo = 2000;

int estadobotaoInicio;
int estadobotaoSeletor;
int estadobotaoMais;
int estadobotaoMenos;
int estadobotaoCancela;
int estadobotaoManual;

int anteriorbotaoInicio = BDESLIGADO;
int anteriorbotaoSeletor = BDESLIGADO;
int anteriorbotaoMais = BDESLIGADO;
int anteriorbotaoMenos = BDESLIGADO;
int anteriorbotaoCancela = BDESLIGADO;
int anteriorbotaoManual = BDESLIGADO;

unsigned long bouncebotaoInicio;
unsigned long bouncebotaoSeletor;
unsigned long bouncebotaoMais;
unsigned long bouncebotaoMenos;
unsigned long bouncebotaoCancela;
unsigned long bouncebotaoManual;

int arqbmais;
int arqbmenos;
int arqbseletor;
int arqbinicio;
int arqbcancela;
int arqbmanual;

//variáveis dos botões

int botaoInicio;
int botaoSeletor;
int botaoMais;
int botaoMenos;
int botaoCancela;
int botaoManual;

// variáveis de tempo
byte minutosAgua;
byte minutosAdubo;
byte minutos;
unsigned long tempoAgora;
unsigned long tempoDesliga;
unsigned long tempoInicio;

//Variável de estado de irrigação
int irrigando = INATIVO;
byte modoIrrigacao;
byte autoManual;

byte Nrele;

int X = 1;
unsigned long Rtempo = 60000;//60000 pra minutos
int releAgora = 1;
int valvulaAgora = 21;

int valvula1 = TERMINADO;
int valvula2 = TERMINADO;
int valvula3 = TERMINADO;
int valvula4 = TERMINADO;
int valvula5 = TERMINADO;
int valvula6 = TERMINADO;
int valvula7 = TERMINADO;

void setup()
{

  //inicia serial
  //Serial.begin(9600);

  //inicia biblioteca wire
  Wire.begin();

  //configura as entradas
  pinMode(pinobotaoInicio, INPUT_PULLUP);
  pinMode(pinobotaoSeletor, INPUT_PULLUP);
  pinMode(pinobotaoMais, INPUT_PULLUP);
  pinMode(pinobotaoMenos, INPUT_PULLUP);
  pinMode(pinobotaoCancela, INPUT_PULLUP);
  pinMode(pinobotaoManual, INPUT_PULLUP);

  //configura saídas
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  pinMode(rele5, OUTPUT);
  pinMode(rele6, OUTPUT);
  pinMode(rele7, OUTPUT);
  /*
  pinMode(rele8, OUTPUT);
  pinMode(rele9, OUTPUT);
  pinMode(rele10, OUTPUT);
  pinMode(rele11, OUTPUT);
  pinMode(rele12, OUTPUT);
  pinMode(rele13, OUTPUT);
  pinMode(rele14, OUTPUT);
  pinMode(rele15, OUTPUT);
  pinMode(rele16, OUTPUT);
  pinMode(rele17, OUTPUT);
  pinMode(rele18, OUTPUT);
  pinMode(rele19, OUTPUT);
  pinMode(rele20, OUTPUT);
  */

   
  pinMode(bomba, OUTPUT);

  //desliga as saídas

  digitalWrite(rele1, VDESLIGADO);
  digitalWrite(rele2, VDESLIGADO);
  digitalWrite(rele3, VDESLIGADO);
  digitalWrite(rele4, VDESLIGADO);
  digitalWrite(rele5, VDESLIGADO);
  digitalWrite(rele6, VDESLIGADO);
  digitalWrite(rele7, VDESLIGADO);
  /*
  digitalWrite(rele8, VDESLIGADO);
  digitalWrite(rele9, VDESLIGADO);
  digitalWrite(rele10, VDESLIGADO);
  digitalWrite(rele11, VDESLIGADO);
  digitalWrite(rele12, VDESLIGADO);
  digitalWrite(rele13, VDESLIGADO);
  digitalWrite(rele14, VDESLIGADO);
  digitalWrite(rele15, VDESLIGADO);
  digitalWrite(rele16, VDESLIGADO);
  digitalWrite(rele17, VDESLIGADO);
  digitalWrite(rele18, VDESLIGADO);
  digitalWrite(rele19, VDESLIGADO);
  digitalWrite(rele20, VDESLIGADO);
  */
  digitalWrite(bomba, VDESLIGADO);


  //inicia LCD
  lcd.init();                 // Inicializando o LCD
  lcd.backlight();            // Ligando o BackLight do LCD
  lcd.setCursor(0, 0);
  lcd.print("                    ");
  lcd.setCursor(0, 1);
  lcd.print("                    ");


  /*//inicia oled
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //INICIALIZA O DISPLAY COM ENDEREÇO I2C 0x3C
    display.setTextColor(WHITE); //DEFINE A COR DO TEXTO
    display.setTextSize(1); //DEFINE O TAMANHO DA FONTE DO TEXTO
    display.clearDisplay(); //LIMPA AS INFORMAÇÕES DO DISPLAY
  */



  //lê a EEPROM
  if (EEPROM.read(AddAgua) <= tempomaxagua) {
    minutosAgua = EEPROM.read(AddAgua);
  }
  else {
    minutosAgua = 1;
  }
  if (EEPROM.read(AddAdubo) <= tempomaxadubo) {
    minutosAdubo = EEPROM.read(AddAdubo);
  }
  else {
    minutosAdubo = 1;
  }
  if (EEPROM.read(AddModo) == AGUA || EEPROM.read(AddModo) == ADUBO) {
    modoIrrigacao = EEPROM.read(AddModo);
  }
  else {
    modoIrrigacao = ADUBO;
  }
  if (EEPROM.read(AddManual) == Automatico || EEPROM.read(AddManual) == Manual) {
  autoManual = EEPROM.read(AddManual);
  }
  else {
    autoManual = Automatico;
  }
  if (EEPROM.read(AddNrele) >= 1 && EEPROM.read(AddNrele) <= 7) {
  Nrele = EEPROM.read(AddNrele);
  }
  else {
    Nrele = 1;
  }

}


/* código em loop
    le os botões com debounce se está inativo
    grava tempo no eeprom
    controla os reles se está ativo


*/
void loop()
{



  // Ler botões
  estadobotaoInicio = digitalRead(pinobotaoInicio);
  estadobotaoSeletor = digitalRead(pinobotaoSeletor);
  estadobotaoMais = digitalRead(pinobotaoMais);
  estadobotaoMenos = digitalRead(pinobotaoMenos);
  estadobotaoCancela = digitalRead(pinobotaoCancela);
  estadobotaoManual = digitalRead(pinobotaoManual);

  //debounce dos botões

  //inicio
  if (estadobotaoInicio != anteriorbotaoInicio) {
    bouncebotaoInicio = millis();
    anteriorbotaoInicio = estadobotaoInicio;
  }
  if (estadobotaoInicio == anteriorbotaoInicio) {
    if ((millis() - bouncebotaoInicio) > tempoDebounceLongo) {
      botaoInicio = estadobotaoInicio;
    }
  }

  //seletor
  if(autoManual==Automatico){
      if (estadobotaoSeletor != anteriorbotaoSeletor) {
        bouncebotaoSeletor = millis();
        anteriorbotaoSeletor = estadobotaoSeletor;
      }
      if (estadobotaoSeletor == anteriorbotaoSeletor) {
        if ((millis() - bouncebotaoSeletor) > tempoDebounce) {
          botaoSeletor = estadobotaoSeletor;
        }
      }
  }

    if(autoManual!=Automatico){
      if (estadobotaoSeletor != anteriorbotaoSeletor) {
        bouncebotaoSeletor = millis();
        anteriorbotaoSeletor = estadobotaoSeletor;
      }
      if (estadobotaoSeletor == anteriorbotaoSeletor) {
        if ((millis() - bouncebotaoSeletor) > tempoDebounceSuperLongo) {
          botaoSeletor = estadobotaoSeletor;
        }
      }
  }

  //Mais
  if (estadobotaoMais != anteriorbotaoMais) {
    bouncebotaoMais = millis();
    anteriorbotaoMais = estadobotaoMais;
  }
  if (estadobotaoMais == anteriorbotaoMais) {
    if ((millis() - bouncebotaoMais) > tempoDebounce) {
      botaoMais = estadobotaoMais;
    }
  }

  //Menos
  if (estadobotaoMenos != anteriorbotaoMenos) {
    bouncebotaoMenos = millis();
    anteriorbotaoMenos = estadobotaoMenos;
  }
  if (estadobotaoMenos == anteriorbotaoMenos) {
    if ((millis() - bouncebotaoMenos) > tempoDebounce) {
      botaoMenos = estadobotaoMenos;
    }
  }

  //cancela
  if (estadobotaoCancela != anteriorbotaoCancela) {
    bouncebotaoCancela = millis();
    anteriorbotaoCancela = estadobotaoCancela;
  }
  if (estadobotaoCancela == anteriorbotaoCancela) {
    if ((millis() - bouncebotaoCancela) > tempoDebounce) {
      botaoCancela = estadobotaoCancela;
    }
  }

  //Auto/manual

  if (estadobotaoManual != anteriorbotaoManual) {
    bouncebotaoManual = millis();
    anteriorbotaoManual = estadobotaoManual;
  }
  if (estadobotaoManual == anteriorbotaoManual) {
    if ((millis() - bouncebotaoManual) > tempoDebounce) {
      botaoManual = estadobotaoManual;
    }
  }




// se a irrigação estiver inativa:

  if (irrigando == INATIVO && autoManual != Ajuste) {

    if(autoManual==Automatico){
      
                      if (modoIrrigacao == AGUA) {
                      
                          //define tempos
                          if (arqbmais == BDESLIGADO && botaoMais == BLIGADO) {
                            if (minutosAgua < tempomaxagua) {
                              minutosAgua = minutosAgua + 1;
                              EEPROM.write(AddAgua, minutosAgua);
                            }
                  
                          }
                          if (arqbmenos == BDESLIGADO && botaoMenos == BLIGADO) {
                            if (minutosAgua > 1) {
                              minutosAgua = minutosAgua - 1;
                              EEPROM.write(AddAgua, minutosAgua);
                            }
                          }
                  
                        }
                  
                        if (modoIrrigacao == ADUBO) {
                  
                          if (arqbmais == BDESLIGADO && botaoMais == BLIGADO) {
                            if (minutosAdubo < tempomaxadubo) {
                              minutosAdubo = minutosAdubo + 1;
                              EEPROM.write(AddAdubo, minutosAdubo);
                            }
                  
                          }
                          if (arqbmenos == BDESLIGADO && botaoMenos == BLIGADO) {
                            if (minutosAdubo > 1) {
                              minutosAdubo = minutosAdubo - 1;
                              EEPROM.write(AddAdubo, minutosAdubo);
                            }
                          }
                        }
                      }

                  //Seletor automatico ou manual
                        if(autoManual!=Ajuste){
                                  if (arqbmanual == BDESLIGADO && botaoManual == BLIGADO) {
                                    if (autoManual == Automatico) {
                                      autoManual = Manual;
                                    }
                                    else {
                                      autoManual = Automatico;
                                    }
                                    EEPROM.write(AddManual,autoManual);
                                  }
                        }


                   //àgua ou adubo
                   if(autoManual==Automatico){
                        if(arqbseletor==BDESLIGADO&&botaoSeletor==BLIGADO){
                          if(modoIrrigacao==ADUBO){
                            modoIrrigacao=AGUA;
                          }
                          else {
                            modoIrrigacao=ADUBO;
                          }
                          EEPROM.write(AddModo,modoIrrigacao);
                        }
                   }

                   if(autoManual==Manual){
                        if(arqbseletor==BDESLIGADO&&botaoSeletor==BLIGADO){
                          autoManual=Ajuste;
                          EEPROM.write(AddManual,autoManual);
                        }
                        
                     }


                  
                        //ativa irrigação
                        if (arqbinicio == BDESLIGADO && botaoInicio == BLIGADO && autoManual != Ajuste) {

                          X = 1;
                          
                          irrigando = ATIVO;
                          
                          valvula1 = NAFILA;
                          valvula2 = NAFILA;
                          valvula3 = NAFILA;
                          valvula4 = NAFILA;
                          valvula5 = NAFILA;
                          valvula6 = NAFILA;
                          valvula7 = NAFILA;
                          /*
                          valvula8 = TERMINADO;
                          valvula9 = TERMINADO;
                          valvula10 = TERMINADO;
                          valvula11 = TERMINADO;
                          valvula12 = TERMINADO;
                          valvula13 = TERMINADO;
                          valvula14 = TERMINADO;
                          valvula15 = TERMINADO;
                          valvula16 = TERMINADO;
                          valvula17 = TERMINADO;
                          valvula18 = TERMINADO;
                          valvula19 = TERMINADO;
                          valvula20 = TERMINADO;
                          */

                          
                          if (modoIrrigacao == AGUA) {
                            minutos = minutosAgua;
                          }
                          if (modoIrrigacao == ADUBO) {
                            minutos = minutosAdubo;
                          }
                        }


                       
    }
    
    if(autoManual==Ajuste){
      
      if (arqbmais == BDESLIGADO && botaoMais == BLIGADO) {
                            if (Nrele < 7) {
                              Nrele = Nrele + 1;
                              EEPROM.write(AddNrele, Nrele);
                            }
      }
      if (arqbmenos == BDESLIGADO && botaoMenos == BLIGADO) {
                            if (Nrele > 1) {
                              Nrele = Nrele - 1;
                              EEPROM.write(AddNrele,Nrele);
                            }
      }
      if(arqbcancela==BDESLIGADO&&botaoCancela==BLIGADO){
            autoManual=Manual;
            EEPROM.write(AddManual,autoManual);                  
      }
    }

    //controle das saídas
    //permite cancelamento
    // inicia automático

    if (irrigando == ATIVO && autoManual==Automatico) {


      if(X < 8){
        if(X==1){
          valvulaAgora=valvula1;
          releAgora=rele1;
        }
        if(X==2){
          valvulaAgora=valvula2;
          releAgora=rele2;
        }
        if(X==3){
          valvulaAgora=valvula3;
          releAgora=rele3;
        }
        if(X==4){
          valvulaAgora=valvula4;
          releAgora=rele4;
        }
        if(X==5){
          valvulaAgora=valvula5;
          releAgora=rele5;
        }
        if(X==6){
          valvulaAgora=valvula6;
          releAgora=rele6;
        }
        if(X==7){
          valvulaAgora=valvula7;
          releAgora=rele7;
        }
        /*
        if(X==8){
          valvulaAgora=valvula8;
          releAgora=rele8;
        }
        if(X==9){
          valvulaAgora=valvula9;
          releAgora=rele9;
        }
        if(X==10){
          valvulaAgora=valvula10;
          releAgora=rele10;
        }
        if(X==11){
          valvulaAgora=valvula11;
          releAgora=rele11;
        }
        if(X==12){
          valvulaAgora=valvula12;
          releAgora=rele12;
        }
        if(X==13){
          valvulaAgora=valvula13;
          releAgora=rele13;
        }
        if(X==14){
          valvulaAgora=valvula14;
          releAgora=rele14;
        }
        if(X==15){
          valvulaAgora=valvula15;
          releAgora=rele15;
        }
        if(X==16){
          valvulaAgora=valvula16;
          releAgora=rele16;
        }
        if(X==17){
          valvulaAgora=valvula17;
          releAgora=rele17;
        }
        if(X==18){
          valvulaAgora=valvula18;
          releAgora=rele18;
        }
        if(X==19){
          valvulaAgora=valvula19;
          releAgora=rele19;
        }
        if(X==20){
          valvulaAgora=valvula20;
          releAgora=rele20;
        }
        */

        

        if (valvulaAgora == NAFILA) {
                            tempoInicio = millis();
                            valvulaAgora = INICIADO;
                            digitalWrite(releAgora, VLIGADO);
                            //lcd.setCursor(14,1);
                            //lcd.print(X);       
        }
                    
        if (valvulaAgora == INICIADO) {
                            if ((millis() - tempoInicio) > (minutos * Rtempo)) {
                              valvulaAgora = TERMINADO;
                              digitalWrite(releAgora, VDESLIGADO);                                                           
                            }
        }

                                                 
        if(X==1){
          valvula1=valvulaAgora;
        }
        if(X==2){
          valvula2=valvulaAgora;
        }
        if(X==3){
          valvula3=valvulaAgora;
        }
        if(X==4){
          valvula4=valvulaAgora;
        }
        if(X==5){
          valvula5=valvulaAgora;
        }
        if(X==6){
          valvula6=valvulaAgora;
        }
        if(X==7){
          valvula7=valvulaAgora;
        }
        /*
        if(X==8){
          valvula8=valvulaAgora;
        }
        if(X==9){
          valvula9=valvulaAgora;
        }
        if(X==10){
          valvula10=valvulaAgora;
        }
        if(X==11){
          valvula11=valvulaAgora;
        }
        if(X==12){
          valvula12=valvulaAgora;
        }
        if(X==13){
          valvula13=valvulaAgora;
        }
        if(X==14){
          valvula14=valvulaAgora;
        }
        if(X==15){
          valvula15=valvulaAgora;
        }
        if(X==16){
          valvula16=valvulaAgora;
        }
        if(X==17){
          valvula17=valvulaAgora;
        }
        if(X==18){
          valvula18=valvulaAgora;
        }
        if(X==19){
          valvula19=valvulaAgora;
        }
        if(X==20){
          valvula20=valvulaAgora;
        }
        */


        if (valvulaAgora == TERMINADO) {
                            X++;
                            //lcd.setCursor(14,1);
                            //lcd.print("  ");                           
        }

    }

    
    if(X>Nrele){
      irrigando = INATIVO;
      //lcd.setCursor(14,1);
      //lcd.print("  ");
    }

    }

    if (botaoCancela == BLIGADO) {
      //desativa irrigação
      irrigando = INATIVO;
    }

    if (irrigando == INATIVO) {
      digitalWrite(bomba, VDESLIGADO);

      valvula1 = TERMINADO;
      valvula2 = TERMINADO;
      valvula3 = TERMINADO;
      valvula4 = TERMINADO;
      valvula5 = TERMINADO;
      valvula6 = TERMINADO;
      valvula7 = TERMINADO;
      /*
      valvula8 = TERMINADO;
      valvula9 = TERMINADO;
      valvula10 = TERMINADO;
      valvula11 = TERMINADO;
      valvula12 = TERMINADO;
      valvula13 = TERMINADO;
      valvula14 = TERMINADO;
      valvula15 = TERMINADO;
      valvula16 = TERMINADO;
      valvula17 = TERMINADO;
      valvula18 = TERMINADO;
      valvula19 = TERMINADO;
      valvula20 = TERMINADO;
      */
      digitalWrite(rele1, VDESLIGADO);
      digitalWrite(rele2, VDESLIGADO);
      digitalWrite(rele3, VDESLIGADO);
      digitalWrite(rele4, VDESLIGADO);
      digitalWrite(rele5, VDESLIGADO);
      digitalWrite(rele6, VDESLIGADO);
      digitalWrite(rele7, VDESLIGADO);
      /*
      digitalWrite(rele8, VDESLIGADO);
      digitalWrite(rele9, VDESLIGADO);
      digitalWrite(rele10, VDESLIGADO);
      digitalWrite(rele11, VDESLIGADO);
      digitalWrite(rele12, VDESLIGADO);
      digitalWrite(rele13, VDESLIGADO);
      digitalWrite(rele14, VDESLIGADO);
      digitalWrite(rele15, VDESLIGADO);
      digitalWrite(rele16, VDESLIGADO);
      digitalWrite(rele17, VDESLIGADO);
      digitalWrite(rele18, VDESLIGADO);
      digitalWrite(rele19, VDESLIGADO);
      digitalWrite(rele20, VDESLIGADO);
      */
      lcd.setCursor(14,1);
      lcd.print("  ");  
    }


    
    if (irrigando == ATIVO) {
      digitalWrite(bomba, VLIGADO);
    }


       
                        //guarda o estado anterior dos botões
                        arqbmais = botaoMais;
                        arqbmenos = botaoMenos;
                        arqbseletor = botaoSeletor;
                        arqbinicio = botaoInicio;
                        arqbcancela = botaoCancela;
                        arqbmanual = botaoManual;
                  



  //print no LCD
  
  if (irrigando == ATIVO) {
    lcd.setCursor(7, 0);
    lcd.print("ativo    ");
    lcd.setCursor(14, 1);
    if(autoManual==Automatico){
          if(X>10){
            lcd.print("0");
          }
          lcd.print(X);
    }
    if(autoManual==Manual){
      lcd.print(" B");
    }
  }
  if (irrigando == INATIVO && autoManual != Ajuste) {
    lcd.setCursor(7, 0);
    lcd.print("inativo  ");
    lcd.setCursor(14, 1);
    lcd.print("  ");
  }

 if(autoManual==Automatico){   
  
                      lcd.setCursor(0,0);
                      lcd.print("Auto   ");
                      if (modoIrrigacao == AGUA) {
                        lcd.setCursor(0, 1);
                        lcd.print("Agua  ");
                        if (minutosAgua < 10) {
                          lcd.print(" ");
                        }
                        lcd.print(minutosAgua);
                        lcd.print(" min");

                      }

                      if (modoIrrigacao == ADUBO) {
                          lcd.setCursor(0, 1);
                          lcd.print("Adubo ");
                          if (minutosAdubo < 10) {
                            lcd.print(" ");
                          }
                          lcd.print(minutosAdubo);
                          lcd.print(" min");
                      }
 }

if(autoManual==Manual){
  lcd.setCursor(0,0);
  lcd.print("Manual ");
  lcd.setCursor(0,1);
  lcd.print("              ");
}

if(autoManual==Ajuste){
  lcd.setCursor(0,0);
  lcd.print("Ajuste de saidas");
  lcd.setCursor(0,1);
  lcd.print("Num. valv = ");
  lcd.print(Nrele);
  lcd.print("   ");
}

I'm using the same power supply for the arduino and the relay board, so, I have the ground connection...

For interference issues, a complete wiring diagram is almost necessary.

Also, what loads are you switching with the relays? What currents, voltages etc...? Have you tried using suppression techniques like "snubbers"?

Thank you!

I'm using the relay module I'm switching 24 Vac water valves and a 220Vac to power the contactor. A water pump is powered by the contactor. About 1~3 HP three phase pump. I did not try using snubbers, the most I've tried is to use capacitors to try to stabilize the power source input.

But the problems apear without the connecting the pump or the valves, I guess the main problem is the contactor (just guess).

The enigmatic thing is that one of the nano layout works just fine in the project but the other nano layout does not. My prototype is very simple as you can see in the picture:

Hi David, I checked and I've used the same "old bootloader" version on the Arduino IDE to load the nano arduino board. I've done this test today:

1 - loaded the same code to 2 arduinos (different layouts)
2 - used the same "mode" on the IDE (ATmega328P old bootloader)
3 - tested in the same equipment

As I've seen before, one of the versions works just fine and the other works, but it bugs some times. (one example of a bug is to reset by itself and other example is to stop working - no buttons works and the lcd freezes).

thank you all for the answers.

Please post a complete wiring diagram as requested in reply #16.

Does the supply provide enough current to do that?