Liczymy obroty silniczka D65:
tutaj nasz program:
bool stan, poprz; unsigned long int t1; void setup() { // put your setup code here, to run once: Serial.begin(9600); stan=false; } int odczyt; int licz=0; void loop() { poprz=stan; odczyt=analogRead(A0); if (odczyt<50) stan=true; else stan=false; // Serial.print(odczyt); // Serial.print(" "); // Serial.print(stan?"jasne":"ciemne"); // Serial.print(" "); if (stan!=poprz){ licz++; Serial.print(" KLIK "); Serial.print(licz); Serial.print(" "); if (licz%2==0){ Serial.print(1000./(millis() - t1)*60); Serial.println(" rpm"); t1= millis(); } } // else // Serial.println(); }
I działa bardzo fajnie, nawet z tylko jednym znacznikiem! Wyniki są bardzo powtarzalne (przy zasilaniu około 7V – jeden obrót w 230-240ms, czyli 4 obroty w 1 sekundę, a to daje 4*60=240 obrotów na minutę – rpm).
Rozbudowa?
- więcej znaczników (już 2 polepszają sprawę, 4 to zdecydowanie OK).
- inny algorytm – zliczanie liczny obrotów i aktualizowanie wartości rpm co określony czas, np. 2 sek