Go Down

Topic: gestione motori dc locomotive analogiche con sheda motor shield l298p (Read 93 times) previous topic - next topic

salve. sono un nuovo iscritto.avrei la necessità di controllare 2 locomotive su un plastico con arduino e la scheda motor shield l 298p. nel datasheet della scheda c è questo eswmpio di sketch :

//Arduino PWM Speed Control:
int E1 = 5;
int M1 = 4;
int E2 = 6;                     
int M2 = 7;                       
 
void setup()
{
    pinMode(M1, OUTPUT); 
    pinMode(M2, OUTPUT);
}
 
void loop()
{
  int value;
  for(value = 0 ; value <= 255; value+=5)
  {
    digitalWrite(M1,HIGH); 
    digitalWrite(M2, HIGH);     
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(300);
  }
}


l ho provato e funziona bene.però così la locomotiva mi va naturalmente solo in un verso con lo stop impostato nel delay. io vorrei farla andare anche nel verso opposto però non riesco anche provando a copiare il blocco però cambiando il comando high con low. inoltre vorrei capire bene come impostare e come funziona di preciso il comando value che non ho capito molto bene.
c è qualcuno che gentilmente può darmi una mano ?

Martinix

per quanto riguarda i motri, sarebbe bello avere uno schema elettrico dei collegamenti motiri--> scheda.

value NOn è un comando, ma una variabile (int si potrebbe usare anche byte ;))..
semplicemente la inizzializzi = a zero, poi ad ogni ciclo di for viene aumentata di 5

qiondi 0-->5-->10-->15.... fino ad arrvare a un unero ugulale o minore a 255
questa variabile agendo sul PWM dovrebbe far partire il treno in modo soft (e non a razzo)

p.s. se ci mettete anche i link alle vostre schede, ci fate un grosso favore, cosi evitaimo di dovre andarcele  a crcare su internet ;) ed innoltre si è sicuri che si sta guardando la stessa cosa  :smiley-twist:
Le informazioni date, son suggerimenti, osservazioni, ma come le applicate è a vostro rischio e pericolo!

la scheda è questa :

http://www.dfrobot.com/wiki/index.php?title=Arduino_Motor_Shield_%28L298N%29_%28SKU:DRI0009%29#Sample_Code

i motori delle loco sono normali motori a 12v .
il collegamento avviene tra la sceda ( morsetti M ) e le rotaie direttamente

Martinix

ma da quanto scritto nella tabella, sembrerebbe che variando

digital 4 e digital 7 varii la direzione (direction control), quindi o capisco male io, oppure hia sbagliato qualche cosa, o harware, o software, ma senza vedere cosa hai fatto non posso aiutare oltre! :smiley-sad:

se hai un morino che ti gira per casa, prova a fare le prove a "vuoto" e vedi come reagisce (cosi elimini eventuali variabili ignote)
Le informazioni date, son suggerimenti, osservazioni, ma come le applicate è a vostro rischio e pericolo!

ho già provato. si la direzione la cambio come dici tu e mettendo HIGH O LOW.
questo va bene ,ma vorrei che fosse tutto compreso nello sketch. in particolare vorrei far partire il motorino in un verso per un determinato tempo,poi fermarsi,stare fermo ,ripartire ,ritornare all inizio,altro stop e ripartire con la sequenza.

secondo te ( voi ) come dovrei scrivere lo sketch ?

Martinix

ma in auto matico o in abse a degli eventi (evnti = plsanti, comandi serieli..ecc ecc)????

nella tua presentazione non hai detto a che livello sei come programmazzione/elettronica!
Le informazioni date, son suggerimenti, osservazioni, ma come le applicate è a vostro rischio e pericolo!

Martinix

prova cosi... è un copia ed incolla di quanto hai fatto tu...con alcune modifiche..
controlla se tutto è ok e poi prova!

Code: [Select]
int E1 = 5;
int M1 = 4;
int E2 = 6;                     
int M2 = 7;                       
 
void setup()
{
    pinMode(M1, OUTPUT);
    pinMode(M2, OUTPUT);
}
 
void loop()
{
  int value;
  for(value = 0 ; value <= 255; value+=5)
  {
    digitalWrite(M1,HIGH);
    digitalWrite(M2, HIGH);     
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(300);
   
    for(value = 0 ; value <= 255; value+=5)
  {
    digitalWrite(M1,LOW);
    digitalWrite(M2, LOW);     
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(300);
  }
}


se funzionicchia, poi hai ampi margini di milgioramento ..molto ampi ;)

p.s. usa gli appositi TAG per il codice, sennò gli amministratori ti sgridano
Le informazioni date, son suggerimenti, osservazioni, ma come le applicate è a vostro rischio e pericolo!

ok. vi ringrazio molto.

stasera provo.

naturalmente voglio che funzioni tutto in automatico.

scusate l ignoranza cosa sono i tag... ?

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy