Go Down

Topic: Proyecto Domotica (Read 396 times) previous topic - next topic

Hola, estoy haciendo un proyecto de domotica que es el siguiente: Tengo las luces exteriores que a través de una LDR se enciende un LED, para las persianas tengo un Servo que a través de una LDR gira 180 grados y un sistema de alarma en el cual hay un sensor PIR y un led; cuando el sensor PIR detecta un movimiento el led se enciende.
A todo esto tengo un problema y es que cuando tengo tapada la LDR de las luces exteriores i se enciende el led de las luces exteriores el sistema de alarma, es decir, el sensor PIR no va y no enciende el led y viceversa.
No se si es problema del código o del circuito, aquí dejo el código:

// Incluir la libreria Servo.h
#include <Servo.h>

// Asignamos un pin a cada variable.
int pinLedLight = 13;
int pinLedAlarm = 8;
int pinServo = 12;
int pinLDRLight = A0;
int pinLDRServo = A1;
int pinPirSensor = 2;

int pirState = LOW;

// Variable de la clase Servo.
Servo servo;

// Umbral minimo para que se cambie el led.
int LDRThreshold = 20;

void setup() {
 
  Serial.begin(9600);
 
  // Indicamos el pin del servo a la variable de clase Servo.
  servo.attach(pinServo);
 
  //Indicamos si el pin es de salida o de entrada.
  pinMode(pinLedLight, OUTPUT);
  pinMode(pinLedAlarm, OUTPUT);
  pinMode(pinPirSensor, INPUT);
  pinMode(pinLDRLight, INPUT);
  pinMode(pinLDRServo, INPUT);
}

// Bucle del programa
void loop() {
  ldrFunction( analogRead(pinLDRLight) );
  servoFunction( analogRead(pinLDRServo) );
  alarmFunction ( digitalRead(pinPirSensor) );
}

/*Esta funcíon devuelve el valor boleano true o false
dependiendo del valor obtenido en el analoginput.
El parámetro threshold define la cantidad de señal que tiene
que recibir para devolver un valor u otro.
*/
boolean calculateOnOff(int val, int threshold) {
  if (val >= threshold) {
    return true;
  } else if (val < threshold) {
    return false;
  }
}

int ldrStatus = false;
// Esta funcion se encarga de encender el led dependiendo de la luz
void ldrFunction(int val) {
  // Aquí asignamos el valor obtenido con la funcion anterior en una variable.
  boolean onOff = calculateOnOff(val, LDRThreshold);
 
  //si es true se ejecuta esto.
  if (onOff) {
    digitalWrite(pinLedLight, LOW);
    if (ldrStatus == false) {
      Serial.println("Luces jardin encendido");
      ldrStatus = true;
    }
  //si es false se ejecuta esto otro.
  } else {
    digitalWrite(pinLedLight, HIGH);
    if (ldrStatus) {
      Serial.println("Luces jardin apagado");
      ldrStatus = false;
    }
  }
}

boolean servoStatus = false;
void servoFunction(int val) {
  boolean onOff = calculateOnOff(val, LDRThreshold);
  if (onOff) {
    servo.write(90);
    if (servoStatus == false) {
       Serial.println("Persianas On");
       servoStatus = true;
    }
  } else {
    servo.write(0);
    if (servoStatus) {
       Serial.println("Persianas Off");
       servoStatus = false;
    }
  }
}

void alarmFunction(int val) {
  if (val == HIGH) {
    digitalWrite(pinLedAlarm, HIGH);
    if (pirState == LOW) {
      Serial.println("Pir encendido");
      pirState = HIGH;
    }
  } else {
    digitalWrite(pinLedAlarm, LOW);
    if (pirState == HIGH){
      Serial.println("Pir apagado");
      pirState = LOW;
    }
  }
}

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