AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE 1. Primero haremos la simulación del proyecto con Scratch Scratch es un software magnífico para simular y crear nuestras ideas. Como vale más una imagen que mil palabras, hemos decidido plasmar este punto con un enlace a un vídeo que explica cómo hemos creado nuestra simulación. Simulación con scratch: Vídeo del Programa Esta parte del proyecto fue básica para asentar ideas: cómo queríamos que llegara a ser nuestro producto final. 2. Construcción de la maqueta: a. Se utilizará madera para su construcción
Imagen de la maqueta (no se visiona el sensor)
El mecanismo que moverá la puerta consiste en un piñón cremallera. El piñón está acoplado al motor que a mayores es un motor reductor.
Grupo PEGADA
Páxina 1 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE
Este mecanismo lo estudiamos este año en Tecnología. En nuestro proyecto la corriente hace que gire el piñón que va en el eje del motor. Como este piñón es dentado, encaja con los dientes de la cremallera consiguiendo que esta se desplace horizontalmente por la tabla que lleva la puerta. De este modo, se mueve la puerta. Este mecanismo nos ha dado mucho trabajo ya que es muy importante medir con mucha precisión. Cortamos las piezas de madera siguiendo el plano de nuestro proyecto y cometimos el error de pegarlas todas con silicona. Este fallo lo solucionamos en el montaje del mecanismo, que es en donde realmente afecta (cremallera con sus maderas y la puerta). b. En la parte eléctrica, situaremos el motor (con reductora), dos finales de carrera y un sensor detector de huella dactilar. Los componentes electrónicos importantes y necesarios en nuestra maqueta son: Dos finales de carrera:
La salida OUT es la que debemos programar. Los pines Vcc y GND son los de alimentación del componente. Grupo PEGADA
Páxina 2 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE Un motor con reductora: Nos lo dejaron en el taller de Tecnología Un elemento para controlar el motor en una placa arduino: Susana nos dijo que podíamos hacerlo con un relé o con un driver para motores. Al final nos decantamos por el driver para motores L298N. El motivo fue que era más sencillo de montar ya que se necesitaba menos cableado y la programación también nos pareció más corta.
El circuito de conexión del driver con el motor es el siguiente:
Grupo PEGADA
Páxina 3 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE
Como vemos en la imagen, aunque nuestro proyecto sólo tiene un motor, incluso nos vale para dos. Los pines ENA, IN1, IN2 correspondes a las entradas para controlar el MOTOR A (OUT1 y OUT2), que es el que vamos a usar. ENA y ENB se utilizan para controlar la velocidad, y en nuestro caso, como tenemos un motor con reductora, no nos hacen falta. Dos diodos de 10mm, para evitar usar resistencias. Uno verde y otro rojo.
Y, obviamente, un sensor de huella dactilar: En el mercado encontramos dos tipos de sensores. En principio, los dos nos servían para el proyecto ya que podían grabar muchas huellas dactilares, así que compramos el más económico. Pero, al final, resultó que su software no lo entendíamos y tuvimos que usar el otro. Hemos estudiado a fondo cómo se conecta, cómo graba las huellas y cómo programar este sensor.
Grupo PEGADA
Páxina 4 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE
Sensor de huella dactilar INICIAL
Software para grabar la huella (Sensor INICIAL)
Grupo PEGADA
Pรกxina 5 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE
Sensor de huella dactilar FINAL
Software para grabar la huella (Sensor FINAL)
Grupo PEGADA
Pรกxina 6 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE Para conectar todos estos componentes usamos cables jumper (Macho-Macho, Macho-Hembra y Hembra-Hembra), así como, conectores de plástico. De esta forma evitamos soldar y podemos recuperar los componentes para otro proyecto.
En la imagen se puede ver una placa Arduino Uno. Sin ella no podríamos cargar nuestro programa y automatizarla. 3. Programación con el IDE de Arduino: a. Elementos a programar: Placa Arduino Uno, driver controlador de motores L298N, dos finales de carrera y un sensor de huella dactilar. b. Entender el sensor de huella dactilar: ▪ En nuestro sensor de huella dactilar grabaremos las huellas que puede detectar. ▪ Tras grabarlas, testeamos nuestro sensor para ver si las detecta o no. Para ello usamos el software SDK_DEMO.exe, que nos permite grabar, borrar y testear las huellas dactilares. Nuestro primer programa consistió en encender un diodo con nuestra huella dactilar (antes la habíamos grabado) y es este:
Grupo PEGADA
Páxina 7 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE #include "FPS_GT511C3.h" #include "SoftwareSerial.h" FPS_GT511C3 fps(4, 5); int LEDNaranjo=8; //Led naranjo en Digital 8 void setup() { Serial.begin(9600); delay(100); fps.Open(); fps.SetLED(true); pinMode(LEDNaranjo,OUTPUT); }
void loop() { if (fps.IsPressFinger()) { fps.CaptureFinger(false); int id = fps.Identify1_N(); if (id <200) { Serial.print("Su huella ha sido detectada"); Serial.println(id); digitalWrite(LEDNaranjo, HIGH); } else { Serial.println("Tu no puedes ser Dios. Tu huella es falsa y no tiene permisos"); digitalWrite(LEDNaranjo, LOW);
Grupo PEGADA
Pรกxina 8 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE } } else { Serial.println("Por favor, presione su huella en el sensor"); } delay(100); } c. Entender cómo funcionan los finales de carrera: ▪ Programar un final de carrera para encender y apagar un diodo Nuestro proyecto tendrá dos finales de carrera. El FC1 es el que toca con la puerta cuando ella está cerrada. Por estar tocando se llama “normalmente cerrado”. El FC2 es el que se activa cuando la puerta está totalmente abierta y este no tienen la palanca pulsada al inicio y por eso se llama “normalmente abierto”. Cuando los programamos tenemos que darnos cuenta que el FC1 tiene que comenzar a abrir la puerta cuando está chocando con ella, y este es el estado LOW. Cuando la puerta se está abriendo, el FC2 está en estado HIGH, pero, cuando está abierta del todo, pasa al estado LOW. Nuestro programa para encender y apagar un diodo con el final de carrera es: int FC2=11;//FC2 Normalmente Abierto (Normalmente está en estado HIGH) const int ledVPin = 8; //Para un diodo verde void setup() { pinMode(FC2,INPUT); //Entrada FC porque espera estados al presionar su palanca pinMode(ledVPin, OUTPUT); //Salida del diodo } void loop() { int estado= digitalRead(FC2);//Leemos el estado del FC2 Grupo PEGADA
Páxina 9 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE if ((estado==LOW) { digitalWrite (ledVPin, HIGH); } else { digitalWrite (ledVPin, LOW); } } d. Entender como programar un motor usando su driver de motores ▪ Programar un motor para moverse en un sentido y en sentido contrario. El motor se controla por el driver y este tiene dos salidas que tenemos que programar. Aquí tuvimos que ver qué ocurría cuando le dábamos un valor HIGH o LOW porque debíamos asegurarnos de que es movimiento fuera el que abriese o cerrase la puerta. Por eso creamos funciones y que fueron estas: void MotorHorario() { digitalWrite (PinIN1, digitalWrite (PinIN2, } void MotorAntihorario() { digitalWrite (PinIN1, digitalWrite (PinIN2, }
HIGH); LOW);
LOW); HIGH);
void MotorStop() { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, LOW); }
Nos ayudó decirle al monitor serie que nos escribiera lo que iba haciendo (giro a la derecha, izquierda o parada). Finalmente, el código en arduino que usamos fue el siguiente: int PinIN1 = 7; int PinIN2 = 6;
Grupo PEGADA
Páxina 10 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE void setup() { // inicializar la comunicación serial a 9600 bits por segundo: Serial.begin(9600); //Para saber qué va haciendo y controlar el sentido del motor (ES un motor DC) // configuramos los pines como salida pinMode(PinIN1, OUTPUT); pinMode(PinIN2, OUTPUT); } void loop() { MotorHorario(); Serial.println("Giro del Motor en sentido horario"); delay(1000); MotorAntihorario(); Serial.println("Giro del Motor en sentido antihorario"); delay(1000); MotorStop(); Serial.println("Motor Detenido"); delay(1000); } void MotorHorario() { digitalWrite (PinIN1, digitalWrite (PinIN2, } void MotorAntihorario() { digitalWrite (PinIN1, digitalWrite (PinIN2, }
HIGH); LOW);
LOW); HIGH);
void MotorStop() { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, LOW); }
e. Crear nuestro primer programa del proyecto usando el motor con su driver y los finales de carrera. Juntando los pasos anteriores, el programa es: //Definimos las variables int PinIN1 = 7; //Pines 6 y 7 para el motor int PinIN2 = 6; const int ledVPin = 8; //Para los diodos Grupo PEGADA
Páxina 11 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE const int ledRPin = 9; //Finales de carrera int FC1=10;//FC1 Normalmente Cerrado (Normlmente está en estado LOW)Cuando la puerta está cerrada, lo está presionando int FC2=11;//FC2 Normalmente Abierto (Normalmente está en estado HIGH)Cuando la puerta está abriéndose, está sin presionar void setup() { Serial.begin(9600); //Para comprobar que hace lo que se le pide //Salidas del motor pinMode(PinIN1, OUTPUT); pinMode(PinIN2, OUTPUT); //Salidas de los diodos pinMode(ledVPin, OUTPUT); pinMode(ledRPin, OUTPUT); //Entradas FC pinMode(FC1,INPUT); pinMode(FC2,INPUT); } void MotorHorario()//Abre puerta { digitalWrite (PinIN1, HIGH); digitalWrite (PinIN2, LOW); Grupo PEGADA
Páxina 12 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE } void MotorAntihorario()//Cierra puerta { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, HIGH); } void MotorStop() { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, LOW); } void loop() { int estadoAbrir = digitalRead(FC2);//Leemos la apertura MotorStop(); // Comenzamos parando el motor while (estadoAbrir == HIGH){// Abrimos la puerta (FC1 se activa, LOW, cuando esté totalmente abierta, mientras se abre, su estado es HIGH) MotorHorario(); Serial.println("Puerta abriendose"); digitalWrite (ledVPin, HIGH); digitalWrite (ledRPin, LOW); estadoAbrir = digitalRead(FC2); } Grupo PEGADA
Páxina 13 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE MotorStop(); Serial.println("Puerta Parada"); delay(5000); // Temporizamos el valor de tiempo en segundos estadoAbrir = HIGH;// Reiniciamos la variable int estadoCerrar = digitalRead(FC1);//Leemos el cierre (FC2 se activa cuando la puerta estรก totalmente cerrada, mientras se cierra, su estado es HIGH) while (estadoCerrar == HIGH){ MotorAntihorario(); Serial.println("Puerta cerrรกndose"); digitalWrite (ledRPin, HIGH); digitalWrite (ledVPin, LOW); estadoCerrar = digitalRead(FC1); } MotorStop(); digitalWrite (ledRPin, HIGH); digitalWrite (ledVPin, LOW); //Para parar el loop puedo usar exit(0); o un for (;;){}, o un while(1){}, o un while(TRUE){} for(;;) { } }
Grupo PEGADA
Pรกxina 14 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE f.
Añadir en nuestro programa el sensor de huella.
Nuestro programa final es: #include "FPS_GT511C3.h" #include "SoftwareSerial.h" FPS_GT511C3 fps(4, 5); //Definimos las variables int PinIN1 = 7; //Pines 6 y 7 para el motor int PinIN2 = 6; const int ledVPin = 8; //Para los diodos const int ledRPin = 9; //Finales de carrera int FC1=10;//FC1 Normalmente Cerrado (Normlmente está en estado LOW)Cuando la puerta está cerrada, lo está presionando int FC2=11;//FC2 Normalmente Abierto (Normalmente está en estado HIGH)Cuando la puerta está abriéndose, está sin presionar void setup() { Serial.begin(9600);//Para comprobar que hace lo que se le pide y que se vea si la huella es detectada delay(100); fps.Open(); fps.SetLED(true);
Grupo PEGADA
Páxina 15 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE //Salidas del motor pinMode(PinIN1, OUTPUT); pinMode(PinIN2, OUTPUT); //Salidas de los diodos pinMode(ledVPin, OUTPUT); pinMode(ledRPin, OUTPUT); //Entradas FC pinMode(FC1,INPUT); pinMode(FC2,INPUT); } void MotorHorario()//Abre puerta { digitalWrite (PinIN1, HIGH); digitalWrite (PinIN2, LOW); } void MotorAntihorario()//Cierra puerta { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, HIGH); }
Grupo PEGADA
Pรกxina 16 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE void MotorStop() { digitalWrite (PinIN1, LOW); digitalWrite (PinIN2, LOW); } void loop() { // Identificar el testeo de huella dactilar if (fps.IsPressFinger()) { fps.CaptureFinger(false); int id = fps.Identify1_N(); if (id <200) { Serial.print("ID Verificada:"); Serial.println(id); //Comienza el programa
int estadoAbrir = digitalRead(FC2);//Leemos la apertura
MotorStop(); // Comenzamos parando el motor
Grupo PEGADA
Pรกxina 17 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE while (estadoAbrir == HIGH){// Abrimos la puerta (FC1 se activa, LOW, cuando esté totalmente abierta, mientras se abre, su estado es HIGH) MotorHorario(); Serial.println("Puerta abriendose"); digitalWrite (ledVPin, HIGH); digitalWrite (ledRPin, LOW); estadoAbrir = digitalRead(FC2); } MotorStop(); Serial.println("Puerta Parada"); delay(5000); // Temporizamos el valor de tiempo en segundos estadoAbrir = HIGH;// Reiniciamos la variable int estadoCerrar = digitalRead(FC1);//Leemos el cierre (FC2 se activa cuando la puerta está totalmente cerrada, mientras se cierra, su estado es HIGH) while (estadoCerrar == HIGH){ MotorAntihorario(); Serial.println("Puerta cerrándose"); digitalWrite (ledRPin, HIGH); digitalWrite (ledVPin, LOW); estadoCerrar = digitalRead(FC1); } MotorStop(); Grupo PEGADA
Páxina 18 de 20
AUTOMATIZACIร N DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE digitalWrite (ledRPin, HIGH); digitalWrite (ledVPin, LOW); //Para parar el loop puedo usar exit(0); o un for (;;){}, o un while(1){}, o un while(TRUE){} for(;;) { } } else { Serial.println("Tu no puedes ser Dios. Tu huella es falsa y no tiene permisos"); //Diodo rojo encendido digitalWrite (ledRPin, HIGH); digitalWrite (ledVPin, LOW); } } else { Serial.println("Por favor, presione con su dedo"); digitalWrite(ledRPin, HIGH); // El Led Rojo se apaga delay(1000);
// Espera un segundo
digitalWrite(ledRPin, LOW); // El led Rojo se apaga delay(1000); Grupo PEGADA
// Espera 1 segundo Pรกxina 19 de 20
AUTOMATIZACIÓN DE LA APERTURA Y CIERRE DE UNA PUERTA DE GARAJE } delay(100); } g. Comprobar que el programa final se ejecuta correctamente con estas especificaciones: ▪ Al detectar la huella, la puerta comienza a abrirse y el diodo verde se enciende. ▪ Cuando la puerta llega al final de carrera FC2 (la puerta está totalmente abierta), la puerta debe detenerse sola. ▪ Transcurrido un tiempo de parada (unos 5 segundos), la puerta comenzará a cerrarse y se enciende el diodo rojo. ▪ Cuando la puerta llegue al final de carrera FC1 (la puerta está totalmente cerrada), la puerta debe detenerse sola. 4. Conclusiones y posibles mejoras Es un proyecto grande, de muchos elementos diferentes. La construcción no es sencilla porque la puerta tiene que estar muy bien colocada para que funcione bien la cremallera con el piñón. El sensor es muy bueno. Podemos grabar fácilmente muchas huellas y borrarlas. La conexión es más difícil porque es un sensor de 3,3V y la placa tiene 5V. Trabajar en equipo y a la vez es muy bueno. En una tarde hicimos la maqueta. Bueno, no le pusimos los cables pero teníamos mucho trabajo hecho. Aprendimos mucho sobre las huellas dactilares y nos gustó mucho. Nos gusta escribir programas y que estos actúan en diodos, FC y motores. Mejoras: Como mejora podíamos incluir un sensor de presencia. Así, cuando la puerta se esté cerrando, si detecta que alguien quiere pasar, la puerta debe pararse.
Grupo PEGADA
Páxina 20 de 20