Tachimetro ad infrarosso, per misure di velocità angolare.
/* ---------------- Inizo Programma --------------------
* Tachimetro
* Modificato da Achille De Santis
* V4 del 08-07-2019
*/
// ------------ I/O --------------------------------------
#define I A0
#define U 13
// -------------------------------------------------------
int sensorvalue; // variabile di ingresso
bool state1 = HIGH;
bool state2;
float rps; // velocità in giri/secondo
float rpm; // velocità in giri/minuto
long prevMillis = 0;
long interval = 200;
long currentTime;
long prevTime = 1;
long diffTime;
const int sensorthreshold = 30; // indica la soglia "buio/luce" e "luce/buio"; provato; si può cambiare // in relazione alla distanza fisica dei led.
// per vedere quale valore sia adatto, prova il valore di "sensorvalue"
// come stampato da "serial monitor"
unsigned long currentMillis;
void test() //only for testing to determine the sensorthreshold value
{ delay(500); Serial.println(sensorvalue); }
void setup()
{
Serial.begin(9600);
pinMode(U, OUTPUT); // assign pin "U" led as indicator because we cannot see the IR light
}
void loop()
{
sensorvalue = analogRead(I); // read from pin "I" (A0)
if(sensorvalue < sensorthreshold)
state1 = HIGH;
else
state1 = LOW;
digitalWrite(U, state1); // as iR light is invisible for us, the led on pin 13
// indicate the state of the circuit.
if(state2!=state1)
{ // rileva quando lo stato cambia, "buio/luce" o
// "luce/buio", ricorda che la luce IR è NON visibile all'occhio umano.
if (state2>state1)
{
currentTime = micros(); // Get the arduino time in microseconds
diffTime = currentTime - prevTime; // calculate the time diff from the last meet-up
rps = 1000000/diffTime; // calculate how many rev per second, good to know
rpm = 60000000/diffTime; // calculate how many rev per minute
currentMillis=millis();
// print to serial at every interval - defined at the variables declaration
if(currentMillis-prevMillis>interval)
{ // see if now already an interval long
prevMillis = currentMillis;
Serial.print(rps); Serial.print(" rps "); Serial.print(rpm); Serial.println(" rpm");
}
prevTime = currentTime;
}
state2 = state1;
}
// test(); //prova per determinare il valore di soglia
}
/* ---------------- Inizo Programma --------------------
* Tachimetro
* Modificato da Achille De Santis
* V4 del 08-07-2019
*/
// ------------ I/O --------------------------------------
#define I A0
#define U 13
// -------------------------------------------------------
int sensorvalue; // variabile di ingresso
bool state1 = HIGH;
bool state2;
float rps; // velocità in giri/secondo
float rpm; // velocità in giri/minuto
long prevMillis = 0;
long interval = 200;
long currentTime;
long prevTime = 1;
long diffTime;
const int sensorthreshold = 30; // indica la soglia "buio/luce" e "luce/buio"; provato; si può cambiare // in relazione alla distanza fisica dei led.
// per vedere quale valore sia adatto, prova il valore di "sensorvalue"
// come stampato da "serial monitor"
unsigned long currentMillis;
void test() //only for testing to determine the sensorthreshold value
{ delay(500); Serial.println(sensorvalue); }
void setup()
{
Serial.begin(9600);
pinMode(U, OUTPUT); // assign pin "U" led as indicator because we cannot see the IR light
}
void loop()
{
sensorvalue = analogRead(I); // read from pin "I" (A0)
if(sensorvalue < sensorthreshold)
state1 = HIGH;
else
state1 = LOW;
digitalWrite(U, state1); // as iR light is invisible for us, the led on pin 13
// indicate the state of the circuit.
if(state2!=state1)
{ // rileva quando lo stato cambia, "buio/luce" o
// "luce/buio", ricorda che la luce IR è NON visibile all'occhio umano.
if (state2>state1)
{
currentTime = micros(); // Get the arduino time in microseconds
diffTime = currentTime - prevTime; // calculate the time diff from the last meet-up
rps = 1000000/diffTime; // calculate how many rev per second, good to know
rpm = 60000000/diffTime; // calculate how many rev per minute
currentMillis=millis();
// print to serial at every interval - defined at the variables declaration
if(currentMillis-prevMillis>interval)
{ // see if now already an interval long
prevMillis = currentMillis;
Serial.print(rps); Serial.print(" rps "); Serial.print(rpm); Serial.println(" rpm");
}
prevTime = currentTime;
}
state2 = state1;
}
// test(); //prova per determinare il valore di soglia
}
// --------------------- Fine programma -----------------------------------------
Argomenti correlati:
> Arduino N° 27
Argomenti correlati:
> Arduino N° 27
Nessun commento:
Posta un commento