Diferencia entre revisiones de «Mouse sin Contacto»
(→Armado del dispositivo) |
(→Materiales) |
||
(No se muestran 12 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
==Introducción== | ==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== | ==Materiales== | ||
*Kit Robótico Butia con: 2 sensores de distancia y un botón | *Kit Robótico Butia con: 2 sensores de distancia y un botón | ||
*Pc con TurtleBots, python3 y poder instalar el modulo pyautogui | *Pc con TurtleBots, python3 y poder instalar el modulo pyautogui | ||
+ | |||
+ | [[Archivo:comandos y codigo.zip]] | ||
==Armado del dispositivo== | ==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 | |
+ | |||
+ | [[Archivo:placa1.jpg|200px]] | ||
+ | |||
+ | Luego se colocan los sensores de distancia formando dos ejes para detectar el movimiento vertical y horizontal. | ||
+ | |||
[[Archivo:dispositivo1.jpg|250px]] | [[Archivo:dispositivo1.jpg|250px]] | ||
− | + | 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. | |
[[Archivo:sensor1.jpg|150px]] | [[Archivo:sensor1.jpg|150px]] | ||
Línea 22: | Línea 31: | ||
==Calibración de sensores== | ==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 | + | 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. | 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. | ||
Línea 32: | Línea 41: | ||
==Ejecución== | ==Ejecución== | ||
− | abrir | + | 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. | |
+ | |||
+ | [[Archivo:turtlebot1.jpg|500px]] | ||
+ | |||
+ | 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: | ||
[[Archivo:codigo.jpg|500px]] | [[Archivo:codigo.jpg|500px]] | ||
− | + | 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 | |
− | + | [[Archivo:terminal1.jpg|500px]] | |
− | + | ||
+ | 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. | ||
+ | |||
+ | <youtube>https://youtu.be/ys4bQOcnD-o</youtube> <br> | ||
==Propuestas a futuro== | ==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. |
Revisión actual del 11:32 2 jul 2020
Contenido
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
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
Luego se colocan los sensores de distancia formando dos ejes para detectar el movimiento vertical y horizontal.
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.
Instalación de python y pyautogui
Teniendo python3 basta con correr los siguientes comandos en la terminal para instalar el modulo pyautogui
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.
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:
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
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.