Segunda parte del teclado para PC, con arduino micro, pero que ahora agrega algunas mejoras significativas, ya que agrega un módulo bluetooth para conectarnos a una aplicación para celular, con app inventor, y de esa manera agregar un teclado virtual con nuevas funciones. También se le agrega un display oled, para ver cual fue la última tecla presionada, y un buzzer que nos avisará cuando una secuencia de teclas haya finalizado. Analizaremos el código fuente, la aplicación en app inventor y finalmente probaremos el funcionamiento del mismo.
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
PCB
Descargar archivo gerber –>teclado arduino micro
Componentes opcionales
Buzzer
Display oled con driver SSD1306
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también un menor consumo.
Especificaciones:
IC del controlador: SSD1306
Tamaño: OLED de 0,91 pulgadas
Resolución: 128 x 32
Tamaño: 38 * 12 mm
Número de pines: 4 pines
Tipo de interfaz:
interfaz IIC
Color de la pantalla: Blanco / azul
Descripción de los pines:
GND: Power Ground
VCC: Power + (DC 3.3 ~ 5v)
Temperatura de funcionamiento: -40 ~ 85 ℃
SCL: Línea de reloj
SDA: Línea de datos
Pantalla OLED, sin necesidad de retroiluminación, autoiluminación, Color de la pantalla: azul.
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también menor consumo; IIC (comunicaciones I2C) simplifica las conexiones.
Úselo con Arduino, ESP8266, ESP32, STM32, etc. 3.3 a 5v de voltaje
Pines hembra
Módulo hc-05 (opcional)
Sólo en el caso que quieras ver los datos recibidos en tu celular podrás conectar este módulo, por eso es opcional y no obligatorio
- Funciona como dispositivo maestro y esclavo bluetooth
- Configurable mediante comandos AT
- Bluetooth V2.0+EDR
- Frecuencia de operación: 2.4 GHz Banda ISM
- Modulación: GFSK (Gaussian Frequency Shift Keying)
- Potencia de transmisión: <=4dBm, Class 2
- Sensibilidad: <=-84dBm @ 0.1% BER
- Seguridad: Autenticación y encriptación
- Perfiles Bluetooth: Puerto serie bluetooth.
- Distancia de hasta 10 metros en condiciones óptimas
- Voltaje de Operación: 3.6 VDC a 6 VDC
- Consumo Corriente: 30 mA a 50mA
- Chip: BC417143
- Versión o firmware: 3.0-20170609
- Baudios por defecto: 38400
- Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- Interfaz: Serial TTL
- Antena: Integrada en el PCB
- Seguridad: Autenticación y encriptación (Contraseña por defecto: 0000 o 1234)
- Temperatura de trabajo (Max): 75°C
- Temperatura de trabajo (Min): -20°C
- Dimensiones: 4.4 x 1.6 x 0.7 cm
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 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
#include <Keyboard.h> //#include <SoftwareSerial.h> #include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif //Tipo de displey usado con dirver SSD1306 de 128x32 U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ A5, /* data=*/ A4, /* reset=*/ U8X8_PIN_NONE); String cadena, primerString, segundoString ; int estadoSet= 0; void setup() { u8g2.begin();//inicializamos el display Keyboard.begin();//Inicializamos el teclado Serial.begin(9600); Serial1.begin(9600);//Velocidad del puerto serial, serial1 es el pin 0 y 1 en arduino micro //Pines de de entrada pinMode(2, INPUT_PULLUP); 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); //Pin 13 como salida pinMode(13, OUTPUT);//Conectado un Buzzer } void loop() { //Leemos lo que entra por el puerto serial y lo asignamos a la variable cadena if (Serial1.available()) { cadena = String(""); while (Serial1.available()) { cadena = cadena + char(Serial1.read()); delay(1); } } partirCadena();//llama a la función partirCadena //Leemos el estado de las teclas si ha sido pulsado alguna int set1 = digitalRead(2); int set2 = digitalRead(3); int set3 = digitalRead(4); int set4 = digitalRead(5); int set5 = digitalRead(6); int set6 = digitalRead(7); int set7 = digitalRead(8); int set8 = digitalRead(9); //Escribe un texto if (set1 == LOW || cadena == "set1") { estadoSet = 1; displayOled(); Keyboard.println("Prueba de escritura de texto"); delay(200); cadena = ""; } //Convinación de la teclas "control + v", para pegar lo que esté en el portapapeles if (set2 == LOW || cadena == "set2") { estadoSet = 2; displayOled(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('v'); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Abre la consola de comandos y ejecuta el comando "dir" if (set3 == LOW || cadena == "set3") { estadoSet = 3; displayOled(); //Ea¿sta convinación abre ejecutar en windows Keyboard.press(KEY_RIGHT_GUI);//Tecla de windows Keyboard.press('r'); delay(100); Keyboard.releaseAll(); delay(1000); //Abrimos el interprete de comandos Keyboard.println("cmd"); Keyboard.press(KEY_RETURN); delay(100); Keyboard.releaseAll(); delay(1000); //Ejecutamos el comando "dir" Keyboard.println("dir"); delay(4000); Keyboard.press(KEY_RETURN); Keyboard.releaseAll(); cadena = ""; digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); } //Escribe el caracter A (Mayuscula) if (set4 == LOW || cadena == "set4") { estadoSet = 4; displayOled(); Keyboard.press('A'); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Escribe el caracter B (Mayuscula) if (set5 == LOW || cadena == "set5") { estadoSet = 5; displayOled(); Keyboard.press('B'); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Escribe el caracter C (Mayuscula) if (set6 == LOW || cadena == "set6") { estadoSet = 6; displayOled(); Keyboard.press('C'); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Escribe el caracter D (Mayuscula) if (set7 == LOW || cadena == "set7") { estadoSet = 7; displayOled(); Keyboard.press('D'); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Escribe el caracter E (Mayuscula) if (set8 == LOW || cadena == "set8") { estadoSet = 8; displayOled(); Keyboard.println(""); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } //Escribe un texto if (primerString == "ENV") { estadoSet = 9; displayOled(); Keyboard.print(segundoString); delay(200); primerString=""; segundoString = ""; cadena = ""; } if (cadena == "ENT") { Keyboard.press(KEY_RETURN); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } if (cadena == "ESP") { Keyboard.press(' '); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } if (cadena == "TAB") { Keyboard.press(KEY_TAB); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } if (cadena == "BOR") { Keyboard.press(KEY_BACKSPACE); delay(150); Keyboard.releaseAll(); delay(150); cadena = ""; } } void partirCadena() { if (cadena.indexOf(" ") >=0){ //comprueba los datos recibidos si tienen algun espacio primerString = cadena.substring(0,(cadena.indexOf(" "))); // filtra la variable cadena. Toma desde el primer carácter al espacio en blanco. segundoString = cadena.substring(cadena.indexOf(" ")+1); // filtra la variable cadena Desde el "espacio en blanco" hasta el siguiente valor } } //Mostramos en el display el botón precionado void displayOled(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); if (estadoSet ==1){ u8g2.drawStr(0,24,"Set1"); } if (estadoSet ==2){ u8g2.drawStr(0,24,"Set2"); } if (estadoSet ==3){ u8g2.drawStr(0,24,"Set3"); } if (estadoSet ==4){ u8g2.drawStr(0,24,"Set4"); } if (estadoSet ==5){ u8g2.drawStr(0,24,"Set5"); } if (estadoSet ==6){ u8g2.drawStr(0,24,"Set6"); } if (estadoSet ==7){ u8g2.drawStr(0,24,"Set7"); } if (estadoSet ==8){ u8g2.drawStr(0,24,"Set8"); } if (estadoSet ==9){ u8g2.drawStr(0,24,"TxT Bluetooth"); } } while ( u8g2.nextPage() ); } |
PROYECTO RECOMENDADO