💾 Archived View for magaz.hellug.gr › 01 › 04_coffee-howto › index.gmi captured on 2024-08-18 at 17:38:17. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=COFFEE-HOWTO) Ιαν 1998
Μία από τις πιο ενοχλητικές ερωτήσεις που έχω ακούσει για λογισμικό είναι εάν φτιάχνει καφέ. Ε, ναι λοιπόν, φτιάχνει. Και καλό καφέ.
Επί μακρόν την ανθρωπότητα την εβασάνιζε το πώς θα ημπορούσε να χρησιμοποιήσει τον υπολογιστή, ώστε να παράγει καφέ. Τον καφέ τον χρειαζόμαστε για καθόμαστε στον υπολογιστή με τις ώρες χωρίς να νυστάζουμε, διότι ως γνωστόν την νύχτα γράφεται ο καλύτερος κώδικας.
Το κυριότερο πρόβλημα είναι να συνδέσουμε την καφετιέρα με τον υπολογιστή και να την ελέγχουμε μέσω λογισμικού. Αυτό συνήθως ανάγεται σε ένα κύκλωμα διακόπτη ON/OFF, που ελέγχει την τροφοδοσία της καφετιέρας.
1. Είδη καφέ
2. Κυκλώματα σύνδεσης της καφετιέρας
3. Λογισμικό
4. Συμπτώματα υπερδοσολογίας
5. Επεκτάσεις
6. Αναφορές
Είναι επίσης γνωστός και ως τούρκικος, αλλά είναι παραλλαγή του. Παλιά είχαν για σηματάκι τον παπαγάλο, αλλά τώρα χρησιμοποιούν τον πιγκουίνο. Χαρακτηριστικό του καφέ αυτού είναι το κατακάθι στον πάτο του ποτηριού, που μπορεί να χρησιμεύσει για να μαντέψετε την ατυχία σας.
Αναμιγνύουμε καφέ και ζάχαρη στη σωστή αναλογία, με ποσότητα νερού αντιστοίχου του φλιτζανίου. Παραδοσιακά παρασκευάζεται σε ζεσεοδοχείο (μπρίκι) με γκαζιέρα, αλλά απουσία φτηνών εξαρτημάτων για τον έλεγχο του αερίου, θα χρησιμοποιήσουμε ένα απλό μάτι. (εεε! της κουζίνας)
Οι κατηγορίες του ελληνικού καφέ είναι: (κουταλιές)
Ανακατεύουμε συνεχώς μέχρι το μίγμα να αρχίσει να ξεχειλίζει, οπότε με γρήγορες κινήσεις το παίρνουμε από τη φωτιά. Αργείς-χάνεις, απλή λογική. Το βήμα αυτό συζητείται να υλοποιηθεί με robot.
Δημοφιλής καφές για προγραμματιστές μιας και δεν χρειάζεται προσοχή. Η ανάρπαστη γεύση του έχει εμπνεύσει χιλιάδες προγραμματιστών σε έργα λογισμικού αμύθητης τελειότητας, υλοποιημένα άγρια χαράματα. Τα Windows για παράδειγμα είναι γραμμένα 5:00 το πρωί, με τα νεύρα ΝΑ. Εγγυημένο αποτέλεσμα.
Το κουνάς πριν
Το κουνάς μετά
Δύσκολος καφές.
Μην τον ζητήσετε από τον τύπο στο Πάρκο της Ειρήνης/Πανεπιστήμιο Πάτρας
Το σχηματικό είναι κάπως έτσι:
ΣΗΜΕΙΩΣΗ: 'Εχει παρατηρηθεί ότι μερικά σχήματα δεν φαίνονται σωστά. Σε τέτοια περίπτωση, δείτε τα με "View->Document source".
--------- 0-5V --------- ~220V ----------- | Η/Υ |===>===|Ελεγχος|========|Καφετιέρα| --------- --------- -----------
Η γενική ιδέα είναι ότι παίρνουμε μία τάση ελέγχου από τον υπολογιστή, ο οποία οδηγεί ένα κύκλωμα με απομόνωση (OPTOTRIAC ή RELAY).
Εάν η καφετιέρα είναι μεγάλη (πχ περισσότερο από 200W), χρησιμοποιείστε οπωσδήποτε RELAY, αλλιώς μπορείτε να βάλετε TRIAC. Εάν δεν κάνετε ακριβώς αυτό, απλά θα πετάξετε τα λεφτά σας με τον ή με τον άλλο τρόπο.
Σημειώστε ότι τα κυκλώματα που έχουμε παρακάτω, είναι όλα τουλάχιστον μια φορά δοκιμασμένα, αλλά η διασύνδεση με τον υπολογιστή γίνεται με ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ. Εάν δεν έχετε εμπειρία με ηλεκτρονικά, καλόν θα είναι να μην την αποκτήσετε με αυτά τα κυκλώματα, γιατί θα είναι κακή μάλλον...
Να είστε πολύ προσεχτικοί στους πειραματισμούς με τα 220V, και δεν θα είναι πολυτέλεια να χρησιμοποιήσετε ασφάλεια ανάλογη του φορτίου σας...
Εδώ είναι ένα απλό παράδειγμα για το πώς θα πάρετε μια απλή τάση 0-5V από τον υπολογιστή, μέσω της παράλληλης θύρας.
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 / \______________________________________________________/
Ο ακροδέκτης 1 είναι το Strobe( αρνητικής λογικής)
Οι ακροδέκτες 2-9 είναι τα σήματα του DATA BUS, όπως αυτά διαμορφώνονται, έπειτα από μία εντολή τύπου OUT στην παράλληλη θύρα.
Ο ακροδέκτης 10 είναι το ACK, δηλαδή τον ελέγχετε εσείς, παράγοντας interrupt.
Τα 18-25 είναι βραχυκυκλωμένα και είναι η γείωση.
Πιο αναλυτικά:
<= 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
Το πιο απλό κύκλωμα που μπορεί να φτιάξει κανείς είναι το εξής:
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
Συνδέστε το Vcc με τάση αντίστοιχη με τον τύπο του relay που έχετε βρει (5 ή 12V). Προφανώς το relay πρέπει να διαλέξετε να είναι επαρκές για την καφετιέρα σας. Αυτό ίσως εξηγεί τους κακούς καφέδες: Οι barmen συχνά κάνουν το λάθος να βάζουν το relay αντί στον συλλέκτη (C), στον εκπομπό (E) του τρανζίστορ, πολώνοντάς το έτσι με λάθος τρόπο. Η δίοδος 1N4002 είναι για να προστατεύει το τρανζίστορ από τα ανάστροφα ρεύματα του Relay, όταν το ρεύμα σε αυτό αλλάζει. Εάν δεν την βάλετε, λογικά το τρανζίστορ θα γίνει πιο μαύρο και θα μυρίζει.
Εάν θέλετε ένα απλό κύκλωμα μπορείτε να χρησιμοποιήσετε ένα Motorola MOC301[012] (οδηγός για TRIAC), μαζί με ένα γενικής χρήσης TRIAC όπως το SC141D. Το πλεονέκτημα αυτού του κυκλώματος είναι ότι δεν χρειάζεται τάση τροφοδοσίας.
Για μη επαγωγικό φορτίο το κύκλωμα είναι ως εξής:
270 1 +-------+ 6 180 +5v -VAVAVA-----+ +----VAVAVA-----+-------------- Line Hot 2 | MOC | | TTL in ---------+ 3012 +nc VA SC141D | | 4 / | nc+ +------------/ | +-------+ +----\/\/\/---- Line Neutral LOAD
Εάν πρόκειται να δουλέψετε με 220V, προτιμήστε ένα 3021. Εάν έχετε επαγωγικό φορτίο ενδείκνυται να βάλετε bypass πυκνωτές, δείτε σχετικά Motorola Application Note AN-780. Οι καφετιέρες είναι κυρίως ωμικά φορτία (το θερμαντικό νήμα) και όχι επαγωγικά (όπως είναι πχ ένα μοτέρ) αλλά επειδή ποιος ξέρει τι καφετιέρα έχετε...
+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 | --- /// You should change resistors accordingly for 220V.
Περιγραφή κυκλώματος:
Το MC3032 είναι ένας οπτοαπομονωτής, κατάλληλος για οδήγηση TRIAC. Η αντίσταση των 180Ω ρυθμίξει το ρεύμα για τον εκπέμπον LED του οπτοαπομονωτή. Εάν χρειάζεται, αλλάξτε την τιμή της αντίστασης για να πάρετε μία λογική τιμή ρεύματος (πχ 15 mA).
Δώστε σημασία στην ένδειξη 500V για τον πυκνωτή των .01μF. Σημειώσατε ότι δεν μπορείτε να ελέγξετε αυτό το κύκλωμα δίχως φορτίο. Το TRIAC δεν θα αλλάξει αγωγιμότητα παρά μόνον εάν συνδεθεί με την πηγή παροχής εναλλασόμενου ρεύματος (δίκτυο) και με το φορτίο. Προσέξτε το φορτίο να μην είστε ΕΣΕΙΣ.
'Εφτασεεεε...
Φτιάξτε ένα εκτελέσιμο, που θα κάνει χοντρικά τα εξής:
Όπου BASE = 0x3bc για /dev/lp0, 0x378 για /dev/lp1, και 0x278 για /dev/lp2, range=8.
Καλόν θα είναι να το κάνετε setuid, για να μπορεί όλος ο κόσμος να φτιάχνει καφέ.
Δεν έχετε παρά να διαβάσετε το kernel hacker's guide, να υλοποιήσετε έναν device driver (μπορεί να είναι και user space). Πλιιζ, κάνετέ το module, να μην κάνουμε compile όλη την ώρα. Μετά θα γράφετε:
echo baryglykos >/dev/coffee
Και θα έχετε ζεστό καφέ σε 1 λεπτό. Θυμηθείτε να δώσετε τα σωστά permission στο /dev/coffee, ανάλογα με το εάν θέλετε να φτιάχνει καφέ μόνο ο root ή όχι.
Το πλεονέκτημα αυτής της μεθόδου είναι ότι επιτρέπει να χρησιμοποιηθεί το ACK της παράλληλης θύρας, ώστε οι "έξυπνες" καφετιέρες να μπορούν να παράγουν interrupt.
Αφήνεται σαν άσκηση.
Αφού έχετε υλοποιήσει το πρόγραμμα σε C (βλέπε παραπάνω), δεν έχετε παρά να φτιάξετε ένα cgi τσι σειράς (ας είναι και β' διαλογής), που θα καλεί το προγραμματάκι για να φτιάξει τον καφέ. Τι web server? apache φυσικά...
Αυτές είναι μερικές ιδέες που είχαμε:
1: http://sunsite.unc.edu/expo/1492.exhibit/c-Columbus/columbus.html
2: http://daisy.uwaterloo.ca/~alopez-o/caffaq.html
3: http://lonestar.texas.net/~andrew/f_pc_.htm
4: http://shell.rmi.net/~hisys/parport.html
5: http://sunsite.unc.edu/LDP/HOWTO/mini/IO-Port-Programming
6: http://www.redhat.com:8080/HyperNews/get/khg.html
7: http://www.hut.fi/Misc/Electronics/circuits/parallel_output.html
9: http://www.cs.su.oz.au/~bob/coffee.html
10: http://einstein.et.tudelft.nl/~janssen/
11: http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi
12: http://www.cl.cam.ac.uk/coffee/coffee.html