Simulating keyboard strokes with shortcut key combinations

I rigged up a tiny little project using a scrap Dell keyboard, where I tore the keyboard apart and salvaged the USB control board. The actual keyboard is gone. Then, I traced the circuit for the "Enter" key on the keyboard, to figure out exactly which combination is needed to close the circuit to trigger "Enter", and hooked up a single button to it.

This works great, and I could presumably do it with any button.

However, I'm also interested in key combinations. For example, CTRL + SHIFT + R. All 3 of these circuits can't be closed at precisely the same time - CTRL + SHIFT needs to be triggered before the R key. So the same idea of a single button directly connected isn't going to work.

NOTE: I have relatively little knowledge of circuitry design, but have played around with it plenty.

What's a circuit I could easily create which can simulate this? I assume it should be as easy as a slight delay between closing each circuit, but I have no idea where to begin creating a circuit.

Ultimately, the end goal is to create a custom button panel where each button sends a key combination to this scrapped USB keyboard controller to simulate keystrokes.

To add a little more details, in case you're not familiar, the keyboard works like this (at least the one I'm using). The board has 27 contacts which are pressed against the actual keyboard sheets. 1 contact (AFAICT) is a ground, then there's a group of 8, and a group of 18. When a key is pressed, it closes a circuit between one contact in each group. So, for example...

[GND] - A B C D E F G H - 1 2 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

The "Enter" key is achieved by closing a circuit between E and 7.

I'd like to avoid any sort of microcontroller if at all possible. I recall in the past, seeing a trick with a capacitor and transistor, which could achieve a delay.

• Upon further study, I believe it might be possible with a Zener diode, capacitor, and transistor. A Zener is designed to allow certain amount of breakdown current to pass through the other way, and charging a capacitor until it reaches that breakdown voltage might be able to simulate a delay. Might require another diode to capture the negative current though. I have no idea how to actually design such a thing though. Feb 4 '18 at 17:40

To get any kind of useful sequencing, you'd really want a microcontroller. There isn't any practical way to do that with passive components.

And if you're going to use a microcontroller, you might as well use one that can do the whole job itself. For instance, the Arduino Micro (or any other ATmega32U4 device) can be easily programmed to present itself as a USB keyboard using the Keyboard library.

• I recall a method of using a capacitor to "charge" and "release" once it's full, in coordination with a transistor, which can accomplish a sort of delay. I find it extremely hard to believe that there "isn't any practical way". The whole reason I'm using a scrap keyboard is to avoid going the all-out route of any sort of microprocessor. Feb 3 '18 at 2:01
• @JerryDodge It'll take some significant engineering effort to get a circuit built out of discrete components to perform reliably -- and the component count will rapidly get out of control, especially if you want your circuit to run more than one sequence. Don't fool yourself into thinking you'll save time and/or money this way.
– user39382
Feb 3 '18 at 3:37

Here's an example matrix:

If you use 555 timers (read the datasheet) and 4066 analog switches (read the datasheet) you can generate timed pulses that simulate keystrokes. You might have to combine them with 74HCxx gates (eg. a NOR gate) to get what you want. It's a bit tedious and I'm not going to go through the process, but it's quite possible with just the information in the datasheets and a bit of thought.

• Thank you, I also found this: learningaboutelectronics.com/Articles/… I'm pretty confident this will do exactly what I need, while of course decreasing it from 7 seconds down to just a fraction of a second. Feb 3 '18 at 22:24