Go Down

Topic: Usar 2 o mas sensores PIR al mismo tiempo (Read 146 times) previous topic - next topic

falso89

Estoy haciendo un proyecto escolar, y necesito usar 8 sensores PIR para detectar la presencia de obstaculos alrededor de un camion.

3 sensores en el lado izquierdo imprimen una A, 3 sensores del lado derecho imprimen una B, un sensor delantero imprime una C y el sensor trasero imprime una D.

El problema es que a pesar de no haber ninguna presencia en las cercanias de los sensores, estos envian la señal sin parar y muy rara vez los sensores que imprimen C y D logran mostrar su "dato".

Mi pregunta es si hay una forma de controlar mejor estos sensores para que no envien datos cuando no les corresponde. Gracias por su ayuda. Adjunto el codigo de programacion.

Code: [Select]

int ct = 30;
int pirPin1 = 2; //Lado izquierdo 1_____A
int pirPin2 = 3; //Lado izquierdo 2_____A
int pirPin3 = 4; //Lado izquierdo 3_____A
int pirPin4 = 5; //Lado derecho 1_____B
int pirPin5 = 6; //Lado derecho 2_____B
int pirPin6 = 7; //Lado derecho 3_____B
int pirPin7 = 8; //Delantero____C
int pirPin8 = 9; //Trasero____D

void setup(){
  Serial.begin(9600);
  pinMode(pirPin1, INPUT);
  pinMode(pirPin2, INPUT);
  pinMode(pirPin3, INPUT);
  pinMode(pirPin4, INPUT);
  pinMode(pirPin5, INPUT);
  pinMode(pirPin6, INPUT);
  pinMode(pirPin7, INPUT);
  pinMode(pirPin8, INPUT);
 
  digitalWrite(pirPin1, LOW);
  digitalWrite(pirPin2, LOW);
  digitalWrite(pirPin3, LOW);
  digitalWrite(pirPin4, LOW);
  digitalWrite(pirPin5, LOW);
  digitalWrite(pirPin6, LOW);
  digitalWrite(pirPin7, LOW);
  digitalWrite(pirPin8, LOW);

  Serial.println("Calibrando sensores");
  for(int i = 0; i <= ct; i++){
    Serial.println(((1*100)/ct));
    Serial.print("%");
    Serial.println(" Completado ");
    delay(1000);
  }
  Serial.println("Calibracion completada satisfactoriamente.");
  Serial.println("** SENSORES ACTIVOS **");
  delay(3000);
}

void loop (){
   if (digitalRead(pirPin1) == HIGH)
  {
    Serial.println("A");
    delay(3000);
  }
   else
  {
   
  }
   if (digitalRead(pirPin2) == HIGH)
  {
    Serial.println("A");
    delay(3000);
  }
   else
  {
   
  }
   if (digitalRead(pirPin3) == HIGH)
  {
    Serial.println("A");
    delay(3000);
  }
   else
  {
   
  } 
   if (digitalRead(pirPin4) == HIGH)
  {
    Serial.println("B");
    delay(3000);
  }
   else
  {
   
  }
     if (digitalRead(pirPin5) == HIGH)
  {
    Serial.println("B");
    delay(3000);
  }
   else
  {
   
  }
     if (digitalRead(pirPin6) == HIGH)
  {
    Serial.println("B");
    delay(3000);
  }
   else
  {
   
  }
     if (digitalRead(pirPin7) == HIGH)
  {
    Serial.println("C");
    delay(3000);
  }
   else
  {
   
  }
     if (digitalRead(pirPin8) == HIGH)
  {
    Serial.println("D");
    delay(3000);
  }
   else
  {
   
  }
}

Arduinito

#1
May 12, 2017, 12:50 pm Last Edit: May 12, 2017, 12:51 pm by Arduinito
Tienes delay() entre cada pin que lees. Es imposible que lo haga a la vez.
Como son lecturas digitales y no analógicas lee todas de seguido y luego pon el delay. Si necesitas un comportamiento sin detener el resto del código (que es lo que hace delay) tienes que hacer "timers" usando millis por ejemplo.

surbyte

En la librería NewPing existe un ejemplo de multiples sensores Ultrasónicos.
Empieza con ella ajustando la cantidad de sensores a tu caso y luego mira si las respuestas son mas lógicas.

Porque al arrancar pones CALIBRACION DE SENSORES? No hay nada que calibrar.

Code: [Select]
  Serial.println("Calibracion completada satisfactoriamente.");
  Serial.println("** SENSORES ACTIVOS **");


Es solo para impresionar al profesor?


Go Up