06 octubre 2024

Programa de Arduino para puerta de garaje


 

 En esta entrada voy a tratar de sistematizar una forma de hacer los programas de Arduino basada en la teoría de autómatas finitos. Lo haré aplicándolo a la puerta de garaje y en concreto para la siguiente secuencia:

La puerta está cerrada, tocamos el pulsador y se va abriendo cuando toca el final de carrera de puerta abierta, la puerta se detiene.

Con la puerta abierta, tocamos el pulsador y se va cerrando, cuando toca el final de carrera de puerta cerrada, la puerta se detiene.

Para esa secuencia tenemos las siguientes entradas, salidas y estados:

Entradas: Pulsador, final de carrera de puerta cerrada (FCC) y final de carrera de puerta abierta(FCA).

Salidas: Motor parado, motor abriendo, motor cerrando.

Estados: Puerta cerrada, puerta abriéndose, puerta abierta, puerta cerrándose.

DIAGRAMA DE TRANSICIÓN DE ESTADOS.

Los estados los represento con círculos y junto a las flechas de las transiciones he dibujado un rectángulo dividido en dos celdas. En la superior he escrito la entrada que produce ese cambio de estado y en la inferior la salida correspondiente





PROGRAMA DE ARDUINO.

A partir del diagrama de transición se pasa al programa de Arduino con el selector SWITCH. Los CASE son los estados. Las transiciones se hacen con el selector IF en el que la condición es la entrada y en el bloque se incluye la salida y el cambio de estado/CASE.

Con la sentencia ENUM, se pone nombre a los estados. Para las salidas he usado funciones.

//Pines del motor

#define PinAv 9

#define PinRe 6

#define FCA 4 //Final de carrera puerta abierta

#define Pulsador 11 //Para iniciar las maniobras

#define FCC 2 //Final de carrera puerta cerrada

int antirrebotes = 200;


void setup()

{

pinMode(PinAv, OUTPUT);

pinMode(PinRe, OUTPUT);

pinMode(FCA, INPUT_PULLUP);

pinMode(Pulsador, INPUT_PULLUP);

pinMode(FCC, INPUT_PULLUP);

}


//MANIOBRAS DEL MOTOR

void motor_abriendo(){

digitalWrite(PinAv, HIGH);

digitalWrite(PinRe, LOW);}


void motor_cerrando(){

digitalWrite(PinAv, LOW);

digitalWrite(PinRe, HIGH);}


void motor_parado(){

digitalWrite(PinAv, LOW);

digitalWrite(PinRe, LOW);}


enum {puertaCerrada, puertaAbriendose, puertaAbierta, puertaCerrandose};


int estado = puertaCerrada;  //El programa empieza con la puerta                              //cerrada


void loop(){

switch (estado){


case puertaCerrada:

    if (digitalRead(Pulsador) == 0 ){

        delay(antirrebotes);

        motor_abriendo();

        estado= puertaAbriendose;}

    break;


case puertaAbriendose:

    if (digitalRead(FCA) == 0){

        delay(antirrebotes);

        motor_parado();

        estado= puertaAbierta;}

    break;


case puertaAbierta:

    if (digitalRead(Pulsador) == 0)

        {delay(antirrebotes);

        motor_cerrando();

        estado= puertaCerrandose;}

     break;


case puertaCerrandose:

    if (digitalRead(FCC)==0){

         motor_parado();

         delay(antirrebotes);

        estado= puertaCerrada;}

    break;

}}

 

DETALLE DE LAS CONEXIONES ELÉCTRICAS


 Conexiones eléctricas

Hay algún ligero cambio entre los cableados de la foto y del plano.

 

MÁS DIAGRAMAS DE ESTADOS QUE CORRESPONDEN A OTRAS FUNCIONALIDADES DE LA PUERTA.

 

 


 OBSERVACIONES

El motor que aparece en la foto y el video es distinto al de la entrada anterior. Lo he tenido que sustituir porque con el otro se producía un fenómeno denominado ruido eléctrico que afectaba al Arduino evitando que funcionara correctamente.



30 julio 2024

Mecanismo para puerta de garaje


La puerta de garaje es la base de muchos proyectos. En esta entrada describo un mecanismo que he diseñado con la principal objetivo de hacerlo sencillo. Es un desarrollo de este otro , aplicado a una puerta de garaje.

Para transformar el movimiento circular de un motor en el lineal de la puerta se emplea una varilla roscada y tuercas, en este caso de métrica 6. Para reducir el rozamiento en los soportes de la varilla se utilizan arandelas, también se cubre de cita adhesiva o con tubo de plástico, la parte de la varilla que está en contacto con las arandelas.



Las tuercas se pegan a la puerta con cola termofusible. Es preciso introducirlas previamente en la varilla y sujetarlo todo con cinta adhesiva como se muestra en las fotos.

 

 

 

 

    

La polea se puede unir a la varilla como se explica en la entrada que se indica arriba y que se puede ver en el mosaico de fotos. también se puede hacer arrollando tiras de papel.







Se le ha añadido un palito a la puerta para conseguir que la posición de uno de los finales de carrera limitara lo mínimo posible el recorrido de la puerta. 

 

 

MÁS FOTOS

Los topes laterales se unen a la base con un tornillo, he utilizado tornillos de 4 x 40 mm. Se emplean una púas para evitar el movimiento horizontal de la varilla. Para sujetar los finales de carrera y para mantener la puerta vertical se emplean palillos de dientes redondos, se introducen en taladros de 2 mm de diámetro. 

 PLANOS

Las dimensiones del mecanismo que aparece en las fotos y los videos difieren ligeramente de las indicadas en los planos.

Planta . Alzado y perfil. Despiece.

VIDEO

En este primer video la puerta se mueve como dando saltitos, debido a la la varilla está un poco torcida.

 


  En este otro video se ha subsanado es defecto.

En el caso de que se presenten problemas por el rozamiento de la varilla con las tuercas o arandela es necesario lubricar con un poco de aceite.