Go Down

Topic: Manejo de dos Sensores PIR para prender y apagar Leds  (Read 655 times) previous topic - next topic

beto2408

Hola buen dia, estoy generando un proyecto de led para unas escaleras, estas deben de prender cuando subo las escaleras (Sensor 1) y apagarse cuando llego a la parte de arriba y cruzo el ultimo escalón (Sensor 2) y viceversa, actualmente lo hace pasando un cierto tiempo pero quiero hacerlo con los sensores PIR.

Agradezco mucho su ayuda.

Agrego lo que tengo de mi codigo.

Code: [Select]


int timeron = 300;           // Velocidad de los leds
int timeroff = 300;

int sensor_1=11; // Sensor Abajo
int sensor_2=12; // Sensor Arriba
int estado_sensor_1=0;
int estado_sensor_2=0;

int led1 = 0;
int led2 = 1;
int led3 = 2;
int led4 = 3;
int led5 = 4;
int led6 = 5;
int led7 = 6;
int led8 = 7;
int led9 = 8;
int led10 = 9;

void setup()
{
  pinMode (led1,OUTPUT);
  pinMode (led2,OUTPUT);
  pinMode (led3,OUTPUT);
  pinMode (led4,OUTPUT);
  pinMode (led5,OUTPUT);
  pinMode (led6,OUTPUT);
  pinMode (led7,OUTPUT);
  pinMode (led8,OUTPUT);
  pinMode (led9,OUTPUT);
  pinMode (led10,OUTPUT);
  pinMode (sensor_1,INPUT);
  pinMode (sensor_2,INPUT);
 
  digitalWrite (led1,LOW);
  digitalWrite (led2,LOW);
  digitalWrite (led3,LOW);
  digitalWrite (led4,LOW);
  digitalWrite (led5,LOW);
  digitalWrite (led6,LOW);
  digitalWrite (led7,LOW);
  digitalWrite (led8,LOW);
  digitalWrite (led9,LOW);
  digitalWrite (led10,LOW);
}


void loop()
{
  estado_sensor_1=digitalRead(sensor_1);
  estado_sensor_2=digitalRead(sensor_2);
 
  if (estado_sensor_1==HIGH)
    {
      subir_escaleras();
    }

  if (estado_sensor_2==HIGH)
    {
      bajar_escaleras();
    }

}

void subir_escaleras()
{
  digitalWrite (led1,HIGH);
  delay(timeron);
  digitalWrite (led2,HIGH);
  delay(timeron);
  digitalWrite (led3,HIGH);
  delay(timeron);
  digitalWrite (led4,HIGH);
  delay(timeron);
  digitalWrite (led5,HIGH);
  delay(timeron);
  digitalWrite (led6,HIGH);
  delay(timeron);
  digitalWrite (led7,HIGH);
  delay(timeron);
  digitalWrite (led8,HIGH);
  delay(timeron);
  digitalWrite (led9,HIGH);
  delay(timeron);
  digitalWrite (led10,HIGH);
 
  delay(5000);
 
  digitalWrite (led1,LOW);
  delay(timeroff); 
  digitalWrite (led2,LOW);
  delay(timeroff);
  digitalWrite (led3,LOW);
  delay(timeroff);
  digitalWrite (led4,LOW);
  delay(timeroff);
  digitalWrite (led5,LOW);
  delay(timeroff);
  digitalWrite (led6,LOW);
  delay(timeroff);
  digitalWrite (led7,LOW);
  delay(timeroff);
  digitalWrite (led8,LOW);
  delay(timeroff);
  digitalWrite (led9,LOW);
  delay(timeroff);
  digitalWrite (led10,LOW);

}

void bajar_escaleras()
{
  digitalWrite (led10,HIGH);
  delay(timeron);
  digitalWrite (led9,HIGH);
  delay(timeron);
  digitalWrite (led8,HIGH);
  delay(timeron);
  digitalWrite (led7,HIGH);
  delay(timeron);
  digitalWrite (led6,HIGH);
  delay(timeron);
  digitalWrite (led5,HIGH);
  delay(timeron);
  digitalWrite (led4,HIGH);
  delay(timeron);
  digitalWrite (led3,HIGH);
  delay(timeron);
  digitalWrite (led2,HIGH);
  delay(timeron);
  digitalWrite (led1,HIGH);
 
  delay(5000);
 
  digitalWrite (led10,LOW);
  delay(timeroff);
  digitalWrite (led9,LOW);
  delay(timeroff); 
  digitalWrite (led8,LOW);
  delay(timeroff); 
  digitalWrite (led7,LOW);
  delay(timeroff);
  digitalWrite (led6,LOW);
  delay(timeroff);
  digitalWrite (led5,LOW);
  delay(timeroff);
  digitalWrite (led4,LOW);
  delay(timeroff);
  digitalWrite (led3,LOW);
  delay(timeroff);
  digitalWrite (led2,LOW);
  delay(timeroff);
  digitalWrite (led1,LOW);
}




Gracias

Ronivan

#1
Aug 08, 2020, 03:59 am Last Edit: Aug 13, 2020, 09:07 pm by surbyte Reason: Agregado de etiqueta para enlaces
Hola, para empezar no entiendo porque pones un delay entre cada led, entiendo que al final todos los leds deben de prenderse y apagarse a la vez.

Por otro lado, si vas a manejar bastantes leds a la vez, seria recomendable que utilices un transistor o rele según corresponda para no exceder la cantidad de corriente que soporta la placa y evitar sobrecalentarla, de tal forma que solo necesitarías un único pin de salida para controlar toda una tira led.

Al incluir delay, cuando el sensor B se active, el arduino no recibira su estado hasta que no acabe el delay que programaste al inicio, de tal forma, es mas recomendable usar la función millis, a fin de poner un temporizador, en este link https://forum.arduino.cc/index.php?topic=698117.0 puse un código de ejemplo para un temporizador usando la función millis, que fácilmente se adecua a tu caso modificando algunas pequeñas cosas.


Go Up