Mouse sin Contacto

De Proyecto Butiá
Saltar a: navegación, buscar

Introducción

El objetivo de este proyecto es implementar un dispositivo que permita manejar el cursor sin necesidad de tocarlo. Esto se realizara a partir de sensores de distancia que detecten los movimientos de la mano del usuario, calculen el movimiento relativo a una posición anterior y manden esas instrucciones a la pc. Al considerar el movimiento relativo se evita la necesidad de movimientos amplios lo cual es cómodo y también tiene aplicaciones en accesibilidad.

La motivación detrás de esto es que la gente le pierda el miedo a la programación y robotica, a primera vista parece un proyecto avanzado/futurista pero con esta guía se puede lograr de forma sencilla y servir como punto de partida a estas ramas de la ciencia.

Materiales

  • Kit Robótico Butia con: 2 sensores de distancia y un botón
  • Pc con TurtleBots, python3 y poder instalar el modulo pyautogui

Archivo:Comandos y codigo.zip

Armado del dispositivo

El armado del dispositivo no es muy complejo; en esencia solo hay que armar la placa del butia, conectarle la batería y los sensores como se ve en esta imagen

Placa1.jpg

Luego se colocan los sensores de distancia formando dos ejes para detectar el movimiento vertical y horizontal.


Dispositivo1.jpg

En este caso se usó la base de acrílico que viene en el kit porque es sencillo colocar los sensores de forma vertical (como se ve en la imagen) y se mantienen estables en esta posición. Otra ventaja es que la esquina a la que apuntan los dos sensores tiene una distancia en el medio del rango de valores que miden los sensores.

Sensor1.jpg

Instalación de python y pyautogui

Teniendo python3 basta con correr los siguientes comandos en la terminal para instalar el modulo pyautogui

Tutop.jpg

Calibración de sensores

Los sensores de distancia que vienen en el kit butia tienen un rango de distancia en el que las mediciones de los sensores son significativas. Por significativas se entiende que no presenten saltos y que al desplazar el objeto que estén detectando el valor de las mediciones varíe proporcionalmente.

A partir de cierta distancia máxima los sensores no alcanzan a detectar cambios y las mediciones devuelven un valor máximo. También existe una distancia mínima a partir de la cual las mediciones se vuelven irregulares, es decir que a partir de este punto al acercar aun mas el objeto al sensor el valor de las mediciones aumenta en vez de disminuir.

Nos interesa en este caso que nos manejemos dentro del rango que esta entre esta distancia mínima y máxima.

Para obtener el valor máximo de un sensor basta con apuntarlo a una pared lejana o al techo y hacer varias mediciones, tomando el máxima de estas obtenemos los valores a los que llamaremos en el código maxDistW y maxDistH para ancho y alto respectivamente. Para obtener los valores mínimos hay que medir el valor detectado por el sensor repetidas veces mientras se acerca un objeto al mismo, en el momento que este valor aumenta encontramos la mínima distancia para la cual podemos obtener mediciones correctas. Como en el caso anterior hay que tomar varias mediciones de los valores en este punto e ingresar los mínimos como minDistW/minDistH en nuestro código.

Ejecución

En primera instancia hay que abrir el programa Turtlebots para poder instanciar el butia correctamente.

Luego se prueba que el butia se detecte correctamente evaluando los sensores disponibles y haciendo refresh o reconectando de ser necesario. Es recomendable que en este punto se calibren los sensores como se describió anteriormente.

Turtlebot1.jpg

Terminada la calibración de sensores es necesario actualizar los datos de mínimo y máximo de los sensores en el código.

El código usado es el siguiente:

Codigo.jpg

Para ejecutar el programa se debe de abrir la terminal en su ubicación (click derecho->open in terminal) y ejecutar el comando: python nombreprograma.py

Terminal1.jpg

La programación del dispositivo esta basada en el movimiento relativo. Al inicio de la ejecución hay que presionar el botón para marcar cual va a ser la referencia. Si se mantiene la mano quieta en la posición de referencia el cursor no se moverá. Si se mueve la mano de la posición de referencia el cursor se desplazara en la dirección en la que se movió la mano a una velocidad que depende de la diferencia entre el valor de la distancia detectada en este momento y el valor detectado en la posición de referencia.

En el código esto se implementa en el bloque de movimiento donde se comparan los valores detectados en un instante dado con los detectados en la posición de referencia. Luego se convierten los valores de distancia en una posición del cursor en la pantalla en pixeles.


Propuestas a futuro

Mas allá de que el enfoque principal del proyecto es una actividad educativa que motive a introducirse en el mundo de la robótica y la programación tiene aplicaciones practicas en el tema de accesibilidad.

Al requerir una mínima capacidad de movimiento para poder manejar el cursor habilita a usuarios con dificultades motoras a manejar un ordenador y es una opción mas cómoda que los barridos o selectores de cuadros. Se puede optimizar el software para un mayor rendimiento y precisión, las mejoras también podrían enfocarse en crear una base que sea mas cómoda para el usuario en vez de usar el acrílico del kit butia.

Otro camino interesante seria agregar al dispositivo un sensor de sonido y para poder recibir comandos de voz y realizar acciones como abrir o cerrar ventanas, usar aplicaciones especificas como navegadores o escribir.