Go Down

Topic: Casa domotica sensores diversos en un solo arduino (Read 1 time) previous topic - next topic

merfol

Jul 10, 2014, 10:47 pm Last Edit: Jul 11, 2014, 03:09 am by merfol Reason: 1
hola disculpen de casualidad no me podrían ayudar con un proyecto de arduino? , me presento, me llamo marcos, y he utilizado el arduino desde hace año y medio, pero ahora no tengo mucho tiempo para este jobi, pero, estoy pensando en hacer un programa de una casa domotica, donde pueda hacer las siguientes instrucciones, que active la luz cuando no este mucha luz disponible, también en que me encienda un motor o un ventilador cuando le conecte un sensor de temperatura , y me detecte movimientos  de la casa, para activar una alarma,  he hecho unos cuantos programas pero no me salen, y de que   pueda hacer todo esto funcionando al mismo tiempo en el arduino, aquí les voy a poner el programa,  díganme por favor que le pongo o que le quito, por favor si, es que si requiero ayuda, antes no me habia enfrentado a un proyecto de tal magnitud, aquí esta el programa bueno son dos díganme que tengo que poner o quitar por favor :
programa uno :

int Led=12;
int ntc=A2;
int Val=0;
float temp = 0;
int nivel =27; //variable que guarda el límite de temperatura
int nivel2 =24;
int led=8;
int (LDR)=A3;
int  val = 0;
float Luz = 0;
int Nivel =180; //variable que guarda el límite de temperatura
int Nivel2 =90; // variable limite de temperatura bajo
int pirPin = 6; //Pin digital 6
int ledPin = 13; //Led de alarma
void setup()
{
{
 {
pinMode(led,OUTPUT); // define la salida del led
pinMode(ntc,INPUT); // define la señal de entrada
Serial.begin(9600);
}
pinMode(led,OUTPUT); // define la salida del led
pinMode(LDR,INPUT); // define la señal de entrada
Serial.begin(9600); // abre el puerto serial para lectura
}
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
{
{
Val = analogRead(ntc); //lee y almacena el dato del sensor
temp = Val*399/1024; //procesa la escala para ajustarla
Val = int(temp); //cambia el tipo float a entero
Serial.print("Temperatura:\t"); //escribe el texto temperatura
Serial.print(Val); //imprime la temperatura acondicionada
Serial.println(); //brinca un renglon
delay(200); //espera 200 ms antes de la siguiente lectura
if(Val<=nivel) // Pregunta si la señal del sensor supera el nivel marcado:
digitalWrite(Led,HIGH); //se enciende un aviso luminoso y se activa dispositivo
if(Val>nivel2);
digitalWrite(Led,LOW);
}
val = analogRead(LDR); //lee y almacena el dato del sensor
LDR = val * 399/1024; //procesa la escala para ajustarla
val = int(Luz); //cambia el tipo float a entero
Serial.print("Luz:\t"); //escribe el texto temperatura
Serial.print(val); //imprime la temperatura acondicionada
Serial.println(); //brinca un renglon
delay(200); //espera 200 ms antes de la siguiente lectura
if(val>nivel) // Pregunta si la señal del sensor supera el nivel marcado:
digitalWrite(led,HIGH); //se enciende un aviso luminoso y se activa dispositivo
if(val<=nivel2);
digitalWrite(led,LOW);
}
int pirVal = digitalRead(pirPin);

if(pirVal == LOW)
{
   //Movimiento detectado
   digitalWrite(ledPin,HIGH);
   delay(1000);
   digitalWrite(ledPin,LOW);
    }
}
 
Programa 2 :
int pirPin = 6; //Pin digital 6
int ledPin = 11; //Led de alarma
int led=12;
int Led=10;

int ntc or LDR= A2;
int ntc or LDR= A3;
int val=0;
float temp or luz = 0;
int Nivel t= 26;
int Nivel 2 t = 20;
int Nivel Luz =125;
int nivel 2 Luz= 80;

void setup M(){
pinMode(pirPin, INPUT);
int LedPin(OUTPUT);
Serial.begin(9600);
}
void setup ntc (){
 pinMode(Led,OUTPUT); // define la salida del led
pinMode(ntc,INPUT);
Serial.begin(9600);
}
void setup LDR (){
 
void loop()
{
 int pirVal = digitalRead(pirPin);

 if(pirVal == LOW)
 {
   //Movimiento detectado
   digitalWrite(ledPin,LOW);
   delay(100);
   digitalWrite(ledPin,HIGH);
 }
}

Ayuda por favor   :smiley-sweat: :smiley-eek-blue: :. =( :)
ayuda por favor urge

Marcial

Una idea:

Code: [Select]

#define ON HIGH                    // Cambiar aqui para reles logica positiva/negativa
#define OF LOW                     // Cambiar aqui para reles logica positiva/negativa

                                    //Variables auxiliares
unsigned long U_Millis = 0;         // Variable que controla desborde de millis()

                                    // Variables para control de temperatura
byte E_Termperatura = A2;           // Entrada de temperatura
byte S_Calentar = 12;               // Salida Calefactor
byte S_Enfriar = 8;                 // Salida Enfriador
int T_Ambiente = 0;                 // Valor de temperatura ambiente en decimas
int T_Maxima = 270;                 // Valor de temperatura maxima deseada en decimas
int T_Minima = 250;                 // Valor de temperatura minima deseada en decimas
unsigned long F_Temperatura = 200;  // Frecuencia de comprobacion de temperatura
unsigned long C_Temperatura = 0;    // Variable que controla la frecuencia
bool Calentando = false;            // Variable que controla estado calentador
bool Enfriando = false;             // Variable que controla estado enfriador


void setup()
{
  Serial.begin(9600);
  pinMode(S_Calentar, OUTPUT);      // define pin como salida
  pinMode(S_Enfriar, OUTPUT);       // define pin como salida   
  pinMode(E_Termperatura, INPUT);   // define pin como entrada
  digitalWrite(S_Calentar, OF);     // Asegurarse deiniciar con reles apagados
  digitalWrite(S_Enfriar, OF);      // Asegurarse deiniciar con reles apagados
}

void loop()
{
  U_Millis=millis();                                     // Almacenamos millis para controlar su desborde
  if (millis() > C_Temperatura)                          // Es tiempo de comprobar temperatura
  {
    T_Ambiente = Leer_Temperatura();                     // Obtener temperatura
    Calentando=false;
    Enfriando=false;
    if (T_Ambiente > T_Maxima) {Enfriando=true;}          // Control de temperatura
    else if ( T_Ambiente < T_Minima ) {Calentando=true;}
    Serial.print("Temperatura:\t");                       //escribe estado
    Serial.println(T_Ambiente/10.0);                     
    Serial.print("Calentando\t");                       
    Serial.println(Calentando);                           
    Serial.print("Enfriando\t");                       
    Serial.println(Enfriando);   
    C_Temperatura = millis() + F_Temperatura;             // Nuevo timepo para comprobar
  }

  if (Calentando) {digitalWrite(S_Calentar, ON);} else {digitalWrite(S_Calentar, OF);}
  if (Enfriando)  {digitalWrite(S_Enfriar, ON);}  else {digitalWrite(S_Enfriar, OF);}
 
  if (millis() < U_Millis)                                // Millis ha desbordado
  {
    C_Temperatura = C_Temperatura - U_Millis + millis();  // NUevo tiempo correjido
  }
}

int Leer_Temperatura()
{
   int V = analogRead(E_Termperatura);  //lee y almacena el dato del sensor
   return (V * 3990 / 1024);            // Temperatura en decimas
}


Comprueba el calculo de la temperatura, no se si es correcto, y añadir mas controles no creo que te resulte difícil.

Go Up