# Coffee HOWTO

## Georgatos Photis gef@ceid.upatras.gr
v0.5, 15 Stycznia 1998
Wersja polska: Leszek Urbański tygrys@fidonet.org.pl
v1.0, 4 Sierpnia 1998

Jedna z najbardziej zastanawiających uwag o oprogramowaniu, które kiedykolwiek słyszałem - czy ten lub inny program może zrobić kawę. Linux POTRAFI ją zrobić. I smakuje doskonale! Od długiego czasu ludzkość zastanawia się, czy komputery potrawią robić kawę... Ludzie potrzebują kawy, żeby obudzić się i nie zasypiać przed komputerem przez długi czas. Każdy wie, że najlepsze programy pisze się w nocy... Głównym problemem jest kontrolowanie ekspresu do kawy komputerem, tak żeby można było sterować go programowo. Ogólnie oznacza to implementację przełącznika WŁ/WYŁ w obwodzie kontrolującym zasilanie ekspresu do kawy. Ten dokument został napisany w standardzie ISO-8859-2.

## 1. Menu

## 1.1 Kawa francuska

Popularna kawa wśród programistów, ponieważ nie wymaga długiego przygotowania i nadzoru, tak jak programy komercyjne. Jej doskonały smak zainspirował tysiące programistów do napisania wyśmienitych programów, napisanych w pierwszych godzinach dnia. Windowsy na przykład zostały napisane o 5:00 rano, dzięki tej kawie. Wynik gwarantowany.

## 1.2 Nescaffe

Nescaffe jest dosyć mocną kawą, gotowaną przez nalewanie gorącej wody do mieszaniny kawy, cukru i wody. Zazwyczaj powinno się brać jedną łyżkę kawy i jedną łyżkę cukru, oraz trochę wody w celu zmieszania. W tym czasie powinna zagotować się gorąca woda. Wtedy zmieszaj ją z resztą - możesz dodać mleka. Chociaż możesz używać czegoś prostszego niż ekspres do kawy do zagotowania wody, wiele razy widziałem powyższą procedurę.

## 1.3 Frappe

Popularna wersja powyższej kawy. Właściwie nie jest potrzebny ekspres do kawy, a lodówka do otrzymania zimnej wody i kostek lodu.

## 1.4 Freddo

Trudny przepis. Przeczytaj coffe-faq (zobacz odnośniki)

## 1.5 Cappucino (do dodania)

## 1.6 Espresso (do dodania)

## 2. Układ elektroniczny

Ogólny schemat wygląda tak:

> `

>     --------- 0-5V  --------- ~220V  -----------------
>     |  PC   |===>===| Obwód |========|Ekspres do kawy|
>     ---------       ---------        -----------------

> `

Celem jest wzięcie napięcia kontrolującego z komputera, które będzie napędzać elektrycznie odizolowany układ z przekaźnikiem lub triakiem. Jeżeli twój ekspres do kawy jest duży (więcej niż 200W), musisz wybrać przekaźnik, a jeśli nie, wystarczy triak.

Wszystkie układy tu przedstawione zostały przetestowane raz albo więcej, ale TY ODPOWIADASZ ZA SKUTKI UŻYWANIA. Jeżeli nie masz doświadczenia z elektroniką, NIE baw się z tym, inaczej może ci coś nie wyjść...

Powinieneś być bardzo ostrożny przy eksperymentach z 220V - można używać odpowiedniego bezpiecznika.

## 2.1 Napięcie kontrolujące 0-5V z komputera

Oto prosty przykład pobrania napięcia 0-5V z portu równoległego komputera.

> `

>        Widok od tyłu
>        Męskie złącze   -----    Pin 10 - ACK
>        DB25            |   |    Pin  9 - D7
>                        |   |                           Pin 2 - D0
>     ~Strobe            v   v                           v   Pin 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     /
>           \___________________________________________________/

> `

Pin 1 to ,,Strobe'' (logika odwrotna)

Piny 2-9 to sygnały SZYNY DANYCH (DATA BUS), dokładnie to, co zostało wpisane do (hmm ,,klamek''??? (latches) - przyp. tłum.) komendą OUTB.

Pin 10 to sygnał potwierdzenia (ACK) sterowany przez ciebie, tak żebyć mógł wyprodukować przerwanie.

Piny 18-25 są zwarte i jest to uziemienie (GND).

Dokładniej:

> `

>     <= we  pin    Główny  Nazwa
>     => wy  DB25   pin     sygnału   Bit  Uwagi
>     --------  ----   ------  -------   ---   -----------------------
>     =>      1       1     -Strobe   C0-   Ustaw niskie napięcie >0.5us do wysył.
>     =>      2       2     Dane 0    D0    Ustaw na pierwsze znaczące dane
>     =>      3       3     Dane 1    D1    ...
>     =>      4       4     Dane 2    D2    ...
>     =>      5       5     Dane 3    D3    ...
>     =>      6       6     Dane 4    D4    ...
>     =>      7       7     Dane 5    D5    ...
>     =>      8       8     Dane 6    D6    ...
>     =>      9       9     Dane 7    D7    Ustaw na ostanie znaczące dane
>     <=     10      10     -Ack      S6+IRQ Niskie napięcie ~ 5uS, po zaakcept.
>     <=     11      11     +Busy     S7-   1 Dla Zajęte/Offline/Błąd
>     <=     12      12     +PaperEnd S5+   1 Dla braku papieru
>     <=     13      13     +SelectIn S4+   1 Dla wybranej drukarki
>     =>     14      14     -AutoFd   C1-   Ustaw na 0 dla LF
>     <=     15      32     -Error    S3+   0 dla Błędu/Offline/Końca papieru
>     =>     16      31     -Init     C2+   Ustaw niskie napięcie > 50uS do inicjalizacji
>     =>     17      36     -Select   C3-   Ustaw na 0 do wybrania drukarki
>     <==>18-25   19-30  GND

> `

## 2.2 Kontrolowanie za pomocą przekaźnika

Najprostszy możliwy do zbudowania układ to:

> `

>                                      Vcc
>                                       |
>                                  +---------+
>                                  |       __|__
>                             Przekaźnik    /^\  Dioda 1N4002
>                                  |       /---\
>                                  |         |
>                                  +---------+
>                                  |
>                                | /
>                        4.7K   B|/ C
>     port równoległy >-\/\/\/\/-|       Tranzystor NPN: BD547A lub 2N2222A
>                                |\  E
>                                | V
>                                  |
>     pin GND portu równ. >--------+
>                                  |
>                              Uziemienie

> `

Połącz Vcc z napięciem równym napięciu przekaźnika (zazwyczaj 5 lub 12V). Oczywiście parametry przekaźnika powinny być poprawne dla twojego ekspresu.

Barmani często umieszczają przekaźnik ZA tranzystorem, na emiterze (E) zamiast na kolektorze (C). Nie jest to dobre, ponieważ obciąża tranzystor i może być powodem zrobienia złej kawy :-). Dioda 1N4002 jest potrzebna do ochrony tranzystora przed napięciami przekaźnika. Jeśli jej nie użyjesz, tranzystor stanie się ciemniejszy i zacznie dymić...

## 2.3 Kontrolowanie triakiem - sposób 1

Jeżeli potrzebujesz prostego obwodu, użyj sterownika triaków Motoroli - MOC301[012], razem z triakiem ogólnego zastosowania, takim jak SC 141D. Metoda ta ma zaletę - nie musisz stosować dodatkowego źródła zasilania.

Dla nieindukcyjnych ładunków:

> `

>             270     1 +-------+ 6    180
>       +5v -VAVAVA-----+       +----VAVAVA-----+-------------- Linia gorąca
>                     2 |  MOC  |               |
>       TTL in ---------+ 3012  +nc            VA  SC141D
>                       |       | 4           / |
>                     nc+       +------------/  |
>                       +-------+               +----\/\/\/---- Line Neutralna
>                                                  OBCIĄŻENIE

> `

Jeżel będziesz pracował z napięciem 220V, wybierz 3021. Do obciążeń indukcyjnych powinny być stosowane kondensatory obejściowe, zobacz ,,Motorola Application Note AN-780. Ekspresy do kawy są raczej obciążeniami opornościowymi, a nie indukcyjnymi (jak silniki), ale kto wie, jaki jest twój...

## 2.4 Kontrolowanie triakiem - sposób 2

> `

>     +5VDC
>     |    180                      180            2.2k
>     +---/\/\/\----+-----+   +----/\/\/-+--/\/\/\---+-------> 120V
>                   |    1|   |6         |           |         Gorąca
>                   |    +=====+         |           | MT1
>                   |    | MC  | Sterown.|          +-+
>                   |    | 3032| triaków |        G | | TRIAK
>                   |    +=====+         |         /| |
>                   \    2|   |4         |        / +-+
>            2N3904  |----+   |          |        |  | MT2
>                   /     |   +--------- | -------+  |
>                  V      \              |        |  |
>                  |      /              |        \  |
>                  |      \ 43    .01u  ---   10k /  |
>                  |      /       500V  ---       \  |
>                  |      |              |        /  |
>                  +------+              |        |  |            Neutralna
>                  |                     +--------+--+---o    o--> 120V
>                  /                                      load
>      >-/\/\--|  2N3904
>                  \
>                   V
>                   |
>                  ---
>                 ///

> `

Powinieneś zmienić rezystory na odpowiednie dla 220V.

Opis obwodu:

MC2032 jest optoizolacyjnym sterownikiem triaka. 180-omowy rezystor zapewnia napięcie dla diody LED w optoizolatorze. Zmień wartość rezystora, jeśli to potrzebne, żeby uzyskać poprawny prąd (np. 15mA).

Zauważ, że nie możesz testować tego układu bez obciążenia. Triak nie przełączy się, jeżeli nie będzie podłączony do źródła napięcia zmiennego, nie możesz więc testować go bez użycia napięcia AC i obciążenia. Zauważ napisz ,,500V'' na obudowie kondensatora .01.

## 3. Oprogramowanie

## 3.1 Program obsługi

Będziesz musiał napisać program wykonujący następujące czynności:

- Zdobywa uprawnienia do używania przestrzeni adresowej I/O, przez odwołanie do jądra komendą ioperm, np. ioperm(PODSTAWA, zakres, 1);
- Wykonuje instrukcję ustawiającą napięcie 0-5V w porcie równoległym, np. outb(1, PODSTAWA);
- Czeka, aż kawa będzie gotowa. Byłoby nieźle, jeżeli mógłby odczytać ten czas z linii komend.
- Wyłącza wtedy ekspres: outb(0, PODSTAWA);
- Przed końcem, powinien oddać port - ioperm(PODSTAWA, zakres, 0);

Zmień PODSTAWĘ na 0x3bc dla /dev/lp0, 0x378 dla /dev/lp1 i 0x278 dla /dev/lp2, zakres na 8.

Dobrze byłoby dać programowi prawa setuid, żeby każdy mógł pić kawę! (UWAGA: nie ustawiaj tych praw w ,,usieciowionym'' komputerze, grozi to pożarem itd. wywołanym przez nieuprawnionych użytkowników! - przyp. tłum.)

## 3.2 Sterownik

Przeczytaj Kernel Hacker's Guide i zaimplementuj sterownik (sądzę, że może on być stosowany w trybie użytkownika). Skompiluj go jako moduł, żebyś nie musiał kompilować jądra przy każdym uaktualnieniu. Napisz:

> `

>     echo cappucino > /dev/coffee

> `

Uzyskasz filiżankę gorącej kawy w minutę. Pamiętaj, żeby dać prawidłowe prawa dostępu do `/dev/coffee`, zależnie od tego, czy chcesz, żeby kawę robił tylko root, czy nie.

Zaletą tej metody jest obsługa sprzężenia zwrotnego z ekspresu do kawy przez użycie ACK portu równoległego tak, żeby ,,mądre'' ekspresy mogły tworzyć przerwanie.

Zrób to jako pracę domową.

## 3.3 Łączenie się z Internetem

(zalecam implementację tej technologii tylko w sieci LAN, z powodu bezpieczeństwa - przyp. tłum.)

Jeżeli napisałeś program w C (objaśnienia powyżej), wystarczy zrobić prosty skrypt CGI włączający i wyłączający ekspres do kawy. Powinieneś napisać kilka ładnych stron WWW wyjaśniających jak zrobić kawę i umieścić je na serwerze WWW Apache...

## 4. Oznaki przedawkowania

- podniecenie
- nerwowość
- bezsenność
- częstoskurcz lub arytmia serca
- zaburzenia żołądkowe
- niepokój, pobudzenie

## 5. Rozszerzenia

Oto nasze pomysły:

- Opisany tutaj sprzęt i oprogramowanie może zostać rozszerzone do obsługi grzanek, wołowiny, jabłecznika itp.
- Zestaw ośmiu ekspresów. To pozwoli ci przyrządzić kawę nawet wtedy, gdy jeden jest już w użyciu. Będzie to oczywiście mieć wpływ na wydajność. (może RAIC - Redundant Array of Independent Coffee-machines :-))))) - przyp. tłum.)
- Ekspres do kawy o równoległym wektorze będzie w przyszłym wydaniu.
- Jeżeli będzie ci potrzebna maksymalna automatyzacja, wymagane będą dodatkowe układy i czujniki, żebyś mógł kontrolować poziom wody, temperaturę i jakość kawy.
- W bliskiej przyszłości zaimplementujemy obsługę SNMP.
- Szeregowy ekspres do kawy na 115Kbps.

## 6. Odnośniki

- http://daisy.uwaterloo.ca/~alopez-o/caffaq.html Internet Coffee-FAQ
- http://lonestar.texas.net/~andrew/f_pc.htm Wiele układów w ASCII. Niektóre z nich są przeznaczone dla portu równoległego.
- http://shell.rmi.net/~hisys/parport.html Wszystko, co chcielibyście się dowiedzieć o porcie równoległym, ale boicie się zapytać.
- http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming Programowanie portów I/O w systemie Linux.
- http://www.redhat.com:8080/HyperNews/get/khg.html Jak napisać własne sterowniki urządzeń. Zrób to!
- http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html Strona Tomi'ego Engdahl'a jest KONIECZNA do zobaczenia przez każdego lubiącego elektronikę.
- http://www.yahoo.com/Computers_and_Internet/Internet/Entertainment/Interesting_Devices_Connected_to_the_Net/Coffee_Machines/ Ekspresy do kawy on-line. Niestety, nie ma testów.
- http://www.cs.su.oz.au/~bob/coffee.html Ten ekspres do kawy robi tylko cappucino. Powinien być rozszerzony!
- http://einstein.et.tudelft.nl/~janssen/ Gorąca kawa z Holandii.
- http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi
- http://www.cl.cam.ac.uk/coffee/coffee.html
- http://www.menet.umn.edu/coffeecam/

## 7. Inne

## 7.1 Wstęp

Ten dokument był pierwotnie napisany w języku helleńskim (greckim), ewoluując z małej debaty na liście greckich użytkowników Linuxa, czy Linux potrafi zrobić kawę, czy nie. Był on artykułem w naszym pięknym magazynie Linuxowym ,,magaz'': http://www.linux.gr/magaz. Pamiętaj, że jest on napisany po grecku.

## 7.2 Autorstwo i nadzór

Nazywam się Georgatos Photis i jestem (jeszcze-nadal może przez długi czas) studentem wydziału Inżynierii Komputerowej i Informatyki na Uniwersytecie Patras. Jestem zazwyczaj dosyć zajęty grecką dokumentacją i stronami WWW, ale mogę przyjmować dodatki do tego HOWTO, jeżeli nie będziesz niecierpliwy.

## 7.3 Prawa autorskie

Standardowe prawa autorskie wszystkiego od Linuxa... Przeczytaj wszystkie i wybierz najważniejsze. Inaczej nie możesz kopiować tego dokumentu.

## 7.4 Dodatkowi autorzy

- Krzysztof Kolumb Jego prawdziwe imię to Cristobal Colon. On jako pierwszy przywiózł kawę z Ameryki, która została odkryta przez niego (dla Europejczyków) w roku 1492.
- Kostas Lialiambis był pierwszym, który odważył się powiedzieć, że nie może zrobić kawy za pomocą jego maszyny Linuxowej!
- Panagiotis Vrionis i Yannakopoulos Haralambos podrzucili mi interesujące i humorystyczne uwagi.

## 8. Od tłumacza

Jeżeli znajdziesz jakieś błędy, daj mi znać. :-)