Práctica 3: Controlador de una máquina expendedora en Arduino
Bienvenido!
Introducción:
En esta práctica se nos ha pedido diseñar mediante componentes y sensores básicos en Arduino, una máquina expendedora de café, la cual puede simular el servicio que daría a un cliente en la vida real, y también incluye una interfaz de administración donde se pueden observar los datos de los diferentes sensores implementados en nuestro sistema, como la posibilidad de poder cambiar los precios de los productos.
Explicación de ejecución y métodos utilizados:
Para la realización de esta práctica he utilizado para controlar los tiempos de ejecución de cada una de las acciones requeridas la función millis() de Arduino, el uso del controller y varios threads para el uso de los LEDs y del botón. Para ello he utilizado la clase LedThread que se nos incluía en las diapositivas de la asignatura para controlar el parpadeo de los LEDs.
En primer lugar aparecen declaradas todas las variables que se usan en el programa (pines de cada sensor, variables asociadas a estados del programa, y variables referentes a los tiempos en segundos y los tiempos que utilizan la función millis()).
Después he creado tres métodos que incluyen gran parte de la funcionalidad del programa:
- administration_menu(): Como su nombre indica, este método representa la funcionalidad del menú de administración, donde se encuentran las 4 opciones entre las que podemos elegir dentro de este menú y de las que podemos ver los datos de cada una de ellas gracias al joystick (0 -> temperatura y humedad, 1 -> distancia, 2-> contador, 3 -> modificar precios).
- button_action(): En este método encontramos los casos en los que pulsando el botón de nuestro sistema, donde podemos tener diferentes casos en función del tiempo que el botón se haya mantenido pulsado (si se pulsa entre 2 y 3 segundos reinicia la función de servicio, mostrando el mensaje "ESPERANDO CLIENTE"; y si se pulsa 5 segundos o más, accedemos a la función de administración, pero si ya nos encontramos dentro de ella volvemos a la función de servicio).
- read_joystick_values(): Este método se utiliza para leer los valores del joystick en función del eje X, para poder navegar tanto por el menú de servicio como por el de administración.
A continuación se encuentra la función setup(), donde están configurados todos los pines que se van a utilizar, así también como la pantalla LCD, los diferentes usos de cada hilo y controlador, etc ...
Y por último tenemos el programa principal, que está basado en una máquina de estados según las acciones que vayamos realizando referentes al pulsado del botón y el uso del joystick. Dentro del programa principal podemos encontrar 5 estados:
- Estado 1 (START): El programa arranca mostrando el mensaje "CARGANDO ..." por el LCD, a la vez que el LED1 parpadea 3 veces a intervalos de un segundo. Una vez terminado esto, pasa al estado 2.
- Estado 2 (WAITING_CUSTOMER): Recién ingresado a la función de Servicio, el LCD muestra el mensaje "ESPERANDO CLIENTE", hasta que el sensor de ultrasonido detecte algo a menos de 1 metro desde donde está ubicado, pasando al estado 3.
- Estado 3 (CUSTOMER_FOUND): Una vez ha detectado al cliente a menos de 1 metro de su ubicación, se muestran los datos de temperatura y humedad durante 5 segundos, y después nos mostrará todos los productos que tenemos para elegir, cada uno con su precio. Una vez se haya navegado por el menú y se haya seleccionado una opción con el joystick, pasa al siguiente estado.
- Estado 4 (PREPARING_COFFEE): Cuando se ha seleccionado un producto de los mostrados anteriormente, se muestra por el LCD el mensaje "PREPARANDO CAFE ..." durante un tiempo aleatorio de entre 4 y 8 segundos, a la vez que la intensidad del LED2 crece proporcionalmente a ese tiempo, y por último muestra el mensaje "RETIRE BEBIDA" durante 3 segundos y vuelve al principio de la función de servicio, volviendo a mostrar el mensaje "ESPERANDO CLIENTE".
- Estado 5 (ADMINISTRATOR): Para acceder a este estado debemos pulsar el botón 5 segundos o más, donde se nos mostrarán varias opciones como ver los datos del sensor de temperatura, del sensor de distancia, un contador referente a los segundos que lleva ejecutándose el programa, y una opción que permite modificar los precios de cada producto*. Para salir de la función administrador se debe pulsar de nuevo el botón durante 5 segundos o más.
*: Si se han modificado precios aparecerán actualizados una vez se vuelva a la función de servicio.
Figura 2. Máquina de estados del sistema
Contenido multimedia:
Imagen: Esquema de conexión del circuito
Video: Ejecución de la práctica
*Dado el gran tamaño del archivo de vídeo, adjunto un enlace de OneDrive que redirige hacia el mismo.



Comentarios
Publicar un comentario