Pages: 1 [2]   Go Down
Author Topic: QRD1114 en Arduino  (Read 4687 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias chicos por las ideas que me habéis aportado en este foro y con las que he podido desarrollar mi anemómetro, que llevaba tiempo teniendo en mente:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1282599142

Espero que encontréis interesante el código y el hardware para vuestras aplicaciones (como la de medir las RPM de motor con la que empezó este hilo).

Muchas gracias de nuevo y suerte!
« Last Edit: August 23, 2010, 04:39:27 pm by madepablo » Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 92
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos.
He estado liado y no he tenido tiempo de retomar el tema hasta ahora. Os comento.
Acabo de montar el sensor CNY70 con el siguiente programa:


volatile long tachCount = 0;
long time;
long rpm = 0;

void setup()
{
  Serial.begin(115200);
  attachInterrupt(0, tachPulse, RISING);
  time = millis();
}

void loop()
{
  //Runs every 1/4 second
  //if (millis() - time >= 250)
  if (millis() - time >= 1000)
  {
    // rpm = numero de vueltas en 250ms
    //  *4 se multiplica por cuatro para llevarlo a segundos
    //  *60 se multiplica por 60 para llevarlo a minuto
    //  /2 se divide en 2 porque son dos pulsos por cada rotacion (4 cilindros)
    //  /10 (Depende de la aplicacion)
    
    //NOTA: YO OCUPE ESTA RUTINA PARA UN TACOMETRO Y NO FUE NECESARIO DIVIDIR
    //EN 10 PRUEBEN USTEDES PERO YO LES RECOMIENDO NO DIVIDIR EN 10
    
    //rpm = (((tachCount*4)*60)/2)/10;
    detachInterrupt(0);
    rpm = tachCount;
    
    //aqui hacemos lo que queramos (mostramos en lcd, puerto serial, etc)
    //
    Serial.println(rpm);
    tachCount = 0;
    time = millis();
    attachInterrupt(0, tachPulse, RISING);
  }
}

void tachPulse()
{
  ++tachCount;
}


Como vereis he hecho varias pruebas hasta que al final lo único que quería ver es el número de interrupciones generadas al pasar de blanco a negro...el caso es que al leerlas en el COM, me sale un número elevadísimo y aunque genere los pulsos a la misma velocidad, cada lectura me salen datos muy distintos....parece como si se tratase de rebotes en un pulsador pero claro...en este caso no hay pulsador...¿alguna sugerencia?
Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 92
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola de nuevo.
Después de ver durante la noche algunas webs y andar masticándolo en la cama, he llegado a la solución.
El problema SI eran los rebotes que se producen en la entrada de interrupción del micro (pensaba yo que no....). se ha solucionado poniendo un inversor Schmitt-trigger a la salida del fototransistor junto con un condensador de 100nF. La señal que ataca al micro la tomo directamente de la salida del Schmitt-trigger. Todo esto lo he visto por ahí en webs por lo que no me voy a liar a poner fotos. El programa finalmente es el siguiente:


volatile long tachCount = 0;
long time;
long rpm = 0;

void setup()
{
  Serial.begin(115200);
  attachInterrupt(0, tachPulse, RISING);
  time = millis();
}

void loop()
{
  //Runs every 1/4 second
  if (millis() - time >= 125)
  {
    // rpm = numero de vueltas en 125ms
    //  *8 se multiplica por cuatro para llevarlo a segundos
    //  *60 se multiplica por 60 para llevarlo a minuto
    //  Es un flanco de subida por cada rotación
    
    rpm = tachCount*8*60;

    //aqui hacemos lo que queramos (mostramos en lcd, puerto serial, etc)
    Serial.println(rpm);
    tachCount = 0;    
    time = millis();  
  }  
}

void tachPulse()
{
  ++tachCount;
}


Como veis, actualizo la cuenta cada 1/8 de segundo para que sea mas rápido...aunque no se si luego al montarlo le va a dar tiempo a la pantalla a refrescar a esa velocidad...será cuestión de probar.
Logged

*
Offline Offline
Sr. Member
****
Karma: 0
Posts: 470
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El microcontrolador lleva un trigger schmitt en cada pin, por lo que no hace falta ponerlo externo, a lo mejor lo que te ayuda es el condensador que has puesto, que actúe como un filtro paso bajo, haz la prueba y quita el trigger a ver si con el condensador sólo se soluciona, puede ser que tengas mucho ruido, o la colocación del sensor, material que has usado para el negro, etc..
Logged

Pages: 1 [2]   Go Up
Jump to: