Pages: [1]   Go Down
Author Topic: Sensor ir para contador  (Read 1289 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..
Logged

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 37
Posts: 2172
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

   

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 08, 2012, 11:57:27 am by inigohe » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 08, 2012, 12:33:58 pm by inigohe » Logged

Donostia
Offline Offline
God Member
*****
Karma: 0
Posts: 740
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: