Tutorial para hacer un menú a voz y con encoder rotativo

Hola electrónicos, en esta oportunidad les ofrezco este interesante proyecto, el cual consta de una pantalla LCD, en donde se reflejará el menú de una maquina imaginaria de café.

Es una maquina imaginaria de café, debido a que es sólo un ejemplo que te ayudará a conocer y usar los componentes necesarios para el desarrollo de este proyecto.

Materiales

– codificador rotativo
– pantalla lcd
– módulo de fp player
– amplificador con un pequeño altavoz
– Protoboard
– Arduino UNO
– Resistencia de 1kohms

– Tarjeta SD

 

Ahora bien, antes de iniciar con el armado de nuestros componentes, debes saber cómo funciona un codificador rotativo. Además, sabrás cómo usarlo para codificar, para conocer la posición del menú, y para desplazarnos hacia arriba o hacia abajo en el menú.

Luego conoceremos todo lo relacionado con la pantalla LCD controlada con comunicación I2C. También aprenderás a crear caracteres especiales, como flechas. Y finalmente, aprenderás a usar este proyecto para reproducir sonidos mp3 y amplificar el sonido con el amplificador de sonidos.

Iniciemos entonces a explicar el codificador rotativo (encontrarás que se parece a un potenciómetro, pero no lo es).

El codificador rotativo puede detectar los pasos de rotación, la dirección de la rotación, y también tiene un botón pulsador, por lo tanto es el componente perfecto para que un menú se desplace hacia arriba o hacia abajo, pero también para seleccionar con el botón.

 

Ahora bien, el codificador rotativo consta de un perímetro de conexiones de cobre, mientras más conexiones de cobre y más conectores tengamos, mejor será la precisión del codificador.

El codificador rotativo también cuenta con dos conectores fijos que serán las salidas de los pines del codificador y los llamaremos reloj (clock) y datos (Data). Todos los conectores internos están conectados a tierra (GND).

El pin del reloj y de datos tendrán una resistencia de pull up de 10 kiloohms conectadas 5 voltios.

En la imagen que se muestra a continuación, puede ver cómo los pines no tocan los conectores de cobre internos, por lo que el voltaje en la salida es de 5 voltios. Esto debido a que tenemos un pull up conectado a ese voltaje.

Podrás notar en la siguiente imagen, que cuando empezamos a rotar el codificador hacia la derecha, la salida de reloj tocará uno de los conectores, y la salida en el pin de reloj ahora estará en tierra. Además, el pin de datos seguirá teniendo 5 voltios.

Seguidamente, continuamos girando hasta que el pin de datos también toque la tierra, entonces todo lo que debemos hacer para saber la dirección de rotación es identificar cuál es el pin que cambia tierra primero.

Si se conecta el pin de reloj y luego el pin de datos, entonces estaríamos girando hacia la derecha. Si por el contrario se conecta primero el pin de datos y luego el pin del reloj, estaríamos girando hacia la izquierda, y cada vez que uno de los pines cambia su valor de tierra a 5 voltios o de 5 voltios a tierra, entonces contamos un paso de más.

En el código también guardaremos la posición inicial de los pines, y luego detectaremos cualquier cambio en esta posición, así de fácil podemos contar los pasos, y también detectar la dirección de la rotación, de modo que cuando giramos hacia la derecha aumentamos los pasos, y cuando giramos hacia la izquierda disminuimos el valor de los pasos.

Una cosa importante acerca de los codificadores, es que el conector tiene que ser más grande que los pines, y que el espacio entre los conectores, por lo que en un momento determinado ambos pines podrían estar tocando el conector metálico, porque de manera contraria, no podríamos detectar la dirección, sólo contar pasos.

Ahora bien, ya que sabemos cómo funciona el codificador, haremos la conexiones al arduino y ejecutemos el primer código para este tutorial.

Conexiones

Primero, conectaremos el pin de reloj al pin digital 8, y el pin de los datos al pin digital D9, recuerda añadir dos resistencias de pull up de 10 kiloohms para cada pin, y 5 voltios y conectar la tierra al pin del medio del codificador.

No conectaremos el botón pulsador para este ejemplo.
Seguidamente, debes conectar los 5 voltios y la tierra.

Ahora, te puedo ir explicando el código final paso por paso. Descárgalo y ábrelo en el IDE de tu arduino.

 

Código

Ahora bien, en el código primero debemos definir los pines que estamos usando, los cuales son los pines 8 y 9 del arduino.

Luego, comenzamos la comunicación serie, esto con el fin de imprimir los pasos en el monitor de serie.
El código es bastante sencillo, vamos a leer primero el estado del pin de reloj.

Si este estado detectado no es el mismo que el último estado, quiere decir que tenemos un paso, pero si el estado es el mismo, significa que no hacemos nada.

Ahora, comprobamos el estado el estado del pin de datos, si es diferente al pin del reloj, significa que estamos girando hacia la derecha, y si es el mismo, indica que estamos girando hacia la izquierda, aumentando o bajando el valor del contador
Finalmente imprimimos los valores en el monitor serie para poder verlos.

El código final de este proyecto se hará con interrupciones de pin, en vez de digitalRead en el bucle vacío, esto para asegurarnos de que no perdemos ningún paso.

 

Ahora bien, lo que debes hacer es subir este código y abrir el monitor serie. Notarás como comienza a rotar el codificador y aumentamos el valor del contador.

Ahora hablaremos de la pantalla LCD, esta es una pantalla bastante común, y por lo general puedes controlarla conectando todos los pines que esta posee.

Para mantenerlo todo simple y usar solo 2 pines, este LCD tiene un módulo de I2C.
Conectamos los datos y el pin de reloj a estos pines a los analógicos a4 y a5, como se muestra en el esquema a continuación.


Ahora, vamos a ver el código de prueba para aprender a usarla.

El módulo de la pantalla LCD es I2C, por lo que debemos proporcionarle una librería especial para su correcto funcionamiento.

Descarga la librería de cristal líquido I2C en el siguiente link.

Una vez descargada la librería, abre el IDE del arduino, vamos a Sketch>Include Library>Add .ZIP Library. Selecciona el archivo zip descargado para instalarlo.

Ahora, dentro del código incluímos la librería con el comando #include.

 

Luego, tenemos que definir la dirección de esclavo para esta pantalla, que normalmente es 0x3f o 0x27, en hexadecimal.

Ahora bien, debemos bajar al bucle de configuración, y utilizaremos la función de inicio y de backlight, para analizar la pantalla LCD, y encender la iluminación.

 

Ahora, vamos a imprimir algo en nuestra función loop().

Primero limpiamos la pantalla LCD, colocando el cursor en la primera fila, y la segunda posición de la columna, para imprimir un texto.

Seguidamente, colocamos el cursor en la segunda fila y procedes a escribir hello word.
También, debes añadir un pequeño retraso.

 

Ahora, debes proceder a cargar el código. A continuación podrás observar cómo se muestran los resultados.

Ahora, crearemos caracteres especiales, vamos a dibujar el símbolo de una flecha como ejemplo.


Podrás notar que si te acercas suficientemente a la pantalla LCD, podrás ver que cada letra está formada por un cuadrado de 7 X 5 puntos pequeños.
Ahora, dibujemos nuestra flecha.

Como podrás observar en la imagen que se muestra a continuación, la primera fila no tiene nada, así que tenemos un cero binario, pero si miramos la segunda fila, tiene un punto en la tercera posición, así que tenemos un 100 en hexadecimal, el cual es un 4.

Ahora bien, al pasar a la tercera fila muestra un 110 que es un 6, y la cuarta que tiene una línea completa de unos que es un 1f en hexadecimal.

Luego todo se repite, entonces para dibujar este símbolo debemos enviar a la pantalla un 0, 4, 6, F, 6, 4 y otro 0.

 

Ahora, en el código de prueba de carácteres especiales vamos a crear un nuevo array llamado arrow y el vector serán los números correspondientes a la flecha, que hemos mostrado en el ejemplo anterior.

Luego en el nuestra unción setup vamos a crear el símbolo utilizando la función createChar y le vamos a dar la dirección 0.

Luego, en el bucle utilizo la función de escritura de puntos LCD, para enviar el carácter 0 que acabamos de crear.

Añade un retraso, cargas el código y listo, tenemos el símbolo de la flecha impreso en la pantalla LCD.

Puedes hacer lo mismo con cualquier símbolo que desees, incluso podrías crear dos símbolos que juntos crean un símbolo único.
Ahora bien, dejando la pantalla LCD de lado, veamos cómo funciona el reproductor DF.

 

Conexiones del módulo reproductor

 


Estas son las conexiones que vamos a usar para este módulo, las cuales son las conexiones que necesitamos para la salida del altavoz, la comunicación en serie y la alimentación.

 

Necesitamos añadir una resistencia de 1 Kohm entre los pines de comunicación de arduino que son el TXRX y el módulo, de lo contrario habrá un ruido acoplado a reproducir el sonido, la resistencia de un Komh ha solucionado el problema.

También vamos a necesitar una tarjeta micro SD, para almacenar los archivos mp3.

 

Dentro de esta tarjeta SD tenemos que colocar los archivos de la siguiente manera.

En la tarjeta SD vamos a crear una carpeta llamada mp3 y comenzamos con el archivo 0000, luego ponemos el archivo 0001, luego 0002, y de la misma manera sucesivamente.

 

Para este tutorial se han creado los archivos utilizando una página web que pasará de texto a una voz robótica femenina.

 

Ahora bien, haz las conexiones de serie entre el módulo y el arduino en la salida. Se le ha añadido un simple amplificador de audio.

 

Conecta un altavoz pequeño y tres botones y cargamos el código que veremos a continuación.

 

 

Código

Primero necesitamos instalar la biblioteca del reproductor DF, descárgalas desde el siguiente enlace.

 

Instala la librería en el IDE del arduino.

 

Ahora que tenemos la librería instalada, en el ciclo de configuración vamos a definir los pines para los botones y preparamos el módulo de audio.

 

Para reproducir los sonidos, usaremos la función de play mp3 y seleccionamos el número del archivo, donde la pista 1 representa el archivo 0000 en la tarjeta SD, y así sucesivamente.

Cada vez que se presiona un botón, se va a reproducir un sonido diferente. Sube el código y verás los resultados.
Podrás notar que cada botón tiene un sonido diferente.

Ahora sabemos cómo funciona todo para este proyecto, en el código final fusiona todo junto, utiliza el siguiente esquema:

 

En el código, dependiendo de la posición codificada con el codificador rotatorio, navegamos hacia el primer menú.

Al presionar el botón seleccionamos y entramos en el segundo menú.

 

En este ejemplo hay una profundidad de sólo dos niveles de menú, pero puedes ir a más allá.

Tienes entonces que leer todos los comentarios en el código para entender mejor cada parte, de todos modos, el código es bastante fácil.

Tenemos un menú con voz, que es pasable, y también con caracteres especiales.

Puedes seleccionar el café, y luego el nivel de azúcar.

También puedes activar o desactivar la luz del LCD o configurar el volumen de la voz.

Puedes hacer tu propio menú con diferentes textos y diferentes acciones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

17 − 14 =