Pages: 1 [2] 3 4   Go Down
Author Topic: En construcción: Automatización de persiana  (Read 13373 times)
0 Members and 1 Guest are viewing this topic.
Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La opción por tiempo esta bien pensada, pero tiene varias pegas.
1- nunca para en el mismo sitio y como bien decís cada día se incrementa el error.
2- si se pilla alguien o se atasca una lama, el motor no parara hasta que se active la seguridad que en muchos motores baratos directamente no existe.


Yo no lo considero pegas.
1- No se incrementaría el error por que se calibraría dos veces al día, cada vez que suba o baje por completo.
2- Pienso mantener el interruptor de control manual conectado a arduino para que si quieres limpiar o algo puedas subirla entera o bajarla para echarte una siesta. Si alguien se pone a hacer algo y le pilla la persiana ya es imposible hacerlo mas seguro a no ser que la llene de sensores como los de las puertas de garaje.
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

adrian_gn si que tengo el código, pero me encuentro de viaje y no vuelvo hasta finales de mes, pero te advierto que el código lo empecé a finales del 2010 y hace tiempo que no lo toco y en el 2010 programaba todavía peor que ahora.

Si puedo conseguir el código antes te lo enviaré.

flico no he entendido muy bien como haces funcionar lo del efecto hall, ¿Es un sensor de esos que abraza un cable para ver si pasa corriente al detectar la variación en el campo magnético?

Logged

Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias vic20, pero no te molestes, era por si lo tenias a mano usarlo como referencia para el mio, pero no hay problema, supongo que mañana tendré el código listo y haré las pruebas con la persiana.

Gracias a todos por la ayuda, en breve subiré todos los datos (Código, esquemas de circuitos, fotos, etc)
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Si alguien se pone a hacer algo y le pilla la persiana ya es imposible hacerlo mas seguro a no ser que la llene de sensores como los de las puertas de garaje.

Para controlar si alguien se ha pillado es fácil, si el motor esta activado y no hay pulsos de encoder se para la persiana.

El encoder primero que use era con un detector y eje codificado de un viejo ratón.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, es cierto. Aunque no me merece la pena, la persiana nunca se va a mover entera, solo unos 30 cm cada vez. Yo creo que no me merece la pena por que es una persiana de ventana, nadie se asoma, en caso se que te pillase no pesa nada y los movimientos de 30 centímetros son pequeños como para que te atrape.
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En mi caso tengo un peke en casa y ya sabes, enreda como el solo.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vale, me ha surgido otra duda. Ya se como hacer lo del tiempo. La persiana tarda aproximadamente 18 segundos en subir o bajar. Para probar he creado el primer movimiento que haría por la mañana, que seria subirse durante 6 segundos. Voy a mantener el interruptor que venia con la persiana:

El neutro va conectado al motor y la fase pasa por el interruptor que cambia entre parado, subir y bajar.
El interruptor lo voy a desconectar y conectarlo a arduino. El Rele1 activa y desactiva el motor y el Rele2 selecciona el sentido de giro.

Actualmente me mueve la persiana según la ldr y la NTC (resistencia térmica) y manualmente cuando pulso un botón. Ahora va mi problema. El valor Posicion es donde se encuentra la persiana, abajo es 0 y arriba es 20 (Son segundos). si la persiana se mueve automáticamente funcionaria bien, pero cuando la muevo manualmente necesito que también cambie el valor Posicion. Para eso he intentado usar la función pulseIn que en teoría mide el tiempo que esta un botón pulsado. si pudiese medir el tiempo que subo la persiana manualmente se lo podría sumar al valor Posicion y saber donde esta aunque la controle de forma manual. El problema es que no consigo hacer funcionar pulseIn.

A, lo de la automatización todavía no lo he configurado. he creado el primer movimiento que la levanta por la mañana 6 segundos para probar si funciona. Cuando tenga el resto completo creare todos los movimientos automáticos Este es el que he creado:
Code:
 if (Posicion == 0)
      {
        if (NTCValue <= 200)
        {
          if (LDRValue > 100)
          {
            Posicion =+ 6;
            digitalWrite(Rele1, HIGH);
            digitalWrite(Rele2, LOW);
            delay(6000);
            digitalWrite(Rele1, LOW);
            digitalWrite(Rele2, LOW);
          }  
        }

Este es el desastre que tengo por código en el que se que es una burrada la forma en la que he intentado usar pulseIn. Los comentarios no están la mayoría bien puestos, como estoy modificando algunos son incorrectos.
Code:
int LDR = A0;    // select the input pin for the LDR
int NTC = A1;    // select the input pin for the NTC
int Down = 12;    // select the input pin for the down button
int Up = 13;    // select the input pin for the up button
int Rele1 = 2; // select the pin 2 for the Rele 1
int Rele2 = 3; // select the pin 3 for the Rele 2
int Led = 4; // select the pin 4 for the Led


int LDRValue = 0;  // variable to store the value coming from the LDR
int NTCValue = 0;  // variable to store the value coming from the LDR
int DownValue = 0;  // variable to store the value coming from the LDR
int UpValue = 0;  // variable to store the value coming from the LDR
int TiempoSubir = 0;
int TiempoSubiendo = 0;
int Posicion = 0; // set the position to 0


void setup() {
  Serial.begin(9600);
  // declare the Rele1 Pin as an OUTPUT:
  pinMode(Rele1, OUTPUT);
  // declare the Rele2 Pin as an OUTPUT:
  pinMode(Rele2, OUTPUT);
  // declare the Rele2 Pin as an OUTPUT:
  pinMode(Led, OUTPUT);

  digitalWrite(Rele1, HIGH);
  digitalWrite(Rele2, HIGH);
  digitalWrite(Led, HIGH);
  delay(20000);
  digitalWrite(Rele1, LOW);
  digitalWrite(Rele2, LOW);
  digitalWrite(Led, LOW);
  digitalWrite(TiempoSubiendo, LOW);

}

void loop() {
  // Leer valor de la ldr:
  LDRValue = analogRead(LDR);    
  // Leer valor de la NTC:
  NTCValue = analogRead(NTC);
  // Leer valor de Down button:
  DownValue = digitalRead(Down);    
  // Leer valor de Up button:
  UpValue = digitalRead(Up);  

  if (Posicion >= 20)
  {
    Posicion = 19;      
  }

  switch (DownValue) {
  case HIGH:
    //BOTON BAJAR
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    digitalWrite(Led, HIGH);
    break;
  case LOW:
    switch (UpValue) {
    case HIGH:
      //BOTON SUBIR
      digitalWrite(Rele1, HIGH);
      digitalWrite(Rele2, LOW);
      digitalWrite(Led, HIGH);
      digitalWrite(TiempoSubiendo, HIGH);
      TiempoSubir = pulseIn(TiempoSubiendo, HIGH);

      break;
    case LOW:
      //SIN BOTONES
      digitalWrite(Rele1, LOW);
      digitalWrite(Rele2, LOW);
      digitalWrite(Led, LOW);
      digitalWrite(TiempoSubiendo, LOW);

      if (Posicion == 0)
      {
        if (NTCValue <= 200)
        {
          if (LDRValue > 100)
          {
            Posicion =+ 6;
            digitalWrite(Rele1, HIGH);
            digitalWrite(Rele2, LOW);
            delay(6000);
            digitalWrite(Rele1, LOW);
            digitalWrite(Rele2, LOW);
          }  
        }

      }








      break;
    }
    break;

  }
  Serial.print("Posicion: ");
  Serial.print(Posicion);
  Serial.print("\t LDR:" );
  Serial.print(LDRValue);
  Serial.print("\t NTC:" );
  Serial.print(NTCValue);
  Serial.print("\t Down:" );
  Serial.print(DownValue);
  Serial.print("\t Up:" );
  Serial.println(UpValue);
  Serial.print("\t Tiempo subir:" );
  Serial.println(TiempoSubir);
}



Muchas gracias si alguien ha tenido la paciencia para leer toda la reply y por la ayuda. Seguro que he explicado alguna cosa mal o de forma incompleta. Comentármelo y lo amplio.
« Last Edit: May 11, 2012, 12:52:56 pm by adrian_gn » Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No entiendo lo de "El Rele1 activa y desactiva el motor y el Rele2 selecciona el sentido de giro." Imagino que esos relés son los que alimentan el motor de la persiana, ¿no? Entonces, ¿por qué no pones el Rele1 para subir persiana y el Rele2 bajar persiana? Lo veo más lógico y así cada vez que quieres hacer una maniobra sólo tienes que activar un relé.
Para el tiempo mejor que pulseIn utiliza millis().
Logged


Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Los relés los coloco así porque aunque tenga que activar 2 relés evito que se puedan hacer cortocircuitos por un fallo en el código o un rele que se quede bloqueado. Luego publico un dibujo para que veas a que me refiero.
A, ahora que lo pienso ya veo la utilidad de millis() y si, voy a probar a ver si consigo que me funcione bien.

Gracias.
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bien pensado, yo suelo hacerlo con relés con contactos auxiliares que los cruzo. Pero creo que se complica más que lo tuyo.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 174
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Son propuestas que seguramente locas usar un sensor hall como encoder y saber cuanto se mueve la persina. Un sensor hall en marco de ventana y un iman en la persina para ajustar el fin o principio de recorrido.
Logged


Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ya creo que se hacer toda la programación, ademas tengo la ayuda del código de vic20 que me lo ha podido enviar.  Muchas gracias por vuestra ayuda. Voy a terminarla en lo que me llegan los relés y cuando lo tenga funcionando pondré todo en el foro.

Mas tarde me gustaría añadir módulos xbee o algo parecido para que las persianas se comuniquen, cierre y apertura centralizada, mando a distancia.... a parte de mas cosas que se me ocurran.

En cuanto funcione o tenga algún problema os lo comento.
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tambien se podria hacer igual que funciona los accionamientos que mueven los faros del coche. El motor lleva un potenciómetro en el eje y todo lo gobierna un IC de 8 patillas que hace invertir el giro del motor hasta que llega a la posición que define el nivel de tensión de uno de los pines.
Esto lo tengo probado pero para mover los estores, que no llevan finales de carrera y no se puede limitar el recorrido.
Voy a buscarlo y os digo cual es el IC.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Valladolid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estaría bien y es una buena idea, pero no me merece la pena. Quiero tener automatizadas todas las persianas de mi casa de la forma mas barata posible. No me importa que tenga un fallo de 10cm.
Logged

Mi proyecto de domotica basado en arduino.
http://www.domoticarduino.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Lo de comunicar todas las persianas, es lo que tengo en mente ahora, pero en lugar de con módulos xbee lo estoy intentado con nrf24, que son más baratos.

La idea es poner cada persiana con un arduino nano y un modulo nrf24 y controlarlos todos por medio de otro arduino en el que estén programadas las alarmas y guarde las posiciones de cada persiana, con conexión a la red para poder acceder al sistema desde internet.

De momento ya acciono un relé a distancia, a ver si tengo tiempo y lo puedo hacer con 2 nodos al mismo tiempo.

Logged

Pages: 1 [2] 3 4   Go Up
Jump to: