Ciao a tutti, non so se vi ricordate di me, avevo in progetto di costruire un frigo pwm per medicinali.
Progetto che devo terminare oltretutto.
Ma sono tornato qui dopo quasi un'anno per un problema diverso ora.
Ho la necessità di rilevare gli RPM di un albero motore di un macchinario e in base ad essa pilotare l'accensione e l'arresto di un relè.
Ho realizzato un banalissimo circuito di prova composto da un sensore reed, un magnete sulla pala di una ventola 12v azionata da un'alimentatore, un led (con resistore da 1KOhm) che simula il relè e un'altro led che segnala la chiusura del reed ad ogni giro della ventola (che poi sarà l'albero cardanico)
Ho provato con questo codice, non scritto da me ma solo adattato:
// read RPM
volatile int rpmcount = 0;//see http://arduino.cc/en/Reference/Volatile
int rpm = 0;
unsigned long lastmillis = 0;
int attuatore = 5; //pin del relè attuatore
void setup(){
pinMode (attuatore, OUTPUT);
Serial.begin(9600);
attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
}
void loop(){
if (millis() - lastmillis == 1000){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/
detachInterrupt(0); //Disable interrupt when calculating
rpm = rpmcount * 60; /* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/
Serial.print("RPM =\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/
rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
if (rpm < 25) { // legge se la velocità dell'albero è bassa
digitalWrite(attuatore, HIGH); //eccita relè attuatore
}
if (rpm > 30) { // legge se la velocità dell'albero è sufficente
digitalWrite(attuatore, LOW);
} //diseccita relè attuatore
}
void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}
Il problema è che ieri sera bene o male funzionava o sembrava funzionare ma erano le 3 di notte non ero molto fresco... Ho avuto anche la malaugurata idea di provare a montare un potenziometro e quando o acceso Arduino ha quasi fumato il potenziometro stesso, non so se la board abbia patito... coi programmi come blink classici funziona Però intanto ogni tanto si blocca e per resettarlo devo staccare alimentazione, ogni tanto interrompe la scrittura via seriale (serial monitor) insomma fa cose strane.
Tornando al discorso, Ora non funziona più lo sketch mostrato pocanzi cioè ignora i cicli dell'interruttore reed quasi del tutto addirittura se la ventola col magnete non gira ma l'alimentatore 12 v è acceso il serial monitor legge degli rpm che salgono e poi scendono per i fatti loro, solo se tolgo il filo del pin di lettura smette di leggere RPM "fantasma"
Cosa sta succedendo? Avete dei sospetti? sto dando di matto.
Premetto che sto usando per la prima volta il nuovo IDE su Windows 8 32bit per gli sketch.