old-www/HOWTO/text/Coffee

859 lines
29 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Coffee Making
Fotis Georgatos < gef@ceid.upatras.gr>
V1.0 2004-08-29
One of the most memorable comments about software ever said is whether
this or that piece of code can make coffee. Coffee is a world commod­
ity that is second only to oil. Linux DOES make coffee; and it tastes
good as well!
______________________________________________________________________
Table of Contents
1. Introduction
1.1 Copyright
1.2 Disclaimer
1.3 Version
1.4 Translations
1.5 Credits
1.6 What do you drink/smoke while writing this?
1.7 Feedback
2. Menu
2.1 French
2.2 Nescafe
2.3 Frappe'
2.4 Freddo
2.5 Espresso
2.6 Cappuccino
3. Hardware
3.1 Driving voltage 0-5V from the computer
3.2 Controlling with a Relay
3.3 Controlling with TRIAC #1
3.4 Controlling with TRIAC #2
4. Software
4.1 Programming
4.2 Device driver
4.3 Connecting with the Internet
5. Building the Turing Complete Coffee Machine
5.1 An adequate assembly language
5.2 Hardware and interfacing
5.3 Software
5.4 A minor criticism on the Turing Machine
6. Overdose symptoms
7. Expansions
8. Further Information
______________________________________________________________________
1. Introduction
For a long time humanity has been wondering how could a computer make
coffee...
People need coffee to wake up, and stay awake for a long time in front
of the computer. It is common wisdom that coding is better at night!
The main trick is interfacing a coffee machine to the computer, so
that it can be controlled by software. This HOWTO will show you how to
do so.
At first, it demonstrates an ON/OFF switch implemented as an
electronic circuit which controls the coffee-machine's power supply.
Another chapter will tell you the secrets of building intelligent,
Turing Complete suitable, coffee machines!
This HOWTO was initially written as part of a debate in the mailing
list linux-greek-users, on whether linux can make coffee or not. It
then became an article in our online magazine called magaz. Just in
case you wondered, magaz is in Greek and it will surely look like that
to you!
Enjoy.
1.1. Copyright
Copyright © 2004-08-29 by Fotis Georgatos. You are free:
· to copy, distribute, display, and perform the work
· to make derivative works
· to make commercial use of the work Under the following conditions:
Attribution. You must give the original author credit. Share
Alike. If you alter, transform, or build upon this work, you may
distribute the resulting work only under a license identical to
this one.
· For any reuse or distribution, you must make clear to others the
license terms of this work.
· Any of these conditions can be waived if you get permission from
the author.
1.2. Disclaimer
Use the information in this document at your own risk. I disavow any
potential liability for the contents of this document. Use of the
concepts, examples, and/or other content of this document is entirely
at your own risk.
All copyrights are owned by their owners, unless specifically noted
otherwise. Use of a term in this document should not be regarded as
affecting the validity of any trademark or service mark.
Naming of particular products or brands should not be seen as
endorsements.
You are strongly recommended to take a backup of your system before
major installation and backups at regular intervals.
1.3. Version
The Coffee HOWTO is now called Coffee Making HOWTO and heads for
release v1.0, which will first appear somewhere here:
http://fotis.home.cern.ch/fotis/Coffee.html.
It is about time for everyone to know that Coffee Making is just one
of the standard features that come for free with *any* Linux
distribution. Or, does SCO have a patent on that, too? Gee...
1.4. Translations
You should be able to easily find a translation of this or previous
versions of the Coffee Making HOWTO in the following languages:
· Chinese
· Japanese
· Russian
· Indonesian
· Italian
· Polish
and hopefully many more... (Spanish and Portugeuse anyone?)
1.5. Credits
· Ethiopia: Identified as the originating country of coffee.
· Coffee was popular in the Middle East for ages, until a failed
invasion of the Turks at the city of Vienna at 1683 left behind
sacks with strange brown beans nobody wanted:
http://www.vienna.cc/ekaffeeh.htm/.
· Kostas Lialiambis is the one who dared claim he can't make coffee
with his Linux box, back then in year 1997.
· Panagiotis Vrionis et al for giving me interesting and humorous
notes and let the ball roll in the early days.
· NUMEROUS people on the internet with additions and remarks. Thank
you all, really! Even though I might have not replied to your
email.
1.6. What do you drink/smoke while writing this?
Well, to the best of my knowledge, this is a dope-free work.
But, I can tell you the secret of the music playing on the background:
nearly any song spelled by Zampetas or Mpithikotsis (bouzouki and
such).
1.7. Feedback
For your online commentary of your own DIY Coffee Machine steer at
http://coffee.sf.net/.
If you still have comments to say, emails get lost these days, so why
not send me a postcard with a picture from your great hometown, adding
a recommendation of your favourite cafe' in the area?
Fotis Georgatos,
Aliartou 32,
TK 11142 Athens,
GREECE
PS.
· Your suggestions won't be wasted, I really tend to travel quite a
lot these days and might be around before your realize it.
· Yes, I have been in Amsterdam and even lived there for three years;
coffee shops generally don't account as cafe's!
· Surprise: I actually prefer chocolate and tea over coffee. ;-)
2. Menu
2.1. French
Popular coffee among programmers because it doesn't need a lot of care
and its cooking is streamlined; just like commercial software. Its
exciting taste has inspired thousands of programmers in writing
incredible software, written in the very first hours of a day. M$
Windows for example has been written at 5:00 o'clock in the morning,
only thanks to coffee! A similar result is guaranteed.
2.2. Nescafe
Nescafe is a rather strong coffee, made by pouring hot water in a
mixture of coffee, sugar and some water. You usually take 1 spoon of
coffee and 1 spoon of sugar with just a bit of water, to mix it. In
the meantime you should have the water boiling. As soon as the water
is hot enough, you mix them all together and preferably add condensed
milk. Although you could use something simpler than a coffee-machine
to boil the water, I have seen this done so several times...
2.3. Frappe'
A popular variation of the above mentioned coffee. Actually, you
don't need a sophisticated coffee-machine, rather a refrigerator for
cold water and ice-cubes. It is very popular in South Eastern Europe
during the warm summer months.
2.4. Freddo
This is a complicated one, read coffee-faq (read further information)
2.5. Espresso
Espresso is a very strong, italian sort of coffee. You serve it in
small cups (You ask why? See chapter: Overdose Symptomes) with one or
two pieces of lump sugar. To produce a good espresso you need fresh
grinded coffee beans, water, lump sugar and a special machine. These
machines boil the water and press the very hot steam through the
grinded coffee beans. You can buy a super-duper-automatic machine for
a lot of money. But a low cost machine is usable, too.
OK., lets start. Fill water in your machine. Let it become hot. In the
meantime fill about 1 teespoon of coffeepowder in the filterhandle of
your machine. Press the coffeepowder down. Not too much. Now the water
is at the right temperature. Attach the filterhandle to the machine
and let the machine work. After about 30 seconds you can serve a
delicate, hot espresso. It is fine after a good meal. You feel good
and can code for a few more hours.
2.6. Cappuccino
(See also chapter: Espresso) If you have a more profi-like machine,
you can use it, to froth milk with it. You need this feature to make a
creamy sort of coffee. It is easy to prepare. Put some frothed milk in
a coffee pot and fill it up with espresso. Then decorade with some
chocolade flakes. That's it.
3. Hardware
A generic diagram could look like this:
--------- 0-5V --------- ~220V ----------------
| PC |====>====|Circuit|==========|Coffee-Machine|
--------- --------- ----------------
The concept is that we take a controling voltage from the computer,
which drives an electrically isolated circuit with a Relay or Triac.
You must choose a Relay circuit, if you have a coffee-machine greater
than 200W. You can use a triac-based one if your coffee machine isn't
high power.
All circuits presented are tested, but the results and risks are YOUR
OWN RESPONSIBILITY. If you have no experience with electronics you
should NOT try building it on these, otherwise you may get a bad
one...
You should be very careful while experimenting with 220V, and using an
appropriate fuse is absolutely advisable.
3.1. Driving voltage 0-5V from the computer
Here is a simple example to get a voltage 0-5V from the parallel port
of the computer.
Back View ----- Pin 10 - ACK
Male DB-25 | | Pin 9 - D7
Connector | | Pin 2 - D0
v v v Pin 1 -
~Strobe
____________________________________________________________
/ \
\ 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 is Strobe (inverse logic)
Pins 2-9 is DATA BUS's signals, exactly what was written to the
parallel port's latches with an OUTB command.
Pin 10 is the acknowledge signal (ACK), controlled by you, so that you
can produce an interrupt to the CPU.
Pins 18-25 are short-circuited and this is the ground (GND).
In detail:
<= in DB25 Cent Name of Reg
=> out pin pin Signal Bit Function Notes
------ ---- ---- -------- --- -----------------------------
=> 1 1 -Strobe C0- Set Low pulse >0.5 us to send
=> 2 2 Data 0 D0 Set to least significant data
=> 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 Set to most significant data
<= 10 10 -Ack S6+ IRQ Low Pulse ~ 5 uS, after accept
<= 11 11 +Busy S7- High for Busy/Offline/Error
<= 12 12 +PaperEnd S5+ High for out of paper
<= 13 13 +SelectIn S4+ High for printer selected
=> 14 14 -AutoFd C1- Set Low to autofeed one line
<= 15 32 -Error S3+ Low for Error/Offline/PaperEnd
=> 16 31 -Init C2+ Set Low pulse > 50uS to init
=> 17 36 -Select C3- Set Low to select printer
== 18-25 19-30, Ground
3.2. Controlling with a Relay
The straight-forward circuit one can build is:
Vcc
|
+------+
| __|__
Relay /^\ Diode 1N4002
Coil /---\
| |
+------+
|
| /
4.7K B |/ C
parallel port >-\/\/\/\/---| NPN Transistor: BC547A or 2N2222A
data pi |\ E
| \
V
parallel port >--------------+
ground pin |
Ground
Connect Vcc with the same voltage as the relay type (usually 5 or
12V). Obviously, the relay's specifications should be scaled for your
coffee-machine.
Barmen, tend to put the relay AFTER the transistor, at the emitter (E)
pin instead of the collector (C) pin. This is bad practice because it
biases the transistor badly, and might result in bad coffee :-).
Diode 1N4002 is useful to protect the transistor from the relay's
currents. If you don't use it the transistor will sooner become dark
and smelly...
3.3. Controlling with TRIAC #1
If you only want a simple circuit, you can use Motorola's triac driver
MOC301[012], together with a general purpose TRIAC like SC141D. This
method has the advantage that you don't need any extra power supply.
For non-inductive loads, this is the circuitry:
270 1 +-------+ 6 180
+5v -VAVAVA-----+ +----VAVAVA-----+-------------- Line Hot
2 | MOC | |
TTL in ---------+ 3012 +nc VA SC141D
| | 4 / |
nc+ +------------/ |
+-------+ +----\/\/\/---- Line Neutral
LOAD
If you are going to work with 220V, try to obtain a 3021. Inductive
loads should be used in conjuction with bypass capacitors, better
consult Motorola Application Note AN-780. Coffee-machines are mainly
resistive loads and not inductive (like a motor), but who knows what
yours is?
3.4. Controlling with TRIAC #2
+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
|
---
///
This design is for 120V. You should change resistors accordingly for 220V.
Circuit description:
The MC3032 is an optoisolator TRIAC driver. The 180-ohm resistor sets
the current for the LED emitter in the optoisolator. Change the value
of this resistor - if necessary - to get a reasonable current (e.g.,
15 mA).
Note that you cannot test this circuit without a load. The TRIAC will
not switch unless connected to an AC voltage source, so you can't test
it for simple switching without applying AC and a load. Note the 500V
rating on the .01 capacitor.
4. Software
4.1. Programming
You will have to build an executable that will take the following
steps:
· Get permission to use I/O address space, by calling kernel, with
the call ioperm: eg ioperm( BASE, range ,1);
· Perform an out request instruction, to set the 0-5V voltage to the
parallel port, eg outb( 1, BASE );
· Wait enough time so the coffee is made. It would be nice if that
time is read by looking at the command line.
· Then it will turn off the coffee-machine: outb( 0 , BASE );
· Before ending it should give back the parallel port with an ioperm(
BASE, range, 0);
Change BASE = 0x3bc for /dev/lp0, 0x378 for /dev/lp1, and 0x278 for
/dev/lp2; range=8.
It would be useful if you had that program setuid, so that everybody
can drink coffee! You BOFH!
4.2. Device driver
Just read kernel hacker's guide, to implement a device driver; you
might also do it in user space. Please compile it as a module, so
that we won't need a kernel compile in every update. Then write:
echo cappuccino >/dev/coffee
And you will have a hot cup of coffee in minutes! Remember to give
the right permissions to /dev/coffee, depending on whether you want
only root making coffee or not.
The advantage of this method is that it supports feedback from the
coffee-machine by using the ACK of parallel port and such, so that
smart coffee-machines can produce an interrupt when ready.
Do it yourself, after reading the excellent book of Alessandro Rubini
and Jonathan Corbet Linux Device Drivers and studying the Cross
Reference Linux source code repository.
4.3. Connecting with the Internet
If you have implemented the controlling program in C (see above), you
just have to write a CGI script to turn ON and OFF the coffee-machine
or pass along more complex instructions. You should write some nice
webpages, explaining how to make coffee, and put them on an apache web
server...
...LAMP technology (Linux, Apache, MySQL, [Perl|Python|PHP]), will
help you to build a perfect user-customizable coffee system!
At some time in the future when the applications get rather complex,
you might want to extend on the basis of Flow-Based Programming:
http://www.jpaulmorrison.com/fbp/. What a great match for a great
Coffee Machine!
5. Building the Turing Complete Coffee Machine
Do you pine for the nice old days, when men were men and build their
own coffee machines?
This chapter is about assembling a smart, intelligent!, coffee
machine. It will be a computer designed with a von Neumann
architecture, comprised of a CPU, ROM/RAM and I/O and will also be
suitable for generic use, a.k.a. Universal Turing Machine.
5.1. An adequate assembly language
Unlike other complex, but popular, systems that are either CISC or
RISC, our machinery will be MISC: Mono-Instruction Set Computer!
Alas, our processor will understand just one command and yet, given
enough memory and time, it is able to perform any action that your
3GHz Pentium IV could do, or just simulate it alltogether; It can
solve any computable problem by running simple code like this:
SBN $mem1, $addr1
SBN $mem2, $addr2
SBN $mem3, $addr3
SBN $mem4, $addr4
SBN $mem5, $addr5
SBN $mem6, $addr6
[...]
The magic command is called SBN $mem, $addr (Subtract and Branch if
Negative), and does take the value of a memory cell $mem, subtract it
from the accumulator (A is the only available register in this
architecture) and store it back to the accumulator and memory $mem :
[mem] <= A <= A-[mem]. If the result is negative, and only then, it
jumps to the designated address $addr. If $addr points to the next
command, there is no conditional jump. Now, with that command at hand
you can subtract, add, zero memory addresses, move bytes around,
multiply, compare and so on, so forth. What's best of all, you can
easily build an optimizing compiler.
Voila. This is a great system for any Turing Complete problems plus,
it is even simpler in coding than the original Turing Machine!
5.2. Hardware and interfacing
The great thing with this innovative MISC processor is that you need 0
bits to store the opcode of your commands. This makes your CPU much,
much simpler: you only have to read a couple of operands each time.
You might wish to extend the capabilities of your processor by
extending the SBN instruction to 3 or 4 operands, so that it can
directly load and store data from main memory. This is an exercise
left to the reader; kudos to google.
The CPU diagram looks like this:
<========= ADDRESS BUS ==============>
= =
= +---------+ =
= | CONTROL | =
+---------+ +-----------------+
| ALU & A | | Program Counter |
+---------+ +-----------------+
= | LOGIC | =
= +---------+ =
= =
<=========== DATA BUS ===============>
Now, all you have to do is just hook together some memory chips, for
example by recycling static cache RAM from old 386 PCs, an ALU and a
few glue components. You may pick one of TTL or CMOS for logic gates
and latches; I'm a CMOS guy, but this really depends on your favourite
flavor. You may build an 8, 16, 32, 64 bit or whatever width system
you need. Just in case, for larger word widths, I have found
preferable building the ALU with pre-programmed 27128 EPROMS instead
of the harder-to-find 74x181s. Look around for a carry propagation
unit, too.
The monolithic nature of this system allows only memory-mapped I/O,
and requires special design provisions for bidirectional interfacing,
but nothing more peculiar than what is seen in older-generation
systems. AGC, the computer that drove Apollo 11 mission to the moon
was making use of such techniques, so it should be sufficient in this
case, too.
Note that the data bus has to be exactly as wide as the address bus,
that implies that the notion of a byte is only applicable to 8 bit
coffee machines, which you will eventually find that it is more of a
feature than a bug. You will be surprised with what a coffee you can
have for 8 or 16 bits bus! It is really a general-purpose piece of
hardware, built for peanuts.
5.3. Software
Such a pure system will make a good fit together with the, famous for
embedded systems controlling, FORTH programming language. The major
prerequisite for doing so is to have a stack mechanism, which in this
case can be constructed by a counter combined together with a memory
pool.
If you want to claim a serious coffee development platform, C
portability is an absolute must nowadays. Your choices might be
hacking one of gcc, lcc or sdcc, which with proper tweaking at the
back-ends will be able to spit out the specially crafted MISC assembly
code. One day you might even want to rewrite another language like C,
forget the D letter - it is taken already, so do not make again the
same mistakes with your compiler please:
http://www.gnu.org/software/gcc/projects/beginner.html
Just in case you thought of writing your own compiler, please read in
advance about flex, yacc and just a little bit of related theory. In
particular you will quickly appreciate Noam Chomsky's taxonomy on
languages:
· regular grammars (the abstract formalism for regular expressions),
· context free grammars (any BNF-described language is such) so on,
so forth. Read ahead on Computability Theory.
5.4. A minor criticism on the Turing Machine
Because of the way a Turing Machine works (see for that
http://plato.stanford.edu/entries/turing-machine/ ), it is a very
complicated device to program, and debug at the end of the day. The
reason is, that its behavior is a sequential process that is
completely determined by the following parameters:
· (1) the State the machine is in,
· (2) the Symbol (or number) on the square it is scanning, and
· (3) a Table of Instructions
The major contemporary disadvantage of the Turing Machine (TM) is that
it is of sequential nature, which implies that only a particular range
of problems can be mapped to it in a straightforward way. TMs are
suitable for problems that are described well on a serial storage
medium (tapes) and don't make use of indexes for data reference. This
is in contrast to the Coffee Machine (CM) that can handle any Random
Access algorithms as well (with no compromise of simplicity).
Add to this, that TMs impose a very high and unnecessary complexity on
item (3) in favor of keeping (1) and (2) simple. And just in case you
don't agree that the so called Table of Instructions gets trully
overwhelmed, have you ever tried to write a compiler for a Turing
Machine? A system that isn't easily programmable and is hard to
debug, should be considered a seriously questionable system, at least
as far as Computer Engineering (!= CS) is concerned. For instance,
try to simulate the Coffee Machine with a Turing Machine and vice
versa. Hey, if you still disagree, show me the code.
Bottom Line: The Coffee Machine (CM), is a much better model for the
von Neumann architecture and has a O(1) relationship with what is
standard practice of weighting algorithms, in the current form of
complexity theory.
6. Overdose symptoms
· excitement
· nervousness
· insomnia
· tachycardia or cardiac arhythmia
· restlessness
· Hypersensibility to light
· Annoyance in respect with various audio stimuli
· gastrointestinal disturbance
7. Expansions
· All hardware and software described here, can be expanded so that
it will support toast, beaf, applepies, etc.
· Cluster with 8 coffee-machines. This will let you have coffee even
when the first one gets off. Of course there will be a perfomance
hit.
· Parallel vector coffee-machine will be a future release.
· If you want the maximum automation you'll need more circuits and
sensors, so that you can control water flow, temperature, coffee
quantity etc.
· In the near future we will implement SNMP features.
· Serial coffee-machine at 115Kbps.
8. Further Information
· http://db.uwaterloo.ca/~alopez-o/Coffee/coffaq.html This is most
known Internet's Coffee-FAQ
· http://faculty.washington.edu/chudler/caff.html Caffeine and
effects of on the Nervous System
· http://www.gardfoods.com/coffee/coffee.coffee.htm A pretty
comprehensive, if informal, history of humans' interaction with the
coffee plant. People have been chewing coffee berries in Africa
for 100,000 years or so. Coffee was definitely growing in Yemen,
where it is not native (so must have been planted), in 525 AD.
· http://www.faqs.org/rfcs/rfc2324.html RFC2324: Hyper Text Coffee
Pot Control Protocol (HTCPCP/1.0)
· http://www.faqs.org/rfcs/rfc2325.html RFC2325: Definitions of
Managed Objects for Drip-Type Heated Beverage Hardware Devices
using SMIv2
· http://www.tldp.org/HOWTO/mini/IO-Port-Programming Programming of
I/O ports under popular operating system Linux.
· http://www.ee.washington.edu/circuit_archive/circuits/F_ASCII_Schem_PC.html
A lot of circuits in ASCII. Some of them are for parallel port.
· http://www.citr.auckland.ac.nz/~james/parport.html Whatever you
wanted to learn about a parallel port and didn't dare to ask.
· http://en.tldp.org/LDP/khg/HyperNews/get/khg.html How to write your
own device drivers. Come on, go ahead!
· http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html
Tomi Engdahl's web page is a *must see* for everyone who enjoys
electronics.
· http://dir.yahoo.com/Computers_and_Internet/Internet/Devices_Connected_to_the_Internet/Coffee_Machines/
Coffee-machines on-line. Unfortunately, there are no benchmark
tests.
· http://www.cs.su.oz.au/~bob/Coffee/index.html This coffee-machine
offers only cappuccino. It has to be upgraded!
· http://einstein.et.tudelft.nl/~janssen/ Hot coffee from the the The
Netherlands.
· http://www.cl.cam.ac.uk/coffee/coffee.html The Trojan Room Coffee
Machine
· http://www.menet.umn.edu/coffeecam/ CoffeeCAM
The list of links in this chapter, often becomes outdated, therefore
you might wish to use the excellent Way-Back Machine to find them
again: http://www.archive.org/