  COFFEE-HOWTO
  Georgatos Photis, <gef@ceid.upatras.gr>
  v0.5, 15 January 1998
  近藤 健治 <m99108@ecip.osakac.ac.jp>
  v0.5j1, 10 December 1999

  私がこれまでに聞いた中で、ソフトウェアについて最も気になる意見の一つ
  は、あれこれのソフトウェアでコーヒーを作ることができるのかということ
  だ。そんなわけだけど、Linux はコーヒーを確かに作ることができるのであ
  る。そして、意外にもそれは旨いんだよ!

  長い間、人類はどうすればコンピュータでコーヒーを作ることができるか考え
  てきた‥‥人々は、長時間コンピュータの前で起きたり寝たり正気でいるため
  にコーヒーが必要なんだ。コーディングは夜が良いというのは常識だろう‥‥

  そこで主な問題は、コーヒーメーカーをソフトウェア制御するのに、どうやっ
  てコンピュータによる(ハードウェア)制御を行うかである。これは大体におい
  て、コーヒーメーカーの電源を制御する回路として働く ON/OFF スイッチのこ
  とを指している。

  1.  メニュー

  1.1.  フレンチ

  そこらの売りもんのソフトみたいに、あまり気を配らずに作れるんで、プログ
  ラマにはおなじみのコーヒーだよ。そのエキサイティングな味ときたら、一日
  の一番早い時間に驚きのソフトウェアを書くことに数知れないプログラマを奮
  起させてきたものさ。そう、例えば Windows は、フレンチ・コーヒーに助け
  られて朝5時に書かれたんだ。効き目のほどは保証済み、ってわけね。

  1.2.  ネスカフェ

  ネスカフェは、コーヒーと砂糖と少しの水を混ぜたものにお湯を注いだら完成
  の、どちらかといえば濃いコーヒーだ。だいたいはコーヒー１さじと砂糖１さ
  じに少しの水を取ってかき混ぜる。その間にお湯を沸かしておいて、水がよく
  沸騰したらすぐに、それら全てをいっしょに混ぜて好みでミルクを加える。お
  湯を沸かすのにコーヒーメーカーより簡単なものを使えるんだけども、私は
  こっち方法をずっと考えてきたんだ。

  1.3.  フラッペ

  (訳注: フラッペはカクテルの一種、細かく砕いた氷に様々のリキュールを注
  いだ飲物。)

  上記で述べたコーヒーの一般的なバリエーションだ。実際に必要なのはコー
  ヒーメーカーなんかじゃなくて、冷水と氷を得るための冷蔵庫なんだけどね。

  1.4.  フレッド

  これはむずかしい、coffee-faq を読もう。(文献参照)

  1.5.  カプチーノ (準備中)

  1.6.  エスプレッソ (準備中)

  2.  電子回路

  概略図は、こんな感じ―

       --------- 0-5V  --------- ~220V  ------------------
       |  PC   |===>===| 回路  |========|コーヒーメーカー|
       ---------       ---------        ------------------

  この考えは、リレーやトライアックなんかで電気的に絶縁された回路を駆動す
  るコンピュータから、自分らが電圧の制御を行うことにあるわけ。

  大きいコーヒーメーカー(200W程度か、それ以上のもの)を用いるなら、リレー
  回路を選択するべきだ。でなければトライアックベースのものを使うことがで
  きる。

  紹介された全ての回路は少なくとも１回はテストしたけど、その結果について
  は -自分の責任- になる。もし、あなたに電子工学の知識が無いなら、こう
  いった工作にトライすべきでない。さもないと、たぶんマズイことになるだろ
  う。

  電圧220Vで試みるとき、あなたはよく注意して行うべきだ。それと適切な
  ヒューズを使用するのは時代遅れではない。

  2.1.  コンピュータから 0-5V の電圧を駆動する

  ここに、コンピュータのパラレルポートより 0-5Vの電圧を得るための簡単な
  例を示す。

       後ろから見た       -----    Pin 10 - ACK
       オス  DB-25        |   |    Pin  9 - D7
       コネクタ           |   |                           Pin 2 - D0
                          v   v                           v   Pin 1 - Strobe
                                                              v
        ____________________________________________________________
       /                                                            \
       \     13  12  11  10   9   8   7   6   5   4   3   2   1     /
        \                                                          /
         \     25  24  23  22  21  20  19  18  17  16  15  14     /
          \______________________________________________________/

  Pin 1 は strobe (負論理)

  Pin 2-9 はデータバス信号。OUTB コマンドでパラレルポートのラッチに書き
  込まれる。

  Pin 10 は、データ取り込み完了信号(ACK)。これは自分で制御することで、
  CPU に割り込みをかけることができる。

  Pin 18-25 は短絡されておりグランド(GND)である。

  詳細―

       <= 入力 DB25    Cent                    Reg
       => 出力 ピン    ピン    信号名          Bit     機能
       ------  ----    ----    --------        ---     -----------------------------
       =>       1       1      -Strobe         C0-     0.5μs以上の"L"パルス送信でセット
       =>       2       2      Data 0          D0      最下位データにセット
       =>       3       3      Data 1          D1      ...
       =>       4       4      Data 2          D2      ...
       =>       5       5      Data 3          D3      ...
       =>       6       6      Data 4          D4      ...
       =>       7       7      Data 5          D5      ...
       =>       8       8      Data 6          D6      ...
       =>       9       9      Data 7          D7      最上位データにセット
       <=      10      10      -Ack            S6+ IRQ 受け取り後、〜5μsの"L"パルスでセット
       <=      11      11      +Busy           S7-     受信不能/オフライン/エラーで"H"
       <=      12      12      +PaperEnd       S5+     紙切れで "H"
       <=      13      13      +SelectIn       S4+     プリンタの選択状態で"H"
       =>      14      14      -AutoFd         C1-     自動改行のためにローをセット
       <=      15      32      -Error          S3+     エラー/オフライン/紙切れで "L"
       =>      16      31      -Init           C2+     初期化のためには 50mμs以上の"L"パルスをセット
       =>      17      36      -Select         C3-     プリンタ選択のためには"L"をセット
       ==      18-25   19-30,  Ground

  2.2.  リレーによる制御

  誰でも作れる、一番簡単な回路ならこれだ ―

                                Vcc
                                 |
                                 +------+
                                 |    __|__
                              リレー   /^\  ダイオード 1N4002
                              コイル  /---\
                                 |      |
                                 +------+
                                 |
                              | /
                    4.7K    B |/  C
  パラレルポート >-\/\/\/\/---|        NPN トランジスタ: BC547A or 2N2222A
  データピン                  |\  E
                              | V
                                |
  パラレルポート >--------------+
  グランドピン                  |
                             グランド(GND)

  リレーの種類(だいたい5Vか12V)にそった電圧とVccを接続すること。当り前だ
  けど、リレーの仕様はコーヒーメーカーに対して適切にすべきだろう。

  よくコレクタ(C)の代わりにエミッタ(E)に入れるように、トランジスターの後
  にリレーを置く傾向がある。これはトランジスタに不要なバイアスを加えるこ
  とになるので、まずい実装である。まずいコーヒーができるだろう。:-) ダイ
  オード1N4002 は、リレーの電流からトランジスタを保護するのに役立つ。ダ
  イオードを使用しないと、トランジスタは黒くなって臭いがしてくるだろう‥
  ‥

  2.3.  トライアックによる制御 その１

  ただ簡単な回路を望んでるだけなら、SC141D のような汎用のトライアックと
  いっしょに接続して、モトローラのトライアックドライバ MOC301012 を使う
  ことができる。この方法は外部電源を必要としない利点がある。

  無誘導負荷のための回路 ―

             270     1 +-------+ 6    180
       +5v -VAVAVA-----+       +----VAVAVA-----+-------------- Line Hot
                     2 |  MOC  |               |
       TTL in ---------+ 3012  +nc            VA  SC141D
                       |       | 4           / |
                     nc+       +------------/  |
                       +-------+               +----\/\/\/---- Line Neutral
                                                     LOAD

  もし 220V の電圧で働かせるつもりなら、3021 がいいだろう。誘導負荷は、
  バイパスキャパシタが入った電気伝導で使われるべきだ。モトローラ アプリ
  ケーションノートAN-780を参照。コーヒーメーカーは、主に抵抗負荷で(モー
  ターのみたいな)誘導性ではない。でも、あなたのはどうかな‥‥

  2.4.  トライアックによる制御 その２

       +5VDC
       |    180                      180            2.2k
       +---/\/\/\----+-----+   +----/\/\/-+--/\/\/\---+-------> 120V
                     |    1|   |6         |           |         Hot
                     |    +=====+         |           | MT1
                     |    | MC  | TRIAC   |          +-+
                     |    | 3032| Driver  |        G | | TRIAC
                     |    +=====+         |         /| |
                     \    2|   |4         |        / +-+
              2N3904  |----+   |          |        |  | MT2
                     /     |   +--------- | -------+  |
                    V      \              |        |  |
                    |      /              |        \  |
                    |      \ 43    .01u  ---   10k /  |
                    |      /       500V  ---       \  |
                    |      |              |        /  |
                    +------+              |        |  |            Neutral
                    |                     +--------+--+---o    o--> 120V
                    /                                      load
           >-/\/\--|  2N3904
                    \
                     V
                     |
                    ---
                   ///
       220Vで使う為には抵抗を換えなければならない。

  回路の説明―

  MC3032 は、フォトカプラ トライアック ドライバである。180Ω の抵抗は、
  フォトカプラ内にあるLEDの電流を設定する。適切な電流(例えば 15mA)がもし
  必要なら、その抵抗の値を変えること。

  負荷のないこの回路でテストできないことに注意しよう。トライアックは、交
  流電圧源に接続されていないかぎりスイッチしないだろう。だから、交流電源
  を加えなかったり負荷がない状態にあっては簡単にスイッチングのテストを行
  うことはできない。.01 キャパシタの 500V 耐圧に注意。

  3.  ソフトウェア

  3.1.  ソフトウェア

  以下のような機能を持った実行プログラム を設計するべきだろう。

  o  ioperm コマンドでカーネルコールすることによって、 I/O アドレス空間
     を使うために許可を得る。例えば、ioperm(BASE, range ,1); となる。

  o  パラレルポートを 電圧 0-5V にするために、出力要求命令を実行する。例
     えば、outb(1,BASE);  となる。

  o  コーヒーが用意される十分な時間を待機する。コマンドラインで確認する
     ことで時間が読めるなら親切だな。

  o  その次にコーヒーメーカー電源を切る― outb( 0 , BASE );

  o  終了前に、ioperm(BASE, range, 0); を使ってパラレルポートを返すべき
     だろう。

     /dev/lp0 なら BASE = 0x3bc , /dev/lp1 なら BASE = 0x378 , /dev/lp2
     なら BASE = 0x278 , range=8 に変更するべし。

  そのプログラムを setuid しておけば、だれもがコーヒーを飲めるので、より
  親切だろうね。

  3.2.  デバイスドライバ

  kernel hacker's guide を読んで、デバイス ドライバを実装する。 (それは
  ユーザ空間にできるだろうと私は考えている。) アップデートの度にカーネル
  コンパイルしなくていいように、モジュールとしてコンパイルして下さいね。
  次のように書く―

  echo cappuccino >/dev/coffee

  すると、１分で熱いコーヒーができるだろう。 /dev/coffee に許可を与える
  のを忘れないことだ。それは root だけにしかコーヒーを作ることを望まない
  か否かに依存する。

  この方法の利点は、パラレルポートの ACK を使ってコーヒーメーカーからの
  フィードバックをサポートすることで、賢いコーヒーメーカーなら割り込みを
  かけることが可能だ、という点にある。

  それは宿題とする。

  3.3.  インターネットとの接続

  C プログラムを書いたことがあるなら(前述)、コーヒーメーカーを ON/OFF す
  る簡単なCGIスクリプトを書くだけでよい。どうやってコーヒーを作るかを説
  明して、それらを apache web server に置いたら、きっと素敵なウェブペー
  ジが書けるだろう。

  4.  飲みすぎの症状

  o  興奮

  o  神経過敏

  o  不眠症

  o  瀕脈や心臓不整脈

  o  食欲不振

  o  落ち着かない状態

  5.  拡張

  我々のアイデアは―

  o  ここに述べた全てのハードウェアおよびソフトウェアは、トースト、肉、
     アップルパイ、その他をサポートするように拡張することができるだろ
     う。

  o  ８機によるコーヒーメーカー クラスタ。どれかが空になっても、安定して
     コーヒーが飲めるようになるんだ。もちろん、適したできばえになる。

  o  並列ベクトル処理コーヒーメーカーが次にリリースされるだろう。

  o  もし、可能な限り自動化を達成したいなら、水の量、温度、コーヒーの量
     を制御できるように、さらに回路やセンサを必要とするだろう。

  o  近い将来、SNMP を実装するだろう。

  o  115Kbps シリアル通信コーヒーメーカー

  6.  参考文献

  o  http://daisy.uwaterloo.ca/~alopez-o/caffaq.html これはインターネッ
     トの Coffee-FAQ だ。

  o  http://lonestar.texas.net/~andrew/f_pc_.htm アスキーコードでの多く
     の回路がある。それらの幾つかはパラレルポートに関するものだ。

  o  http://shell.rmi.net/~hisys/parport.html パラレルポートについて詳し
     く知りたいが、わざわざ質問したくないなら。

  o  http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming 人気のオ
     ペレーティングシステム Linux での I/O ポートのプログラミング

  o  http://www.redhat.com:8080/HyperNews/get/khg.html あなた独自のデバ
     イストライバを書くための How to だ。さあ書いてみよう!

  o  http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html エ
     レクトロニクスが好きな者なら、Tomi Engdahl のウェブページは -必見-
     である。

  o  http://www.yahoo.com/Computers_and_Internet/Internet/
     Entertainment/Interesting_Devices_Connected_to_the_Net/Coffee_Machines/
     コーヒーメーカー オンライン。あいにく確かめてません。

  o  http://www.cs.su.oz.au/~bob/coffee.html This coffee-machine offers
     only cappuccino. It should be upgraded!  このコーヒーメーカーはカプ
     チーノだけを提供する。そんなのは改善されるべきだろう！

  o  http://einstein.et.tudelft.nl/~janssen/ オランダ産ホットコーヒー

  o  http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi

  o  http://www.cl.cam.ac.uk/coffee/coffee.html

  o  http://www.menet.umn.edu/coffeecam/

  7.  その他

  7.1.  序文

  このドキュメントは、「Linux でコーヒーが作れるか否か」という linux-
  greek-users メーリングリストでのちょっとした議論に端を発して、まずギリ
  シャ語で書かれたのです。それは "magaz" という Linux 関係の素晴らしいオ
  ンラインマガジンでの記事になりました― http://www.linux.gr/magaz magaz
  もギリシャ語です。念のため。

  7.2.  著者とメンテナンスに関すること

  私の名前は、Georgatos Photisといいます。まだまだ学生です。 Patras 大学
  で、情報学部コンピュータ工学科に在籍しています。普段は、ギリシャ語のド
  キュメントとウェブページのメンテナンスにひどく忙しいですが、読者が更新
  を望んでいてくれる限り、この HOWTO へのご意見を受け付けます。

  7.3.  著作権表示

  The casual copyright with everything you get with linux...  To find
  it, you'll have to read all of them and count the most common.
  Otherwise, no, you can't copy it.

  7.4.  Credits

  o  Christofer Colombus.  彼の実の名は、Cristobal Colon である。彼は、
     1492年に(ヨーロッパ人としては)最初にアメリカを発見した。そのアメリ
     カからコーヒーを運んだきた最初の人物だ。

     (訳者：後に Georgatos とのメールで知らされたことだが、コロンブスは
     チョコレートとタバコとジャガイモを運んだがコーヒーは違うということ
     だ。彼自身、それを後に知ったそうだ。)

  o  Kostas Lialiambis は、大胆にも Linux Box でコーヒーはできないと言っ
     た人物である。

  o  Panagiotis Vrionis、Yannakopoulos Haralambos、興味とユーモアを私に
     与えてくれた。

  8.  訳者より

  翻訳に関するご意見ご感想は、近藤健治 <m99108@ecip.osakac.ac.jp> までお
  願いします。著者によると、このドキュメントは近いうちに更新されるそうで
  す。その時は日本語も更新したいと思います。

  翻訳に際し、下記の方々にアドバイスを頂きました。ありがとうございまし
  た。

  藤原 輝嘉さん   <fjwr@mtj.biglobe.ne.jp>
  菊谷 誠さん     <kikutani@sprintmail.com>
  日下部 陽一さん <void@merope.opus.or.jp>
  水原 さん       <mizuhara@vienna.coup.rim.or.jp>
  佐野 武俊さん   <xlj06203@nifty.ne.jp>
  森本 淳さん     <morimoto@xantia.citroen.org>
  武井 伸光さん   <tak@Polytype.cc.kochi-u.ac.jp>
  神森 豊さん     <utaka@intercity.or.jp>

