Buon pomeriggio a tutti.
Dopo il vostro prezioso aiuto ricevuto in questo post:
http://arduino.cc/forum/index.php/topic,111010.msg834050.html#msg834050 sono finalmente riuscito nel mio intento.
Ho quindi acquistato un potenziometro rotativo 10k ohm 10 giri come questo:
http://it.rs-online.com/web/p/potenziometri/4867093/ ed ho scritto subito il codice che però non fa esattamente ciò che voglio.
Questo è il mio codice:
const double sensore = 0;
double Ohm=0;
double giri = 0.0;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Lettura: ");
Ohm=(map(analogRead(sensore),0,1023,0,10000));
Serial.print(Ohm);
Serial.print(" Ohm");
Serial.print(" equivalenti a ");
giri=Ohm/1000;
Serial.print(giri);
Serial.print(" giri ");
Serial.print(map((Ohm/1000),0,7.165,0,100));
Serial.println("% di apertura");
delay(200);
}
Questo è l'output:
Lettura: 0.00 Ohm equivalenti a 0.00 giri 0% di apertura
Lettura: 29.00 Ohm equivalenti a 0.03 giri 0% di apertura
Lettura: 68.00 Ohm equivalenti a 0.07 giri 0% di apertura
Lettura: 117.00 Ohm equivalenti a 0.12 giri 0% di apertura
Lettura: 156.00 Ohm equivalenti a 0.16 giri 0% di apertura
Lettura: 205.00 Ohm equivalenti a 0.20 giri 0% di apertura
Lettura: 254.00 Ohm equivalenti a 0.25 giri 0% di apertura
...
Lettura: 899.00 Ohm equivalenti a 0.90 giri 0% di apertura
Lettura: 948.00 Ohm equivalenti a 0.95 giri 0% di apertura
Lettura: 997.00 Ohm equivalenti a 1.00 giri 0% di apertura
Lettura: 1055.00 Ohm equivalenti a 1.05 giri 14% di apertura
Lettura: 1085.00 Ohm equivalenti a 1.09 giri 14% di apertura
Lettura: 1124.00 Ohm equivalenti a 1.12 giri 14% di apertura
...
Lettura: 1915.00 Ohm equivalenti a 1.91 giri 14% di apertura
Lettura: 1964.00 Ohm equivalenti a 1.96 giri 14% di apertura
Lettura: 2023.00 Ohm equivalenti a 2.02 giri 28% di apertura
Lettura: 2072.00 Ohm equivalenti a 2.07 giri 28% di apertura
Lettura: 2121.00 Ohm equivalenti a 2.12 giri 28% di apertura
...
Lettura: 2903.00 Ohm equivalenti a 2.90 giri 28% di apertura
Lettura: 2961.00 Ohm equivalenti a 2.96 giri 28% di apertura
Lettura: 3010.00 Ohm equivalenti a 3.01 giri 42% di apertura
Lettura: 3049.00 Ohm equivalenti a 3.05 giri 42% di apertura
...
Lettura: 3939.00 Ohm equivalenti a 3.94 giri 42% di apertura
Lettura: 3988.00 Ohm equivalenti a 3.99 giri 42% di apertura
Lettura: 4027.00 Ohm equivalenti a 4.03 giri 57% di apertura
Lettura: 4056.00 Ohm equivalenti a 4.06 giri 57% di apertura
...
Lettura: 4936.00 Ohm equivalenti a 4.94 giri 57% di apertura
Lettura: 4985.00 Ohm equivalenti a 4.99 giri 57% di apertura
Lettura: 5053.00 Ohm equivalenti a 5.05 giri 71% di apertura
Lettura: 5102.00 Ohm equivalenti a 5.10 giri 71% di apertura
...
Lettura: 5923.00 Ohm equivalenti a 5.92 giri 71% di apertura
Lettura: 5972.00 Ohm equivalenti a 5.97 giri 71% di apertura
Lettura: 6031.00 Ohm equivalenti a 6.03 giri 85% di apertura
Lettura: 6099.00 Ohm equivalenti a 6.10 giri 85% di apertura
...
Lettura: 6950.00 Ohm equivalenti a 6.95 giri 85% di apertura
Lettura: 6989.00 Ohm equivalenti a 6.99 giri 85% di apertura
Lettura: 7038.00 Ohm equivalenti a 7.04 giri 100% di apertura
Lettura: 7096.00 Ohm equivalenti a 7.10 giri 100% di apertura
Da ciò si evince primo che non è estremamente preciso e secondo che mancano molte altre percentuali stampando solo infatti queste: 0%, 14%,28%, 42%, 57%, 71%, 85% e 100%.
Il secondo problema che incontro invece è che per far aprire e chiudere la tenda mi sono collegato in parallelo ai già esistenti pulsanti con due relè. Uno per il segnale di apertura ed uno per quello di chiusura.
Mi sono però accorto che premendo i pulsanti arriva il segnale alla tenda solo dopo circa tre secondi. Se durante il movimento (salita o discesa) pigio nuovamente il pulsante per un tempo inferiore ai tre secondi mi interrompe l'avanzamento e si ferma nella posizione da me desiderata.
Questo però non è possibile con arduino perchè inviando per esempio il segnale di apertura mi eccita per tre secondi il relè per poi diseccitarlo subito dopo (per non avere il pulsante sempre sotto tensione).
digitalWrite(RCH2, HIGH);
delay(2500);
digitalWrite(RCH2, LOW);
Come faccio quindi ad aprire la tenda solo parzialmente? Devo calcolare quanto tempo impiega ad aprirsi totalmente e da lì inviare il segnale solo per N secondi corrispondenti a quanti centimetri voglio che si apra?
Grazie infinite per i vostri preziosi consigli.