Regolare la velocità di un motore DC con motor shield FE

Salve a tutti, mi ritrovo la motor shield Fe, e vorrei azionare un motore DC 12v regolandone la velocità con un potenziometro, dove posso recuperare uno sketch già pronto?

Trovato questi:

Si l' avevo visti! ma lui collega 2 motori, vanno avanti e indietro automaticamente...mentre io vorrei azionare un solo motore manualmente, e con un potenziometro regolare la velocità!

Beh, quello è una ottima partenza.
Di quello sketch elimina tutto quello che fa riferimento a pinDirB e pinPwmB

Poi nello sketch vedi che c’e’ scritto: analogWrite( pinPwmA,255 ); // velocità massima
Vuol dire che da 0-255 con quel comandi piloti la velocità.
A questo punto, prendi un potenziometro e lo colleghi ad un pin analogico.
Il valore che ti ritorna è tra 0-1023. Usi la map() per mappare il valore 0-1023->0-255
Una cosa del genere:

  valpot=analogRead(pinPot);
  analogWrite( pinPwmA,map(valpot,0,1023,0,255) );

ok thanks!! allora vediamo se ho capito:

/*
 * Sketch Test Motori Shield FE
 *
 * @author: Alfieri Mauro
 * @see:    http://www.mauroalfieri.it
 *
 * @licenze: Creative common
 */
 
 int pinDirA=2;
 int pinPwmA=3;

  valpot=analogRead(pinPot);
  analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
 
 
 void setup()
 {
   pinMode( pinDirA,OUTPUT );
   pinMode( pinPwmA,OUTPUT );

 }
 
 void loop()
 {
   // Test: rotazione dei motori
   //       stessa direzione, vel
   digitalWrite( pinDirA,HIGH );
      //       velocità massima
   analogWrite( pinPwmA,255 );
    
   delay(5000);
 
   // Test: rotazione dei motori
   //       direzione inversa
   digitalWrite( pinDirA,LOW );
     //       velocità massima
   analogWrite( pinPwmA,255 );
    
   delay(5000);
 
   // Test: rotazione dei motori
   //       direzione incrociata
   digitalWrite( pinDirA,HIGH );
     //       velocità massima
   analogWrite( pinPwmA,255 );
 
   delay(5000);
 
   // Test: rotazione dei motori
   //       direzione incrociata
   digitalWrite( pinDirA,LOW );
      //       velocità massima
   analogWrite( pinPwmA,255 );
   
   delay(5000);
 
   // Test: stop dei motori
   //       nessuna direzione
   digitalWrite( pinDirA,HIGH );
      //       velocità nulla
   analogWrite( pinPwmA,0 );
   
   delay(5000);
 }

edit by mod: per favore includi il codice usando gli appositi tag

Circa:

/*
 * Sketch Test Motori Shield FE
 * @author: Alfieri Mauro
 * @see:    http://www.mauroalfieri.it
 * @licenze: Creative common
 */

 int pinDirA=2;
 int pinPwmA=3;
 int valpot=0;
 
 void setup()
 { delay(1000);
   pinMode( pinDirA,OUTPUT );
   pinMode( pinPwmA,OUTPUT );
   pinMode(A0, INPUT);             // potenziometro su A0, ma puoi cambiarlo
 }
 
 void loop()
 { digitalWrite( pinDirA,HIGH );
   valpot=analogRead(A0);
   analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
   delay(400);
 }

Poi magari sarebbe meglio se la analogWrite fosse fatta solo se cambi il valore del potenziometro e non di continuo.
Potresti poi anche mettere un tasto per avviare/spegnere.
Parti spento, premi tasto allora avvii motore, ripremi allora spegni

una cosa del genere; magari prova la precedente che è più semplice, poi prova queste aggiunte.

int pinDirA=2;
 int pinPwmA=3;
 int pinBtn=9;    // tasto su pin 9
 int valpot=0;    // valore potenziometro
 boolean motore=false;          // false=spento, true=acceso
 
 void setup()
 { delay(1000);
   pinMode( pinDirA,OUTPUT );
   pinMode( pinPwmA,OUTPUT );
   pinMode( pinBtn,OUTPUT );
   pinMode(A0, INPUT);             // potenziometro su A0, ma puoi cambiarlo
 }
 
 void loop()
 { if(digitalRead(pinBtn)==HIGH)
   { if(motore==false)
     {  motore=true;
        digitalWrite( pinDirA,HIGH );
        valpot=analogRead(A0);
        analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
     }
     else
    { motore=false;
      analogWrite( pinPwmA,0);
     }
   }
   if(valpot!=analogRead(A0))
   {  valpot=analogRead(A0);
      analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
   }
   delay(100);
 }

ok, quindi aggiungo i 2 codici o provo prima il primo? Va bene se il centrale del potenziometro lo metto su A0 e gli altri 2 terminali su +5v e gnd di arduino?

Ho provato questo e funziona!! ma se ora volessi invertire il senso?

nid69ita:
Circa:

/*

int pinDirA=2;
int pinPwmA=3;
int valpot=0;

void setup()
{ delay(1000);
   pinMode( pinDirA,OUTPUT );
  pinMode( pinPwmA,OUTPUT );
   pinMode(A0, INPUT);             // potenziometro su A0, ma puoi cambiarlo
}

void loop()
{ digitalWrite( pinDirA,HIGH );
   valpot=analogRead(A0);
   analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
   delay(400);
}




Poi magari sarebbe meglio se la analogWrite fosse fatta solo se cambi il valore del potenziometro e non di continuo.
Potresti poi anche mettere un tasto per avviare/spegnere.
Parti spento, premi tasto allora avvii motore, ripremi allora spegni

Dovrai da qualche parte chiamare il comando digitalWrite( pinDirA,LOW );
Potresti chiamarlo quando premi un altro tasto.

In questo modo? e dove metto un pulsante?

/*

int pinDirA=2;
int pinPwmA=3;
int valpot=0;

void setup()
{ delay(1000);
pinMode( pinDirA,OUTPUT );
pinMode( pinPwmA,OUTPUT );
pinMode(A0, INPUT); // potenziometro su A0, ma puoi cambiarlo
}

void loop()
{ digitalWrite( pinDirA,HIGH );
digitalWrite( pinDirA,LOW );
valpot=analogRead(A0);
analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
delay(400);
}

 int pinDirA=2;
 int pinPwmA=3;
 int valpot=0;
 int pinBtnDir=8;     // pin del pulsante direzione
 int Direz=HIGH;
 
 void setup()
 { delay(1000);            // potenziometro su A0, ma puoi cambiarlo
   pinMode( pinDirA,OUTPUT );
   pinMode( pinPwmA,OUTPUT );
   pinMode( pinBtnDir,INPUT );   // pulsante direzione
 }
 
 void loop()
 { if(digitalRead(pinBtnDir)==HIGH)              // premuto bottone direzione
   { Direz=(Direz!=HIGH ? HIGH : LOW);           // if in linea, se Direz era HIGH->LOW altrimenti HIGH, inverte Direz
     digitalWrite( pinDirA,Direz );
   }
   if(valpot!=analogRead(A0))   // solo se cambi il potenziometro cambio velocità motore
   { valpot=analogRead(A0);
     analogWrite( pinPwmA,map(valpot,0,1023,0,255) );
   }
   delay(200);
 }

Grazie mille, faccio una prova!! dove posso collegare il pulsante N.A.?

robyr11:
Grazie mille, faccio una prova!! dove posso collegare il pulsante N.A.?

Non ho capito cosa intendi per N.A.

Nel codice c'e' un mio errore: pinMode(A0, INPUT); toglilo.
Facendo così il pin è di tipo digitale 0-1 e non 0-1023. pinMode è solo per i pin digitali.
Ovviamente quelli analogici sono solo in input, perciò non occorre dirlo.