1 この点字キーボードの概要

●この点字キーボードでできること

 「わざわざ点字専用キーボードを作らなくても,PC用のキーボードで点字を入力できないの?」と思われた方もいらっしゃるでしょう.
 確かに,擬似的に通常のキーボードを点字に利用する実用的なWindowsソフトウェア環境(ドライバや専用アプリケーション)は複数あります.しかし,点字入力に欠かせない6個のキーの同時押し下げを送信しないものが多く,この用途には使いにくいです.あったとしても,使用わないキーが邪魔です.
 そこで,USBコントローラ内蔵のマイコン(AT90USB647,アトメル)を使って,USBインターフェースの点字キーボードを自作しました.
 このキーボードはIBM PC-AT互換機(以後PC)や Apple Macintosh(以後Macintosh)のUSBポートに接続して6点の点字で文字を入力するUSBキーボードで,12個(必須である点字用に6つ,スペース用に1つ,モディファイア・キーに5つ)のキーで構成されています.一般的なUSBキーボードが1つのキーの押し下げで1文字を入力するのに対して,点字キーボードは基本的には6〜8個のキーを同時に押し下げることによって1文字を入力します.このキーボードでは原則的には全てのキー押し下げが解除されたタイミングで,事前のキー押し下げの履歴に応じて確定した文字をコンピュータに送ることで,点字の入力を実現します.また,点字が入力ができるという点字キーボードとしての必須機能に加え,以下の特徴を持っています.

モード変更時のモードの状態読み上げ

 このキーボードは非常に少ないキーで通常のUSBキーボードと遜色の無い文字をカバーするために,やむを得ず複数のモードを備えています.モードの状態を表示装置なしに把握できるように,モード変更時にはモードの状態を読み上げる機能を備えています.

確定前の点字の読み上げ

 点字入力に習熟したユーザが短い間隔でキーの押し下げ/押し上げをする場合は,直ちに現在のキーの状態に応じた文字をコンピュータに送ります.
 点字入力に不慣れなユーザなどが長い間キー押し下げを持続している場合は,最後のキー押し下げから一定時間(※1)経過すると,候補である現在のキーの状態に応じた文字を読み上げます.この時,文字をコンピュータには送りません.さらに押し下げを持続すると,その後は一定間隔(※2)で現在のキーの状態に応じた文字を読み上げ続けます.この時も文字をコンピュータには送りません.いろいろキー押し下げ上げを試行して最終的に全てのキーを押し上げた時点で,直前のキー状態で文字を確定してコンピュータに送ります.少し分かりにくいと思われるので,以下に凡例をあげます.

【凡例】


 ※1)実施例として3秒を初期状態に設定しています.
 ※2)実施例として1秒を初期状態に設定しています.

入力のキャンセル

 点字キーを押し下げして入力を開始しても,キャンセルしたい場合には,(全てのキーを離すことなしに)スペース・キーを押すことで文字の送信をキャンセルできます.

●この点字キーボードの構成

 以下の図1に点字キーボードのブロック図を示します.
<図1>点字キーボードブロック図

2 ハードウェアの設計・製作

 アーキテクチャがシンプルかつ高速なことを特徴とするアトメル社のAVRマイコンを使用した回路を検討しました.今回採用したUSBコントローラ付きのAVRマイコンでは,USBデバイス作成が容易であるという主な特徴に加え,出荷時に書き込み済みのブート・ローダによりUSB経由でファームウェアを書き込むことができます.従来のAVRマイコンにはファームウェアが何も書き込まれていないので専用のファームウェア書き込み用のハードウェア(以後フラッシュROM・ライタ)が必要なのですが,今回使用したUSBコントローラ付きAVRマイコンの場合はUSB経由で前述のブート・ローダと専用アプリケーション(後述のFlip)がやり取りしてユーザ・プログラムの書き込みを面倒みてくれます.
 このキーボードの全回路(図2)は電源・クロック・リセットやバイパス・コンデンサなどの基本回路を除くと,このAVRマイコンのI/Oポートに入力用のスイッチが少々と外付けシリアル・フラッシュROMと低周波アンプ接続されているに過ぎません.このAVRマイコンには必要な周辺回路が多く含まれていますし,読み上げ関係も定番のOPアンプを使用しますので,各機能毎に概略を決定したら回路設計は,ほぼ完了してしまいます.

<図2>点字キーボード回路図
 回路中のK1〜K12は,それぞれ Shift///////Alt/Fn/スペース/Ctl/Gui のキーに対応しますので,配置に注意してください.
 RESはリセットボタンです.
 HWBはブート・ローダ起動ボタンです.
 SPはスピーカーです.
 WE(Write Enable)で,外付けシリアル・フラッシュ書き込み可能にする場合のジャンパ端子です.
 WP(Write Protect)で,外付けシリアル・フラッシュ書き込み不可にする場合のジャンパ端子です.

●マイコンの周辺回路の設計

 マイコンの周辺回路は,図2でOPアンプ(LM386)や外付けシリアル・フラッシュROM(AT45DB161D)を除いた部分です.このAVRマイコンの応用例として特筆すべき内容はありませんが,電源,クロック,リセット回路,ブート・ローダ起動回路,キーボード・エンコーダについて以下に説明します.

【電源】

 外付けシリアル・フラッシュROMの電源は,このAVRマイコンの内蔵のレギュレータを使用します.

【クロック】

 今回は16MHzの水晶を用いましたが,8MHzで十分処理できるのでプログラムの冒頭でプリ・スケーラを用いてシステム・クロックを8MHzに設定します.

【リセット回路】

 ブート・ローダの起動にはリセット回路が必要なので実装します.メーカー出荷時に予めリセット用にポートが設定済みです.

【ブート・ローダ起動回路】

 ブート・ローダの起動にはブート・ローダ起動回路が必要なので実装します.メーカー出荷時に予めブート・ローダ起動用にポートが設定済みです.

【キーボード・エンコーダ】

 キーボードというとダイオード・マトリクスを連想しますが,このキーボードではキーボード・エンコーダの特別な回路はありません.I/Oポートにスイッチを接続し,キーのエンコードは全てソフトウェアで行います.

●読み上げ回路の設計

 読み上げ回路は,図2の下部のOPアンプや外付けシリアル・フラッシュROMの部分です.外付けシリアル・フラッシュROM I/F,ロー・パス・フィルタ,低周波アンプについて以下に説明します.

【外付けシリアル・フラッシュROM I/F】

 読み上げる音声データは外付けシリアル・フラッシュROM(2Mバイト)に格納しますので,このAVRマイコンのUART2を同期シリアル・インターフェースであるSPI(Serial Peripheral Interface)モードに設定し,外付けシリアル・フラッシュROMとインターフェースします.

【ロー・パス・フィルタ】

 8ビットのPWMモードのポート出力を音声信号として扱うので,簡易的なロー・パス・フィルタを実装します.この回路は入力線の配線を短くする必要がありますので,アナログ信号出力端子から近い場所に配置します.

【低周波アンプ】

 低周波用のOPアンプ(LM386)を使用した簡易的な低周波アンプを実装します.このOPアンプは使い易いのですが,ローノイズではありません.出力するノイズはスピーカでは許容できる程度ですが,ヘッド・ホンを使用する場合には数百オームの抵抗を直列に挿入してください.

●実際の製作

部品表

配線

 回路図(図2)に従ってユニバーサル基板上で配線しますが,以下の「製作手順」と「製作上の注意点」を踏まえ,レイアウトを十分検討してからハードウェアを製作します.

製作手順

  1. AVRマイコン取り付け(QFP64変換基板)
  2. 外付けシリアル・フラッシュROM取り付け(SOP8変換基板)
  3. ICソケット・ピン取り付け(SOP8変換基板)
  4. キー・スイッチ取り付け位置の決定(メイン基板)
  5. キー・スイッチ取り付け(メイン基板)
  6. キー・スイッチ取り付け部の補強(メイン基板)
  7. QFP64変換基板取り付け(メイン基板)
  8. ICソケット取り付け(メイン基板)
  9. ピン・ヘッダ取り付け(メイン基板)
  10. USBコネクタ取り付け(メイン基板)
  11. グランド配線(メイン基板)
  12. 5V電源配線(メイン基板)
  13. 3.3V電源配線(メイン基板)
  14. その他の配線(メイン基板)
  15. SOP8変換基板挿入(メイン基板)
  16. LM386挿入(メイン基板)
  17. WEジャンパ・ピン挿入(メイン基板)
  18. キー・トップ取り付け(メイン基板)

製作上の注意点

その他の注意点

<写真1>
QFP64変換基板
<写真2>
SOP8変換基板
<写真3>
キー・スイッチ
<写真4>
キー・トップ
<写真5>
USBコネクタ

3 ソフトウェアの設計・製作

 作成するプログラムは,以下の合計3つのプログラムです.

●メイン・ファームウェア設計・製作

 点字キーボードの本体である点メイン・ファームウェアを作成します.メイン・ファームウェアの作成にあたっては,アトメル社が公開しているサンプル・プログラムを多いに活用します.点メイン・ファームウェアはアトメル社が公開しているサンプル・プログラム(USBKEY_STK525-series6-hidkbd-2_0_2-doc.zip)(以後,HID)をベースとしています.このHIDは,若干の修正で各種用途に応用が可能である完成度が高いものです.ファームウェアにはOSが含まれていないのですが,簡易的なタスク実行環境が実現されていますので修正は容易です.主な修正箇所はキーボードをハンドリングしているタスクになります.
 元になるプロジェクトのキーボードをハンドリングしているタスクは入力ポート操作により適当なキー・コードを送るだけの仕様なので,パッチで既存の機能の大半を削除して以下の機能を追加します.また,元になるプロジェクトのレポート・ディスクリプタも少し修正します.
 このプログラムの製作は,Windows上で解凍したHIDのプロジェクトに,差分データを用いてパッチをあて,ビルドすることで完了します.

●サブ・ファームウェアの設計・製作

 ROM用音声データを外付けシリアル・フラッシュROMに書き込むツールであるサブ・ファームウェアを作成します.サブ・ファームウェアの作成にあたっては,やはりアトメル社が公開しているサンプル・プログラムを多いに活用します.サブ・ファームウェアはアトメル社公開しているサンプル・プログラム(USBKEY_STK525-series6-cdc-2_0_3-doc.zip)(以後,CDC)をベースとしています.このCDCもHIDと同様に,若干の修正で各種用途に応用が可能である完成度が高いものです.このファームウェアもHIDと同様の構成であり,その修正は容易です.主な修正箇所はCDCをハンドリングしているタスクになります.
 元になるプロジェクトのCDCをハンドリングしているタスクは仮想シリアル・ポートへの入力をエコーバックするだけの仕様でSPIモードでもありませんので,パッチで既存の機能に以下の機能を追加します.
 このプログラムの製作は,Windows上で解凍したCDCのプロジェクトに,差分データを用いてパッチをあて,ビルドすることで完了します.

●音声ファイル作成プログラムの設計・製作

 サブ・ファームウェアの入力データである音声ファイルを作るツールを新規に作成します.この音声ファイルは,単語を発声した複数のWAVファイルを1つにまとめた構造になっています.
 音声ファイルの内容はそのまま外付けシリアル・フラッシュROMに0番地から書き込み,このキーボードの音声ガイドのサンプリング音源として利用します.
 音声ファイルは,複数のWAVファイルから構成されます.このAVRマイコンの性能や内蔵フラッシュROM容量や外付けシリアル・フラッシュROMの容量などのトレードオフがありますので,WAVファイルはサンプリング周波数が22KHzで分解能が4ビットのモノラルのADPCM(Adaptive Differencial PCM)のデータに限定します.音声ファイルの構造は,WAVファイル情報の配列からなるヘッダに続いて実際のWAVファイルの内容をそのまま複数収めた簡易的なものにしています.
 このプログラムの製作は,UNIX互換環境(Linux/MacOS X等)で音声ファイル作成プロジェクト(SoundData.tar.gz)を解凍・コンパイルすることで完了します.

●ソフトウェア書き込み手順

 以下でソフトウェア書き込みの手順を示します.
 これら手順は Windows XP で実施します.
  1. 先ず,サブ・ファームウェアを書き込みます.
    後述のFlipというフリー・ソフトを使用して,このAVRマイコンの内蔵フラッシュROMのユーザー領域にファームウェアを書き込みます.このフリー・ソフトを使用することで,特別なフラッシュROM・ライタを準備することなくAVRマイコンにファームウェアを書き込むことができます.

  2. 次に,サブ・ファームウェアを用いて,ROM用音声データを書き込みます.
    サブ・ファームウェアは,仮想的なシリアル・ポート(COMポート)として機能しますが,その出力先はコマンドにより外付けシリアル・フラッシュROMに設定可能です.以下を実行して,ROM用音声データを外付けシリアル・フラッシュROMに書き込みます.

    1. HyperTerminalを使用して,仮想シリアル・ポート経由でサブ・ファームウェアを書き込み可能状態に設定します.
    2. copyコマンドを使用して音声ファイルをCOMポートにコピーすることで,ROM用音声データを外付けシリアル・フラッシュROMに書き込みます.
    3. HyperTerminalでサブ・ファームウェアのデータ確認コマンドを実行し,書き込んだROM用音声データを確認します.

  3. 最後に,点字キーボード・ファームウェアを書き込みます.作業用のサブ・ファームウェアはもう不要なので,点字キーボード・ファームウェアを上書きして破棄します.
    ここでもFlipを使用してUSB標準キーボードとして機能するファームウェアを書き込むことで,点字キーボードは完成です.

●実際の製作

 ソフトウェア製作では,以下の「開発環境のセットアップ」と「ビルドとソフトウェア書き込み」を実施します.
 製作は Windows XP で実施します.

開発環境のセットアップ

 以下のファイルを入手してインストールを実施することで,開発環境をセットアップします.
 作業場所は,C:\tmpとしますので、このフォルダがない場合は適宜作成してください。
 詳細は【開発環境のセットアップ.html】を参照ください.

ビルドとソフトウェア書き込み

 ビルドとソフトウェア書き込みの骨子は,以下になります.
 詳細は【ビルドとソフトウェア書き込み.html】を参照ください.
  1. CDCファームウェア作成・書き込み
  2. CDCドライバ・インストール
  3. 音声ROMデータ書き込み
  4. HIDファームウェア作成・書き込み

4 実際に点字キーボードを使用してみた

 このキーボードは,通常のUSBキーボードと同様にPC(Windows2000/XP)或いはMacintosh(Mac OS X Panther/Tiger)のUSBポートに接続して直ぐに使用することができます.このキーボードは,標準的なキーボードとキーの数,機能,キー入力の方法が異なりますので,以下でそれらを簡単に説明します.

 まず,キーの数や機能について説明します.このキーボードには,6個の点字キ―と標準的なキーボードにもあるスペース・キーと5個のモディファイア・キー(「Shift」「Ctrl」「Alt」「Gui(※3)」「Fn」)の計12個のキーがあります.点字キー以外の基本動作は標準的なキーボードと同様ですからここでは省略します.このキーボードの点字キーは初期状態ではパーキンス・ブレイラ(写真6)という点字タイプ・ライタに準拠しています.パーキンス・ブレイラのキー・アサインでは点字キーは左からそれぞれ6点点字(図3)の③の点,②の点,①の点,④の点,⑤の点,⑥の点に対応します.
 ※3) WindowsのWindowsキー,Macintoshのコマンドキー

<図3>6点点字
<写真6>パーキンス・ブレイラ <写真7>点字キーボード

 次にキー入力方法について説明します.このキーボードは,点字キーのキーの押し下げのみでは文字をコンピュータに送りません.
 次にモードについて説明します.このキーボードは,複数のモード持っていますが,それぞれのモードの状態が遷移する際には,遷移後の状態を読み上げます.これらのモードの状態は基本的には独立して変更できますが,まとめて初期化保存することができます.
 最後は動作チェックを兼ね,以下のシナリオに沿って操作してみます.
  1. ホスト・コンピュータに接続する
    1. このキーボードをPCに接続すると標準キーボードとして認識され,タスク・バーにキーボードを検出した旨が表示されます.

  2. モードを初期化して「北米点字コード状態」にする
    1. このキーボードの「Shift」「Ctrl」「Fn」「Alt」「⑥の点字キー」を押し下げ押し上げし,全モードを初期化します.これで普通のアプリケーションでアルファベットの点字の入力が可能になります.

  3. 「北米点字コード状態」で,「メモ帳」の入力を試す
    1. 次にスタートメニューからアクセサリの「メモ帳」を起動します.
    2. 英語ですから,IMをオフ(※4)にします.
    3. ①と②の点字キーを押し下げ上げすると,「メモ帳」に「b」が表示されます.

  4. 「6点カナ・コード状態」で,「メモ帳」の入力を試す
    1. 次に「Shift」「Ctrl」「Fn」「Alt」「④の点字キー」を押し下げ押し上げすると,“6点カナ”と読み上げ後にコード・モードがカナの状態に遷移します.
    2. また,①と②の点字キーを押し下げ上げすると,「メモ帳」に「i」が表示されます.
    3. 日本語ですから,IMをオン(※4)にします.これで普通のアプリケーションで点字でカナ漢字変換して日本語入力が可能になります.
    4. ①と②の点字キーを押し下げ上げすると,今度はIM上にひらがなで「い」という文字が表示されます.
 ※4) このキーボードで「Ctrl」「Fn」押し下げ上げするとIMEが交互にオン/オフします.エンター・キーやバックスペース・キーなどその他のキー・コードについては,本誌資料の【Fnキー・コード表.xls】を参照ください.

5 改良・応用の可能性

改良

 読み上げ機能は,出力する音声の品質を犠牲にして最小限のリソースで構成したため,ハードウェア,ソフトウェアともに改良の余地があります.
 ハードウェア関連では,低周波アンプの改善があります.低周波アンプをローノイズの本格的な回路に変更することで耳障りなホワイト・ノイズを低減することができます.
 ソフトウェア関連では,PWMの分解能向上があります.今回は下位互換のAVRマイコンでの実現性を踏まえて,8ビットのPWMを使用しています.これを今回採用したAVRマイコンで可能な16ビットのPWMを使用することで,読み上げの音質を大きく改善できると思われます.
 8点の漢点字の対応は試行中で実装が完了しておりませんが,下位互換のAVRマイコンであるAT90USB162とそのサンプル・プログラムの修正(※5)では,8点の漢点字への対応は実現できていますので,何れ実現は可能だと思います.

 ※5) レポート・ディスクリプタのレポート・カウントの数を8にして,文字を送る箇所もそれに対応させ全て8文字送るように変更します.

応用

 今回は,このキーボードを最終的にはHID キーボードとしてのみ実現しましたが,USBデバイスは複合したデバイス構成にすることが可能です.特殊なハードウェアを追加することなくファームウェアの変更のみで,必要に応じてマウスなどの機能を追加することは容易です.
 Blue Toothモデムを実装すれば,容易にBlue Tooth対応は容易に実現可能ですが,あいにくBlue Toothモデムは非常に高価なので,このキーボードには不向きであると考えます.このキーボードで使用したAVRマイコンは,USB OTG(On The Go)という機能を備えています.この機能を用いることでBlue Toothモデムを使わず,Blue Tooth対応を実現できる余地があります.USB OTGではPCなどのホスト・コンピュータが無い状態で周辺装置間の通信が可能です.Blue Toothのプロトコル・スタックをファームウェアで実現すれば,安価なUSB Blue Toothのドングルを用いてホスト・コンピュータと接続できる可能性があります.

コラム「点字の基礎知識」

 公共の場所や飲料の上部など至る所で点字を見かける点字は日本語(カナ)を点字で表現したものです.図4の①の点だけが凸になっているのは「あ」です.
 このカナ点字の起源はフランスのアルファベットで,フランス人のルイ・ブライユ氏(1809 - 1852)によって発明された記号の体系で,世界中で使われている一般的な点字の基礎です.このフランスのアルファベットは六つの点によって1文字を表します.2の6乗(=64)の組み合わせがあれば,確かに英語のアルファベットなどの表音文字が表現できそうです.
 日本では,最初に6点のカナによる点字が石川倉次氏(1859 - 1944)によって発明されました.現在では,8点の漢点字など,カナ点字を礎として独自に進化しています.点字の進化は,各国で独自に進んでいるため,国や言語が異なれば点字が異なり不便ですが,PC の普及で,点字の標準化が活発になっています.
 昨年は,ルイ・ブライユの生誕200周年,石川倉次の生誕150周年の年でした.発明から100年以上経過しましたが,点字の利便性の向上は十分ではありません.PC のハード・ベンダー,ソフト・ベンダーもオープン・ソースの有志も,まだまだ障がい者に対して便宜を図る努力が足りないのでしょう.

<図4>カナ点字の「あ」