Contenido del curso

    Actividad 21

     

    Cadena de producción

    Imagina que formas partes de una fábrica de vehículos. Eres el operario responsable de programar el control de la cinta transportadora de la cadena de producción. La cinta debe avanzar entre estaciones de trabajo y detenerse hasta que los trabajadores realicen las tareas correspondientes.

    Utilizaremos un pulsador para dar la orden de arranque (el motor avanzará, por ejemplo, 300 pasos). Mientras se esté moviendo la cinta, debe encenderse el LED Rojo. Cuando se detenga, se apagará el LED Rojo y se encenderá el LED Verde, indicando que puede manipularse el vehículo en la cinta, y el LED Azul, indicando que los trabajos se están realizando sobre el vehículo detenido. Programaremos un segundo botón para simular la señal de los trabajadores de la estación, cuando terminan el trabajo, se pulsará este segundo botón, lo que apagará el LED Azul, indicando que los trabajadores han terminado. Para que la cinta vuelva a ponerse en marcha, se pulsará el primer botón, el que da la orden de arranque, y volverá a realizar el ciclo, apagando el LED Verde y encendiendo nuevamente el LED Rojo. En cada avance y parada, vamos a generar un tono de alerta.


    Recuerda que la extensión de MentorBit para mBlock incluye el siguiente bloque con el que podemos
    controlar un motor de corriente continua:


    Recuerda que para incluir una librería previamente instalada en nuestro programa, debemos utilizar
    la sentencia siguiente:

    #include <MentorBitMotores.h>

    En nuestro ejemplo incluiremos la librería MentorBitMotores, que facilita el uso de los diferentes motores
    con MentorBit.
    Recuerda que la librería de MentorBitMotores da acceso a la conexión del Motor Paso a Paso empleando
    las siguientes referencias:

    - miObjetoMentorBitMotores.MOTOR_PAP_IN_1
    - miObjetoMentorBitMotores.MOTOR_PAP_IN_2
    - miObjetoMentorBitMotores.MOTOR_PAP_IN_3
    - miObjetoMentorBitMotores.MOTOR_PAP_IN_4
    Recuerda que la librería de MentorBitMotores da acceso a la siguiente función específica que permite
    controlar directamente el giro del Motor Paso a Paso:

    miMentorBitMotores.moverMotorPP(pasos, dirección);

    Donde pasos es un valor de tipo entero que indica la cantidad de pasos que el motor debe realizar y

    dirección será 0 para un sentido y 1 para el contrario.


    Puedes descargar la solución pinchando en el siguiente icono:

     
    #include <MentorBit.h>
    #include <MentorBitMotores.h>

    // Declaración de instancia de las clases
    MentorBit miMentorBit;
    MentorBitMotores miMentorBitMotores;

    // Variables para controlar el flujo del programa
    bool cinta_en_marcha = false;
    bool trabajos_en_marcha = false;

    // Inicialización del sketch
    void setup() {

        // Configuramos el estado por defecto de los LEDs
        digitalWrite(miMentorBit.LED_ROJO, LOW); // La cinta no está en movimiento
        digitalWrite(miMentorBit.LED_VERDE, HIGH); // Cinta detenida
        digitalWrite(miMentorBit.LED_AZUL, LOW); // No hay trabajo realizándose

        // Apagamos el Zumbador
        noTone(miMentorBit.ZUMBADOR);

    }

    // Bucle principal del sketch
    void loop() {

        // Comprobamos si con la cinta detenida y sin trabajos en marcha se pulsa el botón de arranque
        if(!cinta_en_marcha && !trabajos_en_marcha && (digitalRead(miMentorBit.PULSADOR_PULLDOWN_DIGITAL) == HIGH)) {

            // Configuramos los indicadores de la cinta para indicar que la cinta está en movimiento
            digitalWrite(miMentorBit.LED_ROJO, HIGH);
            digitalWrite(miMentorBit.LED_VERDE, LOW);
            digitalWrite(miMentorBit.LED_AZUL, LOW);
            // Generamos un tono que indique arranque
            tone(miMentorBit.ZUMBADOR, 4000, 100);
            // Arrancamos el motor paso a paso 300 pasos en una dirección
            miMentorBitMotores.moverMotorPP(300, 0);
            // Configuramos los indicadores de la cinta para indicar que la cinta se ha parado
            digitalWrite(miMentorBit.LED_ROJO, LOW);
            digitalWrite(miMentorBit.LED_VERDE, HIGH);
            digitalWrite(miMentorBit.LED_AZUL, HIGH);
            // Generamos un tono que indique parada
            tone(miMentorBit.ZUMBADOR, 1000, 300);
            // Guardamos la marca que indica que se van a realizar trabajos y cinta detenida
            trabajos_en_marcha = true;
            cinta_en_marcha = false;

        }

        // Comprobamos si se pulsa el botón de trabajos finalizados
        if(trabajos_en_marcha && (digitalRead(miMentorBit.PULSADOR_PULLDOWN_ANALOGICO) == HIGH)) {

            // Configuramos los indicadores de la cinta para indicar que los trabajos finalizaron
            digitalWrite(miMentorBit.LED_ROJO, LOW);
            digitalWrite(miMentorBit.LED_VERDE, HIGH);
            digitalWrite(miMentorBit.LED_AZUL, LOW);
            // Guardamos la marca que indica que finalizaron los trabajos
            trabajos_en_marcha = false;

        }

    }

    Puedes descargar la solución sin utilizar nuestra librería en el siguiente icono:

                                  Vistas
                                  11 Número de vistas
                                  11 Vistas de miembros
                                  0 Vistas públicas
                                  Acciones
                                  0 Gustos
                                  0 No me gusta
                                  0 Comentarios
                                  Compartir en redes sociales
                                  Compartir enlace
                                  Compartir por correo

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