Actividad 5: Barrera de control de acceso

Actividad 5

 

Implementar barrera de acceso

En esta actividad, donde ya tenemos nuestro Puente Levadizo con los movimientos básicos implementados, vamos a incluir el uso de la barrera de control de acceso controlada con el servomotor. El material necesario para la actividad será:

  • 1 x Servomotor.

El esquema de montaje es el siguiente:


 

 

Las conexiones del Arduino son las siguientes:

  • Servomotor: Pin 3.

Debemos programar el Arduino UNO para que el Puente, además de realizar las funciones que conseguimos implementar en el apartado anterior, sea capaz de bajar la barrera del Servomotor mientras el Puente Levadizo se encuentre levantado.

Recuerda que para poder utilizar el servomotor debes incluir la librería "Servo" al comienzo de tu programa de la siguiente manera:

#include <Servo.h>

Esta librería viene por defecto instalada con el Arduino IDE.
Cuando utilizamos una librería, normalmente debemos crear lo que se llama un Objeto para poder utilizar las funciones añadidas. Para este caso concreto, debemos crear un Objeto del tipo Servo que nos permita controlar en nuestro código el servomotor. La creación es como sigue:

Servo miObjeto;

donde "miObjeto" es el nombre que queremos dar a la variable que vamos a crear para acceder a todas las funciones de la librería.

La creación del objeto debe estar ubicada antes del Setup.
Recuerda que en el Setup de nuestro código debemos inicializar el servomotor utilizando la siguiente función:

miObjetoServo.attach(pin);

donde "miObjetoServo" es el Objeto de tipo Servo que hemos creado previamente y "pin" es el número del Pin, que debe permitir PWM (en Arduino UNO son los pines que van acompañados del símbolo "~"), donde tenemos el
servomotor conectado.
Recuerda que para mover el servomotor debemos utilizar la siguiente función:

miObjetoServo.write(grados);

donde "miObjetoServo" es el Objeto de tipo Servo que hemos creado previamente y "grados" es la posición en la que queremos colocar el servomotor en grados (entre 0º y 180º).
#include <Servo.h> // Librería para servomotor

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
int pinServomotor = 3; // Pin para controlar el Servomotor

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

// Creamos un objeto del tipo Servo
Servo servomotor;

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);

    // Asignamos el pin a nuestro objeto Servo
    servomotor.attach(pinServomotor);

    // Configuramos la posición inicial del Servo
    servomotor.write(90);

}

void loop() {

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

        // Bajamos la barrera del Servo
        servomotor.write(180);
       
        // Puedes ajustar los retardos si quieres que el puente suba o baje más
        delay(600);

        // Comenzamos el ascenso del puente
        digitalWrite(pinDireccionMotor1, HIGH);
        digitalWrite(pinDireccionMotor2, LOW);
        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, 1000, 500);

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

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

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

        // 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, 1000, 500);

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

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

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

        // 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, 1000, 500);

        // 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, 1000, 500);

        // 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);

        // Subimos la barrera del Servo
        servomotor.write(90);

        // 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.