Control del funcionamiento de un puente levadizo con Arduino

Propuesta

En el taller de tecnología disponemos de la maqueta de un puente levadizo, dicha maqueta incorpora dos finales de carrera, uno para detectar que el tablero del puente alcanza su posición de máxima apertura y otro para detectar que el puente ha bajado completamente. El sistema incorpora un motor con reductora y un sistema de poleas.

El sistema de control de regulación y control debe funcionar de la siguiente manera:

Al accionar un pulsador el puente debe de subir o bajar dependiendo de la posición en la que se encuentre, hasta alcanzar la posición contraria.

El sistema incorpora dos diodos, uno verde para indicar que el tablero está subiendo y otro rojo para indicar que el tablero está bajando.

Solución adoptada

Nota: Hemos tenido que utilizar dos interruptores para simular el funcionamiento de los finales de carrera.


Diagrama de flujo


Código

int Pulsador = 6;
int finalA = 11;
int finalB = 7;
int DiodoA = 1;
int DiodoB = 0;
int estadoPulsador = 0;
int estadoFinalA = 0;
int estadoFinalB = 0;
int E1=10;
int I1=9;
int I2=8;

void subir(){
  digitalWrite(E1, HIGH);
  digitalWrite(I1, HIGH);
  digitalWrite(I2, LOW);
}

void bajar(){
  digitalWrite(E1, HIGH);
  digitalWrite(I1,LOW);
  digitalWrite(I2, HIGH);
}

void parar(){
  digitalWrite(I1, LOCódigoW);
  digitalWrite(I2, LOW);
  digitalWrite(E1, LOW);
}

void setup()
{
  pinMode(E1, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);
  pinMode(Pulsador, INPUT);
  pinMode(finalA, INPUT);
  pinMode(finalB, INPUT);
  pinMode(DiodoA, OUTPUT);
  pinMode(DiodoB, OUTPUT);
}

void loop()
{
estadoPulsador=digitalRead(Pulsador);
estadoFinalA=digitalRead(finalA);
estadoFinalB=digitalRead(finalB);

if((estadoPulsador==HIGH)&&(estadoFinalA==HIGH))
{
  while(estadoFinalB==LOW)
  {
    bajar();
    digitalWrite(DiodoA, HIGH);
    estadoFinalB = digitalRead(finalB);
   }
   parar();
 }

 if((estadoPulsador==HIGH) && (estadoFinalB==HIGH))
  {
   while(estadoFinalA==LOW)
   {
     subir();
     digitalWrite(DiodoB, HIGH);
     estadoFinalA = digitalRead(finalA);
   }
    parar();
  }
}

No hay comentarios: