summaryrefslogtreecommitdiff
path: root/blog/thors-hammer/index.html
blob: 2bbea5ed18c59b81d42452599bda03e2aef35a98 (plain)
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
<!DOCTYPE html>
<html><head>
    <meta charset="utf-8">
    <title>Thor&#39;s Hammer | Home</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="color-scheme" content="dark light">
    <link rel="stylesheet" href="/style.css">
</head>
<body><nav>
    <div class="internal">
        
        <a href="/" title="Home">Home</a>
        <a href="/blog/" title="Blog">Blog</a>
        <a href="/projects/" title="Projects">Projects</a>
        <a href="/about/" title="About">About</a>
    </div>
    <div class="search">
        <div id="search"></div>
    </div>
    <div class="external">
        <a href="https://git.jaseg.de/" title="cgit">cgit</a>
        <a href="https://github.com/jaseg" title="Github">Github</a>
        <a href="https://gitlab.com/neinseg" title="Gitlab">Gitlab</a>
        <a href="https://chaos.social/@jaseg" title="Mastodon">Mastodon</a>
    </span>
</nav>

    <header>
        <h1>Thor&#39;s Hammer</h1>
<ul class="breadcrumbs">
    <li><a href="/">jaseg.de</a></li>
    <li><a href="/blog/">Blog</a></li><li><a href="/blog/thors-hammer/">Thor&#39;s Hammer</a></li>
</ul>
 <strong>2018-05-03</strong>
    </header>
    <main data-pagefind-body>
        <div class="document">


<p>In case you were having an inferiority complex because your friends' IBM Model M keyboards are so much louder than the
shitty rubber dome freebie you got with your pc... Here's the solution: Thor's Hammer, a simple typing cadence enhancer
for <a class="reference external" href="https://en.wikipedia.org/wiki/PS/2_port">PS/2</a> keyboards.</p>
<figure data-pagefind-ignore>
    <video controls loop>
        <source src="video/thors_hammer.mov" type="video/h264">
        <source src="video/thors_hammer.webm" type="video/webm">
        Your browser does not support the HTML5 video tag.
    </video>
    <figcaption>A demonstration of the completed project.

        <a href="video/thors_hammer.mov">h264 download</a> /
        <a href="video/thors_hammer.webm">webm download</a>
    </figcaption>
</figure><p>The connects to the keyboard's PS/2 clock line and briefly actuates a large solenoid on each key press. An interesting
fact about PS/2 is that the clock line is only active as long as either the host computer or the input device actually
want to send data. In case of a keyboard that's the case when a key is pressed or when the host changes the keyboard's
LED state, otherwise the clock line is silent. We ignore the LED activity for now as it's generally coupled to key
presses. By just triggering an NE555 configured as astable flipflop we can stretch each train of clock pulses to a
pulse a few tens of milliseconds long that is enough to actuate the solenoid.</p>
<figure data-pagefind-ignore>
    <img src="images/thors_hammer_schematic.jpg" alt="The schematic of the PS2 driver">
    <figcaption>The schematic of the driver stretching the PS/2 clock pulses to drive the solenoid.</figcaption>
</figure><p>Since PS/2 sends each key press and key release separately this circuit will pulse twice per keystroke. It would be
possible to ignore one of them but I figure the added noise just adds to the experience.</p>
<p>Built on a breadboard, the circuit looks like this.</p>
<figure data-pagefind-ignore>
    <img src="images/thors_hammer_breadboard.jpg" alt="The circuit built on a breadboard">
    <figcaption>The completed circuit built up on a breadboard and attached to a keyboard.</figcaption>
</figure><p>Since my solenoid did not have a tensioning spring I used a rubber band and some vinyl tape to make an adjustable
tensioner. The small orange USB hub serves as an end-stop because I had nothing else of the right shape. The sound and
resonance of the thing can be adjusted to taste by moving the end stop, adjusting the tensioning rubber and tuning the
excitation duration using the potentiometer. My particular solenoid was a bit slow so I added some pieces of circuit
board as shims between the plunger and the case to limit the plunger's travel inside the solenoid core.</p>
</div>
    </main><footer>
    Copyright © 2023 Jan Sebastian Götte
    / <a href="/about/">About</a>
    / <a href="/imprint/">Imprint</a>
</footer>
<script src="/pagefind/pagefind-ui.js"></script>
        <script>
            if(navigator.getEnvironmentIntegrity!==undefined)document.querySelector('body').innerHTML=`<h1>Your browser
            contains Google DRM</h1>"Web Environment Integrity" is a Google euphemism for a DRM that is designed to
            prevent ad-blocking, and which Google has forced into their browsers against widespread public opposition.
                In support of an open web, this website does not function with this DRM. Please install a browser such
            as <a href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a> that respects your freedom and supports
            ad blockers.`;

            window.addEventListener('DOMContentLoaded', (event) => {
                new PagefindUI({element: "#search", showSubResults: true});
            });
        </script>
    </body>
</html>