Finecorsa con potenziometro multigiri

Buongiorno a tutti, sono nuovo di questo forum e sto cercando di imparare da chi è più esperto. Nella fattispecie ho trovato online uno sketch che mi permette di muovere un motore DC avanti ed indietro modificando la velocità. Ebbene, al motore che muovo con questo sketch è collegato mediante una puleggia, un potenziometro multigiri da 10KOhm, per far si che il motore ad un certo punto , ovvero agli estremi del potenziometro si blocchi. Di fatto il potenziometro (quello collegato al motore, non quello che dosa la velocità del motore) non è altro che un input analogico...ma non so come scrivere il software. Nel codice allegato, il potenziometro è quello della regolazione della velocità, non ho messo quello multigiri collegato al motore, il codice è stato preso da: http://www.mauroalfieri.it/elettronica/tutorial-motore-dc-controllato-da-interruttori-e-potenziometro.html#comment-9163 Qualcuno è così gentile da aiutarmi? Vi ringrazio, Giulio

/*
 * Motori in CC pilotati da pulsanti
 *
 * Autore: Mauro Alfieri
 * Tw:     @mauroalfieri
 *
 * Web: http://www.mauroalfieri.it
 */

const int buttonOrario = 4;
const int buttonAntior = 5;
const int potPin = A5;
const int in1Pin = 6;
const int in2Pin = 7;
const int motorPin = 3;

int potVal = 0;
int bora = LOW;
int bant = LOW;

void setup()
{
  pinMode(buttonOrario, INPUT);
  pinMode(buttonAntior, INPUT);
  pinMode(potPin, INPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(motorPin, OUTPUT);

  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
  analogWrite(motorPin, 0);
}

void loop()
{
  bora = digitalRead( buttonOrario);
  bant = digitalRead( buttonAntior);
  potVal = map(analogRead(potPin), 0, 1023, 0, 255);

  analogWrite(motorPin, potVal);

  if (bora == HIGH && bant == HIGH)
  {
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
  }

  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
}

Leggi il potenziometro di posizione e controlla se il valore letto ha superato un valore minimo/massimo. Ciao Uwe

ok, allora darei valore minimo , rimappandolo, 0 e max 255, sempre al potenziometro di posizione. Ma come lo traduco in termini di sketch? voglio che a 0 il motore si fermi, lo steso a 255. G.

Benvenuto. :) Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0

GiulioPd: Ebbene, al motore che muovo con questo sketch è collegato mediante una puleggia, un potenziometro multigiri da 10KOhm, per far si che il motore ad un certo punto , ovvero agli estremi del potenziometro si blocchi.

Non mi è molto chiaro quel che vuoi fare. traduci l'input analogico in un valore tra 0-255 e con il valore 0 il motore si fermerà. Invece con valori superiori il motore si muove sempre di più, fino a 254? Mentre a 255 di deve fermare? Oppure da 0-127 aumenta e poi da 128-255 diminuisce fino a fermarsi al 255 ?

Grazie nid69ita pr i links! oggi allora mi presento e mi guardo tutto con calma.
cerco di spiegarmi; ho un motore al quale è collegato un condensatore variabile sotto vuoto, il condensatore può fare al massimo 22 giri. Al che ho accoppiato all’alberino del motore, mediante 2 ingranaggi con opportuna moltiplica, un potenziometro che fa 10 giri. Questo potenziometro mi serve da fine corsa in quanto vorrei che per i valori del potenziomentro > 0 e < 255 il motore giri, altrimenti il motore si blocca. così facendo non rischio di spaccare l’albero del condensatore.
il mio problema è tradurre questo fine corsa, input analogico, all’iterno dello sketch che ho allegato nel primo post.

Penso che dovrei procedere rimappando l’input analogico e poi IF il valore è maggiore di 1 e minore di 254 il motore gira, ELSE, il motore si blocca.
Ti ringrazio ancora per l’aiuto ed i suggerimenti che mi hai dato.
g

Per primo l’entrata analogica mi da valori tra 0 e 1023.
Poi userei un certo scarto di sicurezza e non controllerei 0 e 1023 ma per esempio 20 e 1003.

if (analogRead(potenziometro) <=10)
{ 
ferma motore ;
stopinferiore =1;
}
if (analogRead(potenziometro) >=1003)
{ 
ferma motore ;
stopsuperiore =1;
}

stopinferiore estopsuperiore servono per evitare che quando il motore é arrivato a finecorsa per sbaglio lo piloti nella direzione sbagliata.

Ciao Uwe

Aggiungo un suggerimento, dato che i valori "0" e "255" (che per l'ADC di Arduino sarebbe "1023" ;) ) sono un po critici, e pure le loro "posizioni", prevedi una routine che ti rallenti progressivamente il motore agli estemi (almeno da 10 o 20 passi prima) in modo che l'inerzia del tutto non ti scassi la meccanica, nel caso tu arrivassi a piena velocita' a finecorsa (non e' che puoi far andare il motore a palla fino a "1022" ed inchiodarlo secco a "1023" , neppure frenandolo in corto ... la sua inerzia potrebbe essere sufficente a romperti l'albero o comunque deformare qualcosa ... :) )

EDIT: ed uwe vince per un'incollatura ... :P XD)

questo potrebbe andare?potcorsa è il potenziometro del fine corsa.
g

/*
 * Motori in CC pilotati da pulsanti
 *
 * Autore: Mauro Alfieri
 * Tw:     @mauroalfieri
 *
 * Web: http://www.mauroalfieri.it
 */
  
const int buttonOrario = 4;
const int buttonAntior = 5;
const int potPin = A5;
const int potCorsa = 0;
const int in1Pin = 6;
const int in2Pin = 7;
const int motorPin = 3;
  
int potVal = 0;
int bora = LOW;
int bant = LOW;
  
void setup()
{
  pinMode(buttonOrario, INPUT);
  pinMode(buttonAntior, INPUT);
  pinMode(potPin, INPUT);
 pinMode(potCorsa, INPUT);
 pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(motorPin, OUTPUT);
  
  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
  digitalWrite(potCorsa, Corsa);
  analogWrite(motorPin, 0);
}
  
void loop()
{
  bora = digitalRead( buttonOrario);
  bant = digitalRead( buttonAntior);
 corsaVal = map(analogRead(potCorsa), 0, 1023, 0, 255);
  potVal = map(analogRead(potPin), 0, 1023, 0, 255);
  
  analogWrite(motorPin, potVal, corsaVal);
  
  if (bora == HIGH && bant == HIGH)
  {
    digitalWrite(in1Pin,LOW);
    digitalWrite(in2Pin,LOW);
  }
 
if (Corsa > 0 && Corsa < 250)  
  {
  digitalWrite(in1Pin,bora);
  digitalWrite(in2Pin,bant);
 }
}

Etemenanki: EDIT: ed uwe vince per un'incollatura ... :P XD)

Senó non sarei riuscito a scrivere 19457 posts ;) ;) ;) ;) Ciao Uwe