Problema con 3 sensores Ping Parallax

Bueno chic@s ya he acabado el proyecto :slight_smile:

Como siempre gracias a todos los que me habéis ayudado (FM y Sergegsx). Esta tarde/noche colgaré todo el código y la foto del brazo por si a alguien le puede servir mi proyecto para alguna cosa persona o también de proyecto. :slight_smile:

Parte 1

Bueno, lo prometido es deuda, aunque tarde..
Aquí está todo el código del proyecto, por si a alguien le puede servir.

Cada trozo de código tiene comentada su función.

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

   PROYECTO FINAL DE 
   ISAAC FERRES MELENDRES
                                                                           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
// Estos pines estan conectados a PWM ya que son analalogicos y nos permite modificar los pulsos de energia
// http://arduino.cc/es/Tutorial/PWM y http://arduino.cc/es/Tutorial/SecretsOfArduinoPWM

//Vibradores
int vibrador = 11;
int vibrador2 = 10;
int vibrador3 = 9;

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

//Zumbador
int zumbador = 6;

void setup() 
{
  // Iniciamos la comunicación por serial:
  Serial.begin(14400);
  //Especificamos el zumbador como salida de datos
  pinMode(zumbador, OUTPUT);
  //Especificamos los vibradores como salida de datos
  pinMode(vibrador,OUTPUT); 
  pinMode(vibrador2,OUTPUT); 
  pinMode(vibrador3,OUTPUT);
}

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);
  
    //Especificamos los sensores como entrada de datos
  pinMode(pingPin,INPUT);
  duration = pulseIn(pingPin,HIGH);
  cm = microsecondsToCentimeters(duration);



    // ----------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);

  //Especificamos los sensores como entrada de datos
  
  pinMode(pingPin2,INPUT);
  duration2 = pulseIn(pingPin2, HIGH);
  cm2 = microsecondsToCentimeters2(duration2);
  
  

    // ----------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 sensores como entrada de datos
  pinMode(pingPin3,INPUT);
  duration3 = pulseIn(pingPin3, HIGH);
  cm3 = microsecondsToCentimeters3(duration3);
  
 
  
     //----------------------------------------
     //         VIBRADOR 1   (DELANTERO)
     //----------------------------------------
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.

  //Si esta entre 10cm y 60cm
  if((cm>=10)&&(cm<=60))
  {
      // Si esta entre 25cm y 60cm
      if((cm>=25)&&(cm<=60))
        {      
              //Si esta entre 45cm y 60cm
              if((cm>=45)&&(cm<=60))
              {
                    for(int fadeValue = 0 ; fadeValue <= 64; fadeValue +=5) 
                       { 
                        analogWrite(vibrador, fadeValue);   
                        analogWrite(zumbador, fadeValue);
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(40);                  // espera 0,4seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(40);                  // espera 0,4seg                   
                       }
              }
              else
              {    //Si NO esta entre 45cm y 60cm, esta entre 25cm y 45cm
                    for(int fadeValue = 0 ; fadeValue <= 127; fadeValue +=5) 
                       { 
                        analogWrite(vibrador, fadeValue);
                        analogWrite(zumbador, fadeValue);   
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(20);                  // espera 0,2seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(20);                  // espera 0,2seg.                                                      
                       }
              }
        }
       else
        { 
          //Si NO esta entre 25cm y 60cm, esta entre 10cm y 25cm
          for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
               { 
                analogWrite(vibrador, fadeValue);  
                analogWrite(zumbador, fadeValue); 
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(10);                  // espera 0,1seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(10);                  // espera 0,1seg.                       
               }
        }     
  }
  else
  {
        //Si NO esta entre 10cm y 60cm, esta a menos de 10cm o a mas de 60cm, APAGAMOS vibrador.
         for(int fadeValue = 0 ; fadeValue <= 0; fadeValue +=5) 
           { 
            analogWrite(vibrador, fadeValue); 
            analogWrite(zumbador, fadeValue);              
           }    
  }

PD: Como bien dicen los expertos (y no es ironía ^_^) el código se puede mejorar bastante mediante funciones, pero yo no se más ni tengo más tiempo, así que así os lo entrego.

Espero que a alguien le pueda servir.

Un saludo y muchas gracias de nuevo a tod@s los que habéis echo posible que apruebe el proyecto :grin:

Parte 2

     //----------------------------------------
     //         VIBRADOR 2   (DERECHO)
     //----------------------------------------
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.
if((cm2>=10)&&(cm2<=60))
  {
      // Si esta entre 25cm y 60cm
      if((cm2>=25)&&(cm2<=60))
        {      
              //Si esta entre 45cm y 60cm
              if((cm2>=45)&&(cm2<=60))
              {
                    for(int fadeValue = 0 ; fadeValue <= 64; fadeValue +=5) 
                       { 
                        analogWrite(vibrador2, fadeValue); 
                        analogWrite(zumbador, fadeValue);
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(40);                  // espera 0,4seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(40);                  // espera 0,4seg                         
                       }
              }
              else
              {    //Si NO esta entre 45cm y 60cm, esta entre 25cm y 45cm
                    for(int fadeValue = 0 ; fadeValue <= 127; fadeValue +=5) 
                       { 
                        analogWrite(vibrador2, fadeValue);  
                        analogWrite(zumbador, fadeValue);   
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(20);                  // espera 0,2seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(20);                  // espera 0,2seg.                         
                       }
              }
        }
       else
        { 
          //Si NO esta entre 25cm y 60cm, esta entre 10cm y 25cm
          for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
               { 
                analogWrite(vibrador2, fadeValue);   
                analogWrite(zumbador, fadeValue); 
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(10);                  // espera 0,1seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(10);                  // espera 0,1seg.                 
               }
        }     
  }
  else
  {
        //Si NO esta entre 10cm y 60cm, esta a menos de 10cm o a mas de 60cm, APAGAMOS vibrador.
         for(int fadeValue = 0 ; fadeValue <= 0; fadeValue +=5) 
           { 
            analogWrite(vibrador2, fadeValue);                                    
           }    
  } 
 
 
 
 
 
 
 
 
  

     //----------------------------------------
     //         VIBRADOR 3   (IZQIUERDO)
     //----------------------------------------     
//Si Sensor 1 es menor a 50cm y mayor a 10cm activamos Vibrador 1.
if((cm3>=10)&&(cm3<=60))
  {
      // Si esta entre 25cm y 60cm
      if((cm3>=25)&&(cm3<=60))
        {      
              //Si esta entre 45cm y 60cm
              if((cm3>=45)&&(cm3<=60))
              {
                    for(int fadeValue = 0 ; fadeValue <= 64; fadeValue +=5) 
                       { 
                        analogWrite(vibrador3, fadeValue);   
                        analogWrite(zumbador, fadeValue);
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(40);                  // espera 0,4seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(40);                  // espera 0,4seg                         
                       }
              }
              else
              {    //Si NO esta entre 45cm y 60cm, esta entre 25cm y 45cm
                    for(int fadeValue = 0 ; fadeValue <= 127; fadeValue +=5) 
                       { 
                        analogWrite(vibrador3, fadeValue);  
                        analogWrite(zumbador, fadeValue);   
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(20);                  // espera 0,2seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(20);                  // espera 0,2seg.                         
                       }
              }
        }
       else
        { 
          //Si NO esta entre 25cm y 60cm, esta entre 10cm y 25cm
          for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) 
               { 
                analogWrite(vibrador3, fadeValue); 
                analogWrite(zumbador, fadeValue); 
                          digitalWrite(zumbador, HIGH);   // enciende el zumbador (on)
                          delay(10);                  // espera 0,1seg.
                          digitalWrite(zumbador, LOW);    // apaga el zumbador (off)
                          delay(10);                  // espera 0,1seg.                 
               }
        }     
  }
  else
  {
        //Si NO esta entre 10cm y 60cm, esta a menos de 10cm o a mas de 60cm, APAGAMOS vibrador.
         for(int fadeValue = 0 ; fadeValue <= 0; fadeValue +=5) 
           { 
            analogWrite(vibrador3, fadeValue);                                    
           }    
  }   

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

} //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;
}

que tal fue el proyecto?
yo tengo un pfc con arduino y tengo curiosidad de ver que tal evaluan este tipo de proyectos.

De qué va tu proyecto?

fm:
De qué va tu proyecto?

Monitorización de los consumos de una vivienda
Esta enfocado en una vivienda pero la idea es que todo es extrapolable a industria.
Incluye entorno web, sistema de avisos, monitorización de temperaturas, calefacción, caldera, grupo presión, puertas, y un largo etc. Ya lo colgare cuando este terminado.
Esta preparado para realizar funciones domoticas tambien.

El tema es que soy Ing. Mecanico y quise aprender electronica poniendome un objetivo y por eso hago el pfc en electronica.