COFFEE-HOWTO <author>di Georgatos Photis, <<htmlurl url="mailto:gef@ceid.upatras.gr?subject=COFFEE-HOWTO" name="gef@ceid.upatras.gr">> <date>v0.5, 15 Gennaio 1998 <abstract> L'osservazione sul software più noiosa che abbia mai sentito dire è se questa o quella cosa possano fare il caffè. Linux FA il caffè. Ed è anche buono! Traduzione italiana a cura di Christopher Gabriel, <htmlurl url="mailto:cgabriel@pluto.linux.it" name="cgabriel@pluto.linux.it"> </abstract> <p> Per molto tempo l'umanità si è chiesta come un computer possa fare il caffè... Le persone hanno bisogno di caffè per restare sveglie e stare di fronte ad un computer per molto tempo. Tutti sanno che è molto meglio scrivere codice durante la notte... <p> Il problema principale è come poter controllare la macchine del caffè con il computer, in modo da utilizzare il software per pilotarla. Queste generalmente significa un interruttore ACCESO/SPENTO implementato su un circuito che controlla l'alimentazione della macchina da caffè. <sect>Menu <sect1>Alla francese <p> Caffè molto popolare fra i programmatori poiché non necessita di molta cura, come tutto il software commerciale. Il suo gusto eccitante ha ispirato migliaia di programmatori a scrivere software incredibile, ovviamente scritto sempre nelle prime ore del giorno. Windows per esempio è stato scritto alle cinque del mattino, grazie a questo caffè! I risultati sono garantiti. <sect1>Nescafè <p> Nescafè è un caffè molto forte, fatto mescolando acqua calda con una mistura di caffè e zucchero. Solitamente si prendono un cucchiaio di caffè e uno di zucchero con pochissima acqua, per miscelarli. Nel frattempo la vostra acqua dovrebbe già bollire. Non appena l'acqua è calda a sufficienza mescolare tutti assieme e possibilmente aggiungete del latte. Altrimenti potete usare qualcosa di più semplice di una macchina per caffè per scaldare l'acqua, l'ho visto fare tantissime volte... <sect1>frappe <p> Variante popolare del caffè appena menzionato. Attualmente non necessita di una macchina da caffè, ma di un congelatore per avere acqua fredda e cubetti di ghiaccio. <sect1>freddo <p>Questo è molto difficile da fare, leggete le Coffee FAQ ( trovate le istruzioni delle bibliografia ) <sect1>cappuccino (ancora da scrivere) <sect1>espresso (ancora da scrivere) <sect>Circuito Elettronico <p> Il diagramma generale può essere una cosa di questo tipo: <tscreen><verb> --------- 0-5V ---------- ~220V --------------------- | PC |===>===|Circuito|========| Macchina da caffè | --------- ---------- --------------------- </verb></tscreen> <p>Il concetto è quello di prendere il voltaggio di controllo da computer, che guida un circuito elettronico isolato con un Relè o un Triac. <P>Dovete optare per un circuito Relè se avete una grande macchina da caffè ( con un consumo maggiore di 200 Watt ), altrimenti potete semplicemente usarne uno basato sul Triac. Tutti i circuiti presentati sono stati sperimentati almeno una volta, ma i risultati che otterrete saranno TUTTI DI VOSTRA RESPONSABILITÀ. Se non avete esperienze con l'elettronica NON DOVETE provare ad usarli, altrimenti potete ottenere dei risultati veramente dannosi. <P> <p>Dovete stare molto attenti mentre sperimentate utilizzando la corrente elettrica a 220V, e bisogna anche stare attenti a scegliere il fusibile giusto. <sect1>Pilotare il voltaggio 0-5V dal computer <p> Ecco un piccolo esempio di come ottenere un voltaggio 0-5V dalla porta parallela del computer. <tscreen><verb> Vista posteriore ----- Pin 10 - ACK Connettore DB-25 | | Pin 9 - D7 Maschio | | 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 / \______________________________________________________/ </verb></tscreen> <p>Pin 1 è lo Strobe (logica inversa) <p>Pins 2-9 portano i segnali del bus di dati, esattamente come è scritto nella documentazione della porta parallela <p>Pin 10 è il acknowledge signal (ACK), controllato da voi, in modo da poter produrre un interrupt nella CPU. <p>Pins 18-25 sono corto-circuitati e rappresentano la massa (GND). <p>In dettaglio: <tscreen><verb> <= 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 </verb></tscreen> <sect1>Controllare attraverso un relè <p> Il circuito più semplice che qualcuno possa costruire è: <tscreen><verb> 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 </verb></tscreen> Collegate il Vcc allo stesso voltaggio del tipo di relè ( solitamente 5 o 12V). Ovviamente le specifiche del relè devono essere adatte alla vostra macchina da caffè. <P> I baristi, solitamente, hanno la tendenza di mettere il relè DOPO il transistor, al pin emettitore (E) invece che al collettore (C). Questa è praticamente un disastro poiché il transistor può generare un caffè molto, ma molto cattivo. Il diodo 1N4002 è molto utile per proteggere il transistor dalla tensione del relè. Se non lo utilizzate il transistor diventerà scuro e molto odoroso.. <sect1>Controllo attraverso un TRIAC #1 <p> Se desiderate un circuito molto semplice, potete usare il driver triac MOC301[012] della Motorola, assieme ad un TRIAC multi-funzione come il SC141D. Questo metodo porta il vantaggio che non necessita di alimentazione supplementare. <p>Per un carico non-induttivo usate questa circuiteria <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> Se state utilizzando una tensione di 220V, è preferibile un 3021. Carichi induttivi devono essere utilizzati assieme a dei condensatori di bypass. Fate riferimento al documento <em>Motorola Application Note AN-780</em>. Le macchine da caffè usano per lo più cariche resistive e non induttive (come un motore), ma chissà come è la vostra... <sect1>Controllo attraverso un TRIAC #2 <p> <tscreen><verb> +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 | --- /// Dovete cambiare le resistenza per utilizzare una tensione di 220V. </verb></tscreen> <p>Descrizione del circuito: <P>Il MC3032 è un driver TRIAC optoisolatore. La resistenza di 180 Ohm imposta la corrente per il LED dentro l'optoisolatore. Cambiate il valore di questa resistenza - se necessario - per ottenere una corrente accettabile (es. 15 mA). <P> Da notare che non potete testare questo circuito senza un carico di tensione. Il TRIAC non cambierà a meno che non sia connesso con una sorgente di voltaggio AC, quindi non potete testarlo per un semplice switch senza applicare AC e un carico. <sect>Software <p> <sect1>Software <p> Dovete create un file eseguibile che esegue queste operazioni: <itemize> <item> Ottiene i permessi di I/O chiamandoli dal kernel, con il comando <bf>ioperm</bf>: es. <em>ioperm( BASE, range, 1); </em> <item> Esegue una istruzione di richiesta in uscita, per impostare il voltaggio 0.5V sulla porta parallela, es. <em>outb(1, BASE );</em> <item> Aspetta il tempo necessario alla preparazione del caffè. Sarebbe bello se questo intervallo di tempo fosse mostrato nella linea di comando. <item> Quindi deve spegnere la macchina del caffè : outb( 0, BASE ); <item> Prima di terminare deve restituire la porta parallela con una istruzione tipo <em>ioperm( BASE, range, 0); </em> </itemize> Cambiate BASE = 0x3bc per /dev/lp0, 0x378 per /dev/lp1, e 0x278 per /dev/lp2, range=8. <p>Sarebbe molto bello avere questo programma setuid, in modo che tutti possano bere il caffè! <sect1>Driver di periferica <p> Leggete qua: <htmlurl url="http://www.redhat.com:8080/HyperNews/get/khg.html" name="kernel hacker's guide">, implementate un driver di periferica (può restare in user space, credo). Per favore compilatelo come un modulo, in modo che non dobbiate compilare il kernel ad ogni aggiornamento. Quindi scrivete: <verb> echo cappuccino >/dev/coffee </verb> E avrete una calda tazza di caffè pronta in 1 minuto. Ricordatevi di assegnare i giusti permessi a /dev/coffee, a seconda se solo root può bersi il caffè o meno. <p>Il vantaggio di questo metodo è che supporta il feedback dalla macchina da caffè utilizzando l'ACK della porta parallela, quindi macchine da caffè intelligenti possono produrre un interrupt. <p>Ecco i compiti per casa. <sect1>Connessione via Internet. <p> Se avete implementato il programma C ( leggete sopra ), dovete soltanto scrivere un semplice programma CGI che accende e spegne la macchina da caffè. Potete anche scrivere qualche pagina web carina, dove spiegate come fare il caffè, e mettetela in un server web <bf>apache</bf>... <sect>Sintomi da overdose <p> <itemize> <item>eccitazione <item>nervosismo <item>insonnia <item>tachicardia o aritmia cardiaca <item>disturbi gastro-intestinali <item>allucinazioni </itemize> <sect>Espansioni <p>Queste sono le nostre idee: <itemize> <item>Tutto l'hardware e il software descritto in questo documento può essere espanso fino a supportare il tostapane, la bistecchiera, il forno a microonde etc.. <item>Creare un Cluster con 8 macchine da caffè. Questo vi permette di avere del caffè anche se una macchina si spegne. Ovviamente ci sarano cambiamenti nelle performance <item>La prossima release includerà come mettere macchine da caffè in parallelo. <item>Se desiderate la massima automazione avete bisogno di molti altri circuiti e sensori, in modo da poter controllare il flusso dell'acqua, la temperatura, la quantità di caffè etc.. <item>Verranno in futuro implementate feature per la gestione via SNMP. <item>Macchina da caffè seriale a 115Kbps. </itemize> <sect>Riferimenti <p> <itemize> <item><htmlurl url="http://daisy.uwaterloo.ca/~alopez-o/caffaq.html" name="http://daisy.uwaterloo.ca/~alopez-o/caffaq.html"> Questa è la <bf>Coffee-FAQ</bf> di Internet <item><htmlurl url="http://lonestar.texas.net/~andrew/f_pc_.htm" name="http://lonestar.texas.net/~andrew/f_pc_.htm"> Tantissimi circuiti in ASCII. Alcuni di questi sono per la porta parallela. <item><htmlurl url="http://shell.rmi.net/~hisys/parport.html" name="http://shell.rmi.net/~hisys/parport.html"> Tutto quello che avreste voluto sapere sulla porta parallela e non avete mai osato chiedere. <item><htmlurl url="http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming" name="http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming"> Programmazione della porte di I/O per il popolare sistema operativo Linux. <item><htmlurl url="http://www.redhat.com:8080/HyperNews/get/khg.html" name="http://www.redhat.com:8080/HyperNews/get/khg.html"> Come scrivere driver per periferiche. Avanti, fatelo anche voi! <item><htmlurl url="http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html" name="http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html"> La pagina web di Tomi Engdahl è un *must* per chiunque si interessi di elettronica. <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/"> Macchine da caffè online. Sfortunamente non ci sono prove. <item><htmlurl url="http://www.cs.su.oz.au/~bob/coffee.html" name="http://www.cs.su.oz.au/~bob/coffee.html"> Questa macchinad a caffè offre solo cappuccino. E` da aggiornare!! <item><htmlurl url="http://einstein.et.tudelft.nl/~janssen/" name="http://einstein.et.tudelft.nl/~janssen/"> Caffè caldo dall'Olanda. <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>etc <sect1> prefazione <P> Questo documento è stato scritto inizialmente in Greco, risultato di un piccolo dibattito sulla mailing list linux-greek-users, sul fatto che Linux possa fare il caffè o meno. C´è stato un articolo sul nostro bellissimo giornale online su Linux chiamato "magaz": <htmlurl url="http://www.linux.gr/magaz" name="http://www.linux.gr/magaz">. Ricordatevi, questo magaz è in greco. <sect1> Autore <P> Il mio nome è <htmlurl url="http://www.ceid.upatras.gr/~gef" name="Georgatos Photis">, studente al dipartimento di Ingegneria Informatica di Patras. Solitamente, sono molto occupato con la documentazione in greco e la manutenzione di pagine web, ma posso accettare aggiornamenti per questo HOWTO. <sect1> Copyright <P> Il mitico copyright che accompagna tutto ciò che è con linux... Per trovarlo, dovete leggerli tutti e contare quale è il più utilizzato. Altrimenti.. No, non potete copiare questo documento. <sect1> Collaboratori <p> <itemize> <item><htmlurl url="http://sunsite.unc.edu/expo/1492.exhibit/c-Columbus/columbus.html" name="Christofer Colombus">. Il suo vero nome è Cristobal Colon. E' stato il primo a portare il caffè dall'America, che lui scoprì per primo ( tra gli Europei ) nel 1492. <item> Kostas Lialiambis è colui che si è lamentato sul fatto che non può fare caffè con Linux. <item> Panagiotis Vrionis, Yannakopoulos Haralambos hanno contribuito nelle note umoristiche. </itemize> </article>