Go Down

Topic: Problem/a with/con 3 sensor Ping Parallax (Read 371 times) previous topic - next topic

Buenas tardes Sr.,
estoy en un proyecto de la universidad con la aplicación de Arduino y 3 sensores Ping Parallax y he tropezado con una piedra.

Hice un código para 1 sensor Ping de Parallax y 1 Vibrador, el cual se mostraba en el Monitor Serial.
Todo funciona correctamente, pero si intento hacer lo mismo con 3 sensores y 3 vibradores no me funciona. Solamente muestra las medidas del primer sensor y no de los demás.

Llevo mucho tiempo investigando, haciendo pruebas, de que puede ser pero no hay manera... Tengo muy pocos conocimientos de Arduino y es la primera vez que programo para este mismo así que no se muy bien como lo puedo arreglar y les estaría MUY agradecido de saber que puede estar fallando..

El Código es el siguiente:

/*
                ÚLTIMA MODIFICACIÓN: 17 DE SEPTIEMBRE DEL 2012, POR ISAAC FERRES MELENDRES
   

   PROYECTO FINAL DE
   ISAAC FERRES MELENDRES
   DAMIÀ MIGUEL FIGA                                                 NOTA: NOS FALTAN PUERTOS LIBRES. SE DEBERÍA AMPLIAR A UN ARDUINO MEGA O A OTRA PLACA ARDUINO.
                                                                           HABRÍA QUE TENER EN CUENTA LA ALIMENTACIÓN NECESARIA DE SER 1 O 2 ARDUINOS Y FUTURAS
                                                                           AMPLIACIONES COMO GPS, TRANSFORMADOR DE OCR, ETC.
Codigo PIN para:
3 sensor
3 motores vibrador
     
   El circuito:
   * +V connection of the PING))) attached to +5V
   * GND connection of the PING))) attached to ground
   * SIG connection of the PING))) attached to digital pin 7

Estas constantes no cambian. */

// Vibradores conectados al PIN correspondiente y a GND
int vibrador = 13;
int vibrador2 = 12;
int vibrador3 = 8;

//Sensores de ultrasonido
const int pingPin = 7;
const int pingPin2 = 4;
const int pingPin3 = 2;

void setup()
{
  // Iniciamos la comunicación por serial:
  Serial.begin(14400);
}

void loop()
{
  /* Establevemos variables para la duración del ping
     y mostramos el resultado de la distancia en centrimetros*/

//Distancia espacio/tiempo     
  long duration, duration2, duration3, cm, cm2, cm3;

/*Dentro del Loop vamos a activar los vibradores
   en las distancias correspondientes */
 
    // ----------PING 1-------
    // The PING))) envia un pulso alto (HIGH) con duracion de 2 microsegundos.
    // Luego envia un pulso bajo (LOW) para hacer una limpieza del pulso alto (LOW)
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

    // ----------PING 2-------
    // The PING))) envia un pulso alto (HIGH) con duracion de 2 microsegundos.
    // Luego envia un pulso bajo (LOW) para hacer una limpieza del pulso alto (LOW)
  pinMode(pingPin2, OUTPUT);
  digitalWrite(pingPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin2, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin2, LOW);

    // ----------PING 3-------
    // The PING))) envia un pulso alto (HIGH) con duracion de 2 microsegundos.
    // Luego envia un pulso bajo (LOW) para hacer una limpieza del pulso alto (LOW)
  pinMode(pingPin3, OUTPUT);
  digitalWrite(pingPin3, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin3, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin3, LOW);
 


   
    //Especificamos los vibradores como salida de datos
  pinMode(vibrador,OUTPUT);
  pinMode(vibrador2,OUTPUT);
  pinMode(vibrador3,OUTPUT);
 
  //Especificamos los sensores como entrada de datos
  pinMode(pingPin,INPUT);
  duration = pulseIn(pingPin,HIGH);
  cm = microsecondsToCentimeters(duration);
 
  pinMode(pingPin2,INPUT);
  duration = pulseIn(pingPin2, HIGH);
  cm2 = microsecondsToCentimeters2(duration);

  pinMode(pingPin3,INPUT);
  duration = pulseIn(pingPin3, HIGH);
  cm3 = microsecondsToCentimeters3(duration);
 
     //         VIBRADOR 1   (DELANTERO)
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.
  if((cm>=10)&&(cm<=60))
  {
   digitalWrite(vibrador,HIGH);
  }
  else
  {
    digitalWrite(vibrador,LOW);
  }
 
 
     //         VIBRADOR 2   (DERECHO)
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.
  if((cm2>=10)&&(cm2<=60))
  {
   digitalWrite(vibrador2,HIGH);
  }
  else
  {
    digitalWrite(vibrador2,LOW);
  }


     //         VIBRADOR 3   (IZQIUERDO)
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.
  if((cm3>=10)&&(cm3<=60))
  {
   digitalWrite(vibrador3,HIGH);
  }
  else
  {
    digitalWrite(vibrador3,LOW);
  }   

  Serial.print(cm);
  Serial.print("cm");
  Serial.print("   ");
  Serial.print(cm2);
  Serial.print("cm2");
  Serial.print("   ");
  Serial.print(cm3);
  Serial.print("cm3");
  Serial.println();


  //Tiempo de muestreo expresado en milisegundos
  delay(10);
} //Cerramos el LOOP



  //Convertimos las medidas de microsegundos a centimetros
long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

long microsecondsToCentimeters2(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

long microsecondsToCentimeters3(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}


Aquí un video demostrativo:

http://youtu.be/7lWpZMIzZqA

Otro problema también es que tarda MUCHO en muestrear cuando están los 3 sensores Ping puestos, y no como cuando solamente tengo 1 Ping que tarda 10mseg. Mi pregunta respecto a eso es, se podría mejorar la velocidad de muestreo con los 3 Ping cambiando la Placa Arduino UNO por un Arduino MEGA o superior?
Muchísimas gracias de nuevo!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy