Arduino Nano - Joystick

Este tutorial te enseña cómo usar un joystick con Arduino Nano. En detalle, aprenderemos:

Joystick para Arduino Nano

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables ATMEGA328P Nano Development Board
1×Cable USB A a Mini-B
1×Joystick
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del joystick de dos ejes

Es posible que te hayas encontrado con un joystick en varios lugares, como un mando de juego, un mando de juguete o incluso una máquina grande como el panel de control de una excavadora.

El joystick está construido con dos potenciómetros que son perpendiculares entre sí y un pulsador. De este modo, produce las siguientes salidas:

  • Un valor analógico que va de 0 a 1023 (leído por Arduino) que corresponde a la posición horizontal (conocida como la coordenada X)
  • Un valor analógico que va de 0 a 1023 (leído por Arduino) que corresponde a la posición vertical (conocida como la coordenada Y)
  • Un valor digital del pulsador (ya sea HIGH o LOW)

Por lo tanto:

  • Dos valores analógicos pueden combinarse para crear coordenadas 2-D.
  • El centro del sistema de coordenadas 2-D es la posición de reposo del joystick.
  • Para determinar la dirección del joystick, ejecute un código de prueba que mostrará esta información en la próxima sección.

Algunas aplicaciones pueden usar las tres salidas, mientras que otras pueden utilizar solo algunas de ellas.

La asignación de pines del joystick

Un joystick tiene 5 pines:

  • Pin GND: Este pin debe conectarse a GND (0V).
  • Pin VCC: Este pin debe conectarse a VCC (5V).
  • Pin VRX: Este pin emite una salida analógica que corresponde a la posición horizontal (conocida como la coordenada X).
  • Pin VRY: Este pin emite una salida analógica que corresponde a la posición vertical (conocida como la coordenada Y).
  • Pin SW: Esta es la salida del pulsador dentro del joystick. Normalmente está abierto. Si se utiliza una resistencia de pull-up en este pin, el pin SW estará en ALTO cuando no esté presionado, y BAJO cuando esté presionado.
Disposición de pines del joystick

Cómo funciona

  • Cuando mueves la palanca del joystick hacia la izquierda o la derecha, el voltaje en el pin VRX varía de 0 a 5V, siendo 0 en la izquierda y 5V en la derecha, resultando en un valor de lectura en el pin analógico de Arduino de 0 a 1023.
  • Cuando mueves la palanca del joystick hacia arriba o hacia abajo, el voltaje en el pin VRY varía de 0 a 5V, siendo 0 en la parte superior y 5V en la inferior, resultando en un valor de lectura en el pin analógico de Arduino de 0 a 1023.
  • Cuando mueves la palanca del joystick en cualquier dirección, el voltaje en los pines VRX y VRY cambia en proporción a la proyección de la posición en cada eje.
  • Cuando empujas la palanca del joystick de arriba hacia abajo, se cierra el pulsador dentro del joystick. Si usamos una resistencia pull-up en el pin SW, la salida del pin SW cambiará de 5V a 0V, resultando en un valor de lectura en el pin digital de Arduino que cambia de HIGH a LOW.

Diagrama de Cableado

Diagrama de cableado del joystick para Arduino Nano

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

Cómo programar para un joystick

El joystick está compuesto por dos componentes: analógico (ejes X, Y) y digital (botón pulsador):

  • Para las partes analógicas (ejes X e Y), simplemente lea el valor del pin de entrada analógica utilizando la función analogRead().
int value_X = analogRead(A6); int value_Y = analogRead(A7);
  • Para la parte digital (pulsador): es un botón. La forma más simple y conveniente de usarlo es con la biblioteca ezButton. Esta biblioteca incluye soporte para anti-rebote de los botones, así como una resistencia pull-up interna. Para aprender más sobre los botones, puedes consultar el Arduino Nano - Tutorial de Botón. El código para esto se presentará en la siguiente sesión de este tutorial.

Después de obtener los valores de los pines analógicos, es posible que necesitemos convertirlos en valores que se puedan controlar. La siguiente sección proporcionará códigos de ejemplo para ello.

Código de Arduino Nano

Esta sección mostrará códigos de ejemplo para Arduino Nano, como se detallan a continuación:

  • Ejemplo de código: leer valores analógicos del joystick
  • Ejemplo de código: leer valores analógicos y el estado de los botones del joystick
  • Ejemplo de código: convertir valores analógicos en los comandos MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Ejemplo de código: convertir valores analógicos a ángulos para gestionar dos servomotores (p. ej., en una cámara de paneo e inclinación)

Lee valores analógicos del joystick

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.println(value_Y); delay(200); }

Pasos R\u00e1pidos

  • Copia el código y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Subir para transferir el código al Arduino Nano.
  • Empuja la palanca del joystick hasta el tope y gírala en un movimiento circular (sentido horario o antihorario).
  • Consulta el resultado en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mientras giras el stick analógico, mantén un ojo en el Monitor serie.

Si el valor de X es 0, toma la posición actual como izquierda y la opuesta como derecha.

Si el valor de Y es 0, anote o recuerde la posición actual como arriba, siendo su opuesto abajo.

Lee valores analógicos y lee el estado del botón de un joystick

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #include <ezButton.h> #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define SW_PIN 2 // The Arduino Nano pin connected to SW pin ezButton button(SW_PIN); int value_X = 0; // The variable to store value of the X axis int value_Y = 0; // The variable to store value of the Y axis int bValue = 0; // The variable to store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(value_X); Serial.print(", y = "); Serial.print(value_Y); Serial.print(" : button = "); Serial.println(bValue); }

Pasos R\u00e1pidos

  • Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “ezButton” y localiza la biblioteca de botones de ArduinoGetStarted.com.
  • Luego, haz clic en el botón Instalar para instalar la biblioteca ezButton.
Librería de botones para Arduino Nano
  • Copia el código y ábrelo con el IDE de Arduino.
  • Haz clic en el botón Subir para enviarlo al Arduino Nano.
  • Mueve el pulgar del joystick en las direcciones izquierda, derecha, arriba y abajo.
  • Empuja el pulgar del joystick desde la parte superior.
  • Consulta el resultado en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Convierte el valor analógico en comandos MOVER IZQUIERDA/DERECHA/ARRIBA/ABAJO

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-joystick */ #define VRX_PIN A6 // The Arduino Nano pin connected to VRX pin #define VRY_PIN A7 // The Arduino Nano pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int value_X = 0 ; // The variable to store value of the X axis int value_Y = 0 ; // The variable to store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Pasos R\u00e1pidos

  • Copie el código y ábralo con el IDE de Arduino.
  • Haga clic en el botón Subir en el IDE para enviar el código al Arduino Nano.
  • Mueva el joystick en cualquier dirección con su pulgar.
  • Verifique los resultados en el Monitor Serial.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Nota:

En cualquier momento dado, podría no haber ningún comando, un comando o dos comandos (p. ej. ARRIBA y IZQUIERDA simultáneamente).

Convierte valores analógicos en ángulos para controlar dos servomotores

Los detalles se pueden encontrar en el tutorial titulado Arduino Nano - Joystick controls Servo Motor.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Referencias de Funciones

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!