Actividad 4

 

Añadir movimiento al Puente Levadizo

Esta actividad consiste en implementar el movimiento de elevación y de descenso al Puente Levadizo, manteniendo las funciones programadas hasta ahora en los apartados anteriores. Continuaremos utilizando los pulsadores para arrancar y detener la secuencia de LEDs y los tonos del Zumbador, añadiendo ahora el control del motor para levantar y bajar el Puente. Hará falta el siguiente material:

  • Driver de motores L293D (Circuito Integrado que encapsula un puente en H).

  • Motor de Corriente Continua con Reductora.

El esquema de montaje es el siguiente:


 

 

Las conexiones del Arduino son las siguientes:

  • Velocidad Motor: Pin 9.

  • Dirección Motor 1: Pin 10.

  • Dirección Motor 2: Pin 11.

Debemos programar el Arduino UNO para que el Puente se eleve al accionar el Pulsador 1 y descender el Puente al accionar el Pulsador 2, ambos movimientos se acompañarán con la secuencia de LEDs y la generación de tonos con el Zumbador codificada en los pasos anteriores.

    Nota importante

Ten en cuenta que para esta Actividad será necesario modificar ligeramente el código de los pasos anteriores para incluir el funcionamiento del Motor, que debe ser con Tiempos predefinidos de subida y bajada, ya que ahora mismo no contamos con sensores que nos indiquen la posición exacta del Puente Levadizo.

Ahora que estamos implementando movimiento en el Puente, debemos tener en cuenta la posición en la que se encuentra en todo momento para permitir que realice el movimiento de subida o el de bajada. Para ello podemos utilizar una variable de tipo booleana que configuramos en un estado cuando hemos subido el puente y en el otro estado cuando lo hemos bajado.
Para hacer una programación segura del Puente Levadizo teniendo en cuenta la posición de la plataforma, deberemos utilizar condicionales de múltiples condiciones. Aunque podemos emplear un condicional dentro de otro, es más acertado emplear la concatenación de condiciones. Esto se hace de la siguiente manera:

if(condición 1 && condición 2) {

// Líneas a ejecutar si se cumplen ambas condiciones

}

donde "condición 1" y "condición 2" están concatenadas con el operador condicional "&&" o "Y". Este condicional ejecuta las líneas encerradas entre los corchetes solamente cuando se cumplan o sean ciertas ambas condiciones "condición 1" y "condición 2".

Otro operador de este tipo muy común es "||" o "O", que permite ejecutar las líneas próximas si se cumple alguna de las condiciones "condición 1" o "condición 2".
Debemos tener en cuenta que el Puente va a tardar más en subir la plataforma que en bajarla.
Recuerda que para algunas aplicaciones, por ejemplo en el control de la velocidad de un motor de corriente continua, podemos utilizar señales analógicas de control, también conocidas como señales PWM. Las PWM son señales digitales que van cambiando de estado (entre High y Low) a una frecuencia fija modificando solamente el tiempo que permanecen en Alta. Esto se conoce también como variar el ciclo de trabajo, y permite obtener una salida equivalente de un valor dentro del rango de 0V a 5V en el caso de las placas compatibles con Arduino UNO.

Para utilizar una señal PWM, debemos utilizar la siguiente función:

analogWrite(pin, valor);

donde "pin" es el Pin de la placa que queremos utilizar para generar este tipo de señal y "valor" es ciclo de trabajo (un número de 0 a 255) que equivale a obtener una señal de 0V a 5V.
int pinLedRojos = 13; // Pin de los LEDs Rojos
int pinLedVerdes = 12; // Pin de los LEDs Verdes
int pinPulsadorSubida = 5; // Pin del Pulsador de Arranque
int pinPulsadorBajada = 4; // Pin del Pulsador de Parada
int pinZumbador = 8; // Pin del Zumbador Pasivo
int pinVelocidadMotor = 9; // Pin para controlar la velocidad del Motor
int pinDireccionMotor1 = 10; // Pin para controlar Motor en una dirección
int pinDireccionMotor2 = 11; // Pin para controlar Motor en otra dirección

bool arriba = false; // Variable para guardar el estado del puente

void setup() {

    // Configuramos como salida los pines donde están los LEDs
    pinMode(pinLedRojos, OUTPUT);
    pinMode(pinLedVerdes, OUTPUT);

    // Configuramos como entrada los pines donde están los Pulsadores
    pinMode(pinPulsadorSubida, INPUT);
    pinMode(pinPulsadorBajada, INPUT);

    // Configuramos como salida el pin donde se encuentra el Zumbador
    pinMode(pinZumbador, OUTPUT);

    // Configuramos como salida los pines relacionados con el Motor
    pinMode(pinVelocidadMotor, OUTPUT);
    pinMode(pinDireccionMotor1, OUTPUT);
    pinMode(pinDireccionMotor2, OUTPUT);

}

void loop() {

    // Comprobamos que se pulse la subida y el puente esté abajo
    if((digitalRead(pinPulsadorSubida) == HIGH) && (arriba == false)) {

        // Comenzamos el ascenso del puente
        digitalWrite(pinDireccionMotor1, HIGH);
        digitalWrite(pinDireccionMotor2, LOW);
        analogWrite(pinVelocidadMotor, 200);

        // Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
        digitalWrite(pinLedRojos, HIGH);
        digitalWrite(pinLedVerdes, LOW);

        // Generamos el tono con el Zumbador
        // Frecuencia 1000 Hz, duración 500 ms
        tone(pinZumbador, 1000500);

        // Hacemos una pausa de 1 segundo
        delay(700);

        // Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
        digitalWrite(pinLedRojos, LOW);
        digitalWrite(pinLedVerdes, HIGH);

        // Hacemos una pausa de 1 segundo
        delay(700);

        // Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
        digitalWrite(pinLedRojos, HIGH);
        digitalWrite(pinLedVerdes, LOW);

        // Generamos el tono con el Zumbador
        // Frecuencia 1000 Hz, duración 500 ms
        tone(pinZumbador, 1000500);

        // Hacemos una pausa de 1 segundo
        delay(700);

        // Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
        digitalWrite(pinLedRojos, LOW);
        digitalWrite(pinLedVerdes, HIGH);

        // Hacemos una pausa de 1 segundo
        delay(700);

        // Pausamos el ascenso del puente
        digitalWrite(pinDireccionMotor1, LOW);
        digitalWrite(pinDireccionMotor2, LOW);
        analogWrite(pinVelocidadMotor, 0);

        // Guardamos en la variable que estamos arriba
        arriba = true;

    }

    // Comprobamos que se pulse la bajada y el puente esté arriba
    if((digitalRead(pinPulsadorBajada) == HIGH) && (arriba == true)) {

        // Comenzamos el ascenso del puente
        digitalWrite(pinDireccionMotor1, LOW);
        digitalWrite(pinDireccionMotor2, HIGH);
        analogWrite(pinVelocidadMotor, 255);

        // Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
        digitalWrite(pinLedRojos, HIGH);
        digitalWrite(pinLedVerdes, LOW);

        // Generamos el tono con el Zumbador
        // Frecuencia 1000 Hz, duración 500 ms
        tone(pinZumbador, 1000500);

        // Hacemos una pausa de 1 segundo
        delay(400);

        // Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
        digitalWrite(pinLedRojos, LOW);
        digitalWrite(pinLedVerdes, HIGH);

        // Hacemos una pausa de 1 segundo
        delay(400);

        // Encendemos los LEDs Rojos y Apagamos los LEDs Verdes
        digitalWrite(pinLedRojos, HIGH);
        digitalWrite(pinLedVerdes, LOW);

        // Generamos el tono con el Zumbador
        // Frecuencia 1000 Hz, duración 500 ms
        tone(pinZumbador, 1000500);

        // Hacemos una pausa de 1 segundo
        delay(400);

        // Encendemos los LEDs Verdes y Apagamos los LEDs Rojos
        digitalWrite(pinLedRojos, LOW);
        digitalWrite(pinLedVerdes, HIGH);

        // Hacemos una pausa de 1 segundo
        delay(400);

        // Pausamos el ascenso del puente
        digitalWrite(pinDireccionMotor1, LOW);
        digitalWrite(pinDireccionMotor2, LOW);
        analogWrite(pinVelocidadMotor, 0);

        // Guardamos en la variable que estamos arriba
        arriba = false;

    }

}
Vistas
1 Número de vistas
1 Vistas de miembros
0 Vistas públicas
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.