Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Puerta gallinero automatica.
#31
(01-30-2016, 09:14 PM)Domobur Wrote:  
(01-30-2016, 09:13 PM)R0BERT0 Wrote:  Pero ... vas a usar paradas parciales?
No,  todas las gallinas son tamaño estándar

Muy guenas Domobur
Soy recien incorporado en esto (arduino y demas) pero ya he hecho varios ejemplos y me vannn!!!!
Ademas tengo 10 gallinas y un gallo y necesito impriosamente ponerles una puerta crepuscular automatica por que es un coñazo tener que ir todos los dias a abrir y cerrar...
Mi pregunta: No he visto por ningun lado el esquema que tienes de circuito y si tienes steeps driver para conectar el motor?
Tengo la picha un lio y no me aclaro como lo has echo... el programa mas o menos lo pillo pero me falta el esquema de motor y sensores... Ahh solo tengo 12 v. de una bateria (conectada a panel solar).
Te lo agradeceria muxo...
Reply
#32
Novedades!!!

El curso que estoy haciendo, me va asentando ideas y ya se me olvidan menos ; y }  Big Grin

Os dejo el codigo que he creado desde cero y con varios detalles para proteger la integridad de la puerta.

Al iniciar, chequea los finales de carrera:

  Si estan a 0 los dos...averia!!!, pita cada 10segundos.
  Si estan a 1 los dos, puerta abierta, la posiciona como corresponde.

Al ejecutar el  movimiento, si no detecta el final de carrera , se para y da averia avisando cada 10 segundos.


El codigo esta bastante comentado pero cualquier duda, ya sabeis....preguntad  y si veis algun error, porfa avisad Blush

[Image: gallinerodefinitivo_bb.jpg]



PHP Code:
/*////////////////////////////ESQUEMA DE CONEXION//////////////////////////////

                                  +-----+
                      +----[PWR]-------------------| USB |--+
                      |                            +-----+  |
                      |         GND/RST2  [ ][ ]            |
                      |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |
                      |          5V/MISO2 [ ][ ]  A4/SDA[ ] |
                      |                             AREF[ ] |
                      |                              GND[ ] |
                      | [ ]N/C                    SCK/13[ ] |
                      | [ ]IOREF                 MISO/12[ ] |
                      | [ ]RST                   MOSI/11[ ]~|
                      | [ ]3V3    +---+               10[ ]~|
                      | [ ]5v    -| A |-               9[ ]~| PIN ZUMBADOR AVISO GALLINA TONTA
                      | [ ]GND   -| R |-               8[ ] |
                      | [ ]GND   -| D |-                    |
                      | [ ]Vin   -| U |-               7[ ] | PIN 4 MOTOR  A TRAVES DE PUENTE
                      |          -| I |-               6[ ]~| PIN 3 MOTOR  A TRAVES DE PUENTE
 r 1k  ldr CON LDR    | A0     -| N |-                 5[ ]~| PIN 2 MOTOR  A TRAVES DE PUENTE
                      | [ ]A1    -| O |-               4[ ] | PIN 1 MOTOR  A TRAVES DE PUENTE
                      | [ ]A2     +---+           INT1/3[ ]~| ENTRADA FINAL DE CARRERA ABIERTA CON RESISTECIA A + DE 10K
                      | [ ]A3                     INT0/2[ ] | ENTRADA FINAL DE CARRERA CERRADA CON RESISTECIA A + DE 10K
                      | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |
                      | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |
                      |            [ ] [ ] [ ]              |
                      |  UNO_R3    GND MOSI 5V  ____________/
                       \_______________________/


  En caso de avería, se debe de resetear el sistema, lo que borrará la avería y se podrá probar el sistema.



*/
/*****************************************configuracion**************************​*******/

#define LUXABRIR 300               // Cambiar esta cifra para modificar la apertura.
#define LUXCERRAR 210              // Cambiar esta cifra para modificar el cierre.
#define RETRASO 40000               // Tiempo en Milisegundos de retraso de cambio.
#define MAX_PASOS 13000             // Pasos maximos para que se pare el sistema
/*****************************************configuracion**************************​*******/



#define ZUMBA 9                  // Pin 9 zumbador activo
#define motorPin1 4              // Pin1 del Motor
#define motorPin2 5              // Pin2 del Motor
#define motorPin3 6              // Pin3 del Motor
#define motorPin4 7              // Pin4 del Motor
#define delayTime1 1             // DelayTime1 determina la velocidad de giro entre uno y otro paso
#define LDR A0                   // leeremos el pin ANALOGICO0 ,LDR  con divisor de tension
#define FCA 2                    // Final de carrera abierta
#define FCC 3                    // Final de carrera cerrada

int LUX 0;
int PASOS 0                  // Variable para control de pasos realizados.
bool Averia 0;


void setup() {
 
 Serial.begin(9600);
 
 pinMode(motorPin1OUTPUT);     // Configuracion de los Pines como salida digital para el motor
 
 pinMode(motorPin2OUTPUT);     // Configuracion de los Pines como salida digital para el motor
 
 pinMode(motorPin3OUTPUT);     // Configuracion de los Pines como salida digital para el motor
 
 pinMode(motorPin4OUTPUT);     // Configuracion de los Pines como salida digital para el motor
 
 pinMode(ZUMBAOUTPUT);         //Configuracion de los Pines como salida digital para el ZUMBADOR
 
 pinMode(FCCINPUT);       // Final de carrera  puerta abierta
 
 pinMode(FCAINPUT);       // Final de carrera puerta cerrada

 
      test(); // Comprovamos posibles fallos  
}

void loop() {
 
 if (Averia == HIGH)

 
    averia();
 
 
  
  else 
if (Averia == LOW         // En caso de que no haya avería comprueva si hay que abrir o cerrar la puerta
 
 {
 
   toma_medida();
 
   if (LUX >= LUXABRIR  and (digitalRead(FCA) == HIGH)) // aperetura normal
 
     abrir();

 
   if (LUX <= LUXCERRAR and (digitalRead(FCC) == HIGH)) // cierre normal
 
     cerrar();
 
 }

 
 // Aquí se podría programar un else, donde se encendiese un piloto rojo indicando avería en el sistema.

}


////////////////////// COMIENZA APERTURA ////////////////////////


void abrir()
{
 
 PASOS 0       // Inicializamos la variable a 0, para contar los pasos que se realizan.

 
 while ( (digitalRead (FCA) == HIGH)& (PASOS <= MAX_PASOS) ) {     //Mientras no llegue al final de carrera de abierto y no haya avería, abre.

 
   // Punto  H (Octavo)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);

 
   // Punto  G (Septimo)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);

 
   // Punto  F (Sexto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);

 
   // Punto  E (Quinto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  D (Cuarto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2HIGH);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  C (Tercero)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2HIGH);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  B (Segundo)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2HIGH);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  A (Primero)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   
   Serial
.println(PASOS);
 
   if (PASOS >= MAX_PASOS) {
 
   parar();
 
     Averia 1                      // Marcamos que el sistema está en avería
 
     Serial.println("AVERIA EN LA OPERACION DE APERTURA, FALLO EN MOTOR O EN FINAL DE CARRERA");
 
     averia();                         //mandamos el programa al void de averia linea 315
 
   }
 
 PASOS ++;
 
 }
 
 parar();
}

////////////////////// FIN APERTURA  ////////////////////////



//////////////////////  CIERRE  ////////////////////////


void cerrar()
{
 
 digitalWrite(ZUMBAHIGH);
 
 delay (RETRASO 5); //Zumbador de aviso sonando, la mitad del tiempo de retraso para cambio .
 
 digitalWrite(ZUMBALOW);
 
 

  PASOS 
0       // Inicializamos la variable a 0, para contar los pasos que se realizan.
 
 
    

  while 
( (digitalRead (FCC) == HIGH) & (PASOS <= MAX_PASOS)) {     //Mientras no llegue al final de carrera de abierto y no haya avería, abre.

 
   // Punto  A (Primero)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  B (Segundo)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2HIGH);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  C (Tercero)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2HIGH);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  D (Cuarto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  E (Quinto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4LOW);
 
   delay(delayTime1);

 
   // Punto  F (Sexto)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3HIGH);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);

 
   // Punto  G (Septimo)
 
   digitalWrite(motorPin1LOW);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);

 
   // Punto  H (Octavo)
 
   digitalWrite(motorPin1HIGH);
 
   digitalWrite(motorPin2LOW);
 
   digitalWrite(motorPin3LOW);
 
   digitalWrite(motorPin4HIGH);
 
   delay(delayTime1);
Serial.println(PASOS);

 
   
  if 
(PASOS >= MAX_PASOS) {
 
   parar();
 
     Averia 1                      // Marcamos que el sistema está en avería
 
     Serial.println("AVERIA EN LA OPERACION DE CIERRE, FALLO EN MOTOR O EN FINAL DE CARRERA");
 
      averia();                        //mandamos el programa al void de averia linea 315
 
   }

 
PASOS ++;
 
 }
 
 parar();
}

////////////////////// FIN CIERRE ////////////////////////

void parar()
{
 
 digitalWrite(motorPin1LOW);
 
 digitalWrite(motorPin2LOW);
 
 digitalWrite(motorPin3LOW);
 
 digitalWrite(motorPin4LOW);
 
 Serial.println("STOP");
}


//////////////// COMPROVAMOS SI LA PUERTA ESTÁ A MITAD DE RECORRIDO POR CUALQUIER CAUSA ////////////////

void test() {
delay (3000);
 
 Serial.println("CHEQUEANDO FINALES DE CARRERA");
 
 if ((digitalRead(FCA) == LOW) and (digitalRead(FCC) == LOW))     // los dos finales de carrera pulsados indica un fallo en el sistema
 
 {
 
   Averia 1;
 
   
    Serial
.println("AVERIA EN LOS FINALES DE CARRERA");
 
   
    averia
();                                                         //mandamos el programa al void de averia linea 315
 
 }
 
 if ((digitalRead(FCA) == HIGH) and (digitalRead(FCC) == HIGH))     // Puerta en posición incorrecta, dos pulsadores a 0
 
 {
 
   toma_medida();
 
   Serial.println("PUERTA EN POSICION INCORRECTA,INTENTANDO POSICIONAR");
 
   delay (3000);
 
   Averia LOW;// DE MOMENTO, NO HAY AVERIA
 
   if (LUX >= LUXABRIRabrir();     // Si es de dia abrir la puerta
 
   if (LUX <= LUXCERRARcerrar();   // Si es de noche cerrar la puerta
 
 
  
}


}
///////////////////////////////////

void toma_medida() {
 
 LUX analogRead(LDR);
 
 LUX 1000 LUX;
 
 Serial.println("LA MEDIDA ACTUAL DE ILUMINACIÓN ES:");
 
 Serial.println(LUX);
//  Serial.println("FCA");                               Descomentar 4 lineas para verificar funcionamiento de fc
//  Serial.println(digitalRead(FCA));
//  Serial.println("FCC");
//  Serial.println(digitalRead(FCC));
 
 delay (RETRASO);
}
void averia(){
 
 digitalWrite(motorPin1LOW);
 
 digitalWrite(motorPin2LOW);
 
 digitalWrite(motorPin3LOW);
 
 digitalWrite(motorPin4LOW);
 
 Serial.println("averia en motor o finales de carrera, pulsa reset");
 
 digitalWrite(ZUMBAHIGH);                                 //Pitido cada 10seg avisando de averia
 
 delay (200); 
 
 digitalWrite(ZUMBALOW);
delay (10000); 
 
  digitalWrite(ZUMBAHIGH);
 
 delay (400); 
 
 digitalWrite(ZUMBALOW);
}

//Code by Domobur 2017 

Un saludo y gracias por vuestra paciencia.


Attached Files
.zip   gallinerodefinitivo.zip (Size: 36.54 KB / Downloads: 6)
Reply
#33
Con el móvil no me da para ver nada de código... Pinta muy bien enhorabuena :-)... Ese curso ya da sus frutos!!
Reply
#34
Muy bueno domobur. Me voy a tener que plantear hacer un curso también.
Reply
#35
(12-07-2017, 06:50 PM)Jaime Wrote:  Muy bueno domobur. Me voy a tener que plantear hacer un curso también.
Te lo recomiendo, hay cosas que es mejor que te las expliquen.

Pero tengo el vicio de llevar años copiando .Almenos empiezo a ver más claro el código y no contentarme con que compile.


Enviado desde mi Moto G (4) mediante Tapatalk
Reply
#36
Hola Domobur, cada dia te superas eso si no te privas de nada "hasta gallinero domotizado", eso es más que la casa del futuro, si no es mucho preguntar que tipo de formación estas realizando "programación".

Gracias un abrazo.
Enlaces:   

Cursos 
Tienda
Crowfunding 2016
Reply
#37
Ardummy ye ves que no es gran cosa, de momento independiente, que no es para mi Angel .

El curso, es de un grupo gente, desde aqui mi agradecimiento, que le gusta la ciencia y suelen hacer cursos para los crios.

Hasta el año pasado, tambien hacian cursos y concursos de sumo con lego midestrong, pero claro son equipos muy caros y poco accesibles.

Este año es el primero que hacen de arduino, y no me lo podia perder Smile

Dejo el blog, por si quereis seguir nuestros ejercicios...
Reply
#38
Domobur me parece asombroso hay que disfrutar de las cosas pequeñas, estupendo gracias por la información, pasare a ver los logros y de paso aprender.
Enlaces:   

Cursos 
Tienda
Crowfunding 2016
Reply
#39
Me alegro Domobur que avances en programación, tu cerebro ahora estará mas organizado, jejejeje
Muchas gracias por este curro. Lo bajo y le hecho un vistazo....
Animo ¡¡¡¡
Config V5 y app ExControl Arduino Free 2017 Big Grin
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)