En este tutorial, aprenderemos cómo utilizar un Arduino para emular tanto un mouse como un teclado en tu computadora. Esta capacidad puede ser útil en una variedad de proyectos, desde automatización de tareas hasta control remoto de dispositivos.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Arduino micro
Especificaciones técnicas
MICROCONTROLADOR | ATmega32U4 |
TENSIÓN DE FUNCIONAMIENTO | 5V |
VOLTAJE DE ENTRADA (RECOMENDADO) | 7-12V |
PINES DE E/S DIGITALES | 20 |
CANALES PWM | 7 |
CANALES DE ENTRADA ANALÓGICA | 12 |
CORRIENTE CC POR PIN DE E/S | 20mA |
CORRIENTE CC PARA CLAVIJA DE 3,3 V | 50mA |
MEMORIA FLASH | 32 KB (ATmega32U4) de los cuales 4 KB utilizados por el gestor de arranque |
SRAM | 2,5 KB (ATmega32U4) |
EEPROM | 1 KB (ATmega32U4) |
VELOCIDAD DE RELOJ | 16 MHz |
LED_CONSTRUIDO | 13 |
LONGITUD | 48mm |
ANCHO | 18mm |
PESO | 13 gramos |
Diecisiete pulsadores
Cable micro usb
Cables dupont hembra hembra
Pines macho
Un módulo Joystick ky-023
El módulo Joystick te permite construir un controlador manual en 2 direcciones: X y Y. Posee ademas la función de pulsador que se activa al presionar el Joystick.
Posee dos potenciometros cada uno con su salidas analógica para la dirección (VRx-VRy) y una salidad digital del pulsador (SW). Para leer la posición es necesario convertir los valores analógicos utilizando un ADC de microcontrolador.
Empleado en proyectos de robótica, control, automatización, videojuegos.
- Voltaje de Operación: 3.3 – 5V DC
- 2 Potenciometros
- 1 Pulsador
Descripción:
Rendimiento del producto:
- Tensión de entrada, rango: DC 3,3 V a 5 V
- Señal de salida: el módulo salida analógica de dos vías y una interfaz de salida digital, el valor de salida correspondiente al desplazamiento biaxial (X, Y) biaxial, el tipo de analógico; claves que el usuario presiona el eje Z, su tipo es interruptor digital.
- Se puede programar el controlador Arduino, el conector de placa de expansión del sensor, completo con obras interactivas creativas.
- Cruz joystick es una resistencia bidireccional de 10 K, con el rocker en diferentes direcciones, la resistencia del grifo con el cambio. Este módulo utiliza fuente de alimentación de 5 V, el estado original de X, Y leer Tensión de 2,5 V o así, cuando se presiona con la flecha dirección, el valor de lectura del voltaje aumenta con el máximo a 5 V; flechas en la dirección opuesta a la prensa, leer la tensión disminuye, el mínimo es 0 V.
Zócalo para arduino micro
PCB
Descargar archivo gerber –>teclado arduino micro
Circuito
Código Fuente
1 2 3 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
#include <Keyboard.h>//Emula un teclado #include <Mouse.h> // Incluye la librería Mouse para emular un mouse // Definición de pines para la entrada del joystick y el botón de selección int pinHorizontal = A0; // Pin analógico para la entrada horizontal del joystick int pinVertical = A1; // Pin analógico para la entrada vertical del joystick int pinSeleccion = 2; // Pin digital para el botón de selección del joystick // Variables para almacenar valores de calibración y valores actuales del joystick int valorVerticalCero, valorHorizontalCero; // Almacena el valor inicial de cada eje, generalmente alrededor de 512 int valorVertical, valorHorizontal; // Almacena la salida analógica actual de cada eje const int sensibilidad = 300; // Valor de sensibilidad, mayor valor = ratón más lento, debe ser <= aproximadamente 500 int banderaClicRaton = 0; // Bandera para indicar si se ha realizado un clic del mouse int invertirRaton = 1; // Variable para invertir el movimiento del mouse basado en la orientación void setup() { pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); //pinMode(10, INPUT_PULLUP); //pinMode(11, INPUT_PULLUP); //pinMode(12, INPUT_PULLUP); //pinMode(13, OUTPUT); //pinMode(A0, INPUT_PULLUP); //pinMode(A1, INPUT_PULLUP); //pinMode(A2, INPUT_PULLUP); //pinMode(A3, INPUT_PULLUP); //pinMode(A4, INPUT_PULLUP); //pinMode(A5, INPUT_PULLUP); // Configura los pines como entrada pinMode(pinHorizontal, INPUT); pinMode(pinVertical, INPUT); pinMode(pinSeleccion, INPUT); // Establece el pin de selección del botón en alto (pull-up) digitalWrite(pinSeleccion, HIGH); // Breve retraso para permitir que los valores se estabilicen delay(1000); // Lee y almacena los valores iniciales de calibración valorVerticalCero = analogRead(pinVertical); valorHorizontalCero = analogRead(pinHorizontal); // Inicia la emulación del mouse Mouse.begin(); // Inicia la emulación del teclado Keyboard.begin(); } void loop() { //Lectura de los pulsadores int pul2 = digitalRead(3); int pul3 = digitalRead(4); int pul4 = digitalRead(5); int pul5 = digitalRead(6); int pul6 = digitalRead(7); int pul7 = digitalRead(8); int pul8 = digitalRead(9); int pul9 = digitalRead(10); //int pul10 = digitalRead(11); //int pul11 = digitalRead(12); //int pul12 = digitalRead(A0); //int pul13 = digitalRead(A1); //int pul14 = digitalRead(A2); //int pul15 = digitalRead(A3); //int pul16 = digitalRead(A4); //int pul17 = digitalRead(A5); //Botón derecho if (pul2 == LOW) { Mouse.press(MOUSE_RIGHT); // Presiona el botón derecho del mouse delay(100); Mouse.release(MOUSE_RIGHT); // Libera el botón izquierdo del mouse delay(100); } //Abre el notepad if (pul3 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("notepad"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Abre la calculadora if (pul4 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("calc"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Abre el interprete de comandos if (pul5 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("cmd"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Abre la versión de windows if (pul6 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("winver"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Abre el panel de control if (pul7 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("control"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Herramientas recorte de windows if (pul8 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("snippingtool"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } //Abre paint if (pul9 == LOW) { Keyboard.press(KEY_RIGHT_GUI); Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); Keyboard.println("mspaint"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); } // Lee los valores actuales del joystick y calcula el desplazamiento desde el valor inicial de calibración valorVertical = analogRead(pinVertical) - valorVerticalCero; valorHorizontal = analogRead(pinHorizontal) - valorHorizontalCero; // Mueve el mouse solo si hay un desplazamiento significativo en alguno de los ejes if (valorVertical != 0) Mouse.move(0, (invertirRaton * (valorVertical / sensibilidad)), 0); // Mueve el mouse en el eje Y if (valorHorizontal != 0) Mouse.move((invertirRaton * (valorHorizontal / sensibilidad)), 0, 0); // Mueve el mouse en el eje X // Verifica si se presiona el botón de selección del joystick y realiza el clic del mouse correspondiente if ((digitalRead(pinSeleccion) == 0) && (!banderaClicRaton)) { banderaClicRaton = 1; Mouse.press(MOUSE_LEFT); // Presiona el botón izquierdo del mouse } else if ((digitalRead(pinSeleccion)) && (banderaClicRaton)) { banderaClicRaton = 0; Mouse.release(MOUSE_LEFT); // Libera el botón izquierdo del mouse } } |
PROYECTO RECOMENDADO