Go Down

Topic: Sensor ir para contador (Read 1 time) previous topic - next topic

inigohe

Buenas a todos...

Tengo el siguiente montaje para realizar un contador con un sensor ir y un led ir, el script que he realizado es el siguiente...

Quote

int IRpin= 1;
int val = 0;

void setup()
{
 Serial.begin(9600);
 pinMode(13,OUTPUT);
}

void loop ()
{
 val= analogRead( IRpin );
 
if ( val != 0)
  {
      // Si el pulsador no esta oprimido, flanco de bajada
      if ( val==0 )
      {
         val=val++;               //Incrementa el contador
         Serial.println(val); //Imprime el valor por consola
         digitalWrite(13,HIGH);
         delay (100);         // Retardo
         digitalWrite(13,LOW);
         delay (100);
      }
  }
}
 



El problema que tengo es que al poner el monitor del puerto serie, no me aparece nada...

No se donde he metido la pata...

Agradeceria algun consejo para solucionarlo.

Gracias..

fm

Solo te va a imprimir algo si val es 0 y distinto de 0. Resulta logico que no imprima nada.
   

inigohe

#2
Apr 08, 2012, 06:50 pm Last Edit: Apr 08, 2012, 06:57 pm by inigohe Reason: 1
Gracias..

He rehecho el script

Quote

int sensorPin = 1;
int counter = 0;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(sensorPin);
  if (sensorValue < 100) {     //corto el haz ir
     counter++;     //se incrementa el contador
     Serial.print("Contador : ");
     Serial.println(counter);
     digitalWrite(13, HIGH);   //  Enciendo el led nº1
     delay(1000);               //  Espero 1000 ms
     digitalWrite(13, LOW);    //  Apago el led nº1
     boolean low = true;
     while (low) {   //esperar hasta el final del corto
       sensorValue = analogRead(sensorPin);
       if (sensorValue > 400) {
         low = false;
      }
    }
  }
}



El resultado es prometedor, aunque quisiera depurarlo colocando un contador de tiempo entre gap y gap y que ocupara una linea el contador... a ver que consigo.

inigohe

inigohe

#3
Apr 08, 2012, 07:30 pm Last Edit: Apr 08, 2012, 07:33 pm by inigohe Reason: 1
Buenas...

He colocado el contador de tiempo, me hace una cosa rara,es como si repitiera el mismo tiempo entre gap y gap, y lo que hace es repetir el retorno de carro hasta el siguiente gap, lo que lo hace muy desagradable, lo suyo seria ocupar una linea diciendo vuelta n x tiempo por vuelta y milisegundos...
Quote

int sensorPin = 1;
int counter = 0;
int start;
int finished;
int elapsed;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(sensorPin);
  if (sensorValue < 100) {     //corto el haz ir
     counter++;     //se incrementa el contador
     start=millis();
     Serial.print("Contador : ");
     Serial.println(counter);
     digitalWrite(13, HIGH);   //  Enciendo el led nº1
     delay(1000);               //  Espero 1000 ms
     digitalWrite(13, LOW);    //  Apago el led nº1
     boolean low = true;
     while (low) {   //esperar hasta el final del corto
       sensorValue = analogRead(sensorPin);
       if (sensorValue > 400) {
         low = false;
     finished=millis();
       }
    }
  }
        elapsed=finished-start;
        Serial.print(elapsed);
        Serial.println(" milisegundos por vuelta");
       
}

inigohe

ionhs

uff porque estoy de vacaciones que sino durante las clases ando super liado llevo un curso de traca. Le hecho un vistazo y te comento cosa que se pueden mejorar aunque tal vez no encuentre el problema.

Te recomiendo que cuando abras las llaves { primero le des al intro y luego abras las llaves de esa manera la apertura de llave y el cierre de llaves quedarán a la misma altura y se ve mucho más claro donde empieza un bucle y donde acaba.

Usas una variable llamada "low" supongo que eso no sera pero la palabra low es una palabra reservada y es mejor no usar palabras que tengan significado para arduino como variables.

No entiendo completamente el problema pero tener un delay de 1 segundo te imposibilita hacer lecturas de menos de 1 segundo. Si el parpadeo de led no es muy importante quitarlo y puedes sustituirlo por un mensaje en el serial monitor. Sino esto no te va a dar más que problemas

Para conseguir que en una linea te salga numero de vueltas y velocidad, no uses Serial.println(" milisegundos por vuelta");

en su lugar pon Serial.print(" milisegundos por vuelta"); y Serial.print("     ");

Haber si con eso se te arreglan los problemas, me acabo de dar cuenta que a mis alumnos les he mandado un ejercicio muy parecido. saludos


inigohe

Buenas,,,

Gracias por la respuesta..

Mi intencion era en principio que ademas de tener una información bien via serie o lcd, tuviera una indicacion visual que se ha realizado un Gap.

Intentaré seguir tus consejos a ver que pasa...

Iñigo

Go Up