Go Down

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

malcolm_1988

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