Go Down

Topic: Problemas en codigo de domotica (Read 673 times) previous topic - next topic

GalloClaudio

Jul 23, 2019, 10:09 pm Last Edit: Jul 23, 2019, 11:25 pm by surbyte Reason: Visualización de imágen y agregado de la etiqueta correcta. Ver normas!!
Hola a todos:
Son nuevo en este tema de Arduino y me interese ya que para ola tesis de grado quiero realizar un proyecto de domotica(casa inteligente), para el cual tengo que mezclar varios sensores.
Pues que comensando ya me tope con el primer problema.

1-Hice un control de un servo con un sensor de distancia.
2-Con un sensor de luz enciendo el led rojo.

Todo funciono bien hasta que integre el paso dos ya que cuando el sensor no detecta luz me enciende el led, pero tambien me pone en marcha el servo(cosa que no deberia pasar), no se que puede estar pasando.

Aca les dejo el codigo y el esquema para que me puedan ayudar a encontrar el problema. Y Gracias de antemano



Code: [Select]
/*
conexcion del sensor de distancia HC-SR04
VCC al arduino 5v
GND al arduino GND
Echo al arduino pin 6
Trig añ arduino pin 7
 */
#define Pecho 6
#define Ptrig 7
#define LIGHT 4 // defino el pin 4 para el DO del sensor de luz
#define RELAY 8 // defino el pin 8 para el relay
#include <Servo.h>
Servo myservo;

void setup() {
  Serial.begin (9600); //Inicializa el puerto serial a 9600 baudios
  pinMode(LIGHT, INPUT_PULLUP);// defino pin como entrada del sensor de luz
  pinMode(RELAY, OUTPUT);// defino pin como salida para el relay
  pinMode(Pecho, INPUT); // define el pin 6 como entrada (echo)
  pinMode(Ptrig, OUTPUT); // define el pìn 7 como salida (triger)
  pinMode(13, 1); // define el pin 13 como salida
  myservo.attach(3);
  }

void loop() {

int pos = 0; //declaro la posision del servo en 0 grados
int L = digitalRead(LIGHT);// leo el sensor de luz
long duracion, distancia;

  
  digitalWrite(Ptrig, LOW);
  delayMicroseconds(2);
  digitalWrite(Ptrig, HIGH);  //genera el pulso de triger por 10ms
  delayMicroseconds(10);
  digitalWrite(Ptrig, LOW);

  duracion = pulseIn(Pecho,HIGH);
  distancia = (duracion/2)/29;  // calcula la distancia en centimetros
  


     if(L == 1){
    Serial.println(" light is ON");
    digitalWrite(RELAY,LOW);// enciendo el relay
    }else{
     Serial.println("  === light is OFF");
     digitalWrite(RELAY,HIGH);// apago el relay
    }
    delay(500);
  
  if (distancia >=500 || distancia <= 0){  // si la distancia es mayor a 500cm o menor a 0 cm
   Serial.println("---");  //no mide nada
  }
  else{
    Serial.print(distancia);  //envia el valor de la distancia por el puerto serial
    Serial.println("cm");     // le coloca a la distancia los "cm"
    myservo.write(pos);
   }
   if (distancia <= 10 && distancia >= 1){
    digitalWrite(13, 1);               // en alto el pin13 si la distancia es menor a 10 cm
    Serial.println("Alarma........");  // envia la palabra Alarma por el puerto serial

    for (pos = 0; pos <= 180; pos += 1) { // va desde 0 grados a 180 grados, con pasos de 1 grado
    myservo.write(pos);              // le dice al servo que vaya a la posicion de la variable 'pos'
    delay(15);                       // espera 15ms para que el servo alcance la posicion
  }
  delay(5000);
  
  for (pos = 180; pos >= 0; pos -= 1) { // va desde 180 grados a 0 grado
    myservo.write(pos);              // le dice al servo que vaya a la posicion de la variable 'pos'
    delay(15);                       // espera 15ms para que el servo alcance la posicion
    
  }
  digitalWrite(13, 0);      // en bajo el poin 13
  }
  delay(400);           // espera 400ms para que se logre ver la distancia
  
}



Sereno

#1
Jul 23, 2019, 11:50 pm Last Edit: Jul 23, 2019, 11:51 pm by surbyte
Haz una prueba, alimenta el led a travez de la resistencia, pero directamente al pin 8, desconectando el relé a ver que tal.

GalloClaudio

Haz una prueba, alimenta el led a travez de la resistencia, pero directamente al pin 8, desconectando el relé a ver que tal.

Hice eso que me sugirio y no cambio nada. Sigue ejecutandose el servo cuando el sensor de luz aciona.

Go Up