Problema con potenziometro

Scusate mi chiamo Samuele ed ho 13 anni volevo chiedervi aiuto riguardo un programma che sto scrivendo, allora io vorrei far girare un motore controllato da un potenziometro con ingresso analogico, il potenziometro quando cambia il valore dovrebbe a seconda di come il valore cambia far aumentare o diminuire la velocità del motore.Se ho sbagliato qualcosa o ho infranto qualche regola mi scuso in anticipo dato che sono nuovo sul forum. :wink:

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili
P.P.S.: NON ti accodare a thread con altri argomenti, ma per le tue varie differenti domande apri singoli thread nelle opportune aree.

Ti ringrazio molto farò come dici tu
:slight_smile:

Ciao
Allora non vuoi avere una velocitá di rotazione proporzionale alla posizione del potenziometro ma a potenziometro a metá mantenere la velocitá mentre a potenziometro a sinistra ralentare e a potenziometro sulla destra aumentare la velocitáß
Ciao Uwe

io penso che la richiesta si riferisca al semplice map() del potenziometro sull'uscita del motorino.. ::slight_smile:
Quindi da potenziometro 0 =motorino fermo a potenziometro 1023 = motorino al massimo

Salve ancora, ho seguito il suo consiglio e mi sono presentato nell' apposita pagina. Ma ho ancora un piccolissimo problema con il mio programma.

const int potPin = A0;
const int motorPin = 9;
int potVal;
void setup () {
    pinMode (motorPin, OUTPUT);
    pinMode (potPin, INPUT);
}
void loop () {
    potVal=analogRead (potPin);
    potVal = map (potVal,0,1023,0,255);
    analogWrite (motorPin, potVal);
}

Il codice è corretto perché il motore va più lento quando cambio il valore del potenziometro ma vorrei che quando il valore del potenziometro è a zero il motore si fermasse.
Ringrazio chi risponderà in anticipo.

Se non si ferma evidentemente il ADC non da zero ... altrimenti la analogWrite() con un valore zero NON farebbe più muovere il motore.

Devi fare un po' di debug ...
... nel setup() inizializza la seriale con un Serial.begin() dopo di che nel loop() metti delle Serial.println() con cui ti stampi sia il valore che leggi dal potenziometro che il valore che ottieni dalla funzione map() e verifichi se veramente quando il potenziometro è al minimo hai zero o no :wink:

Guglielmo

Ti ringrazio farò come dici tu. :grinning:

Scusami se non capisco subito alla prima, ma non ho capito se intendi che devo vedere entrambi i valori (motorPin e potPin) nel monitor seriale, perché se è così l'ho già fatto e vedevo il valore del potenziometro che cambiava ma quello del motore no.

Metti il codice con i Serial.println() e vediamo dove li hai messi e capiamo cosa succede :wink:

Guglielmo

Adesso metto il codice aggiornato:

const int potPin = A0;
const int motorPin = 9;
int motorVal;
int potVal;
void setup () {
  pinMode (motorPin, OUTPUT);
  pinMode (potPin, INPUT);
  Serial.begin (9600);
}
void loop () {
  potVal=analogRead(potPin);
  motorVal=analogRead (motorPin);
  Serial.print ("potVal: ");
  Serial.println (potVal);
  Serial.print ("motorVal: ");
  Serial.println (motorVal);
  potVal = map (potVal,0,1023,0,255);
  If (potVal == 255) {
    analogWrite (motorPin, 1017);
  }
  else {
    analogWrite(motorPin, 0);
  }
}
  1. Quella motorVal = analogread() non serve a nulla ... il pin PWM è di OUTPUT e non di input quindi non ha alcun senso leggere quel pin, inoltre NON è un pin che torna un valore analogico.

  2. Manca la Serial.println() del valore di potVal DOPO la map

  3. Quella IF non ha senso e la analogWrite() che fai all'interno, nel caso di 255, è sbagliata .. il valore massimo di una analogWrite() è appunto 255 ... non per nulla fai una map() per portare i valori del potenziometro che vanno da 0 a 1023, hai valori adatti alla analogWrite() che vanno da 0 a 255.

  4. Riprendi il programma che avevi messo all'inizio e aggiungi SOLO le varie Serial.print() ... il resto era già probabilmente a posto.

Guglielmo

const int potPin = A0;
const int motorPin = 9;
int potVal;
void setup() {
  pinMode(motorPin, OUTPUT);
  pinMode(potPin, INPUT);
  Serial.begin(9600);
}
void loop() {
  potVal=analogRead (potPin);
  potVal=map (potVal,0,1023,0,255);
  Serial.print("potVal: ");
  Serial.println(potVal);
  analogWrite (motorPin, potVal);
}

Così è giusto?

A parte il fatto che, in conformità al regolamento, punto 7, il codice racchiuso tra i tag CODE , stampa sia il valore che leggi prima dalla analogRead() e stampa poi il valore che esce dalla map (in entrambi i casi la variabile potVal) così vediamo sia quello che legge dal potenziometro, sia come viene trasformato.

Guglielmo

Innanzitutto, scusa ma me ne sono dimenticato del codice. Poi si mi sono dimenticato del Serial.print .

Sistema il tuo post #12 (... con i tag CODE), dopo di che, quando hai messo i Serial.println(), prova e riporta qui i valori che ottieni ... specie agli estremi :wink:

Guglielmo

Allora adesso nel monitor seriale ho potVal che quando è a zero il motore girava più lentamente ma non si ferma.

Non mi fa modificare il post #12.

matisamu:
Allora adesso nel monitor seriale ho potVal che quando è a zero il motore girava più lentamente ma non si ferma.

T'ho detto di riportare i VALORI sia della prima Serial.print che della seconda !!!

Guglielmo

matisamu:
Non mi fa modificare il post #12.

... per questa volta l'ho sistemato io. :slight_smile:

Guglielmo