COFFEE-HOWTO --如何用 Linux 来煮咖啡 <author>作者:Georgatos Photis <<htmlurl url="mailto:gef@ceid.upatras.gr?subject=COFFEE-HOWTO" name="gef@ceid.upatras.gr">><newline> 译者:CC <<htmlurl url="mailto:ccemail@21cn.com?subject=COFFEE-HOWTO" name="ccemail@21cn.com">> <date>v0.5, 15 January 1998 翻译日期:5 June 2000 <abstract> 我听过关于软件最让人迷惑的评论是它能不能用来煮咖啡,不过,Linux 确实能做到这一点,而且煮出来的咖啡美味可口! <p> 在很长一段时期,人类很想知道怎样才能让电脑来煮咖啡..... 人们需要咖啡来保持清醒,这样才能长时间坐在电脑前面。因为每个人都知道在晚上编程会更好。 <p> 最主要的问题是怎样用电脑来控制咖啡机,然后才能用软件来控制。这通常意味著 一个 ON/OFF 开关被用来控制咖啡机电源。 <sect>选单 <sect1>French <p>由于不需要很多照料,这种咖啡在程序员中很流行,就象现在很多的商业软件一 样。它绝佳的口味使众多的程序员在编写令人难以置信的软件时激发了灵感。而这些 软件都是在一天中的头几个小时写的,举个例子,由于偏爱这种咖啡,Windows 就 是在凌晨5:00写的!效果绝对保证! <sect1>Nescaffe <p> Nescaffe 是一种比较浓烈的咖啡,由咖啡、糖、少量水混合在热水里调制而成。 通常 1 汤匙咖啡和 1 汤匙糖,再加一点点水混合在一起。其间,还要保证水是沸腾 的,一旦水足够热,就把它们倒入,再加点牛奶味道可能更好一点。 尽管你能用一些比咖啡机更简单的东西来煮,我已经看到过这种方案好多次了...... <sect1>frappe <p>这是上面提到过的咖啡的一种流行变种。 实际上,它不用咖啡机,反而需要一个冰箱来获得冷水和冰块。 <sect1>freddo <p>这个比较难,看一下 Coffee-Faq (参考) <sect1>cappuccino (待续) <sect1>espresso (待续) <sect>电路 <p> 总的图解如下: <tscreen><verb> --------- 0-5V --------- ~220V ---------------- | PC |===>===|电子回路|========| 咖啡机 | --------- --------- ---------------- </verb></tscreen> <p>我们的想法是从电脑输出一个控制电压,然后通过继电器或者双向晶闸管电路驱动被电隔离的电子回路。 <p>你必须选择一个继电器电路,如果你有一个大的咖啡机(功率大于200 W ),你还可以用一个双向晶闸管电路。 所有列出的电路都至少被测试过一次,不过使用者自己承担所有的后果。 如果你对电子学一点没经验,你不应尝试这些,要不然,你会有一个糟糕的结局... <p>对 220V 电压的操作应该非常小心,而且还应用上一根合适的保险丝。 <sect1>从电脑提取0-5V电源 <p> 下面是一个从电脑并口提取0-5V电源的例子: <tscreen><verb> 公 DB-25 ----- 针脚 10 - ACK(应答) 连 接 器 | | 针脚 9 - D7 后 视 图 | | 针脚 2 - D0 v v v 针脚 1 -滤波 ____________________________________________________________ / \ \ 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 / \______________________________________________________/ </verb></tscreen> <p>针脚 1 滤波 (反逻辑) <p>针脚 2-9 是数据总线的信号,通过一个 OUTB 命令发信给并口的门闩线路。 <p>针脚 10 是应答信号( ACK ),由你控制,所以你可以产生一个中断信号给 CPU 。 <p>针脚 18-25 被短路了,都是地线 ( GND ) 。 <p>详细地说明如下: <tscreen><verb> <=发送 DB25 Cent 信号 寄存 =>接收 pin pin 定义 器位 功能注释 ------ ---- ---- -------- --- ----------------------------- => 1 1 -滤波 C0- 设置低位脉冲 > 0.5us 发送 => 2 2 数据线0 D0 设置最小有效数据 => 3 3 数据线1 D1 ... => 4 4 数据线2 D2 ... => 5 5 数据线3 D3 ... => 6 6 数据线4 D4 ... => 7 7 数据线5 D5 ... => 8 8 数据线6 D6 ... => 9 9 数据线7 D7 设置最大有效数据 <= 10 10 -应答 S6+ IRQ 接受应答后,低位脉冲 5us <= 11 11 +忙 S7- 忙/出错/断线时高位 <= 12 12 +无纸 S5+ 无纸时高位 <= 13 13 +已选择 S4+ 已选择打印机时高位 => 14 14 -自动注入 C1- 低位时自动注入一行 <= 15 32 -错误 S3+ 错误/断线/无纸时低位 => 16 31 -初始化 C2+ 设置低位脉冲 > 50us 初始化 => 17 36 -选择 C3- 设置低位选择打印机 == 18-25 19-30, 地线 </verb></tscreen> <sect1>用继电器电路控制 <p> 最简单的电路如下: <tscreen><verb> Vcc | +------+ | __|__ 继电器 /^\ 二极管 1N4002 线圈 /---\ | | +------+ | | / 4.7K B |/ C 并口数据脚>-\/\/\/\/---| NPN 三极管: BC547A or 2N2222A |\ E | V | 并口地线 >--------------+ | 接地 </verb></tscreen> Vcc 的选择应同所选继电器型号的电压一样( 通常是 5V 或者是 12V )。很明显,继电器的规格应该由咖啡机的功率决定。 <P> 酒保们通常倾向于在三极管之后再放置继电器,然后用发射极( E 脚 ) 代替集电极( C 脚 ) 连接继电器,这是一个错误的经历,因为三极管被错误的偏置了,结果是得到了一杯糟糕的咖啡 :-)。二极管 1N4002 对保护三极管避免被从继电器流出的电流烧坏很有帮助,如果你不用它,三极管很可能会变黑,发臭,且被烧坏。 <sect1>用双向晶闸管电路控制 #1 <p> 如果你只想要一个简单的电路,你可以选用摩托罗拉的 MOC301[012] 双向晶闸管驱动器,它跟通常用的 SC141D 双向晶闸管一起搭配使用。这种电路有个优点就是它不需要额外的电源供给。 <p>以下是为非感应负荷设计的电路: <tscreen><verb> 270 1 +-------+ 6 180 +5v -VAVAVA-----+ +----VAVAVA-----+-------------- Line Hot 2 | MOC | | TTL in ---------+ 3012 +nc VA SC141D | | 4 / | nc+ +------------/ | +-------+ +----\/\/\/---- Line Neutral LOAD </verb></tscreen> <p>如果你正在使用 220V 电压,MOC3021 可能更好。 感性负载应该和旁路电容相连,查阅 <em>摩托罗拉应用手册 AN-780</em>. 咖啡机一般是非感性负载(就象马达一样),但谁知道你的会是什么样的..... <sect1>用双向晶闸管电路控制 #2 <p> <tscreen><verb> +5VDC | 180 180 2.2k +---/\/\/\----+-----+ +----/\/\/-+--/\/\/\---+-------> 120V | 1| |6 | | Hot | +=====+ | | MT1 | | MC | 双向晶闸| +-+ | | 3032| 管驱动器| G | | 双向晶闸管 | +=====+ | /| | \ 2| |4 | / +-+ 2N3904 |----+ | | | | MT2 / | +--------- | -------+ | V \ | | | | / | \ | | \ 43 .01u --- 10k / | | / 500V --- \ | | | | / | +------+ | | | Neutral | +--------+--+---o o--> 120V / load >-/\/\--| 2N3904 \ V | --- /// 你应该以 220V 的标准调整电阻值。 </verb></tscreen> <p>电路详解: <P>MC3032 是光隔离双向晶闸管驱动器。 180 欧姆的电阻设定了光隔离器里面的发光二极管的电流。如果需要,你可以调整这个电阻从而得到一个合理的电流。(比如 15 mA)。 <P> 注意你不能在没有负载的情况下测试电路。除非连上了交流电源,双向晶闸管不会切换,所以你也不能在有交流电源和负载的情况下测试它的简单切换,注意这个 .01u 的电容要达到 500V 的耐压。 <sect>软件 <p> <sect1>软件 <p> 你必须得到一个有以下功能的可执行程序: <itemize> <item>通过<bf> ioperm </bf>命令,例如,<em>ioperm ( BASE, range , 1),</em>调用内核,得到 I/O 地址空间的使用权; <item>通过一个发送请求指令,例如,<em> outb(1, BASE ) </em>,设定并口电压为 0-5V; <item>等待足够的时间让咖啡煮好,让时间参数在命令行中被读取是一件很好的事情; <item>然后发送 out(0, BASE) 指令关掉咖啡机; <item>在结束之前还应归还并口 I/O 地址的使用权,<em> ioperm(BASE,range,0);</em> </itemize> 改变 /dev/lp0 的基地址为 0x3bc ,/dev/lp1 为 0x378 ,/dev/lp2 为 0x278,范围( range ) 为 8 。 <p>如果在这个程序中再使用 setuid 会更好,因为每个用户都可以用 Linux 煮咖啡了! <sect1>设备驱动程序 <p> 参考 <htmlurl url="http://www.redhat.com:8080/HyperNews/get/khg.html" name="kernel hacker's guide">, 安装一个设备驱动程序 (it could even be user space i think). 请以模块(module)方式编译,这样以后每次更新的时候也用不著重新编译内核了。 然后打入: <verb> echo cappuccino >/dev/coffee </verb> 1 分钟后你就会有一杯热咖啡,注意 /dev/coffee 要设置合适的权限,具体看你是否只想让超级用户煮咖啡了。 <p>这种方法有个优点就是它能用并口的 ACK 针脚来实现从咖啡机的反馈支持。所以一个智能的咖啡机有时还会中断一下。 <p>把它当作课外作业 <sect1>通过 Internet 连接 <p> 如果你已经有了这个 C 程序(如上),你只需写一个 CGI 脚本就可以开关咖啡机了。 你还需做几个漂亮的网页,解释一下怎么煮咖啡,然后再把它挂到<bf> apache </bf>服务器上..... <sect>用量过多的征状 <p> <itemize> <item>兴奋 <item>焦急 <item>失眠 <item>心跳加速 或者 cardiac arhythmia <item>肠胃不好 <item>烦乱不安 </itemize> <sect>功能扩展 <p>下面是我们的想法: <itemize> <item>这儿提到的所有的软硬件都可以被用来扩充功能,所以它还能支持烤面包, beaf, applepies, 等等. <item>串集8台咖啡机,这会让你能在一台已经启动了的时候还能喝到咖啡,当然性能有点冲撞。 <item>平行无线控制咖啡机将在以后发布。 <item>如果你想让它尽可能得自动化,你还应再加一些电路和检测装置,这样你可以控制水流、温度、咖啡品质等等。 <item>在不远的将来,我们还会加上 SNMP 功能。 <item>115Kbps 的串口咖啡机 </itemize> <sect>参考 <p> <itemize> <item><htmlurl url="http://daisy.uwaterloo.ca/~alopez-o/caffaq.html" name="http://daisy.uwaterloo.ca/~alopez-o/caffaq.html"> 这是互联网上的<bf>Coffee-FAQ</bf> <item><htmlurl url="http://lonestar.texas.net/~andrew/f_pc_.htm" name="http://lonestar.texas.net/~andrew/f_pc_.htm"> 很多ASCII格式的电路。 有些是关于并口的。 <item><htmlurl url="http://shell.rmi.net/~hisys/parport.html" name="http://shell.rmi.net/~hisys/parport.html"> 关于并口的,不管什么你想知道却不敢问的东西都有 <item><htmlurl url="http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming" name="http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming"> 关于在 Linux 下 I/O 端口编程的。 <item><htmlurl url="http://www.redhat.com:8080/HyperNews/get/khg.html" name="http://www.redhat.com:8080/HyperNews/get/khg.html"> 怎样编写自己的设备驱动程序,来吧! <item><htmlurl url="http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html" name="http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html"> Tomi Engdahl 的主页,电子迷必看。 <item><htmlurl url="http://www.yahoo.com/Computers_and_Internet/Internet/Entertainment/Interesting_Devices_Connected_to_the_Net/Coffee_Machines/" name="http://www.yahoo.com/Computers_and_Internet/Internet/ Entertainment/Interesting_Devices_Connected_to_the_Net/Coffee_Machines/"> 咖啡机在线,不过没有测试的。 <item><htmlurl url="http://www.cs.su.oz.au/~bob/coffee.html" name="http://www.cs.su.oz.au/~bob/coffee.html"> 这种咖啡机只提供 cappuccino 。应该升级了! <item><htmlurl url="http://einstein.et.tudelft.nl/~janssen/" name="http://einstein.et.tudelft.nl/~janssen/"> 来自荷兰的咖啡。 <item>http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi <item>http://www.cl.cam.ac.uk/coffee/coffee.html <item>http://www.menet.umn.edu/coffeecam/ </itemize> <sect>其他 <sect1>序文 <P> 此文档最初是用希腊文写的,来自希腊 Linux 用户的一个关于 Linux 是否能 用来煮咖啡的讨论话题。在我们漂亮的 Linux 在线杂志 magaz 上归成文档: <htmlurl url="http://www.linux.gr/magaz" name="http://www.linux.gr/magaz">. 注意,杂志是希腊文的。 <sect1> 作者自述及文档维护 <P> 我叫 <htmlurl url="http://www.ceid.upatras.gr/~gef" name="Georgatos Photis">, 估计在很长一段时期都是 Patras 大学计算机工程与信息学系的学生。通常我会因文档和网页的维护而变的很忙,不过关于这个 HOWTO 的任何意见我都会处理,也不会让你等得太焦急了。 <sect1> 版权 <P> 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. <sect1>光荣榜 <p> <itemize> <item><htmlurl url="http://sunsite.unc.edu/expo/1492.exhibit/c-Columbus/columbus.html" name="Christofer Colombus">. 他真名叫 Cristobal Colon,是第一个把咖啡从美洲带到欧洲的人(1492)。 <item> Kostas Lialiambis 是一个敢说用 Linux 煮不了咖啡的人! <item> Panagiotis Vrionis, Yannakopoulos Haralambos, 给了我很多有趣滑稽的资料。 </itemize> </article>