電動タイプライターをプリンターに改造


はじめに

 ヤフオクでブラザーの電動タイプライター「WORDSHOT」を1000円で手に入れました。 ディジーホイール型のタイプライターで正常に動作しています。 早速ばらしてみたところ、キーボードの読み込みは、大変素直な8x8のキーボードマトリクス回路になっています。 しかも、使用しているマイコンが、三菱の古い4ビットマイコン。M5xxxxという型番。これ、1980年代の製品のようです。 なんと、クロック周波数が5kHzという低い周波数になっています。 これなら、Arduinoでキーボードスキャンを読み取り、キーを押している状態と同じ信号を即座に送り込んでやれば、 WORDSHOTを外部から制御して、英文タイプライターにすることが出来そうです。

 プリンタとしては、現代のインクジェットプリンタに印字品位でも速度でも自由度でもかないませんが、 タイプライターが1文字ずつ音を立ててハンマーで刻印していく様は、大変おもむきがあります。 ということで、早速、Arduino NanoでPCから刻印できるように、改造してみることにしました。


外観

WORDSHOTは、こんな電動タイプライター。


ハードウェア

回路図です。Arduino Nanoを乗せたユニバーサル基板にこんな回路を組み、WORDSHOTの制御基板から配線を引き出してつなぎます。 電源も、WORDSHOTの制御基板から5VをもらってArduinoに供給します。 ArduinoのUSBポートからも5Vが供給されますが、ダイオードで逆流しないようになっていますので、 WORDSHOTの電源とUSBのどちらが先にONしても大丈夫です。

WORDSHOTの制御基板からは、こんな感じで配線を引き出します。

WORDSHOTの電源コード格納スペースに、Arduino基板を乗せて配線すれば、ハードウェアは完成。


ソフトウェア

Arduino Nanoで作成します。

WORDSHOTのキースキャンは、8bitの出力ポートと8bitの入力ポートをマトリクス状にして交点にスイッチを設ける、 ごく一般的なキーマトリクスになっています。2mS毎に出力ポートのどれか1つをLowにし、8bitの入力ポートを読みます。 キースイッチが押されていれば、その入力ポートがLowに、押されていなければHighになります。 これを全ての出力ポートについて調べていけば、最大8x8=64個のスイッチのON/OFFを読み取ることが出来ます。

従って、Arduinoで出力ポートの状態を読み、目的の出力ポートがLowになった瞬間に、目的の入力ポートに Arduino側からLowを出力してやれば、WORDSHOTは「キーが押された」と認識するはずです。

調査したところ、WORDSHOTのマイコンは、キースキャン8ポート+休止期間2mSの合計18mSで全部のキーの押下状態を 1回読み取ります。恐らく、チャタリング防止と、押された・離されたを確実に認識するために、最低3回くらいは スキャンしていると思いますので、Arduinoからは、1つのキーを押すのに5回のスキャンを費やすことにしました。 つまり、最大でも1秒間に10回程度しかキーを押せない計算になります。

PCとArduinoは、ごく普通に、USBで接続します。PCからはUSBシリアルコンバーターに見えます。 従って、Arduinoに、押してほしいキーを、シリアル経由で伝えればよいので、一般的なターミナルソフトから ASCIIコードを送り付ければ印刷可能なように、制御コードはASCIIコードとします。ASCIIコードから 目的のキーのポート番号(出力ポートのbitと入力ポートのbitのペア)へ変換する作業はArduino側で行います。 こうすることによって、一般的なターミナルソフトでArduinoと接続し、印刷したいテキストファイルを書き込むと 即座に印刷することが出来ます。

ターミナルソフトは、ごくごく標準的な「TeraTerm」を使うことにしました。 詳細は動画でどうぞ。


ダウンロード

今回作成したテストプログラムを公開します。一応、お約束の免責事項です。 このソフトウェアは無保証です。このソフトウェアを利用したことによって生じたいかなる損害に対しても、私は責任を負いません。各自の責任において自由にご利用ください。 ソースファイル