fbpixel
Etiquetas:
0
(0)

Es posible interconectar Arduino con el ordenador y convertirlo en un dispositivo HID. Así, es posible transformar un Arduino en un controlador de ordenador, del mismo modo que un mando de videojuegos, un teclado de ordenador o un ratón.

Material

  • Arduino UNO
  • pulsador (o 1 cable dupont)

Esquema

En este tutorial utilizaremos una sola entrada para probar el teclado y la configuración del dispositivo HID. Así que colocamos un pulsador entre el pin GND y el pin A0 del Arduino.

Puedes utilizar un botón para cada tecla o cualquier sensor para crear tu propio controlador.

Código

Como sólo tenemos un botón, cada vez que lo pulsamos incrementamos la variable btnCount para cambiar el siguiente carácter a mostrar.

//azerty       q  b  c  d  e  f  g  h  i  j  k  l  ,  n  o  p  a  r  s  t  u  v  z  x  y  w  &  é  "  '  (  -  è  _  ç  à    )  =  ^  $  *  No fr  m  ù   ²    ;  :  !    <
//qwerty       a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  1  2  3  4  5  6  7  8  9  0    -  =  [  ]  \  No US  ;  '   `    ,  .  /   No US      
//keycode      4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,  45,46,47,48,49,  50,  51,52, 53,  54,55,56,  100}; 


uint8_t buf[8] = { 0 }; //Keyboard report buffer

//Keypad
const int btnPin = A0;
int btnState=false,oldState=true;
int btnCount=4; //Key code A-4 Z-29

void setup() {
  Serial.begin(9600);
  pinMode(btnPin,INPUT_PULLUP);
}

void loop() {
  sendKey();
}


void sendKey() { /* function readAbtn */
  //// Read button states from keypad
  getBtn();
  if (btnState!=oldState and btnState==true) {
    buf[2] = btnCount++; // keycode
    Serial.write(buf, 8); // Send keypress 
    releaseKey(); 
  }
  if(btnCount>29) btnCount=4;
  oldState=btnState;
}

void getBtn() { /* function getABtn */
  //// Read button states from keypad
  if (analogRead(btnPin) > 200) {
    btnState=false;
  } else {
    btnState=true;
  }
  delay(100); //anti-bounce delay
}


void releaseKey() {
  buf[0] = 0;
  buf[2] = 0;
  Serial.write(buf, 8); // Send Release key
}

Para simplificar el código y evitar tener que encontrar los keycodes, puedes usar la librería USBKeyboard, Keyboard.h (para placas compatibles) o HID-project (con HoodLoader2).

Configuración del dispositivo HID

Para transformar el Arduino en un dispositivo HID, necesitamos modificar el código del puerto USB controlado por el ATmega16U2. Para ello utilizaremos el software Flip, que nos permitirá cambiar el firmware del microprocesador.

  • Seleccione el microprocesador de la lista
  • Reinicia el puerto USB conectando los dos pines más a la izquierda del puerto ICSP2. (los LEDs Tx y Rx deberían encenderse).
  • Selecciona Configuración>Comunicación>USB Ctrl+U, y luego haz clic en «Abrir».

Resultado

Una vez hecho esto, desconecte y vuelva a conectar el puerto USB. Abrir un archivo de texto. Al pulsar el botón, los caracteres deben aparecer sucesivamente. Observará que las teclas a,q,w,z están invertidas porque el teclado está configurado en AZERTY.

Cambiar el Arduino de un dispositivo HID a un dispositivo serie

Pour retrouver un fonctionnement normal de l’Arduino, on refait la manipulation avec le logiciel Flip mais à la place du fichier arduino-keyboard.hex on charge le fichier Arduino-usbserial-uno.hex.

Reinicia el puerto USB con un puente entre los pines ICSP, luego carga el archivo hexadecimal y pulsa «Ejecutar».

Aplicaciones

  • Crea un teclado o un mando de videojuegos con Arduino
  • Utilizar Arduino para manejar un ordenador automáticamente

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?