Ayuda, seguidor de linea


buenas noches :d este es mi primer  proyecto, es un seguidor de lineas negras con fondo blanco y que además tiene que dar la distancia recorrida.

el carrito sigue perfectamente el camino, ahora tengo problemas con la distacia. lo que estoy intentando es hacer es tomar el tiempo que esta avanzado(solo tomo el tiempo en que el carro esta en el camino correcto, pues cuando da alguna vuelta gira sobre su propio eje y no avanza, lo estoy intentando con millis) y sabiendo su velocidad aplico la fórmula vel=dist*tiempo.

con lo que tengo el problema es para tomar el tiempo en que esta avanzado, continuacion pego el codigo, borre unas cosas irrelevantes para no ocupar mucho espacio :p

unsigned long timet=0;
unsigned long timeentrada=0;


void setup() {

  serial.begin(9600);
 
}
void loop () {
 
  unsigned long timeahora = millis();
 
  int velizq = 105;
  int velder = 100;
 
  //lectura de los sensores reflectores opticos
  int vqrdizq = analogread(sqrdizq);
  int vqrdder = analogread(sqrdder);

 
  // avance, si los sensores leen "blanco" avanzara derecho, este es el tiempo que quiero tomar
  if( vqrdizq<700 && vqrdder<600){
   
    timeentrada=timeahora; //guarda el tiempo en que empezó avanzar
   
    //comandos para que avance
    digitalwrite(in1izq, low);
    digitalwrite(in2izq, high);
    analogwrite(pwmder, velder);
    digitalwrite(in3der, high);
    digitalwrite(in4der, low);
    analogwrite(pwmizq, velizq);
 
  //se vuelven leer los sensores
    int vqrdizq = analogread(sqrdizq);
    int vqrdder = analogread(sqrdder);

    timet=(timet)+(timeahora-timeentrada); // tiempo total es igual al tiempo total + (el tiempo de ahora menos el tiempo en que entro al if)
 
  }
     
      // vuelta derecha, si el sensor de la derecha lee negro,el carro necesitara dar vuelta la derecha
if( vqrdizq<700 && vqrdder>600){
 
  // cambios de velocidad para que pueda dar bien las vueltas
  velizq=velizq+50;
  velder=velder+50;

    digitalwrite(in1izq, low);
    digitalwrite(in2izq, high);
    analogwrite(pwmder, velder);
    digitalwrite(in3der, low);
    digitalwrite(in4der, high);
    analogwrite(pwmizq, velizq);
   
    //se vuelven leer los sensores 
    int vqrdizq = analogread(sqrdizq);
    int vqrdder = analogread(sqrdder);
    int vherizq = analogread(sherizq);
    int vherder = analogread(sherder);
   
   }
       
          // vuelta izquierda
if( vqrdizq>700 && vqrdder<600){
 
  velder=velder+50;
  velizq=velizq+50;

    digitalwrite(in1izq, high);
    digitalwrite(in2izq, low);
    analogwrite(pwmder, velder);
    digitalwrite(in3der, high);
    digitalwrite(in4der, low);
    analogwrite(pwmizq, velizq);
   
    int vqrdizq = analogread(sqrdizq);
    int vqrdder = analogread(sqrdder);
    int vherizq = analogread(sherizq);
    int vherder = analogread(sherder);
   
  }
           
            // stop, al entrar esta decisión quiere decir que terminó su recorrido
if( vqrdizq>700 && vqrdder>600){
    digitalwrite(in1izq, low);
    digitalwrite(in2izq, low);
    analogwrite(pwmder, velder);
    digitalwrite(in3der, low);
    digitalwrite(in4der, low);
    analogwrite(pwmizq,velizq);
   
    //como ya termino su recorrido, aqui quiero imprimir el tiempo que estuvo en "avance"
   unsigned long time=timet/1000; //el tiempo que estuvo avanzando en segundos
   serial.println(time);
   delay(1000);

  }
  }

en negrits esta lo que tiene que ver con la toma del tiempo, el problema es que cuando termina su recorrido lo conecto la pc y en el serial me imprime 0 :/

saludos y gracias de antemano.

pd: otra opcion seria utilizar un encoder, como podria utilizar esto?

...
void loop () {
  unsigned long timeahora = millis();       // almacenas valor milis para controlar pongamos un valor 1234  :p
...
  if( vqrdizq<700 && vqrdder<600){
    timeentrada=timeahora;                //guarda el tiempo en que empezó avanzar, ahora timeentrada también vale 1234  :smiley-mr-green:
...
    timet=(timet)+(timeahora-timeentrada); // tiempo total es igual al tiempo total 0 en un principio + (1234-1234)   :smiley-roll-blue:



Arduino Forum > International > Español > Proyectos (Moderators: surbyte, Hector_A) > Ayuda, seguidor de linea


arduino

Comments

Popular posts from this blog

opencv3, tbb and rasp pi 2 - Raspberry Pi Forums

small ethernet problem - Raspberry Pi Forums

Multithumb configuration params not working? - Joomla! Forum - community, help and support