- Prerrequisitos
- Diagrama de circuito
- Flujo de proceso del Air Mouse
- Programando el Arduino para Air Mouse
- Script del controlador de Python
- Prueba del Arduino Air Mouse
Alguna vez se preguntó cómo nuestro mundo se está moviendo hacia la realidad inmersiva. Buscamos continuamente nuevas formas y métodos para interactuar con nuestro entorno utilizando realidad virtual, realidad mixta, realidad aumentada, etc. Todos los días aparecen nuevos dispositivos con estas tecnologías de ritmo rápido para impresionarnos con sus nuevas tecnologías interactivas.
Estas tecnologías inmersivas se utilizan en juegos, actividades interactivas, entretenimiento y muchas otras aplicaciones. En este tutorial, conoceremos un método tan interactivo que le brinda una nueva forma de interactuar con su sistema en lugar de usar un mouse aburrido. Nuestros fanáticos de los juegos deben saber que hace unos años, Nintendo, una compañía de juegos, vende la idea de un método interactivo en 3D para interactuar con sus consolas con la ayuda de un controlador de mano conocido como controlador de Wii. Utiliza el acelerómetro para localizar sus gestos para un juego y enviarlo al sistema de forma inalámbrica. Si quieres saber más sobre esta tecnología puedes consultar su patente EP1854518B1, esto te dará una idea completa de cómo funciona esta tecnología.
Inspirándonos en esta idea vamos a hacer un "Air mouse", para interactuar con los sistemas simplemente moviendo la consola en el aire, pero en lugar de usar referencias de coordenadas tridimensionales, solo vamos a usar referencias de coordenadas bidimensionales. podemos imitar las acciones del mouse de la computadora ya que el mouse trabaja en dos dimensiones X e Y.
El concepto detrás de este Wireless 3D Air Mouse es muy simple, usaremos un acelerómetro para obtener el valor de la aceleración de las acciones y movimientos del “Air mouse” a lo largo de los ejes xey, y luego basándonos en los valores de el acelerómetro controlaremos el cursor del mouse y realizaremos ciertas acciones con la ayuda de los controladores del software Python que se ejecutan en la computadora.
Prerrequisitos
- Arduino Nano (cualquier modelo)
- Módulo Acelerómetro ADXL335
- Módulo Bluetooth HC-05
- Apretar botones
- Computadora con Python instalado
Para obtener más información sobre la instalación de Python en la computadora, siga el tutorial anterior sobre el control de LED Arduino-Python.
Diagrama de circuito
Para controlar su computadora con los movimientos de su mano, necesita un acelerómetro que emite la aceleración a lo largo de los ejes X e Y y para que todo el sistema sea inalámbrico, se usa un módulo Bluetooth para transferir la señal de forma inalámbrica a su sistema.
Aquí se usa un acelerómetro ADXL335, es un módulo de triple eje basado en MEMS que genera la aceleración a lo largo de los ejes X, Y y Z, pero como se dijo anteriormente para controlar el mouse, solo necesitaríamos la aceleración solo a lo largo de los ejes X e Y. Obtenga más información sobre el uso del acelerómetro ADXL335 con Arduino con nuestros proyectos anteriores:
- Sistema de alerta de accidentes de vehículos basado en Arduino mediante GPS, GSM y acelerómetro
- Juego de ping pong usando Arduino y acelerómetro
- Robot controlado por gestos manuales basado en acelerómetro usando Arduino
- Alarma del detector de terremotos usando Arduino
Aquí los pines Xout y Yout del acelerómetro están conectados a los pines Analógico, A0 y A1 de Arduino y para transmitir las señales desde el Arduino al sistema se usa aquí el módulo Bluetooth HC-05, ya que el Bluetooth funciona sobre el Tx y Rx conexiones de pines, por lo que utilizamos los pines D2 y D3 en serie del software. Está conectado usando el software en serie porque si conectamos el Bluetooth con el hardware en serie y comenzamos a obtener las lecturas a través de la consola de Python, mostraría errores por la tasa de baudios no coincidente, ya que el Bluetooth se comunicaría con Python en su propia velocidad en baudios. Obtenga más información sobre el uso del módulo Bluetooth pasando por varios proyectos basados en Bluetooth utilizando diferentes microcontroladores, incluido Arduino.
Aquí hemos utilizado tres botones: uno para activar el mouse Air y otros dos para hacer clic con el botón izquierdo y derecho, como se muestra en la imagen de abajo:
Flujo de proceso del Air Mouse
El diagrama de flujo muestra el flujo de proceso de Air Mouse basado en Arduino:
1. El sistema comprueba continuamente que se apriete el gatillo mecánico hasta que no se apriete. Podemos trabajar normalmente con el ratón de la computadora.
2. Cuando el sistema detecta que se presiona un botón, el control del mouse se transfiere al air mouse.
3. Cuando se presiona el botón disparador, el sistema comienza a transferir las lecturas del mouse a la computadora. La lectura del sistema consta de las lecturas del acelerómetro y las lecturas del clic izquierdo y derecho.
4. Las lecturas del sistema consisten en el flujo de datos de 1 byte u 8 bits, en el cual los primeros tres bits consisten en las coordenadas X, los segundos tres bits consisten en las coordenadas Y, el segundo último bit es el bit de estado para obtener el estado del clic izquierdo del mouse y el último bit es el bit de estado para obtener el estado del clic derecho.
5. El valor de los primeros tres bits, es decir, la coordenada X puede oscilar entre 100 <= Xcord <= 999, mientras que el valor de la coordenada Y puede oscilar entre 100 <= Ycord <= 800. Los valores para el clic derecho y el clic izquierdo son los valores binarios 0 o 1 en los que 1 indica que el usuario hizo clic y 0 que el usuario no hizo clic.
6. Para no permitir que el rebote del botón afecte la posición del cursor, se mantiene un retraso conocido de 4 segundos después de cada clic del botón disparador del mouse.
7. Para el clic derecho e izquierdo en el mouse de aire, primero debemos presionar el botón izquierdo o derecho, y después de eso, debemos presionar el botón disparador para movernos a la posición del mouse de aire donde queramos.
Programando el Arduino para Air Mouse
El Arduino debe estar programado para leer los valores de aceleración en los ejes X e Y. El programa completo se proporciona al final, a continuación se encuentran los fragmentos importantes del código.
Configurar las variables globales
Como se dijo anteriormente, conectaremos el módulo Bluetooth con los pines seriales del software. Entonces, para configurar la serie de software, debemos declarar la biblioteca de serie de software y configurar los pines para Tx y Rx. En Arduino Nano y Uno, los Pin 2 y 3 pueden funcionar como un software de serie. A continuación, declaramos el objeto Bluetooth de la biblioteca de serie del software para configurar el pin para Tx y Rx.
#incluir
Configuración vacía ()
En la función de configuración , vamos a configurar las variables para decirle al programa si actuarán como entrada o salida. El botón de disparo se configuraría como pull-up de entrada, y los clics izquierdo y derecho se declaran como entrada y se configuran como High para que actúen como pullups de entrada.
También configure la velocidad en baudios para la comunicación en serie y Bluetooth en 9600.
configuración vacía () { pinMode (x, ENTRADA); pinMode (y, ENTRADA); pinMode (disparador, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, ENTRADA); pinMode (led, SALIDA); digitalWrite (lclick, HIGH); digitalWrite (rclick, ALTO); Serial.begin (9600); bluetooth.begin (9600); }
Bucle vacío ()
A medida que necesitaríamos botón de disparo de decir cuando tenemos que enviar el sistema de flujo de datos, por lo que hemos creado todo el código dentro del tiempo de bucle que supervisará continuamente el estado digital del gatillo de pull-up, ya que pasa a nivel bajo que lo hará pasarlo más lejos para el procesamiento.
Como hemos adjuntado un LED para hacernos saber el estado del sistema para cuando se pulsa el botón de disparo, que inicialmente establecido el llevado a baja fuera del tiempo de bucle ya que es condición predeterminada y alta dentro del tiempo de bucle que se iluminará el LED siempre que se presione el botón de disparo.
Para leer el estado del botón de clic izquierdo y derecho, hemos declarado globalmente dos variables lclick y rclick cuyos valores inicialmente se establecieron en 0.
Y en el ciclo , establezca el valor de esas variables de acuerdo con el estado digital del botón de clic izquierdo y derecho para verificar si los botones están presionados o no.
Estaríamos leyendo los valores de los pines X e Y del acelerómetro usando la función analogRead y mapearíamos esos valores al tamaño de la pantalla para que el puntero del mouse se mueva por toda la pantalla. Dado que el tamaño de la pantalla son los píxeles en la pantalla, debemos configurarlo en consecuencia y, como necesitamos que el valor de salida sea de tres dígitos, hemos configurado deliberadamente el rango para la X como 100 <= X <= 999 y de manera similar el valor para Y como 100 <= Y <= 800. Recuerde, los píxeles se leen desde la esquina superior izquierda, es decir, la esquina superior izquierda tiene el valor (0,0), pero como hemos declarado tres dígitos para xey, nuestros valores se leerían desde el punto (100,100).
Además, imprima el valor de las coordenadas y el estado del clic sobre el serial y Bluetooth con la ayuda de las funciones Serial.print y bluetooth.print que ayudan a obtener los valores en el monitor serial y en su sistema a través de Bluetooth.
Por último, debido al rebote de un botón, es posible que se repita un solo valor, lo que provocaría que el cursor del mouse permaneciera en una sola posición, por lo que para eliminar esto tenemos que agregar este retraso.
bucle vacío () { digitalWrite (led, LOW); while (digitalRead (disparador) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = mapa (xh, 286,429,100,999); ycord = mapa (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); más Serial.print (0); if (rstate == LOW) Serial.print (1); más Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); más bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); más bluetooth.print (0); retraso (4000); }}
Script del controlador de Python
A partir de ahora, hemos completado con el hardware y su parte de firmware, ahora para que funcione el air mouse necesitamos tener un script de controlador que pueda decodificar las señales del air mouse en los movimientos del cursor, así que para esto, hemos elegido Pitón. Python es un lenguaje de secuencias de comandos y al escribir secuencias de comandos aquí queremos decir que nos ayuda a obtener el control del otro programa, ya que aquí estamos controlando el cursor del mouse.
Así que abra su shell de Python y obtenga las siguientes bibliotecas instaladas usando los siguientes comandos:
pip instalar serie pip instalar pyautogui
El serial es una biblioteca para python que nos ayuda a obtener los datos de interfaces seriales como puertos com y también nos permite manipularlo, mientras que pyautogui es una biblioteca para python para controlar las funciones de la GUI, en este caso, el mouse.
Ahora vayamos al código de los controladores, lo primero que tenemos que hacer es importar las bibliotecas serial y pyautogui, y luego desde la biblioteca serial, tenemos que configurar el puerto com para la comunicación con una velocidad de 9600 baudios, la igual que Bluetooth.serial está funcionando. Para esto, debe conectar el módulo Bluetooth a su sistema y luego, en la configuración del sistema, debe verificar a qué puerto com está conectado.
Lo siguiente es leer la comunicación en serie del Bluetooth al sistema y mantenerla en funcionamiento continuamente, mantenga el resto del código en un bucle continuo con la ayuda de while 1.
Como se dijo anteriormente, Arduino está enviando 8 bits, los primeros 6 para las coordenadas y los dos últimos para el estado de los botones de clic. Así que lea todos los bits con la ayuda de ser.read y configure su longitud en 8 bits.
A continuación, divida los bits de las coordenadas del cursor y haga clic cortándolos, y luego corte los bits del cursor en coordenadas X e Y por separado. Lo mismo ocurre con el clic izquierdo y derecho.
Ahora, a partir de la comunicación, obtenemos una cadena de bytes y necesitamos convertirla en un número entero para que quepan en las coordenadas, hacemos esto decodificándolas y luego encasillandolas en números enteros.
Ahora para mover el cursor usamos la función pyautogui moveto , que toma como argumentos esas coordenadas enteras y mueve el cursor a esa posición.
A continuación, verifique los clics, lo hacemos usando los dos últimos bits y la función de clic de pyautogui, su clic predeterminado es el izquierdo, sin embargo, podemos establecerlo en la derecha declarando el valor del botón a la derecha, también podemos definir el número de clics para configúrelo en un doble clic configurando el parámetro de clics en 2.
A continuación se muestra el código Python completo que se ejecutará en la computadora:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (button = 'right', clicks = 2)
Prueba del Arduino Air Mouse
Entonces, para operar el Air Mouse, conecte una fuente de alimentación. Puede ser desde la ranura Arduino Nano USB o desde la fuente de alimentación regulada de 5v usando 7805 IC. Luego, ejecute el script del controlador de Python configurando el puerto com al que está conectado su Bluetooth. A medida que se ejecuta el script, verá un retraso en el parpadeo del Bluetooth, lo que significa que está conectado a su sistema. Luego, para operarlo, haga clic en el botón disparador y verá que la posición de las coordenadas cambiará y si desea el clic izquierdo o derecho, primero presione el botón izquierdo o derecho y el botón disparador juntos, verá la acción del clic en una ubicación cambiada del cursor.
Consulte el video de trabajo detallado a continuación.