Bola de cristal con Arduino

16 de febrero de 2017 Las bolas mágicas pueden predecir el futuro. El mecanismo es muy simple: haces una pregunta, agitas la bola y esperas al mensaje con la respuesta a la pregunta aparezca. Viene en forma de la típica bola de billar (pero más grande) con un ocho dibujado, pero que tiene un pequeño lado plano en donde hay una diminuta pantalla. En el siguiente proyecto, se intentará imitar el mecanismo usando una pantalla LCD. Materiales 1 Arduino UNO. 1 placa de prueba Varios cables puente. 1 sensor de inclinación. 1 potenciómetro. 1 resistencia de 10KΩ. 1 resistencia de 220Ω. 1 una pantalla de cristal líquido de 2 filas x 16 columnas (como la mostrada en la figura anterior). Para mostrar las respuestas, podemos utilizar una pantalla LCD para mostrar caracteres alfanuméricos. Para este proyecto usaremos una que dispone de 16 columnas y 2 filas, para poder mostrar un total de 32 caracteres. Dicha pantalla tiene muchos pines, los cuales, son para alimentación y comunicación, pero nosotros no necesitamos conectarlos todos. En la siguiente figura podemos ver los que necesitamos unir. Montar el circuito El circuito no es muy complejo, pero tiene mucho cableado. Es por eso que se deberá prestar atención a la hora de realizar las diferentes conexiones para asegurarse de que todo está correctamente colocado. Se empezará con colocar la alimentación a la tierra de Arduino en la placa de prueba. Después se colocará el sensor de inclinación en la placa de pruebas y se conectará una de las patas a la alimentación 5V. La otra pata irá conectada a tierra a través de una resistencia de 10KΩ y al pin digital 6 de nuestro Arduino. Al conectar el display LCD se tendrá que verificar si sirve cada uno de sus pines. Se empezará a conectar los pines de los extremos  (Vss y LED-) a tierra. Procederemos del mismo modo con el pin R/W, de esta manera tendremos al display en modo escritura. El pin de alimentación de la pantalla (Vcc) lo conectaremos directamente a la alimentación de 5V. Por otro lado, el pin LED+ lo conectaremos a la alimentación a través de una resistencia de 220Ω. Seguidamente se realizaran las siguientes conexiones, las cuales permiten decirle al display que carácter queremos mostrar: – Pin digital 2 del Arduino al D7 del LCD. – Pin digital 3 del Arduino al D6 del LCD. – Pin digital 4 del Arduino al D5 del LCD. – Pin digital 5 del Arduino al D4 del LCD. Para escribir, se tendrá que habilitar dicha función. Esto lo conseguiremos conectando el pin EN del display al pin 11 de Arduino y, el pin RS al pin 12. Después se colocará el potenciómetro en la placa de pruebas. Conectamos la patilla de un lado a la alimentación y la del otro lado a tierra. La patilla central sin embargo, la conectaremos al pin V0 del LCD. Esta conexión del potenciómetro a la pantalla nos permitirá regular el contraste de la misma. Al montar todo, se vería parecido a la siguiente imagen: El esquema se vería similar a esto: Código: Lo primero de todo es importar la librería LiquidCrystal. Con esto podremos acceder a toda una colección de código que nos facilitará el uso del display LCD. A continuación, inicializamos dicha librería, de forma similar a la utilizada con la librería del servo motor del proyecto “Indicador de estado de ánimo“, diciéndole que pines vamos a usar para comunicarnos.

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Se van a crear variables y constantes para almacenar el número de pin del sensor de inclinación y dos variables, una para guarda su estado actual y otra para almacenar el estado anterior.

const int switchPin = 6; int switchState = 0; int prevSwitchState = 0; int reply;

En la función de setup(), se configurará el pin del sensor como entrada mediante la función pinMode(). Inicializamos la librería del LCD y le decimos como de grande es la pantalla.

void setup() {

    lcd.begin(16, 2);    pinMode(switchPin, INPUT);

A continuación, vamos a escribir una pantalla de bienvenida a la Bola mágica. Para ello, usaremos la función print(). Vamos a escribir las palabras “¡Pregunta a la” en la línea superior de la pantalla. Cuando vayamos a hacerlo, el cursor se encontrará automáticamente en el principio de la línea superior.

    lcd.print("¡Pregunta a la");

Seguidamente, para poder escribir en la siguiente línea, debemos decirle a la pantalla a donde debe mover el cursor. Las coordenadas de la primera columna de la segunda fila son 0,1 (recordemos que los ordenadores empiezan a contar a partir del número 0, por lo que la primera columna de la primera fila tendrá las coordenadas 0,0). Usaremos la función lcd.setCursor() para mover el cursor al lugar deseado y escribir “Bola Mágica!”

    lcd.setCursor(0, 1);

    lcd.print("Bola Magica!");  }//Fin de la función setup.

void loop() {

switchState = digitalRead(switchPin);

Usaremos una sentencia if() para comprobar si el sensor está en una posición diferente de la que se encontraba anteriormente. Si es diferente a la anterior y ahora tiene un nivel LOW, es el momento de escoger una respuesta aleatoria. La función random() devuelve un número basado en el argumento que le proporcionamos. Para empezar, tenemos un total de 8 respuestas diferentes para nuestra bola. Siempre que invoquemos a la función random(8), nos devolverá un número comprendido entre el 0 y el 7. Almacenaremos dicho número en la variable reply.

    if (switchState != prevSwitchState) {

        if (switchState == LOW) {

            reply = random(8);

          lcd.clear();

            lcd.setCursor(0, 0);            lcd.print("La bola dice:");            lcd.setCursor(0, 1);

Dentro de los bloques case, el código será el mismo, tan solo cambia el mensaje de respuesta a mostrar. Por ejemplo, en el bloque case 0 el código es lcd.print(“Yes”). Después de la función lcd.print() sigue otro comando, llamado break. Dicho comando le dice a Arduino donde termina el bloque de código case. Cuando encuentra el comando break, salta automáticamente al final de la sentencia switch. Nosotros crearemos 8 bloques case. Cuatro de las respuestas serán positivas, dos serán negativas y las otras dos invitarán a que volvamos a preguntar de nuevo.

            switch(reply){

                case 0:

                lcd.print("Si");

                break;

                case 1:

                lcd.print("Lo mas probable");

                break;

                case 2:

                lcd.print("Ciertamente");

                break;

                case 3:

                lcd.print("Buena decision");

                break;

                case 4:

                lcd.print("No es seguro");

                break;

                case 5:

                lcd.print("Pregunta de nuevo");

                break;

                case 6:                 lcd.print("Lo dudo");                 break;

                case 7:                 lcd.print("No");                 break;

            }//Fin del switch.

        }//Fin del segundo if.

    }//Fin del primer if.

prevSwitchState = switchState;

}//Fin de la función loop.

  Poner en marcha: Se tiene que dar corriente eléctrica a Arduino para poder poner en marcha este proyecto.

Dejar un comentario

Por favor tenga en cuenta que los comentarios deben ser aprobados antes de ser publicados