Es posible conectar un teclado PS/2 a un Arduino sin la necesidad de una PC. Para hacerlo, necesitarás un adaptador de teclado PS/2 a TTL que puedes conseguir en tiendas de electrónica.
Luego, conecta los cables del adaptador a los pines correspondientes del Arduino, que son los pines digitales 2 y 3 para la señal de reloj y de datos, respectivamente.
Una vez conectado el teclado al adaptador y el adaptador al Arduino, deberás cargar un programa en el Arduino que permita leer los datos del teclado y mostrarlos en el terminal serial.
Existen diferentes bibliotecas de software disponibles para leer los datos del teclado PS/2 en un Arduino, como la biblioteca “Ps2KeyboardHost” que puedes encontrar en el administrador de bibliotecas del Arduino IDE.
Con la biblioteca adecuada y el código de programación correcto, podrás leer los datos del teclado y utilizarlos para controlar otros dispositivos o ejecutar acciones en el Arduino sin necesidad de una PC.
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 Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Buzzer
Pines hembra
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
Zócalo para arduino nano
Un resistor de 470 Ohm
Cables dupont hembra macho
Pines macho a 90 grados
Un diodo led de 5 mm
Circuito impreso (pcb)
Archivo gerber —> pcb
Conector PS/2
Características
Interfaz estándar PS/2;
La fuente de alimentación debe ser de 5V CC;
4 orificios de montaje de tornillos cuyo diámetro es de 2,2mm
Fácil de usar
Interfaz
Interfaz de control:Un total de cuatro pines (GND, VCC, DAT, CLK), GND a tierra, VCC es la fuente de alimentación, DAT es el pin de entrada y salida de datos, CLK es el pin de señal de reloj.
Un Servo sg90
Características
- Dimensiones (L x W xH) = 22.0 x 11.5 x 27 mm (0.86 x 0.45 x 1.0 pulgadas)
- Peso: 9 gramos
- Peso con cable y conector: 10.6 gramos
- Torque a 4.8 volts: 16.7 oz/in o 1.2 kg/cm
- Voltaje de operación: 4.0 a 7.2 volts
- Velocidad de giro a 4.8 volts: 0.12 seg / 60 º
- Conector universal para la mayoría de los receptores de radio control
- Compatible con tarjetas como Arduino y microcontroladores que funcionan a 5 volts.
¿Cómo controlar un servomotor?
Puede colocar el eje del servo en varios ángulos de 0 a 180º. Los servos se controlan utilizando una señal de modulación de ancho de pulso (PWM). Esto significa que la señal PWM enviada al motor determinará la posición del eje.
Un teclado PS/2
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 |
#include "ps2_Keyboard.h" #include "ps2_AnsiTranslator.h" #include "ps2_SimpleDiagnostics.h" #include <Servo.h> Servo servoMotor1; // crear un objeto servo para controlar el servo int relay = 12; int buzzer = 7; typedef ps2::SimpleDiagnostics<254> Diagnostics_; static Diagnostics_ diagnostics; static ps2::AnsiTranslator<Diagnostics_> keyMapping(diagnostics); static ps2::Keyboard<3,2,1, Diagnostics_> ps2Keyboard(diagnostics); static ps2::KeyboardLeds lastLedSent = ps2::KeyboardLeds::none; void setup() { Serial.begin(9600); servoMotor1.attach(11); // Asignamos el pin 11 para el control del servo servoMotor1.write(0); //Posisción inicial del servo. pinMode(relay, OUTPUT); pinMode(buzzer, OUTPUT); ps2Keyboard.begin(); keyMapping.setNumLock(true); ps2Keyboard.awaitStartup(); diagnostics.reset(); //Encendemos el led del teclado(Bloq Num) ps2Keyboard.sendLedStatus(ps2::KeyboardLeds::numLock); lastLedSent = ps2::KeyboardLeds::numLock; } void loop() { diagnostics.setLedIndicator<LED_BUILTIN>(); ps2::KeyboardOutput scanCode = ps2Keyboard.readScanCode(); if (scanCode == ps2::KeyboardOutput::garbled) { keyMapping.reset(); } else if (scanCode != ps2::KeyboardOutput::none) { char buf[2]; buf[1] = '\0'; buf[0] = keyMapping.translatePs2Keycode(scanCode); if (buf[0] == '\r') { Serial.println(); } else if (buf[0] >= ' ') { // Se cumple si es un caracter Serial.print("Caracter: "); Serial.write(buf); Serial.println(""); if(buf[0] == '1'){ servoMotor1.write(180); Serial.println("Servo 1 a 180 grados"); } if(buf[0] == '2'){ servoMotor1.write(0); Serial.println("Servo 1 a 0 grados"); } if(buf[0] == '3'){ digitalWrite(relay, HIGH); Serial.println("Relay activado"); } if(buf[0] == '4'){ digitalWrite(relay, LOW);; Serial.println("Relay desactivado"); } if(buf[0] == '5'){ digitalWrite(buzzer, HIGH); Serial.println("Buzzer encendido"); } if(buf[0] == '6'){ digitalWrite(buzzer, LOW); Serial.println("Buzzer apagado"); } } //Verifica el estado de los taclas Bloq Num y Bloq Mayús para activarlas o desactivarlas desde el mismo teclado ps2::KeyboardLeds newLeds = (keyMapping.getCapsLock() ? ps2::KeyboardLeds::capsLock : ps2::KeyboardLeds::none) | (keyMapping.getNumLock() ? ps2::KeyboardLeds::numLock : ps2::KeyboardLeds::none); if (newLeds != lastLedSent) { ps2Keyboard.sendLedStatus(newLeds); lastLedSent = newLeds; } } } |
PROYECTO RECOMENDADO