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>