Chiarimenti su codice per gestire motorini elettrici

Salve a tutti ho acquistato una L298N. Ho collegato ad essa due motorini elettrici... e arduino...
Tutto funziona bene...(con gli sketch su internet)

Adesso ho questo sketch che stocercando di capire..

int M1 = 2; /* Motore 1 */
int MD1 = 3; /* Direzione Motore 1 */

int M2 = 4;
int MD2 = 5;
 
void setup()
{
  pinMode (M1, OUTPUT);   
  pinMode (MD1, OUTPUT);    
  
  pinMode (M2, OUTPUT);    
  pinMode (MD2, OUTPUT);    
}
void loop()
{
  // Motor gira en un sentido
  digitalWrite (MD1, HIGH);
  digitalWrite (M1, LOW); 
    digitalWrite (MD2, LOW);
  digitalWrite (M1, LOW); 
  
  delay(4000);
  // Motor no gira
  digitalWrite (MD1, LOW); 
  delay(500);
  // Motor gira en sentido inverso
  digitalWrite (M1, HIGH);
  delay(4000);
  // Motor no gira
  digitalWrite (M1, LOW); 
  delay(5000);
}

Quello che non ho capito è:

  1. come faccio a decidere se il motore 1 deve girare orario o antiorario? con questi low e high mi confondo...
  2. Come mai se carico la lib per stepper... mi vibrano i motori e non girano le ruote?

COLLEGAMENTO: IN1 IN2 IN3 IN4 con pin 2,3,4,5 di arduino...
Grazie...

roxdragon:

  1. come faccio a decidere se il motore 1 deve girare orario o antiorario? con questi low e high mi confondo...
  2. Come mai se carico la lib per stepper... mi vibrano i motori e non girano le ruote?

COLLEGAMENTO: IN1 IN2 IN3 IN4 con pin 2,3,4,5 di arduino...
Grazie...

Hai messo i 8 diodi di protezione sulle uscite del L298???

  1. Collegando le entrate del L298 in quel modo non hai una gestione direzione e velocitá ma piloti ogni mezzo ponte direttamente.
    in1 LOW in2 LOW motore frenato
    in1 HIGH in2 LOW motore gira in un verso
    in1 LOW in2 HIGH motore gira nell altro verso
    in1 HIGH in2 HIGH motore frenato
    Enable A LOW motore non frenato.

  2. perché sono 2 motori che funzionano in modo totalmente diversi e in modo tra di loro incompatibili.

Ciao Uwe

uwefed:

roxdragon:

  1. come faccio a decidere se il motore 1 deve girare orario o antiorario? con questi low e high mi confondo...
  2. Come mai se carico la lib per stepper... mi vibrano i motori e non girano le ruote?

COLLEGAMENTO: IN1 IN2 IN3 IN4 con pin 2,3,4,5 di arduino...
Grazie...

Hai messo i 8 diodi di protezione sulle uscite del L298???

  1. Collegando le entrate del L298 in quel modo non hai una gestione direzione e velocitá ma piloti ogni mezzo ponte direttamente.
    in1 LOW in2 LOW motore frenato
    in1 HIGH in2 LOW motore gira in un verso
    in1 LOW in2 HIGH motore gira nell altro verso
    in1 HIGH in2 HIGH motore frenato
    Enable A LOW motore non frenato.

  2. perché sono 2 motori che funzionano in modo totalmente diversi e in modo tra di loro incompatibili.

Ciao Uwe

Quindi fammi capire... devo mettere dei diodi dove di preciso?

  1. Collegando le entrate del L298 in quel modo non hai una gestione direzione e velocitá ma piloti ogni mezzo ponte direttamente.

e come dovrei collegarle? Grazie e scusami per l'ignoranza in materia!

Prova a leggere qua ... Pilotare motore 3 Vdc / 300mA con driver L298N - Generale - Arduino Forum

EN A (EN B) metti a H.
la resistenza di sense non serve, puoi lasciarla via.
tabellina IN1 e IN2 (IN3 e IN4):
0 0 motorino frenato
1 0 motorino gira in un senso
0 1 motorino gira nel altro senso
1 1 motorino frenato.

quindi devo collegare EN A e EN B insieme tra di loro?
Non ho capito IN1 IN2 IN3 IN4 dove vanno...

UP!

nessuno sa aiutarmi?

Nel thread che ti hanno linkato mi pare ci sia tutto, hai letto ed applicato quanto riportato?

EN A (EN B) metti a H.
la resistenza di sense non serve, puoi lasciarla via.
tabellina IN1 e IN2 (IN3 e IN4):
0 0 motorino frenato
1 0 motorino gira in un senso
0 1 motorino gira nel altro senso
1 1 motorino frenato.

Sarò ignorante... ma non ho mai avuto a che fare con l'elettronica.
EN A EN B metti a H significa che devo ponticellarli?

idem IN1 e IN2 insieme? e IN 3 e IN 4 insieme?

Metti a H, metti HIGH, 5V
Quindi EN A e EN B li metti HIGH, 5V

L'altra è una tabella 3 colonne per 4 righe.

IN1 IN2     EFFETTO OTTENUTO
 0   0      motorino frenato
 1   0      motorino gira in un senso
 0   1      motorino gira nell'altro senso
 1   1      motorino frenato.

Questa tabella è valida anche per gli IN3 e IN4

Grazie per avermi risposto... ma non ho capito ...quindi ho sbagliato a collegarli?
ecco qui la foto del mio collegamento...

ma tu che scheda con L298 hai ?

quella della foto non l'ho mai vista in giro

esattamente questa:

però non so se i collegamenti sono ok...
io in poche parole ho collegato su
IN1 > arduino pin2
IN2 > arduino pin3
IN3 > arduino pin4
IN4 > arduino pin5
GND > arduino GND
12 volt esterni come alimentazione
e poi vabe i due motori sugli out... OUT1 e OUT2 su motorino1 e OUT3 e OUT4 sul motorino2

Grazie

esattamente questa:
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRVL5dZ20qn5wc90cu3nptnj9-eDBowhWfX2Cp2fhRsL9zRxuP2nqfGzA

piu' piccola non ci riuscivi a postarla ?

DOvrebbe avere anche ENA e ENB ai lati del connettore, li devi mettere HIGH ( collegati al +5V )

Si ha EN A e EN B però hanno un attacco diverso... gli collego un jumper per ognuno e lo collego ai 5v di arduino?
PS perdonami l'ho presa da google la foto... non mi aspettavo fosse cosi piccola
comunque eccola qui..è cosi
http://www.gamesalor.com/dianzi1/d4/3266/1.jpg

Ho un problema.. ho creato questo sketch... tutto funziona...
prima premo il tasto 'a' e mi vanno avanti entrambi i motori... poi premo 'i' e si fermano... come mai?
però se chiudo la seriale e la riapro e digito come prima lettera la 'i' mi va correttamente indietro..

/*
IN1 IN2     EFFETTO OTTENUTO
 0   0      motorino frenato
 1   0      motorino gira in un senso
 0   1      motorino gira nell'altro senso
 1   1      motorino frenato.
 */

#define IN1 2
#define IN2 3

#define IN3 4
#define IN4 5

void setup(){
  
  Serial.begin(9600);
  
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);

}

void loop(){
 
  char x = Serial.read();
  if(x == 'a')Avanti();
  if(x == 'i')Indietro();

}

void Avanti(){
  digitalWrite(IN1,HIGH);
  digitalWrite(IN3,HIGH);
}

void AvDestra(){
}

void AvSinistra(){
}

void Indietro(){
  digitalWrite(IN2, HIGH);
  digitalWrite(IN4, HIGH);
}

void InDestra(){
}

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


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

Grazie mille!

Nel codice ti conviene inserire un controllo sulla seriale.

void loop(){
     if (Serial.available() > 0) {
          char x = Serial.read();
          if(x == 'a')Avanti();
          if(x == 'i')Indietro();
     }
}