Settings

Theme

Rotary Keyboard

squidgeefish.com

511 points by christoph-heiss 3 years ago · 60 comments

Reader

HALtheWise 3 years ago

Nice project!

> Due to debouncing troubles, it seems to be double-reading each pulse. At some point I should throw a scope on it to confirm what the problem is, but it works quite adequately as-is. (My first try only had a 10ms delay, which empirically resulted in septuple-reading each pulse…)

Needless to say, this is not the canonical way to count pulses. A more typical and accurate loop would look like

  if digitalRead(pin):
      count +=1 # register the pulse
      sleep(0.01)  # debouncing delay 
      while digitalRead(pin):  # wait for end of pulse
          pass
      sleep(0.01)  # debouncing delay
  • zamadatix 3 years ago

    I’m more used to “while pin hot in the last devounceDelay consider held” approach. This double sleep method has a larger minimum for a given debounce delay and triggers multiple presses if you get any contact drops at all during a long hold. Not sure if there are other upsides I’m missing though.

  • dahfizz 3 years ago

    I'm curious, why the first sleep? Why not go into the while loop right away?

    • __david__ 3 years ago

      The while condition is reading the pin. The first delay lets the pin stabilize before waiting for the pin to go false.

JadoJodo 3 years ago

Part of me had hoped that this was some sort of insane mechanical keyboard, where every single key was on the rotary.

  • tdeck 3 years ago

    There were a bunch of cheap typewriters that worked this way, collectively called index typewriters. Here's an example, the simplex:

    https://site.xavier.edu/polt/typewriters/simplex.html

  • axiolite 3 years ago
    • leetrout 3 years ago

      "Everything is just a few hundred clicks away"

      I am glad you shared the video because it was exactly what I thought of when I read the parent comment.

  • bqmjjx0kac 3 years ago

    Let's see, for 104 keys 3/4" wide, the fully-rotary keyboard would have a circumference of 78" and a diameter of ~25". At that size, it should probably be oriented like a steering wheel.

    • defanor 3 years ago

      The holes on my rotary phone are about 1 cm. One can make them nested, since it would have to be custom anyway: starting with the diameter of, say, 3 cm, adding a bit more than 1 cm on each side (3 cm, 4.5 cm, etc), and assuming that at least floor (pi * (1.5 + 2.5 * n - 2) / 1.5) keys fit in the nth such nested ring (1.5 + 2.5 * n is the outer diameter, - 2 is there since the holes won't be on the outer diameter, / 1.5 cm is to leave some space around them; that's not meant to be optimal, just a quick estimate), that'd yield 101 holes/keys with 6 rings, with the outer diameter of 1.5 + 2.5 * 6 = 16.5 cm for the last one. That's a rather small keyboard.

      Edit: nested rings would also work for modifier keys.

      Edit 2: fixed the formula.

      • bqmjjx0kac 3 years ago

        If there are nested rings of keys, how would the keyboard know which key you "pressed"? Maybe I need to RTFM.

        • defanor 3 years ago

          I think the most straightforward way is to have a separate usual mechanism for each ring, stacked vertically, passing the rotation from each ring through the inner ones without rotating them. But likely something nicer (more optimal) can be designed: either purely mechanical (to end up with just a single combined rotation on the output) or relying on more modern technologies (plenty of options on reading dial positions then).

          • defanor 3 years ago

            Or the holes can just be staggered (so that each hole is at an unique angle): then the rings won't have to rotate separately, though the reading would have to be more precise/higher-frequency then, and it may be tricky to rotate the dial with a finger as precisely (with 6 rings and 15 mm per hole, that would be a 15 / 6 = 2.5 mm margin, roughly).

    • Someone 3 years ago

      No, just use https://en.wikipedia.org/wiki/Multi-tap. To type an ‘S’, for example, simply dial ‘7’ four times in a row.

  • layer8 3 years ago

    It doesn’t make sense for the modifier keys to be on the rotary dial, but the rest you code encode by a pair of dials (for 10x10 keys). Labeling would be a challenge.

    I wonder which of Emacs and Vim would have the advantage here.

    • benj111 3 years ago

      A modifier dial would be cool. You could have capslock for X number of seconds.

      Vim could have a mode dial. Which mode should be the default is possibly the thing that flame wars are made of though.

rgoulter 3 years ago

What an impressive project.

One thing this design demonstrates about the standard keyboard design:

- In order to disallow using the number row, a giant 10U keycap is placed over the number keys. This deliberately restricts usage. It's funny because it's unexpected.

- 3 rows down, you've got a giant 6U keycap. But, most keyboards just look like this, even though it's as impractical as this joke keycap above.

paulkrush 3 years ago

Test it on kids: https://www.youtube.com/watch?v=1OADXNGnJok

  • fbdab103 3 years ago

    A gentle reminder that nothing is intuitive.

    • benj111 3 years ago

      No.

      I recently noticed on my local canal the mile markers show how many miles you are from the place youre traveling from.

      This is the Leeds Liverpool canal. So as you travel to Leeds it says Liverpool with increasing miles.

      From the pov of the Liverpool side of the sign being the Liverpool side this makes sense, and on a barge it's easy to look back to see how many miles to Leeds. But to modern eyes it's completely backwards.

      Even traffic signs are 'intuitive'!

  • TedDoesntTalk 3 years ago

    This is insane. Fun to watch them.

ChewFarceSkunk 3 years ago

Nice, but not hardcore enough! Here's the real deal:

https://www.youtube.com/watch?v=9BnLbv6QYcA

college_physics 3 years ago

The slowness of the rotary dial might be actually a strength in certain use cases, like when its critical to get the number right the first time around. Consider attaching it to a Bloomberg terminal to eliminate the "fat finger" problem.

  • hjkl0 3 years ago

    I was going to comment that I remember it being the opposite: it was _so_ slow that I would find myself losing my place in the number I was trying to dial and having to hang up and start over.

    But then again, maybe that does mean I was less likely to end up dialing the wrong number.

    That said, the phenomenon of dialing the wrong number was already well known when everyone was still using rotary dials, so maybe it’s not such a strength after all.

  • euroderf 3 years ago

    No more mistaken multi-billion-dollar bank transfers and stock trades !

0xmarcin 3 years ago

Rotary phones where used with https://en.wikipedia.org/wiki/Strowger_switch - so they have very simple interface - just generate the number of pulses that is either N or 10-N (I don't remember exactly which one is right). There is also a nice back-story about how it was invented.

This is a nice DIY project, but its practicality is questionable. Choosing a number on rotary phones is very slow, as you need to wait til the wheel returns to its start position.

  • stavros 3 years ago

    It's N, from what I recall from my rotary mobile:

    https://www.stavros.io/posts/irotary-saga/

  • ismokedoinks 3 years ago

    Not sure practicality is the goal--Being inconvenient might actually be the intent.

  • ComputerGuru 3 years ago

    You could redesign the rotary dial to return to zero much, much faster with shorter pulses and smaller intervals between them given advances in high frequency signal counting.

    • nikau 3 years ago

      I remember adjusting my phone when I was a kid to spin back as fast as possible, if set too fast and the number wouldn't dial. There was a little speed governor inside which could be adjusted for more or less resistance, i think it had weighted arms that could be adjusted outwards to slow it down.

veganjay 3 years ago

This is so cool, especially for those of us who've used rotary phones.

I'd like to see a video of a google voice or other call made using the rotary number pad :)

  • kmoser 3 years ago
    • no_time 3 years ago

      Tangent, does anyone know where can I buy a small mechanical ringer module like that? I'm probably feeding the wrong terms into ebay but the best it can do vintage doorbells.

    • layer8 3 years ago

      It would be fun for it to support texting using T9 on the dial.

  • melling 3 years ago

    We had a rotary phone when I was young.

    What would be really cool is to see some version of “Minority Report” actually work in my lifetime.

    https://youtu.be/PJqbivkm0Ms

    Sort of like people who lived during the invention of the airplane and got to see humans land on the moon

    • nordsieck 3 years ago

      > What would be really cool is to see some version of “Minority Report” actually work in my lifetime.

      I suspect that that will come swiftly once VR headsets get good[1] enough to be used as a replacement for a laptop/monitor setup. I don't personally have a device, but people who do have told me that the resolution and weight just aren't there yet.

kevin_thibedeau 3 years ago

> While one could use a pin-change interrupt, the timescale is so large that busy-waiting is acceptable.

You should never use interrupts for this sort of input with lots of inherent switching noise. At best you could wait for one interrupt then disable it while polling in a debounce routine. Interrupts are a red flag that someone hasn't investigated what the switching is doing to their micro.

trinsic2 3 years ago

LOL. That is a crazy project, but I smiled al the way through reading about it. Its going to be slow going doing numeric key input though. :-)

  • layer8 3 years ago

    It might motivate someone to implement an IME for Roman number input.

pedrovhb 3 years ago

That's awesome. Given the effort that went into it, it's kind of a shame to use a cheap $10 board as a base. I think it'd be worthwhile to spend a bit more and get a keyboard running QMK, which also saves the headache of jerry-rigging an Arduino to control the thing and the complications that come with it (USB, custom logic in the firmware, etc).

bilekas 3 years ago

Definitely a fun project and great read! I only worry it may catch on with the hipsters and we'll be hearing the rotary bells in cafes soon.

darkhorn 3 years ago

Apple had wheel keyboard https://youtu.be/9BnLbv6QYcA

oritsnile 3 years ago

The most interesting for is the USB 3.0 connection, on the hub. Didn't know the lanes are totally independent.

  • nikau 3 years ago

    Yep - same for usb-c spec, there's always a usb-2 bus available.

    This makes some cheap hubs actually quite good for office work, they use all four lanes for the display and can also do usb-2 and power delivery for around 20 bucks.

jacquesm 3 years ago

That's a very neat hack, the level of dedication on display is amazing as are the writing skills.

anyfactor 3 years ago

I NEED a rotary dial as a fidget toy.

blamazon 3 years ago

Had a chuckle at "the rotary dial is mightier than the number keys"

ChrisMarshallNY 3 years ago

That's a fun hack!

jweissman 3 years ago

this feels like a serious work of art

greenbit 3 years ago

An interesting twist on numeric entry, for sure.

user3939382 3 years ago

Time to use it with a SIP client :D

lencastre 3 years ago

Click wheel FTW

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection