А вы ностальгируете по старым дисковым телефонам? Некоторые люди настолько не могут без них жить, что прикрутили телефонный номеронабиратель к современной клавиатуре. Почему бы и нет, в самом деле?

Прошивка

Идея в том, чтобы сделать красиво и функционально. Чтобы с помощью диска действительно можно было вводить цифры. Ещё планировалось удалить числовой ряд клавиатуры, чтобы вместо него поворотный диск работал. 

Поворотный диск имеет две основные пары контактов. Одна размыкается, когда диск перемещается на 1 позицию, а другая создаёт характерную серию импульсов при отпускании (один импульс на числовую позицию). Можно было бы использовать прерывание при смене контакта, но шкала времени настолько велика, что ожидание получается приемлемым. Я использовал DFRobot Beetle, так как его встроенный ATMega32u4 имеет родной USB HID.

while (digitalRead(ACTIVE)) // Active-low
{
  int count = 0;

  while (!digitalRead(ACTIVE))
  {
    if (digitalRead(PULSE))
    {
      count += 1;
      delay(50);
    }
  }
  if (count >= 2)
  {
    count /= 2;
    count = (count == 10) ? 0 : count;
    Keyboard.print(count);
  }
}

Кажется, что каждый импульс считывается дважды. Пожалуй, я должен был тщательно его изучить на наличие проблем, но он и так работает вполне адекватно. (В моей первой попытке была задержка всего 10 мс, что эмпирически привело к семикратному считыванию каждого импульса).

Электрика

Для питания этой клавиатуры нужны два кабеля: один для Arduino и один для оригинального контроллера клавиатуры. Меня больше устраивал такой вариант: вставить концентратор USB в клавиатуру, припаяв к нему Arduino и контроллер.

Это позволило мне припаять встроенный USB-порт клавиатуры к восходящему соединению концентратора. Таким образом, когда я подключаю свой самодельный USB-концентратор к компьютеру, сохраняется иллюзия USB-устройства с одним кабелем.

Самый дешевый концентратор с удобным форм-фактором, который я смог найти, был этим дурацким зверем с тремя портами:

Интересно, что верхний порт концентратора действительно совместим с SuperSpeed: пары SSRX+/- и SSTX+/- представляют собой полностью независимый интерфейс от D+/-пары, используемой для Full-Speed ​​или High-Speed ​​USB, и поэтому могут быть направлены непосредственно на порт без промежуточного узла.

Чип, выполняющий всю тяжелую работу в этом концентраторе, является монолитным HS8836A, который предположительно рассчитан на высокоскоростной USB-трафик и имеет впечатляюще малое количество вспомогательных компонентов.

В моём случае нужно было просто аккуратно отпаять существующие порты, чтобы не расплавить микросхему концентратора и подключить USB-сигналы от клавиатуры и Arduino. Обратите внимание, насколько компактна эта плата благодаря HS8836A:

Для подключения данных к Arduino я использовал несколько экранированных дифференциальных линий от проводов дисплея LVDS iMac, потому что они очень удачно валялись среди прочего хлама. Подозреваю, что импеданс полностью выключен, но USB 1.1 удивительно надёжен.

Клавиатура

Чтобы заменить цифровой блок клавиатуры на поворотный диск, мне пришлось удалить все переключатели для неё. Это было легко, так как данная клавиатура имеет одностороннюю печатную плату, а моя присоска для пайки весьма удобна.

Можно было бы разместить основание циферблата поверх печатной платы, но в этом случае сам циферблат находился бы очень высоко.

Потом я понял, что если сделать прорезь под циферблат, то получится расположить его на уровне клавиш, как показано ниже:

Это влечет за собой прорезание дорожек в нижней части печатной платы. Они позволяют клавиатуре сканировать все клавиши, чтобы определить, какие из них были нажаты. Я потратил много времени, исследуя дорожки мультиметром и делая перемычки для их замены.

Из-за моей неосторожности пришлось ещё немного потрудиться - когда я подключил плату, то понял, что сломал кластер клавиш со стрелками. Забавный факт: матрица клавиатуры на этой плате также используется для индивидуального включения светодиодов, поэтому, если клавиатура не может подсветить какую-то клавишу, она также не сможет ее прочитать.

После обработки клавиатуры кольцевой пилой, осциллирующим резаком и дремелем мне удалось прикрепить диск к остаткам клавиатурной платы.

Закончив работу с проводкой USB, я убедиться, что ещё не сжёг ничего важного (обратите внимание, что индикаторы клавиатуры горят — это указывает на то, что, по крайней мере, питание подаётся).

3D-печать

Я решил напечатать на 3D-принтере кожух, чтобы скрыть внутренности циферблата. Всё же мне не хотелось получить совсем уж ужасное детище. 

Раньше я ничего не проектировал в 3D CAD, так что пришлось чуть-чуть изучить OpenSCAD - ровно настолько, чтобы все мои друзья-механики с криками разбежались. На самом деле этого было достаточно, чтобы спроектировать базу с цифрами, которая будет крепиться на основание клавиатуры. 

Мне кажется, очень здорово иметь функционально определённый язык для создания твёрдых предметов. В любой момент можно немного поменять настройки и параметры, не переделывая всё заново. 

(По иронии судьбы я умудрился потерять файл OpenSCAD, поэтому итоговый рендеринг был сделан путём импорта STL в OpenSCAD).

Нужный результат получился не сразу, но в итоге у меня всё получилось с помощью функции экспорта SVG OpenSCAD и многократной печати объекта до получения нужного угла наклона. 

Конечно, окончательная напечатанная деталь все ещё была немного смещена, и мне пришлось вырезать в ней выемку, чтобы получить правильный угол.

Кроме того, пришлось немного подрезать металл основания поворотного диска, но после небольшой шлифовки у меня получилось собрать всё вместе. Я использовал сварку трением с перемешиванием, чтобы соединить все три детали вместе, вставив кусок нити в свой дремель и проведя им по швам. Это значительно сложнее, чем кажется, и в тот момент я зауважал людей, которые делают это в промышленных масштабах из нержавеющей стали, например, для топливных баков ракеты SLS.

Параметрический колпачок

Просто выдрать из клавиатуры числовой ряд, чтобы принудительно использовать вместо него поворотный диск, было бы достаточно забавно, но я решил, что будет интереснее напечатать специальный колпачок для клавиатуры 10U, который бы соответствовал профилю существующих клавиш и позволял светодиодам просвечивать сквозь себя. Это стало возможным благодаря невероятному генератору параметрических клавиш для OpenSCAD, который я нашёл на GitHub.

include <./includes.scad>

$stem_positions = [[19.05*-4.5,0], [19.05*-3.5,0], [19.05*-2.5,0], [19.05*-1.5,0], [19.05*-0.5,0], [19.05*0.5,0], [19.05*1.5,0], [19.05*2.5,0], [19.05*3.5,0], [19.05*4.5,0]];
$inset_legend_depth = 3;
$font="Source Code Pro:style=Semibold";
oem_row(1) upside_down() u(10) dishless() legend("THE ROTARY DIAL IS MIGHTIER THAN THE NUMBER KEYS", [0, -0.8], 4.5) key();

Из-за того, что Cura пасует, когда дело доходит до объектов с внутренними вырезами, мне пришлось вручную определить края, чтобы крышка клавиатуры не отслаивалась. Да, проекции OpenSCAD ужасно требовательны к вычислительным ресурсам, но есть лучший способ сделать это:

difference() {
    scale([1.07, 1.5])
    linear_extrude(height=0.2) 
    projection(cut=true) oem_row(1) u(10) upside_down() dishless() key();
    
    linear_extrude(height=0.2) 
    projection(cut=true) oem_row(1) u(10) upside_down() dishless() key();
};

После того, как я установил стабилизирующие клавишные переключатели, я наклеил кусок липкой ленты поверх колпачка клавиш и залил туда остатки суперклея, чтобы заполнить вырезы. Двумя днями позже клей полностью застыл. 

Пожалуй, разумнее было бы нанести несколько тонких слоёв, так как суперклей затвердевает под воздействием влаги, и поэтому нижняя часть, та, что ближе к верхней части колпачка, сохла слишком долго. 

Да, он действительно печатает “the rotary dial is mightier than the number keys” (поворотный диск мощнее, чем цифровые клавиши) при нажатии. Я подключил все три переключателя, поддерживающие колпачок клавиатуры, параллельно и подключил их к неиспользуемому входному контакту на Arduino.

Окончательная сборка

Мой кожух пришлось приклеить горячим клеем к клавиатуре, который также намертво зафиксировал кучу винтов, скрепляющих клавиатуру. Хорошо, что у меня никогда не будет ошибок в проводке, так ведь? ….Никогда не будет, да?

Ну, я нечаянно обрезал одну из дорожек для клавиши со стрелкой вниз. Не представляю, как это могло произойти. Хотя я утверждаю, что vimkeys должно быть достаточно, нефункциональные клавиши немного смущают, особенно когда клавиатура заклеена.

Я решил эту проблему с помощью отрезного колеса на дремеле. Я разрезал заднюю часть клавиатуры под клавишей со стрелкой вниз и рядом с Arduino, что позволило мне выловить провода от этой клавиши к Arduino и заодно проникнуться уважением к чувакам, которые строят корабли в бутылке. Благодаря одностороннему характеру печатной платы клавиатуры было нетрудно изолировать ножки переключателя от схемы клавиатуры с помощью припоя и термоусадки.

Другая проблема была хуже: я принёс клавиатуру в офис коллеги, пока он был на обеденном перерыве, но подключил его к KVM. К сожалению, KVM прослушивает только HID-устройства, такие как клавиатуры и мыши, а это означает, что мой умный USB-концентратор посередине не был распознан, и, следовательно, клавиатура вообще не работала. Как стыдно…

Реакция коллег была очень разной. От “это действительно работает?” до “господи, неужели у кого-то НАСТОЛЬКО много свободного времени”? 

А вот ещё картинки чудо-устройства:

А вы что скажете?


Что ещё интересного есть в блоге Cloud4Y

→ Информационная безопасность и глупость: необычные примеры

→ NAS за шапку сухарей

→ Как распечатать цветной механический телевизор на 3D-принтере

→ Создание e-ink дисплея с прогнозом погоды

→ Аналоговый компьютер Telefunken RA 770

Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу. А ещё напоминаем про второй сезон нашего сериала ITить-колотить. Его можно посмотреть на YouTube и ВКонтакте.

Комментарии (36)


  1. dcc0
    28.12.2022 13:56

    Классно получилось.


  1. kulhaker478
    28.12.2022 13:57
    +1

    А вы что скажете?

    Жесть какая)
    Ожидание: передка =>80% клавы, реверс исходной платы, прошивка стокового контроллера
    Реальность:

    Клавиатура в клавиатуре получается


    1. SuperTEHb
      28.12.2022 14:24
      +4

      Самой синей изоленты нет, но её дух витает в воздухе.


    1. olartamonov
      28.12.2022 16:20
      +2

      Я даже не знаю, что пугает больше — эта дыра или код «счётчика импульсов».


      1. MinimumLaw
        28.12.2022 16:37
        +1

        А каково было программистам первых цифровых АТС? Порядка 100 номеров в обслуге, из которых 10 должны ОДНОВРЕМЕННО набирать номер в импульсном режиме, да еще и с разбросом параметров (дай бог памяти от 8,5 до 11,5Гц). При чем для получения сертификата должно случиться не более 3х ошибок приема цифры за сутки. И вот это все на 8086-ом процессоре с минимумом ОЗУ и ПЗУ. И помимо приема номера надо еще гудки давать, звонок давать, и абонентов коммутировать.

        А я такое помню. Программировать тогда не программировал, но железки делал и сертификацию с ними проходил.


        1. olartamonov
          28.12.2022 16:39
          +2

          Если бы программисты цифровых АТС такой код писали, у нас бы не было цифровых АТС.


  1. HardWrMan
    28.12.2022 14:20
    +7

    Наконец-то будет удобно пользоваться скайпом!


    1. yarkov
      28.12.2022 14:58

      А как обмениваться файлами с помощью диска от телефона?


      1. mctMaks
        28.12.2022 15:07
        +1

        лови png: 0000 1100 0101 1010 0110 ...


        1. CaptainFlint
          28.12.2022 15:42
          +2

          Неоптимальненько! Хотя бы в восьмеричной что ли…


  1. iliasam
    28.12.2022 14:27

    Мо моему, номеронабератель как-то не очень красиво вписан в текущую конструкцию.
    Даже черный пластик вместо серого был бы лучше.


  1. Dynasaur
    28.12.2022 14:51
    +1

    На что люди тратят свои таланты, время и ресурсы! Сделайте ещё ручку сбоку, чтобы покрутить и крикнуть "Барышня, Смольный, пожалуйста!"


    1. olartamonov
      28.12.2022 16:21
      +1

      Думаю, написать ли про него статью.


      1. Den4e
        28.12.2022 19:58

        ага, а два проводка с током куда-либо подключить для передачи обратной связи в случае ошибки правописания\компиляции или на случай уведомления о новом сообщение, чтобы не пропустить важное так сказать

        .


      1. Samid777
        28.12.2022 20:27

        Почему бы и нет? У меня получалось трубку от тапика использовать в качестве электретного микрофона, подключал вместо микрофонного капсюля двумя проводами, от общего и вывода коллектора в цепи трубки. Неплохо, но уровень звука на мой взгляд несколько слабоват. Транзистор бы с большем КУ, подобрать смещение, и получилось бы отлично. Звук у ДЭМШ очень узнаваемый, возможно найдет свое применение.
        В таком же виде телефон можно будет подключить напрямую к линейному входу.
        Можно сконструировать самодельную дифсистему, разломав второй тапик, подключить к звуковой карте, и использовать для разговоров по скайпу.


        1. olartamonov
          28.12.2022 23:25
          +1

          У меня, собственно, задача обратная стояла — оценить возможность замены ДЭМШ-1А на что-то современное. Знакомые попросили, потому что ДЭМШ мрут, новые стоят в рознице конских денег (800-1500 рублей), на фоне 25 рублей за электретный это вызывает грусть.

          И да, трубка (ДЭМШ-1А + усилитель на транзисторе МП15, первый каскад усилителя стоит в трубке) практически один-в-один взаимозаменяема с электретным микрофоном.

          Но да, про подключение к компу тоже надо подумать, благо я теперь счастливый владелец двух тапиков 1983-го года выпуска.


      1. Exchan-ge
        28.12.2022 23:17

        Думаю, написать ли про него статью.


        Пишите! Я телефонистом не был, но с подобными девайсами дело имел, не по своей воле, правда :)
        Мне точно будет интересно.


        1. olartamonov
          28.12.2022 23:27
          +1

          Они по сию пору широко используются. Хотя есть более свежие ТА-88, но ТА-57 наплодили при СССР столько, что их ещё лет на тридцать хватит.


    1. Didimus
      28.12.2022 16:57

      И ручку, которой динамит в мультиках взрывают, вместо левой кнопки мыши.


  1. yarkov
    28.12.2022 14:59
    +1

    Буквенные клавиши предлагаю заменить на ключ для морзянки. Компактно получится.


    1. Didimus
      28.12.2022 16:56

      Наберите ваш пароль в тоновом режиме (с)
      Есть же диски с буквами, можно их использовать, для английского алфавита трёх хватит. И верньеры от перископа для курсора, и рычаги от трактора вместо мыши.


      1. yarkov
        28.12.2022 18:08

        С рычагов прям хрюкнул когда представил ))


  1. nbkgroup
    28.12.2022 15:18
    +5

    Иностранная версия мема про троллейбус из буханки.


  1. Hidenozuke
    28.12.2022 15:44

    Очень круто вышло 12/10


  1. Didimus
    28.12.2022 16:00

    Оффтопик: теперь новые плашечки в мобильной версии сайта, бегло прочитал « Тупориал». Подойдет для туториалов для тех, кто все капслоком пишет, например..


  1. salnicoff
    28.12.2022 22:06

    Одного не понял: а двухкопеечную монету куда вставлять? ;-)


  1. Exchan-ge
    28.12.2022 23:15

    А вы ностальгируете по старым дисковым телефонам?


    Нет.
    (Категорическое «нет» :)

    (первый кнопочный увидел где-то лет в 35, а до этого были, не к ночи будь помянуты — только дисковые)


    1. balamutang
      29.12.2022 10:41

      Ну неудивительно, ностальгируют по ним те кто ими не пользовались в быту, как и прочие ностальгирующие по магнитофонным кассетам и тд


  1. dmitryrf
    29.12.2022 10:20
    +2

    Подозреваю, что импеданс полностью выключен, но USB 1.1 удивительно надёжен.

    Подозреваю, в оригинале было «impedance was completely off», что переводится не «выключен», а «полностью съехал», т.е. вышел за допустимые границы.

    +++
    Почти угадал: «I suspect the impedance is totally off»


  1. domix32
    29.12.2022 12:55

    А оно играет мелодию "Поле Чудес" пока возвращается в исходную позицию?


  1. RetardedWolfy
    29.12.2022 13:20
    +1

    А вы что скажете?

    Чёт клавиатура с подсветкой, а диск без подсветки. Не порядок. Ждём геймерскую версию с дисковым набирателем, чтобы было RGB, передивания и анимация при наборе. А то как-то не по гейМЕРСКИ.


  1. asm0dai
    30.12.2022 13:42

    "Достижение" ради достижения, с моей точки зрения. Что-то из серии "разбить рукой максимальное количество кокосовых орехов за минимальное время" для книги рекордов Гиннеса. То есть, проще говоря, усилия и материалы потрачены "для галочки". Как безалкогольное пиво - "сварено впустую" :-)

    Я застал эпоху аналоговых домашних аппаратов с дисковым набором номера - и ни разу не возникало чуство ностальгии. Как уже одни из комментаторов высказался, "ностальгируют по ним те кто ими не пользовались в быту".


  1. NickDoom
    30.12.2022 13:44

    Ардуино, 3D-печать… эх, не любят буржуйские гики лезть в глубины :)

    Где-то у меня валялся такой номеронабиратель со спиленным ограничителем, чтобы хекс набирать (в нищем детстве пытался что-то типа ЮТ-88 собрать, пожертвовав вообще всем, что удорожало и усложняло проект). И клавиатура полудохлая. Может, через транзистор можно сделать имитацию нажатия клавиши, не впрягая рядом вторую клавиатуру, тогда при некотором усердии оно на рассыпушной логике вытанцовывается :)

    Жаль, импульсы генерируются только на обратном ходу диска, а то можно было бы не просто цифры с нумпада набирать, но и при отключении индикатора Num Lock переходить в режим «одномерной мышки» (джойстика? Трекбола?), то есть если диск прижат рукой в ненулевом положении, генерировать нажатия «стрелка влево» и «стрелка вправо» с разной скважностью, в зависимости от угла поворота. Но — увы! Таких сведений о положении диска в контактной группе механического НН не предусмотрено, да и дико неудобна штуковина, которая пружиной возвращается не в нейтральное положение, а в нулевое, то есть сначала в крайнее левое, а потом в OFF. Если случайно отпустить, курсор сперва рванёт влево со всей дури, и только потом уже остановится (когда диск доедет до нулевого положения и сработает соответствующий контакт, который там как раз есть и на который можно и нужно повесить отключение генерации нажатий стрелок).


  1. sergey00166
    30.12.2022 13:46

    в бухгалтерию для забивки exel-я надо сделать!

    а по существу - даже очень носталгирующему нахрена это в клавиатуре? сам к таким отношусь, понимаю мобильник с диском, но клавиатура...


    1. salnicoff
      30.12.2022 22:03

      а по существу - даже очень носталгирующему нахрена это в клавиатуре? сам к таким отношусь, понимаю мобильник с диском, но клавиатура...

      Поностальгировать. Пол-века назад были издательские системы с клавиатурой и похожим номеронобирателем, с помощью которого делалось выравнивание. Только автор о них, скорее всего, не знает, и им двигало желание просто что-нибудь сделать.


  1. Intuist
    30.12.2022 13:46
    +1

    А я вот из спутникового трекера телефон сделал:)

    https://youtu.be/WQqJSETYfLo

    Водители фур в основном попутные лыбились когда видели его на топеде )