Error en Arduino DUE con alimentación externa

Hola gente, a ver si me podéis decir que puede estar pasando

Tengo un programa en una placa Arduino DUE que envía una señal infrarroja para encender un aparato electrónico.

El programa funciona a la perfección conectado a través del usb-c al ordenador.

El problema:
Que cuando conecto el DUE con alimentación externa.
Por usb-c con transformador a 5v y 2A
Por conector externo a placa de 12v y 2A

La placa recibe alimentación, se enciende el LED de color verde la placa y se queda encendido de forma contínua el LED naranja.

Eso no ocurre con el conector usb-c al ordenador, pues el LED naranja solo se enciende cuando envía la señal al emisor IR.

Es quitar el usb-c del ordenador, poner o bien el usb-c del transformador a 5v, o el conector de la fuente externa a 12v y se queda el LED naranja contínuamente encendido y no se ejecuta el programa.

Alguien me puede decir que está pasando ?

Para realizar comprobaciones he instalado un LED externo en el pin 13 de la placa y hace exactamente los mismos destellos que el LED naranja de la placa.

#define IRledPin 2
#define NumIRsignals 76
#define IRpinPOWER 13

int IRsignal[] = {
  // ON, OFF (en 10's de microsegundos)
  920, 462,
  58, 56,
  58, 174,
  54, 56,
  58, 56,
  58, 172,
  56, 172,
  58, 56,
  56, 56,
  58, 172,
  56, 56,
  58, 172,
  58, 172,
  56, 56,
  58, 56,
  58, 170,
  58, 172,
  58, 56,
  56, 172,
  58, 56,
  56, 58,
  56, 56,
  58, 56,
  58, 56,
  58, 56,
  56, 172,
  58, 56,
  58, 170,
  58, 172,
  56, 172,
  58, 172,
  56, 172,
  58, 172,
  56, 4090,
  920, 258,
  58, 3222,
  920, 258,
  56, 3224,
  920, 258,
  56, 3222,
  920, 258,
  58, 0
};

bool signalSent = false;  // Variable para controlar si se ha enviado la señal

void pulseIR(long microsecs) {
  for (int i = 0; i < microsecs / 26; i++) {
    digitalWrite(IRledPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(IRledPin, LOW);
    delayMicroseconds(10);
  }
}

void setup() {
  pinMode(IRpinPOWER, OUTPUT); // Configurar el pin 13 como salida para el LED
  digitalWrite(IRpinPOWER, LOW); // Apagar el LED al inicio
  pinMode(IRledPin, OUTPUT);

  digitalWrite(IRledPin, LOW);
  Serial.begin(9600);  // Inicializar la comunicación serial
  Serial.println("Inicio del programa !");
}

void loop() {
  digitalWrite(IRpinPOWER, HIGH); // Encender el LED
  delay(100); // Esperar un instante (para una pulsación)
  digitalWrite(IRpinPOWER, LOW); // Apagar el LED

  Serial.println("Sistema Arduino iniciado !");

  digitalWrite(IRpinPOWER, HIGH); // Encender el LED
  delay(3000); // Esperar Tres segundos con LED encendido
  digitalWrite(IRpinPOWER, LOW); // Apagar el LED

  //Esperamos cinco segundos a que se inicie el sistema
  delay(2000);
  if (!signalSent) {
      
    for (int i = 0; i < NumIRsignals; i += 2) {
      pulseIR(IRsignal[i] * 10);
      delayMicroseconds(IRsignal[i + 1] * 10);
    }
    Serial.println("Enviada señal de Encendido !");

    for (int i = 0; i < 5; i++) {
      digitalWrite(IRpinPOWER, HIGH); // Encender el LED
      delay(100); // Esperar un instante (para una pulsación)
      digitalWrite(IRpinPOWER, LOW); // Apagar el LED
      delay(100); // Esperar un instante (para una pulsación)
    }

    delay(2000);  // Esperar dos segundos

    // Enviar la señal por segunda vez
    for (int i = 0; i < NumIRsignals; i += 2) {
      pulseIR(IRsignal[i] * 10);
      delayMicroseconds(IRsignal[i + 1] * 10);
    }
    
    Serial.println("Enviada segunda señal de Encendido !");

    for (int i = 0; i < 5; i++) {
      digitalWrite(IRpinPOWER, HIGH); // Encender el LED
      delay(100); // Esperar un instante (para una pulsación)
      digitalWrite(IRpinPOWER, LOW); // Apagar el LED
      delay(100); // Esperar un instante (para una pulsación)
    }

    signalSent = true;  // Marcar que la señal ha sido enviada
  }
  while (1);  // Esto detendrá el programa después de enviar la señal dos veces
}

Un saludo y muchas gracias

Cuando alimentas con fuente externa mantienes el cable usb-c al ordenador?

No, cuando lo intento con la alimentación externa, quito el cable usb-c

Al final me dí por vencido y casi que mejor, pues lo hice con un Arduino Nano. ahora funciona todo perfecto.

código para Arduino Nano:

#define IRledPin 3 
#define NumIRsignals 76
#define IRpinPOWER 5

int IRsignal[] = {
  // ON, OFF (en 10's de microsegundos)
  920, 462,
  58, 56,
  58, 174,
  54, 56,
  58, 56,
  58, 172,
  56, 172,
  58, 56,
  56, 56,
  58, 172,
  56, 56,
  58, 172,
  58, 172,
  56, 56,
  58, 56,
  58, 170,
  58, 172,
  58, 56,
  56, 172,
  58, 56,
  56, 58,
  56, 56,
  58, 56,
  58, 56,
  58, 56,
  56, 172,
  58, 56,
  58, 170,
  58, 172,
  56, 172,
  58, 172,
  56, 172,
  58, 172,
  56, 4090,
  920, 258,
  58, 3222,
  920, 258,
  56, 3224,
  920, 258,
  56, 3222,
  920, 258,
  58, 0
};

bool signalSent = false;  // Variable para controlar si se ha enviado la señal

void pulseIR(long microsecs) {
  for (int i = 0; i < microsecs / 26; i++) {
    digitalWrite(IRledPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(IRledPin, LOW);
    delayMicroseconds(10);
  }
}

void setup() {
  pinMode(IRpinPOWER, OUTPUT);
  digitalWrite(IRpinPOWER, LOW);
  pinMode(IRledPin, OUTPUT);

  digitalWrite(IRledPin, LOW);
  Serial.begin(9600);
  Serial.println("Inicio del programa !");
}

void loop() {
  digitalWrite(IRpinPOWER, HIGH);
  delay(100);
  digitalWrite(IRpinPOWER, LOW);

  Serial.println("Sistema Arduino iniciado !");

  digitalWrite(IRpinPOWER, HIGH);
  delay(3000);
  digitalWrite(IRpinPOWER, LOW);

  delay(2000);
  if (!signalSent) {
    for (int i = 0; i < NumIRsignals; i += 2) {
      pulseIR(IRsignal[i] * 10);
      delayMicroseconds(IRsignal[i + 1] * 10);
    }
    Serial.println("Enviada señal de Encendido !");

    for (int i = 0; i < 5; i++) {
      digitalWrite(IRpinPOWER, HIGH);
      delay(100);
      digitalWrite(IRpinPOWER, LOW);
      delay(100);
    }

    delay(2000);

    for (int i = 0; i < NumIRsignals; i += 2) {
      pulseIR(IRsignal[i] * 10);
      delayMicroseconds(IRsignal[i + 1] * 10);
    }
    
    Serial.println("Enviada segunda señal de Encendido !");

    for (int i = 0; i < 5; i++) {
      digitalWrite(IRpinPOWER, HIGH);
      delay(100);
      digitalWrite(IRpinPOWER, LOW);
      delay(100);
    }

    signalSent = true;
  }
  while (1);
}


Un saludo y gracias por la atención

Hombre hacer con un DUE lo que hace un NANO? La diferencia de potencia y precio es enorme entre ambos.
Deja el DUE para algo que requiera mucho procesamiento, memoria, almacenamiento, toma de datos a alta velocidad, cantidad de puertos serie. No son comparables por nada.

Lo sé Surbyte, pero lo tenía a mano y lo podía probar de forma inmediata, y ya sabes, a veces por no esperar, tiras de lo primero que encuentras aunque no sea lo más indicado.

En el transcurso del problema y las vueltas para intentar depurarlo, decidí pedir a China un par de nano y al final como comenté en mi resolución, lo dejé funcionando ahora sin problema de arranque.

Eso sí, me sigue picando la curiosidad del problema del DUE que sigo sin entender

chequeaste tensiones cuando lo alimentas con fuente externa. Digo en los terminales del DUE?

Si sí, me daba los voltajes correctos de 5v, lo que no pude comprobar fue el amperaje

No importa. No se que decirte pero me han pasado cosas raras tmb a mi. Por raras quiero decir, cosas que no he podido determinar que las provoca.

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