Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Control de ratón con joystick Arduino: Navegación precisa del cursor

Componentes y suministros

Arduino UNO × 1
Joystick de doble eje × 1

Aplicaciones y servicios en línea

Sobre este proyecto

Como alternativa al ratón o trackpad para controlar el cursor del ordenador, he desarrollado esta aplicación utilizando un joystick. El joystick permite mover el cursor en cualquier dirección (ejes X e Y) y también realiza la función de clic mediante el interruptor integrado en el joystick.

Conceptos básicos

Un joystick consta esencialmente de dos potenciómetros alineados en las direcciones X e Y. El Arduino lee valores analógicos del joystick en un rango de 0 a 1023. Cuando el joystick está en su posición central (reposo), el valor analógico se sitúa cerca de 500 (entre 0 y 1023).

Control de ratón con joystick Arduino: Navegación precisa del cursor

El sketch de Arduino está programado para que, cuando el joystick se mueve desde el centro, imprima valores en un rango de -sensibilidad a +sensibilidad (valor por defecto 10) según la posición. Así, al mover el joystick a un extremo se imprime 10 y al moverlo al extremo opuesto se imprime -10.

Para separar los valores de los ejes X e Y, se utiliza el carácter ":" entre ambos. Ejemplo:

Control de ratón con joystick Arduino: Navegación precisa del cursor

El estado del botón del joystick (SW) se imprime (1/0) en el monitor serial después de los valores X e Y.

Para que el ordenador reconozca estos valores, necesitaremos el módulo mouse de Python (anteriormente se usaba pyautogui, actualizado el 11/12/2020).

Programación en Python

El usuario debe tener Python 3 instalado en su ordenador. Puede descargarse desde python.org.

Tras la instalación, copie la ruta de la ubicación del archivo de Python.

Control de ratón con joystick Arduino: Navegación precisa del cursor

Los siguientes pasos se realizan en la línea de comandos (cmd):

  1. cd <pegue la ruta del archivo de Python>
  2. py –m pip install –-upgrade pip
  3. py –m pip install mouse
  4. py -m pip install pyserial

El módulo mouse se usa para realizar acciones del ratón y pyserial para enviar/recibir datos del Arduino.

Control de ratón con joystick Arduino: Navegación precisa del cursor

El programa en Python lee los datos que imprime el Arduino y reconoce los valores de dirección X e Y así como el estado del interruptor (SW).

Las coordenadas actuales del cursor se obtienen con la función mouse.get_position(), que devuelve la posición X e Y en píxeles.

Al mover el joystick, los valores analógicos del Arduino se suman a la posición actual del cursor para moverlo en la dirección deseada.

Para mover el cursor, la función mouse.move(X+x, Y+y) cumple este propósito, donde X e Y son la posición actual y x, y son los incrementos/decrementos que proporciona el Arduino.

Ejemplo: mouse.moveTo(100,150) mueve el cursor a 100 píxeles en el eje X y 150 en el eje Y.

Para realizar la operación de clic según el estado de SW, se usa mouse.click(button="left").

Ejecución final

  1. Suba el sketch de Arduino (más abajo) a su Arduino UNO y conecte el joystick a los pines según el esquemático.
  2. Verifique que los módulos mouse y pyserial estén instalados.
  3. Copie el código de Python en un archivo de bloc de notas. Especifique el puerto COM correcto del Arduino (visible en el Administrador de dispositivos). Guarde el archivo con extensión .py.
Control de ratón con joystick Arduino: Navegación precisa del cursor
Control de ratón con joystick Arduino: Navegación precisa del cursor
  1. Abra IDLE (Python GUI) y abra el archivo .py desde allí.
Control de ratón con joystick Arduino: Navegación precisa del cursor
Control de ratón con joystick Arduino: Navegación precisa del cursor
  1. Ejecute el módulo (F5 o Run → Run Module).
Control de ratón con joystick Arduino: Navegación precisa del cursor

Volverá a la pantalla del paso 4. Si aparecen errores, reinicie IDLE y verifique que el puerto COM sea correcto.

Si no hay errores, mueva el joystick y verá el movimiento del cursor en pantalla.

Código

Código Arduino

//////////////////////////////////
// Joystick controlled mouse
/// by Shubham Santosh
/////////////////////////////

void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT); // Pin SW
  digitalWrite(9, HIGH);
}

int prev_state = 0; // Estado previo del interruptor

void loop() {
  int z = 0, xpos = 0, ypos = 0;
  int x = analogRead(A0);
  int y = analogRead(A1);
  int sensitivity = 10; // Ajuste la sensibilidad según comodidad

  if (x >= 550) // Hacia arriba
    xpos = map(x, 550, 1023, 0, sensitivity);
  if (x <= 450) // Hacia abajo
    xpos = map(x, 450, 0, 0, -sensitivity);
  if (y >= 550) // Hacia derecha
    ypos = map(y, 550, 1023, 0, sensitivity);
  if (y <= 450) // Hacia izquierda
    ypos = map(y, 450, 0, 0, -sensitivity);

  int curr_state = digitalRead(9);
  if (curr_state == 1 && prev_state == 0) // SW pulsado
    z = 1;
  else
    z = 0;

  if (xpos != 0 || ypos != 0 || z == 1) { // Imprime solo si hay movimiento
    Serial.print(xpos);
    Serial.print(":");
    Serial.print(ypos);
    Serial.print(":");
    Serial.println(z);
  }

  prev_state = curr_state;
  delay(10); // Para operación normal
}

Código Python

# Joystick controlled mouse
# By Shubham Santosh
# Última edición 11/12/2020

import mouse, sys
import time
import serial

mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('com3', 9600) # Especifique el puerto COM correcto
time.sleep(1) # Retraso de 1 segundo

while True:
    data = str(ArduinoSerial.readline().decode('ascii')) # Leer datos
    (x, y, z) = data.split(":") # Asignar a x, y y z
    (X, Y) = mouse.get_position() # Leer posición actual del cursor
    (x, y) = (int(x), int(y)) # Convertir a enteros
    mouse.move(X + x, Y - y) # Mover cursor a posición deseada
    if '1' in z: # Leer estado de SW
        mouse.click(button="left") # Clic izquierdo

Esquemáticos

Control de ratón con joystick Arduino: Navegación precisa del cursor

Proceso de manufactura

  1. La evolución del ratón de computadora: Diseño, fabricación y tendencias futuras
  2. Ventilador controlado por temperatura: sistema DIY con relé para refrigeración de muebles multimedia
  3. Sistema de acuaponía controlado por Raspberry Pi: guía de construcción y código
  4. Botón IoT AWS Controlado por Movimiento con Raspberry Pi, Sensor PIR y MQTT
  5. Construya un robot Raspberry Pi controlado por Bluetooth con retroalimentación de audio
  6. Construye un Robot Raspberry Pi Controlado por Wi‑Fi con Python – Guía Paso a Paso
  7. Demo ARDrone 2.0 Controlado por Alexa: Dron Activado por Voz con Raspberry Pi y Hologram Nova
  8. Transforma un viejo coche RC en un vehículo controlado por joystick con Arduino
  9. Juego interactivo con joystick analógico y LEDs en Arduino
  10. Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
  11. Aleación FeNi42: Baja expansión térmica para sellos de precisión