Non è per forza necessario trovare il codice già pronto, basta mettere i pezzi assieme.
iniziamo dal potenziometro:
qui (
http://www.arduino.cc/en/Tutorial/Potentiometer ) ed anche di qua (
http://www.arduino.cc/en/Tutorial/AnalogInput) trovi tutte le info necessarie. i fili ai lati vanno messi uno al + ed uno al gnd. mentre l'ultimo ad una porta analogica.
per leggere il valore basta semplicemente un analogRead
val = analogRead(portaAnalogica); // in val mi ritrovo la lettura del valore preso dalla porta corrispondente alla variabile portaAnalogica
la seconda parte è capire come regolare la velocità del motore, ed a naso dovrebbe essere questo punto:
int value = 255;
[...]
analogWrite(E1, value);
analogWrite(E2, value);
qui dovrebbe settare la velocità dei 2 motori (la variabile value è sempre fissa a 255, quindi il massimo).
dobbiamo quindi modificare la variabile value in base al settaggio che fai con il potenziometro.
terzo passaggio: non puoi brutalmente usare il valore letto da potenziometro per regolare la velocità dei motori perchè questi hanno 2 scale diverse. il potenziometro va da 0 a 1023 (vedi link in precedenza), mentre il motore da 0 a 255.
ma non c'è nulla di cui preccuparsi, c'è una simpatica funzione chiamata "map" che riproporziona i valori
http://www.arduino.cc/en/Reference/mapvar = map (<numero da riscalare>,<minimo valore scala>,<massimo numero scala>,<minimo valore scala di destinazione>,<massimo valore scala di destinazione> )
alla fine della fiera sono solo 3 righe da aggiungere:
- la dichiarazione di una variabile dove mettere la porta di lettura potenziometro
- lettura del valore del potenziometro
- scalare il valore letto a quello da mandare ai motorini
int potPin = 2; // collegare il piedino centrale del potenziometro alla porta analogica 2
[..]
int value = analogRead(potPin);; // leggo dal potenziometro
value = map(value, 0, 1023, 0, 255); // riproporziono il valore sulla scala dei motorini
che unito al tutto dovrebbe essere così:
//Arduino PWM Speed Control:
int E1 = 6;
int M1 = 7;
int E2 = 5;
int M2 = 4;
unsigned long startTime;
long timeout = 1800000; // qui va espresso in millisecondi la durata del programma
int enabled = 1;
int outpin = 11;
int wakepin = 8;
int shutter_on = 200;
int wakeup = 500;
int potPin = 2; // collegare il piedino centrale del potenziometro alla porta analogica 2
void setup()
{
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(outpin, OUTPUT);
pinMode(wakepin, OUTPUT);
startTime = millis();
}
void loop()
{
if (enabled){
int value = analogRead(potPin);; // leggo dal potenziometro
value = map(value, 0, 1023, 0, 255); // riproporziono il valore sulla scala dei motorini
digitalWrite(M1,HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, value);
analogWrite(E2, value);
delay(2000);
analogWrite(E1, 0);
analogWrite(E2, 0);
delay(1000);
scatta();
if ((millis()-startTime) >timeout){
enabled = 0;
}
}
}
void scatta(){
digitalWrite(wakepin, HIGH);
delay(wakeup);
digitalWrite(outpin, HIGH);
delay(shutter_on);
digitalWrite(outpin, LOW);
digitalWrite(wakepin, LOW);
delay(50);
}
Note aggiuntive:
- Se il potenziometro funziona al contrario rispetto a come ti aspetti inverti le polarità
- Se mettendo al minimo non vuoi che il motore sia proprio a zero puoi cambiare il map tipo così:
value = map(value, 0, 1023, 150, 255);
cioè regoli il valore minimo non a zero, ma un valore più alto
Ovviamente come al solito il codice non è testato, ma ci fidiamo !!

Buon Natale !!
