Perdida de comunicacion entre Arduino y PC al conectar DC motor

Hola,
Les comento mi situación:
En base al tutorial "DC motor" (con el L293D) hice otro script en el cual controlo la velocidad del motor con un potenciometro, ademas cambio el sentido de giro con un pulsador y el serial monitor me muestra el nivel de señal que llega a la placa (ATmega 2560) desde el potenciometro (en porcentaje) simulando la velocidad del motor.
Sin estar conectado el motor al circuito no tengo ningún problema: en el serial monitor puedo ver como varia el nivel de señal a medida que giro el poteniometro.
Cuando conecto el motor al circuito, al cabo de unos instantes el serial monitor deja de recibir datos aunque la placa sigue estando alimentada (el motor gira, puedo variar su velocidad y cambiar su sentido de giro); intento subir nuevamente el script (se compila bien) pero ya no lo puedo cargar en la placa y me arroja el siguiente error:

el puerto seleccionado avrdude: stk500v2_getsync(): timeout communicating with programmer

Supongo que el nivel de corriente que circula cuando conecto el motor genera el fallo en la comunicación.

No creo que sea un problema del script que hice porque el problema también surge cuando cargo el script del tutorial original.

Espero alguien puede ayudarme.

Saludos,

El tema es que si alimentas un motor desde el Arduino te pueden pasar estas cosas. Por eso el L293D u otro shield de motores debe usarse con fuente externa para el motor y compartir siempre GND entre el Arduin y la fuente externa del motor para su correcto funcionamiento.

Hola surbyte,

Antes que nada, muchas gracias por tu ayuda y tu buena onda !!

Probé lo que me comentaste pero el problema continua:

1.- Utilice un trafo que entrega 6 VDC, conecte el polo positivo a Vcc2 del L293D y el polo negativo a la tierra común del circuito. El motor comenzó a funcionar y podía ver cambiar el nivel de señal del potenciometro en el serial monitor, pero a los pocos segundos ya no se actualizaban los valores en el serial monitor, se perdió la comunicación aunque el motor seguía girando, podía variar la velocidad y el sentido de giro; luego intente volver a subir el script pero ya me arrojaba el mismo error:

avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
el puerto seleccionado avrdude: stk500v2_getsync(): timeout communicating with programmer
no existe o tu placa no esta conectada
Error al configurar los parámetros del puerto serial: 9.600 N 8 1

Para poder volver a tener comunicacion entre la PC y la placa tengo que desconectar y volver a conectar el cable usb varias veces.
No se si hay riesgo de dañar la PC o la placa si es que sigo probando hacer funcionar sin interrupciones el motor.

2.- El motor DC que tengo es el que me vino en el KIT arduino que compre y como es exactamente igual al que figura en el tutorial suponía que la placa iba a poder alimentarlo sin mayores problemas.

3.- Si subo cualquier otro script a la placa arduino, por ejemplo alguno de leds (o sea cualquiera que no tenga motor) no tengo problemas de comunicación en ningún momento.

Saludos,

Que arduino y que pines estas usando para contolar el L293?

Coloca todo el código usando etiquetas. Si no sabes lee las normas y si sigues sin entender mira otros hilos y usa preview para asegurarte que postearás correctamente.

Hola,

El arduino que tengo es ATmega 2560.

A continuación el código:

int inputValue;
int outputValue;
int c;
int potencia;

void setup()
{
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(22,INPUT);
Serial.begin(9600);
}

void loop()
{
if(digitalRead(22)==HIGH)
//Presionar pulsador
//para arrancar motor
{
delay(600);
c=1;  
}
while(digitalRead(22)==LOW)
{ 
if(c==1)
{ 
inputValue = analogRead(A0);
outputValue = map(inputValue,0,1023,255,0);
potencia = map(inputValue,0,1023,100,0);
Serial.print("Potencia: ");
Serial.print(potencia);
Serial.println(" %");
clockwise(outputValue);
delay(200);
}
if(digitalRead(22)==HIGH)break;
//Presionar pulsador
//nuevamente para
//cambiar de sentido
} 
delay(600);
c=2;
while(digitalRead(22)==LOW)
{ 
if(c==2)
{
inputValue = analogRead(A0);
outputValue = map(inputValue,0,1023,255,0);
potencia = map(inputValue,0,1023,100,0);
Serial.print("Potencia: ");
Serial.print(potencia);
Serial.println(" %");
counterclockwise(outputValue);
delay(200);
}
if(digitalRead(22)==HIGH)break;
//Presionar pulsador
//nuevamente para
//cambiar de sentido
} 
delay(600);
c=1;
} 

void clockwise(int Speed)
{
analogWrite(9,Speed);
analogWrite(10,0);

}
void counterclockwise(int Speed)
{
analogWrite(9,0);
analogWrite(10,Speed);
}

A continuación las conexiones que realice:

5V a L293D-Vcc1
5V a L293D-1,2EN
P9 a L293D-1A
L293D-1Y a Motor-I
L293D-HS&GNDI4 a GND
L293D-HS&GNDI5 a GND
L293D-2Y a Motor-D
P10 a L293D-2A
Fuente externa 6v terminal positivo a L293D-Vcc2
Fuente externa 6v terminal negativo a GND

5V a POT-I
GND a POT-D
A0 a POT-C

5V a BUT
BUT a R2-10K
R2-10K a GND
BUT a P22

Saludos,