Кто не любит звук старой пишущей машинки? Я точно люблю! Вот почему я работаю над превращением своей пишущей машинки Brother AX-25 в терминал Linux.
Аппаратное обеспечение
Клавиатура машинки подключена по матрице 8x11 с помощью кабелей на 8 пинов и на 11 пинов. Когда один из пинов строки соединяется с пином столбца после нажатия клавиши, пишущая машинка обнаруживает это и печатает соответствующий символ.
Матрица клавиатуры пишущей машинки управляется двумя мультиплексорами Arduino Uno. Я использовал мультиплексоры от Amazon, но для этого подойдёт любой цифровой или аналоговый мультиплексор, если он имеет более 11 каналов. Arduino может обмануть пишущую машинку и заставить её думать, что была нажата клавиша. Для этого нужно выбрать канал на каждом мультиплексоре и соединить контакты.
Чтобы подключить Arduino Uno к Raspberry Pi, я построил схему с делителем напряжения. Благодаря этому выходное напряжение 5 В Arduino преобразуется до безопасного уровня Raspberry Pi. Для этого также можно использовать переключатель уровня.
Вот схема:
Программное обеспечение
Вход UART Raspberry Pi включен с помощью raspi-config > Дополнительные параметры > Последовательный порт. Чтобы предотвратить отправку управляющих последовательностей ANSI на Arduino, добавьте export TERM=dumb в конец вашего .bashrc. Я работаю над написанием кода для обработки escape-последовательностей, поэтому в будущем это может не понадобиться.
Как только всё будет настроено, прошейте serial-typewriter.ino на Arduino и включите пишущую машинку!
На видео показана работа машинки и подробно рассказывается о том, как это было сделано. Для тех, кому хочется читать, мы сделали перевод субтитров. Они ниже.
Перевод субтитров:
Хэй, ребята, с вами Artillect!
Перед вами электронная пишущая машинка Brother AX-25, выпущенная в конце 1980-х.
В ней, как и во многих других пишущих машинках, используется механизм ромашкового колеса, разработанный в 1970-х для печати текста. Она также имеет 16-символьный ЖК-дисплей, который позволяет редактировать документы, хранящиеся в его памяти объёмом 8 КБ.
Сейчас, когда вы легко можете получить доступ к текстовым редакторам практически на любом устройстве с экраном, пишущие машинки стали не так полезны. Поэтому я работаю над тем, чтобы превратить мою машинку в компьютер.
Это моя электронная пишущая машинка Brother AX-25. Работа всё ещё в процессе, но я устранил большинство основных проблем.
Моя пишущая машинка подключена к макетной плате с двумя мультиплексорами, управляемыми Arduino Uno. Arduino подключён к Raspberry Pi через последовательный порт, и он также подключён к моему ноутбуку через USB-кабель. Это позволяет мне использовать мою пишущую машинку в качестве терминала Linux.
Во-первых, я похвастаюсь фишками терминала Linux, а позже я поясню, как заставил это работать.
Я подключу Raspberry Pi, чтобы показать вам терминал.
Итак, вот форма запроса логина пишущей машинки.
Поскольку у меня пока нет клавиатуры, подключённой к Arduino, я использую монитор порта Arduino IDE для отправки входных данных с моего ноутбука. Я не знаю, почему неправильно печатается всё, что Arduino отправляет на Raspberry Pi, но команды он получает просто отлично, так что эта проблема меня пока не беспокоит.
Теперь, когда я вошёл в систему, у меня есть доступ к практически полноценному терминалу Linux. Вы можете делать почти все, что захотите. Однако, из-за того, что бумага состоит не из пикселей, здесь нельзя использовать команды терминала, выполняющие вывод строк на весь экран (такие как vim, emacs или nano).
Сейчас я просто создам файл, используя команду touch test.txt.
Я могу посмотреть содержимое текущего каталога с помощью команды ls.
Теперь предположим, я хочу отредактировать test.txt. В обычной ситуации я бы использовал Vim, но я не могу этого сделать. К счастью, Unix изначально разрабатывался для использования на телетайпах, так что я могу использовать команду ed, построчный редактор.
Поэтому я просто набираю ed test.txt, после чего могу войти в режим ввода, нажав “a” и Enter. Я наберу «Hello world!» и нажму Enter.
Чтобы выйти из режима вставки, нажмите точку и Enter. Затем напечатайте “wq” и нажмите Enter, чтобы сохранить и выйти.
Теперь я могу вывести файл в командную строку с помощью команды cat test.txt.
И вот, «Hello world!»
Просто ради интереса позвольте показать вам, что происходит, когда я пытаюсь использовать команду, выполняющую вывод строк на весь экран.
Для примера я попробую “top”.
И да, вы правильно поняли, машинка просто продолжает пытаться печатать и подавать звуковой сигнал.
Поскольку пишущая машинка печатает гораздо медленнее, чем работает связь между Arduino и Raspberry Pi, длинные сообщения просто обрезаются. Это несколько затрудняет печать ASCII-графики, но я могу просто написать код для Arduino и печатать ASCII-графику вручную.
Я не хочу делать картинки намного крупнее этой, пока не получу сменную ленту, но можете посмотреть, как машинка печатает фрагмент ASCII-графики, который я нашёл на asciiart.eu.
Как это сделано
Теперь, когда я показал вам, на что она способна, расскажу, как это было сделано.
Много лет назад у меня была идея взять пишущую машинку и превратить её в компьютер. Изначально я решил, что хочу заменить механизм машинки с экраном, но в процессе решил сохранить его и использовать в качестве основного способа отображения текста.
Пишущая машинка подключается к клавиатуре с помощью этих двух гибких разъёмов. У одного 8 пинов, у другого 11. Эти пины соединены матрицей 8x11, и вы можете проследить, куда идут дорожки от каждой клавиши, чтобы понять, какой паре пинов они соответствуют.
Когда вы нажимаете клавишу, она соединяет эту пару пинов, и пишущая машинка понимает, что эти два пина соединены.
Вместо того, чтобы отслеживать дорожки для каждой клавиши на клавиатуре, я решил последовательно соединить каждую пару пинов и подписать, какая клавиша, по мнению машинки, была нажата, таким образом я смог определить матрицу клавиатуры.
Я присвоил каждой клавише код от 0 до 87, чтобы упростить программирование в дальнейшем. Когда я получил таблицу, которая показывает, какой клавише соответствует каждая пара пинов, я подключил два мультиплексора, по одному на каждый разъём.
Сигнальные пины мультиплексоров подключены, поэтому мы можем соединить пару пинов, просто выбрав канал на каждом мультиплексоре.
Arduino подключён к Raspberry Pi через делитель напряжения, что позволяет преобразовать выходные 5 Вольт Arduino до 3,3 Вольта, чтобы предотвратить повреждение Raspberry Pi.
На видео вы можете увидеть схему того, что я сделал.
Как только я построил схему и составил матрицу клавиатуры, я смог начать программировать Arduino.
Мой код есть на github, если хотите рассмотреть его получше, вот ссылка. Нужно его немного почистить, но он работает.
Здесь есть пара массивов, которые делают управление мультиплексорами проще, и один большой массив, который я использую для преобразования символов ASCII в коды клавиш пишущей машинки.
Я использую библиотеку softwareserial, чтобы добавить второй последовательный порт в Arduino и чтобы настроить оба последовательных порта и все пины для управления мультиплексорами.
В цикле Arduino ожидает ввода с Raspberry Pi и моего ноутбука. Когда он получает что-то от Raspberry Pi, он печатает это и отправляет на мой ноутбук. Когда он получает что-то с моего ноутбука, то отправляет это на Raspberry Pi.
Остальная часть кода — просто набор вспомогательных функций, которые сделали написание предыдущих разделов намного легче.
Сейчас тут небольшой бардак, но я собираюсь почистить код и превратить его в рабочую библиотеку, которую можно использовать и на других пишущих машинках.
Мне очень понравилось работать над этим проектом. Я неспешно устраняю все косяки и надеюсь со временем превратить машинку в полноценный компьютер. Следующим шагом будет подключение клавиатуры к Arduino, поэтому для управления мне не потребуется другой компьютер.
Спасибо за внимание!
Что ещё интересного есть в блоге Cloud4Y
→ Как открыть сейф с помощью ручки
→ Сделайте Linux похожим на Windows 95
→ Как распечатать цветной механический телевизор на 3D-принтере
→ WD-40: средство, которое может почти всё
→ Взлёт и падение игрового чипа 6502
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу. А ещё напоминаем про второй сезон нашего сериала ITить-колотить. Его можно посмотреть на YouTube и ВКонтакте.