Contenido del curso

Problema 1

 

Automatizando la Línea de Producción de Botella de Agua

Eres el/la encargado/a del sistema de control automatizado de una planta embotelladora de agua. Tu misión es asegurarte de que cada botella sea llenada correctamente con agua y que se le coloque su tapa antes de ser enviada al almacén. El objetivo es garantizar que las botellas estén listas para el consumo de manera eficiente y segura. 

Para ello vamos a utilizar los siguientes componentes del MentorBit:

  • 2 Botones (S1 y S2)

  • 1 Led

  • Pantalla LCD

  • Display 7 Segmentos

Descripción del Sistema:

  • Sensor de llenado (S1): Detecta si la botella ha sido llenada correctamente con agua.

  • Sensor de tapa (S2): Confirma si la botella tiene la tapa colocada correctamente.

Tu reto es simular el funcionamiento de estos sensores utilizando los 2 botones.

Funcionamiento del Sistema:

  1. Si la botella es llenada correctamente (se presiona S1), debes mostrar en la pantalla LCD el mensaje: "Botella llena".

  2. Luego, si la tapa es colocada correctamente (se presiona S2 después de S1), se debe mostrar el mensaje: "Botella tapada".

  3. Una vez que ambos pasos se han cumplido en el orden correcto (primero llenar y luego tapar), se encenderá un LED para indicar que el proceso ha finalizado exitosamente.

  4. Además, deberás mostrar el mensaje: "Botella bien empaquetada" en la pantalla LCD para confirmar que la botella está lista para ser almacenada.

  5. Una vez se confirme que la Botella está bien empaquetada, cuenta el número de botellas empaquetadas y muéstralo en el Display 7 Segmentos.

Si el proceso no se realiza en el orden correcto (por ejemplo, se presiona S2 antes que S1), no se encenderá el LED y el proceso no será considerado válido.

Detalles del Hardware:

  • Botón S1: Simula el sensor de llenado de la botella de agua.

  • Botón S2: Simula el sensor de colocación de la tapa.

  • Pantalla LCD: Muestra los mensajes de estado del proceso.

  • LED: Se enciende al finalizar exitosamente el proceso de llenado y tapado.

  • Display 7 Segmentos: Muestra el número de botellas empaquetadas correctamente.


 

 

Tarea:

Escribe un programa que controle el proceso descrito, asegurándote de que:

  • Los botones simulen correctamente los sensores.

  • El LED solo se encienda si ambos sensores han sido activados en el orden correcto (S1, luego S2).

  • El display de 7 segmentos muestre cuántas botellas han sido correctamente empaquetadas.

  • La pantalla LCD muestre los mensajes de estado apropiados en cada paso.

Recuerda que el pin analógico lee de 0 a 1023, por tanto, para que se detecte que has pulsado el botón el
valor del pin tiene que ser mayor a 0, para mantener un margen de seguridad puede poner un número
más elevado, en este caso vamos a utilizar >100:

Crea variables que cambien a 1 cuando pulsas un botón:

No te olvides de comprobar si has pulsado el primer botón cuando pulses el segundo:

Recuerda que el pin analógico lee de 0 a 1023, por tanto, para que se detecte que has pulsado el botón
el valor del pin tiene que ser mayor a 0, para mantener un margen de seguridad puede poner un número
más elevado, en este caso vamos a utilizar >100:

if(analogRead(A2)>100){

}
Crea variables que cambien a 1 cuando pulsas un botón:

int S1 = 0;
int S2 = 0;

void loop() {

    if(digitalRead(23)==1){

        // Cambiar el valor de la variable a 1
        S1 = 1;

    }

    if(analogRead(A2)>100){

        // Cambiar el valor de la variable a 1
        S2 = 1;

    }
}
No te olvides de comprobar si has pulsado el primer botón cuando pulses el segundo:

int S1 = 0;
int S2 = 0;

void loop() {

    if(digitalRead(23)==1){

        // Cambiar el valor de la variable a 1
        S1 = 1;

    }

    if(analogRead(A2)>100){

        // Cambiar el valor de la variable a 1
        S2 = 1;

        if(S1==1){

        }
    }
}
// Incluir las librerías necesarias
#include <MentorBitDisplay.h>
#include <MentorBitPantallas.h>

// Declarar las clases a utilizar
MentorBitDisplay miMentorBitDisplay;
MentorBitPantallas miMentorBitPantallas;

// Crear las variables a utilizar
int Contador = 0;
int S1 = 0;
int S2 = 0;

// Definir los pines en los que van conectados los componentes electrónicos
#define LEDVerde 6
#define LEDRojo 5

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

  // Inicializar Display 7 segmentos
  miMentorBitDisplay.inicializarDisplay();

  // Inicializar pantalla LCD
  miMentorBitPantallas.inicializarLCD();
  miMentorBitPantallas.lcd.backlight();
  miMentorBitPantallas.lcd.clear();

  // Indicar los pines que serán salidas
  pinMode(LEDRojo, OUTPUT);
  pinMode(LEDVerde, OUTPUT);

}

// Bucle principal del sketch
void loop() {

  // Imprimir en el display el valor de la variable Contador
  miMentorBitDisplay.imprimir(Contador);

  // Leer el pin digital 23, siendo este el botón normalmente en baja
  if(digitalRead(23)==1){

    // Cambiar el valor de la variable a 1
    S1 = 1;

    // Indicar por pantalla LCD el estado del Sistema
    miMentorBitPantallas.lcd.clear();
    miMentorBitPantallas.lcd.print("Botella llena");

    // Esperar 1 segundo
    delay(1000);

  }

  // Leer el pin analógico A2, siendo este el botón normalmente en baja
  if(analogRead(A2)>100){

    // Cambiar el valor de la variable a 1
    S2 = 1;

    // En caso de haber pulsado el primer botón antes
    if(S1==1){

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Botella tapada");

      //Esperar 1 segundo
      delay(1000);

    }

    // En caso de no haber pulsado el primer botón antes
    else{

      // Cambiar el valor de la variable a 0
      S2 = 0;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.print("Error en el");
      miMentorBitPantallas.lcd.setCursor(0,1);
      miMentorBitPantallas.lcd.print("proceso");

      // Encender el Led Rojo
      digitalWrite(LEDRojo,1);

      //Esperar 1 segundo
      delay(1000);

      //Apagar el Led Rojo
      digitalWrite(LEDRojo,0);

    }
  }

  // En caso de haber pulsado los botones en el orden correcto
  if(S1 == 1 && S2 == 1){

    // Encender el Led Verde
    digitalWrite(LEDVerde,1);

    // Indicar por pantalla LCD el estado del Sistema
    miMentorBitPantallas.lcd.clear();
    miMentorBitPantallas.lcd.print("Botella bien");
    miMentorBitPantallas.lcd.setCursor(0,1);
    miMentorBitPantallas.lcd.print("empaquetado");

    // La variable se incrementa en +1
    Contador += 1;

    // Imprimir en el display el valor de la variable Contador
    miMentorBitDisplay.imprimir(Contador);

    // Esperar 1 segundo
    delay(1000);

    // Cambiar las variables a 0
    S1 = 0;
    S2 = 0;

    // Apagar el Led Verde
    digitalWrite(LEDVerde, 0);

  }
}

 

 

Desafío Adicional 1:

Implementa una validación que indique un error si el botón S2 (sensor de tapa) es presionado antes que S1 (sensor de llenado) o se presiona nuevamente S1. En este caso, muestra en la pantalla LCD: "Error en el proceso". Además, puedes implementar el encendido de otro LED que indique el fallo en el proceso.

No olvides comprobar el estado de las variables cuando pulsas un botón:

No olvides comprobar el estado de las variables cuando pulsas un botón:

int S1 = 0;
int S2 = 0;

void loop() {

    if(digitalRead(23)==1){

        // Cambiar el valor de la variable a 1
        S1 = 1;

        if(S2==1){

        }

        else{

        }

    }

    if(analogRead(A2)>100){

        // Cambiar el valor de la variable a 1
        S2 = 1;

        if(S1==1){

        }

        else{

        }
    }
}
// Incluir las librerías necesarias
#include <MentorBitDisplay.h>
#include <MentorBitPantallas.h>

// Declarar las clases a utilizar
MentorBitDisplay miMentorBitDisplay;
MentorBitPantallas miMentorBitPantallas;

// Crear las variables a utilizar
int Contador = 0;
int S1 = 0;
int S2 = 0;

// Definir los pines en los que van conectados los componentes electrónicos
#define LEDVerde 6
#define LEDRojo 5

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

  // Inicializar Display 7 segmentos
  miMentorBitDisplay.inicializarDisplay();

  // Inicializar pantalla LCD
  miMentorBitPantallas.inicializarLCD();
  miMentorBitPantallas.lcd.backlight();
  miMentorBitPantallas.lcd.clear();

  // Indicar los pines que serán salidas
  pinMode(LEDRojo, OUTPUT);
  pinMode(LEDVerde, OUTPUT);

}

// Bucle principal del sketch
void loop() {

  // Imprimir en el display el valor de la variable Contador
  miMentorBitDisplay.imprimir(Contador);

  // Leer el pin digital 23, siendo este el botón normalmente en baja
  if(digitalRead(23)==1){

    // En caso de volver a pulsar el primer botón
    if(S1==1){

      // Cambiar el valor de la variable a 0
      S1 = 0;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Error en el");
      miMentorBitPantallas.lcd.setCursor(0,1);
      miMentorBitPantallas.lcd.print("proceso");

      // Encender el Led Rojo
      digitalWrite(LEDRojo,1);

      // Esperar 1 segundo
      delay(1000);

      // Apagar el Led Rojo
      digitalWrite(LEDRojo,0);

    }

    // En caso de ser la primera vez que se le da al botón
    else{

      // Cambiar el valor de la variable a 1
      S1 = 1;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Botella llena");

      // Esperar 1 segundo
      delay(1000);

    }
  }

  // Leer el pin analógico A2, siendo este el botón normalmente en baja
  if(analogRead(A2)>100){

    // En caso de haber pulsado el primer botón primero
    if(S1==1){

      // Cambiar el valor de la variable a 1
      S2 = 1;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Botella tapada");

      // Esperar 1 segundo
      delay(1000);
    }

    // En caso de no haber pulsado el primer botón primero
    else{

      // Cambiar el valor de la variable a 0
      S2 = 0;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Error en el");
      miMentorBitPantallas.lcd.setCursor(0,1);
      miMentorBitPantallas.lcd.print("proceso");

      // Encender el Led Rojo
      digitalWrite(LEDRojo,1);

      //Esperar 1 segundo
      delay(1000);

      // Apagar el Led Rojo
      digitalWrite(LEDRojo,0);

    }
  }

  // En caso de haber pulsado los botones en el orden correcto
  if(S1 == 1 && S2 == 1){

    // Encender Led Verde
    digitalWrite(LEDVerde,1);

    // Indicar por pantalla LCD el estado del Sistema
    miMentorBitPantallas.lcd.clear();
    miMentorBitPantallas.lcd.print("Botella bien");
    miMentorBitPantallas.lcd.setCursor(0,1);
    miMentorBitPantallas.lcd.print("empaquetado");

    // La variable se incrementa en +1
    Contador += 1;

    // Imprimir en el display el valor de la variable Contador
    miMentorBitDisplay.imprimir(Contador);

    // Esperar 1 segundo
    delay(1000);

    // Cambiar las variables a 0
    S1 = 0;
    S2 = 0;

    // Apagar el Led Verde
    digitalWrite(LEDVerde, 0);

  }
}

 

 

Desafío Adicional 2:

Implementa una señal que indique que se ha completado un lote de 6 unidades, donde muestre en la pantalla LCD: "Lote completado". Además, puedes implementar el encendido de otro LED que se encienda cada vez que se complete un lote.

Utiliza el bloque "resto de" para que cada 6 unidades, al dividir el contador de botellas entre 6, el resto sea
igual a 0, buscando así cada múltiplo de 6 que cumpla la condición:

Utiliza el operador de módulo "%", para obtener el resto de la división entre el contador y 6; así, cuando el
resto de la misma es 0, sabes que el contador es múltiplo de 6 unidades:

if(Contador%6 == 0){

}
// Incluir las librerías necesarias
#include <MentorBitDisplay.h>
#include <MentorBitPantallas.h>

// Declarar las clases a utilizar
MentorBitDisplay miMentorBitDisplay;
MentorBitPantallas miMentorBitPantallas;

// Crear las variables a utilizar
int Contador = 0;
int S1 = 0;
int S2 = 0;

// Definir los pines en los que van conectados los componentes electrónicos
#define LEDAzul 7
#define LEDVerde 6
#define LEDRojo 5

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

  // Inicializar Display 7 segmentos
  miMentorBitDisplay.inicializarDisplay();

  // Inicializar pantalla LCD
  miMentorBitPantallas.inicializarLCD();
  miMentorBitPantallas.lcd.backlight();
  miMentorBitPantallas.lcd.clear();

  // Indicar los pines que serán salidas
  pinMode(LEDRojo, OUTPUT);
  pinMode(LEDVerde, OUTPUT);
  pinMode(LEDAzul, OUTPUT);


}

// Bucle principal del sketch
void loop() {
  // Imprimir en el display el valor de la variable Contador
  miMentorBitDisplay.imprimir(Contador);

  // Leer el pin digital 23, siendo este el botón normalmente en baja
  if(digitalRead(23)==1){

    // En caso de volver a pulsar el primer botón
    if(S1==1){

      // Cambiar el valor de la variable a 0
      S1 = 0;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Error en el");
      miMentorBitPantallas.lcd.setCursor(0,1);
      miMentorBitPantallas.lcd.print("proceso");

      // Encender el Led Rojo
      digitalWrite(LEDRojo,1);

      // Esperar 1 segundo
      delay(1000);

      // Apagar el Led Rojo
      digitalWrite(LEDRojo,0);

    }
    else{

      // Cambiar el valor de la variable a 1
      S1 = 1;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Botella llena");

      // Esperar 1 segundo
      delay(1000);

    }
  }

  // Leer el pin analógico A2, siendo este el botón normalmente en baja
  if(analogRead(A2)>100){

    // En caso de haber pulsado el primer botón primero
    if(S1==1){

      // Cambiar el valor de la variable a 1
      S2 = 1;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Botella tapada");

      // Esperar 1 segundo
      delay(1000);

    }

    // En caso de no haber pulsado el primer botón primero
    else{

      // Cambiar el valor de la variable a 0
      S2 = 0;

      // Indicar por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Error en el");
      miMentorBitPantallas.lcd.setCursor(0,1);
      miMentorBitPantallas.lcd.print("proceso");

      // Encender el Led Rojo
      digitalWrite(LEDRojo,1);

      //Esperar 1 segundo
      delay(1000);

      // Apagar el Led Rojo
      digitalWrite(LEDRojo,0);

    }
  }

  // En caso de haber pulsado los botones en el orden correcto
  if(S1 == 1 && S2 == 1){

    // Encender Led Verde
    digitalWrite(LEDVerde,1);

    // Indicar por pantalla LCD el estado del Sistema
    miMentorBitPantallas.lcd.clear();
    miMentorBitPantallas.lcd.print("Botella bien");
    miMentorBitPantallas.lcd.setCursor(0,1);
    miMentorBitPantallas.lcd.print("empaquetado");

    // La variable se incrementa en +1
    Contador += 1;

    // Imprimir en el display el valor de la variable Contador
    miMentorBitDisplay.imprimir(Contador);

    // En caso de que Contador sea un número múltiplo de 6
    if(Contador%6 == 0){

      // Encender el Led Azul
      digitalWrite(LEDAzul,1);

      // Imprimir por pantalla LCD el estado del Sistema
      miMentorBitPantallas.lcd.clear();
      miMentorBitPantallas.lcd.print("Lote completado");

      //Esperar 1 segundo
      delay(1000);

      //Apagar el Led Azul
      digitalWrite(LEDAzul,0);
    }

    // Esperar 1 segundo
    delay(1000);

    // Cambiar las variables a 0
    S1 = 0;
    S2 = 0;

    // Apagar el Led Verde
    digitalWrite(LEDVerde, 0);

  }
}
Vistas
17 Número de vistas
17 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.