Due L293D e due motori: errore LED

Ciao a tutti, sto facendo una macchinina "autonoma", ma prima di aggiungerci il sensore ad ultrasuoni devo prima di tutto assicurarmi che la parte "meccanica/elettronica" dell'auto sia funzionante. Cosa che non è.

Praticamente, uso un Arduino UNO R3 (originale), una mini-breadboard, e due L293D.
La macchinina è composta da due motori: quello principale da 6/9V per le ruote motrici e quello per lo sterzo (fungendo a mo' di servo) da 3/5V.
Uso due integrati (che chiameremo int1 ed int2 rispettivamente per quello del motore principale e quello dello sterzo) perchè i due motori necessitano di tensione differente (probabilmente esiste qualche modo per abbassare la tensione che va al motore più piccolo, tramite resistenze o altro, ma non lo conosco).

Il problema è questo: (a) quando alimento Arduino con una batteria da 9V, ed int1 con il pin8 (Vcc) collegato al "Vin" di Arduino, il LED integrato in Arduino al pin13 da errore e si mette a lampeggiare.
(b) Se invece collego il Vcc di int1 al normale 5V di Arduino, ed alimento il tutto tramite cavo USB, "funziona perfettamente" (nel senso che lo sketch viene eseguito correttamente ed i componenti rispondono in modo corretto, seppur molto più debole a causa della tensione troppo bassa, inoltre in questo caso il LED del pin13 rimane acceso fisso).
(c) Se invece torno ad usare la batteria esterna ed il Vcc lo collego ai 5V di Arduino, per due secondi il LED del pin13 rimane acceso e lo sketch viene eseguito (sento il rumore del motore di sterzo che si muove, seppur non abbia abbastanza potenza da far sterzare le ruote) mentre il motore principale rimane fermo, e dopo due secondi il LED del pin13 comincia a lampeggiare e tutto ritorna come al punto "a".

Sapete dirmi perchè?
Ed eventualmente come risolvere, o se ci sono modi più "ottimizzati" per realizzare il tutto?
Grazie mille! :grin:

Di seguito riporto il codice, anche se non credo serva a qualcosa)

const int motorAPin1 = 3;
const int motorAPin2 = 4;
const int motorBPin1 = 6;
const int motorBPin2 = 7;

void setup() {
pinMode(motorAPin1, OUTPUT);
pinMode(motorAPin2, OUTPUT);
pinMode(motorBPin1, OUTPUT);
pinMode(motorBPin2, OUTPUT);
}

void loop() {
avanti();
sinistra();
delay(2000);
destra();
delay(2000);
ferma();
neutro();
delay(1000);
indietro();
delay(1500);

}

void ferma() {
digitalWrite(motorAPin1, LOW);
digitalWrite(motorAPin2, LOW);
}

void avanti() {
digitalWrite(motorAPin1, LOW);
digitalWrite(motorAPin2, HIGH);
}

void indietro() {
digitalWrite(motorAPin1, HIGH);
digitalWrite(motorAPin2, LOW);
}

void neutro(){
digitalWrite(motorBPin1, LOW);
digitalWrite(motorBPin2, LOW);
}

void sinistra() {
digitalWrite(motorBPin1, HIGH);
digitalWrite(motorBPin2, LOW);
}

void destra() {
digitalWrite(motorBPin1, LOW);
digitalWrite(motorBPin2, HIGH);
}

Un piccolo video magari per aiutarvi a capire cosa intendo: - YouTube

Il Tuo sketch non usa il LED al pin 13 percui non puó lampeggiare. Il Bootlaoder usa il PIN 13 e viene attivato dopo ogni RESET o accensione.

Hai la batteria 9V scarica oppure é troppo debole e la tensione va in cantina quando vuoi muovere un motore?
Ma i motori si muovono se tieni le ruote sollevate?

Ciao Uwe

Quindi va in "crash" e continua ad auto-resettarsi, facendo lampeggiare continuamente il LED?
La batteria non mi pare scarica, dovrebbe stare a 7V.

E comunque è normale che invece via USB vada?

I motori si muovono, piano, se tengo le ruote sollevate ed alimento via USB.
Via batteria non fa proprio niente.

Grazie mille ^^

matteventu:
La batteria non mi pare scarica, dovrebbe stare a 7V.

Devi pensare che entrando dal jack di alimentazione, hai una caduta di tensione (introdotta dal regolatore e dal diodo di protezione) sui 2V circa. Quindi devi fornire al jack almeno 2V sopra ai 5V, che è la tensione regolata che il regolatore della scheda fornisce.
Con 7V sei preciso, se con la stessa batteria comandi anche il resto del circuito, la batteria può subire un calo ulteriore ed andare a livelli tali per cui non eroga più una tensione sufficiente ad avere i 5V per l'Arduino, ed il chip va in crisi autoresettandosi a caso.

La batteria non mi pare scarica, dovrebbe stare a 7V.

é un affermazione che Arduino su Vin ha bisogno di almeno 7V o che la Battera da 7V?

Credimi ,una batteria 9V anche carica é troppo debole per alimentare i motori.

Ciao Uwe

Intendevo che la batteria è a 7V attualmente xD

Ma se anche una da 9V carica al 100% dite che non è abbastanza, com'è possibile che invece con l'alimentazione 5V via USB funzioni? O_o

Come ti ho spiegato più sopra... basta un assorbimento maggiore che la batt non riesce più a garantire la tensione che ora stai leggendo senza carico. Devi usare una batt più carica oppure un altro tipo di batteria, che possa garantire corrente sufficiente sia per l'Arduino che per il circuito che stai alimentando. Considera che la porta USB fornisce anche 500 mA mentre una classica batteria ricaricabile da 9V arriva intorno ai 200 mA. Che possono scendere se non è pienamente carica,

Caspita, alla differenza di corrente fra la porta USB e la batteria non avevo proprio pensato, che idiota :-/

Quindi se usassi un pacco batterie di 4 stilo 1.5V dovrei farcela, no?

Da jack? No, devi dare minimo 7V, quindi usa 5 stilo da 1V5 (1,5*5=7,5).
Se sono ricaricabili, considera che hanno una tensione inferiore, quindi usane 6 o 7.

matteventu:
Intendevo che la batteria è a 7V attualmente xD

Ma se anche una da 9V carica al 100% dite che non è abbastanza, com'è possibile che invece con l'alimentazione 5V via USB funzioni? O_o

Una batteria da 9V che ha 7V a vuoto (senza carico) é piú che scarica; é asciutta. Ok l' ultima batteria che ho tirato fuori dal tester aveva 3,4V e il tester non si accendeva,ma questo non fa testo.

Quando i motori chiedono corrente la Tua batteria avrá sotto 3V e Arduino si resetta per sottotensione.

Ciao Uwe