Il pin-out del connettore della ventola è questo:
Per contare i giri della ventola ho utilizzato gli interrupt, collegando in led tra VCC 9V e il filo giallo tachimetrico con resistenza da 1K ho verificato che il led si spegne e si accende 4 volte in ogni giro che fa la ventola.
Video:
Oppure potete usare questo semplice sketch come test:
int pin = 13; volatile int state = LOW; void setup() { pinMode(pin, OUTPUT); attachInterrupt(0, blink, CHANGE); } void loop() { digitalWrite(pin, state); } void blink() { state = !state; }Collegate la ventola ad Arduino come nel seguente schema:
Lo sketch che misura i giri al minuto è questo:
//Sketch creato da Alessandro Riva //Sito web: http://alessandro-riva-elettronica.blogspot.it/ volatile int Giri; //memorizza il numero di giri al secondo int Calc; int cambiamenti=4; // numero di cambiamenti di stato per ogni giro//The pin location of the sensor int pinTachimetrico = 2; // Filo tachometrico della ventola, connettere resistenza di pull-up da 10kohm void rpm () //Funzione che viene cambiata dall'interrupt { Giri++; } void setup() { pinMode(pinTachimetrico, INPUT); Serial.begin(9600); attachInterrupt(0, rpm, CHANGE); //interrupt sul pin 2 } void loop () { Giri = 0; //Azzare il numero di giri per il calcolo interrupts(); // Attiva gli interrupt delay (1000); //Aspetta un secondo noInterrupts(); // disattiva gli interrupt Calc = ((Giri * 60)/cambiamenti); Serial.print (Calc, DEC); //Scrive il valore calcolato sulla seriale Serial.print (" Giri al minuto\r\n"); //Scrive "giri al minuto }
Lo sketch conta i giri al secondo attraverso gli interrupt, moltiplica per 60 per ottenere i giri al minuto e divide per 4 (cambiamenti di stato al secondo, questo numero può variare da ventola a ventola) per ottenere i giri reali.
Video:
Ho anche realizzato uno sketch che indica gli RPM su un display LCD, ecco lo sketch:
//Sketch creato da Alessandro Riva //Sito web: http://alessandro-riva-elettronica.blogspot.it/ #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //RS, ER, data PIN volatile int Giri; //memorizza il numero di giri al secondo int Calc; int cambiamenti=4; // numero di cambiamenti di stato per ogni giro//The pin location of the sensor int pinTachimetrico = 2; // Filo tachometrico della ventola, connettere resistenza di pull-up da 10kohm void rpm () //Funzione che viene cambiata dall'interrupt { Giri++; } void setup() { lcd.begin(16,2); pinMode(pinTachimetrico, INPUT); Serial.begin(9600); attachInterrupt(0, rpm, CHANGE); //interrupt sul pin 2 } void loop () { Giri = 0; //Azzare il numero di giri per il calcolo interrupts(); // Attiva gli interrupt delay (1000); //Aspetta un secondo noInterrupts(); // disattiva gli interrupt Calc = ((Giri * 60)/cambiamenti); Serial.print (Calc, DEC); //Scrive il valore calcolato sulla seriale Serial.print (" Giri al minuto\r\n"); //Scrive "giri al minuto lcd.setCursor(0, 0); lcd.print("RPM: "); lcd.setCursor(0, 1); lcd.print(Calc); }
Il display va collegato nel seguente modo:Per qualsiasi domanda o informazione scrivete qua sotto nei commenti.
- LCD RS pin to digital pin 8
- LCD Enable pin to digital pin 9
- LCD D4 pin to digital pin 4
- LCD D5 pin to digital pin 5
- LCD D6 pin to digital pin 6
- LCD D7 pin to digital pin 7
Video:
Questo commento è stato eliminato dall'autore.
RispondiEliminaCiao,
RispondiEliminagrazie per l'articolo: mi è stato utile.
Bene, mi fa piacere.
EliminaHo corretto anche l'errore.
ciao, io dovrei fare una cosa molto simile, ho un sensore effetto hall e un magnete attaccato ad un albero che gira, il risultato alla fine dovrebbe essere molto simile al tuo però con più led.. secondo te il tuo programma può andare bene con qualche modifica? Non ne so molto di programmazione ma ho la necessita di fare questa cosa. grazie mille
RispondiEliminaCiao, sono nuovo su arduino. Vorrei leggere la velocità di due ventole ma non riesco ad implementare il tuo script. Hai suggerimenti a riguardo?
RispondiEliminaBellissimo progetto molto utile complimenti
RispondiElimina