Robot che si impenna :\

Salve a tutti ho un robot car , piloto due motorini elettrici con una L298 a 12volt... Ho uno chassis... ma ho un problema ...e mi viene anche da ridere... :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: Quando vado a premere avanti, il robot, comincia a girare velocemente su se stesso... eppure girano le ruote.... mentre quando premo indietro si impenna XD è possibile regolare l'accelerazione di questi motorini elettrici? ecco il codice...

if(mySerial.available() > 0){
    state = mySerial.read();
  }

  if(state == '0')Avanti();
....
void Avanti(){
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);

}

Volendo dargli la 5v va a rilento però non posso perchè gestisco il servo, ultrasuoni, bluetooth... sheild.. Il problema è: parte troppo veloce.... Grazie

Schema elettrico?

Non so come farvelo avere… vediamo un po se riesco a spiegarmi…
Arduino è alimentato a 12V con una batteria…
Arduino duemilanove…
L’unico problema è che parte troppo veloce e si impenna :
Messa in allegato

Per quanto riguarda la rotazione, evidentemente i due motori non ruotano nella stessa direzione: basta invertire la polarità di uno dei.

Ma questo dovrebbe accadere anche quando premi "indietro".

Per la variazione di velocità potresti usare la modulazione PWM.

Per farlo, però, devi usare due coppie di pin tra 3, 5, 6, 9, 10 e 11.

Ciao la rotazione mi funziona perfettamente tutto... non riesco a variare la velocità... potresti dirmi passo passo come e dove collegare gli EN ? Auqnato ho capito devo giocare con quelli e potresti farmi uno schizzo di codice per capire? Grazie gentilissimi :)

ciao

… e dove collegare gli EN ?

Devi collegarli a dei pin che puoi comandare in PWM (quelli suggeriti da cyberhs),
poi per regolare la velocita utilizzi analogWrite .

ciao
pippo72

Si grazie, avendo due motorini ho EN A ed EN B. Volendo avere la stessa velocità ho ponticellato en A ed en B e da en b ho fatto uscire un filo che va al pin digitale... ho provato con analogread nel seguente modo:

void setup(){
....
.... 
pinMode(8,OUTPUT);
}

void Avanti(){

  analogWrite(8,100);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);

}

ma nulla da fare....con questo codice sento i motorini che fanno..."tiiiiiiiiiiiiiiiiiiiiiii" come se fosse poca la corrente... (con i 5v) se metto un alimentatore esterno mi partono al fondo... con i 12v e anche cambiando in : analogWrite(8,20); partono sempre al fondo... :astonished: :grin: aiutino grazie!

ciao Sei un po' distratto :fearful: :fearful: il pin 8 NON è PWM.

Per farlo, però, devi usare due coppie di pin tra 3, 5, 6, 9, 10 e 11.

scusa, ma cosa intendi per

mi partono al fondo

ciao pippo72

Si allora scusami mi sono espresso male…
Vi do pi√Ļ info‚Ķ

Ho una batteria da 12V

Batteria >> Arduino >> L298N
l’298 ha un morsetto chiamato 12v e li ci ho collegato un filo che va al VIN di arduino, quindi ho in tutto il circuito 12 volt.

Adesso ho ponticellato EN A con EN B e fatto partire un cavo da EN B che va a finire nel pin digitale 9 quindi ricapitolando:

12V L298N > VIN ARDUINO
GND L298N > GND ARDUINO
IN1 > PIN 2 ARDUINO
IN2 > PIN 3 ARDUINO
IN3 > PIN 4 ARDUINO
IN4 > PIN 5 ARDUINO
(ENA ‚Üź e ‚Üí EN B ) > PIN 9 ARDUINO
usando questo codice…

/* MOTORI */
#define IN1 2
#define IN2 3

#define IN3 4
#define IN4 5
....
void setup(){
 /* MOTORI */
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(9,OUTPUT);
}
....
void Avanti(){
 
  analogWrite(9,100);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);

}

così riesco ad alternare la velocità… PERÒ…PERÒ… solo se stacco la batteria 12 volt la velocità mi varia…

  analogWrite(9,50);

se il tutto lo faccio funzionare con la 12 volt parte sempre alla velocità massima e il robot mi si impenna…
In sintesi riesco ad abbassare velocità ma SOLO con la 5v. Se invece collego tutto alla 12V non fa nessun effetto… e parte velocissimo.
Spero mi sia spiegato…
Grazie
EDIT: leggendo in giro un utente inglese aveva il mio stesso problema credo e sentivo parlare di mosfet e transistor …???
Come posso risolvere questa cosa?

ciao.
scusa ma non riesco a capire. Ma come alimenti il tutto quando dici

solo se stacco la batteria 12 volt la velocità mi varia…

Se togli la batteria dal morsetto 12v del L298N questo non dovrebbe proprio funzionare.
Inoltre come alimenti l’arduino quando togli la batteria? Da dove arrivano i 5volts?

ciao
pippo72

roxdragon: Adesso ho ponticellato EN A con EN B e fatto partire un cavo da EN B che va a finire nel pin digitale 9 quindi ricapitolando:

C'√® un "piccolo" problema, gli enable dei 29x non sono per il PWM, servono per spegnere il ponte, applicare il pwm su quei pin porta a bassissima efficienza del ponte e surriscaldamento dello stesso. Il pwm va applicato a IN1+IN2 sfasato di 180¬į, stessa cosa per IN3 e IN4, usando il modo LAP, per√≤ occorre alzarne la frequenza fino ad almeno 4-5 kHz, per sfasare i due segnali PWM, uno per ogni motore, basta usare un inverter o un transistor. Chiunque afferma che i 298 funzionano con il PWM sul enable non ha capito nulla di come vanno usati quei ponti, questo vale anche per diverse motor shield commerciali che evidentemente sono state progettate da incompetenti. Se controlli il ponte utilizzando gli IN tramite pin digitali usi il 298 come se fosse un deviatore, √® normale che i motori schizzano alla massima velocit√†, √® come se li colleghi direttamente alla batteria invertendo i poli per cambiare il senso di rotazione.

pippo72: ciao. scusa ma non riesco a capire. Ma come alimenti il tutto quando dici

solo se stacco la batteria 12 volt la velocità mi varia...

Se togli la batteria dal morsetto 12v del L298N questo non dovrebbe proprio funzionare. Inoltre come alimenti l'arduino quando togli la batteria? Da dove arrivano i 5volts?

ciao pippo72

Alimento tutto questo cosi: Ho una batteria da 12V e questa va collegata all'alimentazione di arduino (cavo rotondo) e così ho arduino a 12v. Dal Vin di arduino faccio partire un filo che va ai 12V della L298N. La batteria alimenta arduino e arduino alimenta la l298n - Arduino quando tolgo la batteria lo alimento a 5v con USB.


@astrobeed scusa ma allora come dovrei variare la velocità...? non sto capendo ne i collegamenti, ne se posso dagli EN ! Potreste farmi un esempio pratico? Grazie mille...

ciao

Chiunque afferma che i 298 funzionano con il PWM sul enable non ha capito nulla di come vanno usati quei ponti

Sicuramente io sono tra quelli =( =( =(
A parziale discolpa confesso che mi sono fidato di informazioni prese googlando non mi ricordo neanche dove… :cold_sweat:

@roxdragon: EN1 e EN2 collegati ai 5volts, il resto come suggerito da astrobeed.

ciao
pippo72

roxdragon: @astrobeed scusa ma allora come dovrei variare la velocità...? non sto capendo ne i collegamenti, ne se posso dagli EN ! Potreste farmi un esempio pratico? Grazie mille...

Dagli enable no. Il PWM va applica agli input presi a coppie con lo stesso segnale sfasato di 180¬į, per√≤ devi alzare la frequenza del pwm, 490 Hz sono troppo pochi.

Se devo essere sincero. ..ho un po di confusione perché prima avevo collegato en a ed en b entrambi ai 5v ma nessun pin al pwm 9...risultato? Non funzionava.

Astrobeed che significa sfasato di 180 gradi? Potreste spiegarmi in parole pi√Ļ semplici come posso fare? Sono un po ignorante in materia. Grazie

Lo devi collegare come da immagine, enable A e enable B li puoi sia tenere fissi a 5V che pilotarli con un pin se vuoi spegnere il ponte. Input 1 e Input 2 vanno a due pin PWM, attenzione che in LAP mode col PWM al 50% (127) il motore è fermo, con il 100% (255) gira a piena velocità in un verso, con 0% 80) gira a piena velocità in senso opposto, con i vari valori intermedi regoli la velocità. Sensing A e Sensing B servono per il feedback corrente, se il tuo non lo prevede non è importante, se è previsto li puoi collegare a due ingressi analogici per vedere quanto assorbe il motore oppure li lasci scollegati. Ti rammento che per il LAP mode 490 Hz sono pochi, devi portare il PWM ad almeno 3-4 kHz. Non esiste altro modo, corretto, per utilizzare i ponti del tipo L29x, tutto il resto è solo fuffa :)

Ok ho collegato
IN 1 > PIN 3 ARDUINO
IN 2 > PIN 5 ARDUINO
IN 3 > PIN 4 ARDUINO
IN 4 > PIN 2 ARDUINO

EN A ed EN B ai 5v.

Adesso l’unico problema a quanto pare sia la programmazione…

Ti rammento che per il LAP mode 490 Hz sono pochi, devi portare il PWM ad almeno 3-4 kHz.

…e come??
Non ho capito come modificare la velocità con i PWM.

void Avanti(){
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);

}

così vado avanti con entrambi i motorini e tutto funziona, ma ripeto che parte ad alta velocità e si impenna…
vorrei fare tipo un for che va da 1 a 255 e aumentare piano piano la velocità…

roxdragon: Ok ho collegato IN 1 > PIN 3 ARDUINO IN 2 > PIN 5 ARDUINO IN 3 > PIN 4 ARDUINO IN 4 > PIN 2 ARDUINO

Ma lo hai almeno guardato lo schema che ti ho allegato ? Mi sa tanto di no.

Si ma ripeto che sono ignorante in materia... non l'ho capito bene anche se semplice... forse se non sbaglio ma non vorrei dire una cavolata... IN 1 e IN 2 devo collegarli insieme e fare uscire un solo filo che va collegato ad arduino? idem IN 3 e IN 4?

roxdragon: IN 1 e IN 2 devo collegarli insieme e fare uscire un solo filo che va collegato ad arduino? idem IN 3 e IN 4?

No, nello schema c'√® in mezzo un inverter (74LS04) che serve per sfasare di 180¬į tra IN1 con IN2 e IN2 con IN4.