Pages: [1]   Go Down
Author Topic: Proyecto Domotica  (Read 349 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: