Fadings de leds pero algo falla y se quema la placa Arduino Nano

HOla!!
Espero que alguien me pueda ayudar, porque llevo tiempo sin encontrar la solución y he quemado ya varias placas Nano clonicas. En cambio cuando uso una placa UNO R3 para este mismo proyecto funciona perfectamente. Pero necesito usar esta aplicación con placa Nano.

Este proyecto consiste en tener un led RGB ánodo común (positivo en común) haciendo un efecto fading conectado a los pines PWM 11(rojo), 10(verde) y 9(azul).
Por otro lado 8 leds en paralelo conectados al pin PWM 5 y otros 4 leds en paralelo conectados al pin PWM 3 haciendo cada grupo un efecto de fading.

Lo tengo conectado así:

Y el código es el siguiente:

#define BLUE 9
#define GREEN 10
#define RED 11
#define LEDS_INT 5
#define LEDS_EXT 3

#define interval 10

int potencia_e = 0;
int potencia_i = 0;
int potencia_r = 0;
int potencia_g = 0;
int potencia_b = 0;

long previousMillis = 0;
long cont_interval_e = 0;
long cont_interval_i = 0;
long cont_interval_c = 0;
int tarea = 0;
unsigned long startMillis = millis();

void setup() {

  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED, OUTPUT);
  pinMode(LEDS_INT, OUTPUT);
  pinMode(LEDS_EXT, OUTPUT);
  
   
    analogWrite( RED, 255 - potencia_r );
    analogWrite( GREEN, 255 - potencia_g );
    analogWrite( BLUE, 255 - potencia_b );
    analogWrite(LEDS_EXT, potencia_e);
    analogWrite(LEDS_INT, potencia_i);
    
  Serial.begin(9600);
  Serial.println("reset");
  
}

 
void loop() {
  
    unsigned long currentMillis = millis();    // Se toma el tiempo actual
    
    if (currentMillis - previousMillis > interval){
      
      previousMillis = currentMillis;
      
      
      if(tarea == 0){ // tarea centro
        cont_interval_c++;
        
        analogWrite( RED, 255 - potencia_r );
        analogWrite( GREEN, 255 - potencia_g );
        analogWrite( BLUE, 255 - potencia_b );
        
        if(cont_interval_c > 20 && cont_interval_c < 275 && potencia_r < 255 && potencia_g < 255 && potencia_b < 255){ //suben todos
          potencia_r++;
          potencia_g++;
          potencia_b++;
        }
        
        if(cont_interval_c > 276 && cont_interval_c < 531 && potencia_r > 0){ //baja R
          potencia_r = potencia_r - 2;
        }
        
        if(cont_interval_c > 531 && cont_interval_c < 786 &&potencia_r < 253){ //sube R
          potencia_r = potencia_r + 2;
        }
        
        if(cont_interval_c > 786 && cont_interval_c < 1041 && potencia_b > 0){ //baja B
          potencia_b = potencia_b - 2;
        }
        
        if(cont_interval_c > 1041 && cont_interval_c < 1296 &&potencia_b < 253){ //sube B
          potencia_b = potencia_b + 2;
        }
        
        if(cont_interval_c > 1200 && cont_interval_c < 1455 && potencia_g > 0){ //baja G
          potencia_g = potencia_g - 2;
        }
        
        if(cont_interval_c > 1455 && cont_interval_c < 1710 && potencia_g < 253){ //sube G
          potencia_g = potencia_g + 2;
        }
        
        if(cont_interval_c == 1712){
          potencia_r = 255;
          potencia_g = 255;
          potencia_b = 255;
          Serial.println("--------- ++++++++ 1712 +++++++ ---------");
        }
       
        if(cont_interval_c > 1712 && cont_interval_c < 1969 && potencia_r > 0 && potencia_g > 0 && potencia_b > 0){ //baja todos
          potencia_r--;
          potencia_g--;
          potencia_b--;
        }
        
        if(cont_interval_c == 1970){
          potencia_r = 0;
          potencia_g = 0;
          potencia_b = 0;
        }
        
        Serial.print("r:"); Serial.print(potencia_r); Serial.print(" g:"); Serial.print(potencia_g); Serial.print(" b:"); Serial.print(potencia_b);
        Serial.println();
        Serial.print("in:"); Serial.print(potencia_i); Serial.print("  ex:"); Serial.print(potencia_e);
        Serial.println();
        
        Serial.println(cont_interval_c);
      }
      
      
      
      if(tarea == 1){ // tarea interior
        cont_interval_i++;

        analogWrite(LEDS_INT, potencia_i);
        
        if(cont_interval_i > 270 && cont_interval_i < 525 && potencia_i < 255){
          potencia_i++;
        }
        
        if(cont_interval_i > 1750 && cont_interval_i < 2005 && potencia_i > -1){
          potencia_i--;
        }
        
      }
      
     
      if(tarea == 2){ // tarea exterior
        cont_interval_e++;

        analogWrite(LEDS_EXT, potencia_e);
        if(cont_interval_e > 350 && cont_interval_e < 605 && potencia_e < 255){
          potencia_e++;
        }
        
        if(cont_interval_e > 1800 && cont_interval_e < 2055 && potencia_e > -1){
          potencia_e--;
        }
        
      }
      
      
      
      if(tarea != 2)
        tarea++;
      else
        tarea = 0;
        

    }
  

    
    if (cont_interval_c > 2060){
      cont_interval_e = 0;
      cont_interval_i = 0;
      cont_interval_c = 0;
    }
      
   

}

Creo que mas que de código debe de ser problema de como lo conecto, pero lo he probado ya varias veces, por partes y lo mismo, se termina estropeando cada placa.

Ayuda por favor!! :sob:
Gracias

Saludos
Desde mi punto de vista es sobre carga al Arduino, el Arduino solo puede entregar 200mA por puerto a la vez.

Si llegases a encender todo tu circuito tendras aprox 300 mA. Tienes que usar el arduino para controlar y no para alimentar. Asi que usa fuente externa y transistores o mosfet.

Gracias Max!!
Podrías indicarme algún enlace que me sirva de ejemplo a lo que dices. En principio no se como podría alimentar a parte y usar el arduino solo para controlar...

Podría ser como referencia esta imagen

Muchas gracias!! :slight_smile:

Me pongo manos a la obra para investigar esto con tus instrucciones.

SAlud!!