Maquina dispensadora de alimentos con maquinas de estado diseñada con Arduino

INTRODUCCIÓN

El siguiente documento describe el proceso de desarrollo de la práctica de laboratorio N°8 del curso de Fundamentos de Electrónica Digital.
El proyecto tiene como objetivo aplicar los conceptos de diagramas de estado y máquinas de estado finitas en el diseño de una máquina distribuidora de alimentos. Para dicho diseño se utilizaron el Arduino UNO para procesar la información, 4 pulsadores para simular el ingreso de las monedas ($50, $100, $200 y $ 500), un integrado CD4072 (compuerta or) para activar una interrupción del Arduino cuando uno de los pulsadores anteriores es presionado, otro pulsador para entrar a la configuración de la máquina, 3 diodos led´s para simular la salida de dinero en caso de devolución ($50, $100 y $200) y un LCD de cristal para mostrar información del proceso.  
Esta tiene la capacidad de vender un determinado producto ingresado por el puerto serial con el comando “X#” donde la X hace referencia a las filas (de la A hasta la E) y # a las columnas (de la 1 a la 4).
El proceso se explica paso a paso muy detalladamente comenzado por el diagrama de estados y la descripción de cada estado y la transición entre ellos.
Diagrama de estados


hardware


Para el montaje del proyecto se utilizó el Arduino UNO como base central. A continuación se relacionan la configuración de los pines con los periféricos de entrada y salida:
  • LCD 20X4 : Se usan los pines.
LCD RS pin to digital pin 12
LCD Enable pin to digital pin 11
LCD D4 pin to digital pin 13
LCD D5 pin to digital pin 10
LCD D6 pin to digital pin 9
LCD D7 pin to digital pin 8


  • Pulsadores: Se usan los pines
pulsA Moneda de $50 al pin 4
pulsB Moneda de $100 al pin 5
pulsC Moneda de $200 al pin 6
pulsD Moneda de $500 al pin 7
Los pulsadores  pulsA-D van a una compuerta or y la salida de esta al pin 3
pulsConf para entrar a configuración al pin 2


  • Led’s: Se usan los pines
ledA Moneda de $50 al pin A0
ledB Moneda de $100 al pin A1
ledC Moneda de $200 al pin A2


El Arduino se comunica vía serial con el computador con una velocidad de 9600 baudios para ingresar los respectivos comandos de operación y mostrar las funciones realizadas.

software y descripción de los estados

    1. Configuración inicial del arduino uno

En este punto es importante reseñar que el Arduino tiene la opción de trabajar bajo interrupciones y que estas se dan cuando los pines 2 y 3 tienen un flanco de subida. Para tal efecto, se configuró el pin 2 para entrar a MODO CONFIGURACIÓN cuando es presionado pulsConf y la máquina no se encuentra en proceso de venta. Por el pin 3 entra la señal de salida de la compuerta OR 4 que indica que alguno de los pulsA-D fue presionado, que al tiempo lee por los pines 4, 5, 6 o 7 el pulsador correspondiente.
    1. configuración inicial de la memoria eeprom del arduino uno

En la siguiente tabla se muestra la configuración inicial que se le dio a la máquina. En ella se muestran las filas y columnas con el respectivo código del producto, cantidad y precio. Igualmente se pone la posición donde se ha guardado en la memoria EEPROM la cantidad del producto ya que este dato nos ayuda a identificar cada producto dentro de la memoria EEPROM.

COLUMNA 1
COLUMNA 2
COLUMNA 3
COLUMNA 4

Pos
Cant
$
Pos
Cant
$
Pos
Cant
$
Pos
Cant
$
FILA A
A1
A2
A3
A4
0
15
1700
3
12
1200
6
13
1350
9
14
1400
FILA B
B1
B2
B3
B4
12
15
1800
15
15
1700
18
13
1100
21
15
1050
FILA C
C1
C2
C3
C4
24
15
1650
27
15
1300
30
13
1100
33
13
1000
FILA D
D1
D2
D3
D4
36
15
2800
39
15
1850
42
14
2100
45
14
1400
FILA E
E1
E2
E3
E4
48
14
1200
51
14
1000
54
14
1350
57
11
1950

Para la contraseña se usó la posición 60 y 61 de la memoria EEPROM
    1. Estado Inicial (mef = estInicial)

En este estado se pide al usuario ingresar el código del producto por medio de un mensaje de bienvenida tanto en la ventana de puerto serial como en el LCD. El código tiene que estar en formato “X#” donde la X corresponde a las filas (de la A hasta la E) y # a las columnas (de la 1 hasta la 4).  Dicho código es procesado y en caso de ser correcto pasa al estado de venta, de lo contrario muestra un error en pantalla y pide al usuario ingresarlo de nuevo.
En este estado está habilitada la interrupción del pin 2 para cuando sea presionado pulsConf, la máquina pase al estado de contraseña (mef = estPass).
    1. Estado de venta (mef = estVenta)

En este estado se procede a leer el pin de interrupción 3 y los pines 4, 5, 6 y 7; también se desactivada la interrupción del pin 2 para entrar a MODO CONFIGURACIÓN.  En caso de ser presionado pulsConf muestra un mensaje en el puerto serial pidiendo terminar el proceso de venta.
Este estado permite leer los pulsadores que simulan la monedas. Cada vez que es presionado un pulsador se realiza una suma que al superar el precio asignado al producto permite pasar al estado de reembolso (mef = estVuelta). Al estado reembolso se le transmite un valor que corresponde a una resta entre el total ingresado y el precio del producto.
Este estado también está a la espera de que en algún momento se cancele la compra con el comando CC ingresado por consola. Este comando es ingresado por puerto serial y verificado. Cuando esto sucede se le transmite al estado de reembolso la cantidad ingresada hasta el momento de la cancelación.
    1. Estado de Reembolso (mef = estVuelta)

En este estado sigue desactivada la interrupción del pin2 (modo configuración) y procede a realizar el reembolso del dinero ya sea porque el usuario realizó el proceso completo de venta e ingreso más del precio del producto o porque este mismo canceló la compra después de haber ingresado dinero. En caso de no superar el precio o no haber ingresado dinero antes de cancelar, la máquina no devuelve, es decir que no prende ningun led; en caso contrario, realiza una devolución con la menor cantidad de monedas posible. En la pantalla del LCD y en la ventana del puerto serial se muestran el código del producto, el total a devolver y el precio.
Después de realizar este procede la máquina vuelve al estado inicial (mef = estInicial).
    1. Estado Contraseña (mef = estPass)

Para entrar a este estado debe estar activada la interrupción del pin 2 (modo configuración) que solo es posible si la máquina está en estado inicial.
Este estado muestra en el LCD y la ventana del puerto serial un mensaje que pide ingresar una contraseña numérica de 4 dígitos.  Sí la contraseña es correcta, pasa al estado de configuración (mef = estConf), de lo contrario pide ingresarla de nuevo hasta superar 3 intentos y volver al estado inicial.
    1. Estado Configuración (mef = estConf)

A este estado se entra cuando se haya ingresado una contraseña correcta en el estado anterior. Se procede a realizar el cambio de alguno de los datos del producto, cambiar la contraseña o salir al estado inicial con los comandos X#, PWD_XXXX o EXIT, respectivamente.  En caso de ingresar un código incorrecto muestra un error y se queda en este mismo estado.
    1. Estado Configuración de producto (mef = estConfProd)

La máquina recibe la orden de entrar a este estado desde el estado anterior al ser ingresado correctamente el código de producto a configurar (X#).
La función de este estado es cambiar la configuración del producto por medio de los comandos C_YY y P_XXXX. Acá se verifica que los comandos sean correctos y que los datos representados con YY y XXXX sean solo datos numéricos. También se verifica que al ingresar una nueva cantidad de producto, esta no sea negativa ni supere el tope de 15. Con el nuevo precio se verifica que no sea negativo y que sea múltiplo de 50.
Por las pantallas son mostrados el código del producto a modificar con el precio y la cantidad actual. Al ser ingresado correctamente cualquiera de los dos comandos se procede a actualizar la EEPROM la nueva cantidad o el precio y mostrarlos en pantalla.
También tenemos la opción de salir al estado de configuración con el comando TP. Con este, como con los comandos anteriores, en caso de ser ingresados incorrectamente, se procede a mostrar un mensaje de error y de nuevo el menú de opciones de este estado (mef = estConfProd).
    1. Estado de Configuración de Contraseña (mef = estConfPass)

La máquina recibe la orden de entrar a este estado sólo si los datos XXXX del comando PWD_XXXX son datos numéricos. De ser así, este estado recibe la nueva contraseña y la procede a guardar en la posición 60 y 61 de la EEPROM. Al realizar dicho proceso se devuelve para el estado de configuración (mef = estConf)


MONTAJE
______________________________________________________________________________


p8.png

CÓDIGO

Comentarios

Entradas más populares de este blog

Compuertas lógicas en Arduino

Manejo display 7 segmentos empleando Arduino

Lógica combinacional empleando Arduino y álgebra de Boole