Salve a tutti
ho acquistato un encoder rotativo con risoluzione 2 bit, tipo di segnale di uscita : quadratura e con 24 impulsi per giro...
questo mi servirebbe da montare su una puleggia di una funivia modellino per calcolare sia la velocitĂ effettiva dell' impianto ( in cm al secondo ) , sia i centimetri fune che passano da quando una cabina preme su un microswitch in uscita a quella successiva e riportare entrambi i valori sul pc .
ho provato a guardare un po' di esempi ma non li comprendo benissimo ... qualcuno sa dove posso trovarne uno che io possa utilizzare ?
Leggi questo articolo:
ho letto l'esempio. ma non capisco se stia calcolando la velocitĂ o solamente il numero di giri...
Per calcolare la velocitĂ ci sono due strade: o misuri il tempo che trascorre tra un impulso ed il successivo, oppure conti quanti impulsi si sono verificati nell'unitĂ di tempo.
Il secondo metodo si appoggia su external interrupt ed è da preferire poiché non blocca il sistema in attesa del secondo impulso.
Se sai che con 1 cm di spostamento il sensore misura 4 impulsi e Arduino ne conta 8 in un secondo puoi affermare che la velocità è 2 cm/s.
grazie concetto afferrato... il problema ora è come scrivere ad arduino di calcolare gli impulsi in una determinata unità di tempo, per poi azzerare e rincominciare ... posso poi far fare ad arduino il calcolo della velocità e riporatre il valore sul pc ?
Un encoder in quadratura serve per conoscere anche il verso di rotazione.
La tua funivia può cambiare direzione?
Sìsi può cambiare direzione
Un encoder in quadratura consente anche di ottenere un raddoppio (2X) od un quadruplo (4X) degli impulsi: questo si usa per aver maggiore risoluzione.
Ti interessa questa maggiore risoluzione?
Porta vantaggi ? se si direi che mi interessa
Il tuo encoder è da 24 impulsi/giro quindi riesci ad apprezzare 15°: con 4x la risoluzione sale a 3.75°.
Ottimo come lo scrivo nel programma ?
Lo cosa è già prevista nello sketch indicato precedentemente.
Ovviamente devi trasformare gli impulsi EncoderValue in velocitĂ , sapendo che 24 impulsi/giro diventano 96.
Usando millis(), se dopo un secondo leggi 20 impulsi (oppure -20 secondo la direzione) avrai tutti i valori per il calcolo.
Ricordati che dopo la lettura devi azzerare la variabile EncoderValue.
millis() non c'è nello skatch che mi hai mostrato in precedenza giusto ? come e dove lo inserisco ?
ma millis() esattamente a cosa serve ? cosa devo inserirci ?
altra domandina: il calcolo del valore velocitĂ posso farlo fare direttamente ad Arduino? in modo che possa visulaizzare sul pc giĂ il valore velocitĂ e non debba farlo io con una calcolatrice
Il millis() è un contatore che si incrementa automaticamente ogni millesimo di secondo.
E' utile per determinare il tempo trascorso:
unsigned long Tempo = millis();
....
if (miliis() - Tempo > 5000) .... // se sono trascorsi 5 secondi fai qualcosa
Devi comprendere le basi di Arduino per andare avanti.
vero ... ma purtroppo la vogli di vederlo funzionare è tanta ...
coumque grazie per il supporto prometto che mi metterò a studiare un po'
Ma non posso usare il delay ?
Non funziona se scritto così : (riporto solo il loop )
void loop () {
encoderValue*2= velocitá; // 2 sono i cm percorsi ad ogni impulso e velocità è una variabile float definita all' inizio come float velocità = 0;
Serial.println (velocitĂ );
Delay (10);
encoderValue = 0;
Delay (1000) ;
}
Scrivendo così non dovrebbe ogni secondo ripercorrere il loop ?
Perché millis () non è un contatore incrementale che non si può azzerare ?
millis() è un contatore unsigned long che si incrementa ogni millesimo di secondo e riparte da 0 dopo aver raggiunto 0xFFFFFFFF = 4.294.967.295 ms = circa 49 giorni