Puente levadizo controlado por Arduino

Se trata de idear, diseñar, planificar y construir una maqueta de un PUENTE LEVADIZO con diversos materiales disponibles, que cumpla las siguientes condiciones: 

CONDICIONES 

  • La elevación y descenso del tablero será suave.
  • Su accionamiento será eléctrico a 4,5V y su control:
    • El control será automático mediante Arduino y sensores de final de carrera.
    • El ajuste de piezas y acabado deberá ser preciso.
    • Las medidas máximas del conjunto no excederán de 300x200x150 mm
Solución adoptada

La solución final consiste en la construcción de una maqueta construida con listones de madera de samba y contrachapado.

Puente levadizo

Sistema de transmisión formado por un motor con reductora y un sistema de transmisión por correa.


El sistema de subida y bajada está formado por un torno fabricado con varilla roscada.


En la parte superior hemos colocado dos poleas de madera, para reducir rozamiento del cable.


Como elementos final de carrera se ha utilizado dos LDR, una para detectar la subida del tablero,


y otra para detectar la bajada del tablero


Por último el circuito de control está formado por una placa de Arduino Uno, un pulsador, dos LDRs  y  un driver L293D.


Circuito eléctrico
 

Programa

#define EA 9
#define I1 8
#define I2 10
#define pinPulsador 0  // Pin digital de entrada para el pulsador
int pinLDR_S = 0;      //A0, Pin analógico para LDR superior
int pinLDR_I = 1;     //A1,  Pin analógico para LDR inferior
int valorLDR_S = 0;
int valorLDR_I = 0;
int velocidad=200;
int estadoPulsador=HIGH;

 void subir()
{
 analogWrite(EA, velocidad);
 digitalWrite(I1, HIGH);
 digitalWrite(I2, LOW);
}

 void bajar()
 {
 analogWrite(EA, velocidad);
 digitalWrite(I1, LOW);
 digitalWrite(I2, HIGH);
}
 void parar()
{
 digitalWrite(I1, LOW);
 digitalWrite(I2, LOW);
 }
 void setup()
 {
  pinMode(EA, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);
  pinMode (pinPulsador, INPUT);

}


void loop()
{
estadoPulsador = digitalRead(pinPulsador); //Leer estado del pulsador

valorLDR_S= analogRead(pinLDR_S);
valorLDR_I= analogRead(pinLDR_I);

if ( estadoPulsador == LOW && valorLDR_I>300)<300 br=""><300 300="">
<300 br="">{
while(valorLDR_S >300)
{
  subir();
  valorLDR_S= analogRead(pinLDR_S);
  delay(300);
}
parar();
}
if(estadoPulsador==LOW && valorLDR_S>300)
<300 br=""><350 br=""><350 br=""> {
<300 br=""><350 br=""><350 br=""> while(valorLDR_I >300)
  {
   bajar();
   valorLDR_I= analogRead(pinLDR_I);
   delay(300);
  }
   //parar motor
   parar();
  }
 }

No hay comentarios: