Πίνακας περιεχομένων:

Δημιουργήστε ένα καλύτερο κουμπί τροφοδοσίας Raspberry Pi: 4 βήματα
Δημιουργήστε ένα καλύτερο κουμπί τροφοδοσίας Raspberry Pi: 4 βήματα

Βίντεο: Δημιουργήστε ένα καλύτερο κουμπί τροφοδοσίας Raspberry Pi: 4 βήματα

Βίντεο: Δημιουργήστε ένα καλύτερο κουμπί τροφοδοσίας Raspberry Pi: 4 βήματα
Βίντεο: Νέα Raspberry Pi 3 Tutorial - Πώς να δημιουργήσει για Gaming & Entertainment Έργα 2024, Δεκέμβριος
Anonim
Image
Image

Είναι πολύ εύκολο να φτιάξετε ένα κουμπί απενεργοποίησης ή απενεργοποίησης Raspberry. Υπάρχουν πολλά τέτοια έργα στον ιστό και μερικά εδώ στο Instructables, αλλά κανένα από αυτά (που μπορώ να δω) δεν σας λέει πότε το Pi σας έχει τελειώσει πραγματικά το κλείσιμο και ως εκ τούτου είναι ασφαλές να τροφοδοτήσετε το ρεύμα. Στην πραγματικότητα δεν αναγνωρίζουν καν ότι έχει δει το πάτημα του κουμπιού.

Υπάρχουν επίσης έργα για την επανεκκίνηση ενός Pi που έχει κλείσει, αλλά ούτε αυτά σας δίνουν οπτική ανατροφοδότηση.

Ποιος χρειάζεται όμως ένα τέτοιο κουμπί; Εάν είστε λίγο σπασίκλας όπως εγώ, ή ακόμα και ένας επίδοξος σπασίκλας, μπορείτε πάντα να συνδεθείτε στο Pi σας τοπικά ή μέσω του δικτύου και να πληκτρολογήσετε sudo shutdown -h τώρα. Αλλά αν χτίζετε ένα έργο για μη τεχνικούς χρήστες, αυτό δεν θα κάνει. Είναι αλήθεια ότι μπορείτε σχεδόν πάντα να ξεφύγετε τραβώντας το καλώδιο τροφοδοσίας, αλλά σημειώστε, το έλεγα σχεδόν πάντα! Η τύχη όλων τελειώνει αργά ή γρήγορα. Είχα μια κάρτα SD να πεθάνει πάνω μου μόνο την περασμένη εβδομάδα, αν και ποτέ δεν θα ξέρω αν όντως οφείλεται ή όχι σε απότομη απώλεια ισχύος.

Στην περίπτωσή μου έπρεπε να προσθέσω ένα κουμπί λειτουργίας σε ένα Pi που χρησιμοποιούμε ως midi sequencer για την ηχογράφηση και την αναπαραγωγή ύμνων και τραγουδιών στην εκκλησία, όταν δεν έχουμε διαθέσιμο ζωντανό πιανίστα. Μπορώ πάντα να πληκτρολογήσω την εντολή τερματισμού λειτουργίας αλλά πρέπει να την καταργήσω όταν δεν είμαι εκεί.

Η πρόθεσή μου εδώ δεν είναι να σας δώσω ένα τελικό προϊόν, γεμάτο με όμορφα τρισδιάστατη θήκη εκτύπωσης, όπως τόσα άλλα Instructables. Ο καθένας θα έχει διαφορετική χρήση ή θα θέλει να ενσωματωθεί στο δικό του έργο. Μάλλον, θα σας ενημερώσω για την τεχνολογία που μπορείτε να προσθέσετε στο έργο σας, είτε πρόκειται για κέντρο πολυμέσων, συσκευή IoT ή οτιδήποτε άλλο.

(Στο βίντεο το αποδεικνύω με ένα Pi Zero v1.2 και μια οθόνη που έφτιαξα από μια επανατοποθετημένη οθόνη φορητού υπολογιστή και ένα χειριστήριο από την Άπω Ανατολή.)

Βήμα 1: Ο σχεδιασμός

Πως δουλεύει
Πως δουλεύει

Αυτό θα κάνει το κουμπί λειτουργίας μου για εσάς:

  • Όταν το Pi λειτουργεί, ένα LED ανάβει συνεχώς. Εάν κλείσει χειροκίνητα, το LED σβήνει μόνο όταν είναι ασφαλές να αποσυνδέσετε το ρεύμα.
  • Κατά την εκτέλεση, εάν πατήσετε το κουμπί για τουλάχιστον ένα δευτερόλεπτο, ξεκινάει ο τερματισμός λειτουργίας και η λυχνία LED αναβοσβήνει για ένα τέταρτο του δευτερολέπτου κάθε δευτερόλεπτο μέχρι να είναι ασφαλές να αποσυνδέσετε το ρεύμα.
  • Από κατάσταση απενεργοποίησης (εάν δεν έχει αφαιρεθεί το ρεύμα), πατώντας το κουμπί ξεκινά η εκκίνηση και αναβοσβήνει η λυχνία LED ανά τέταρτο του δευτερολέπτου κάθε δευτερόλεπτο έως ότου εκκινήσει. (Μπορεί να χρειαστεί λίγος χρόνος μέχρι να εκτελεστούν όλες οι υπηρεσίες όπως το ssh και το vnc.)

Τα εξαρτήματα είναι πολύ φθηνά. Το μόνο που χρειάζεσαι είναι:

  • ATTiny85 (τσιπ συμβατό με Arduino)
  • 3 αντιστάσεις: 2 x 330Ω και 1 x 10kΩ
  • 1 LED - Προτείνω πράσινο ή μπλε, αλλά είναι δική σας επιλογή
  • συρματόσχοινα και άλματα, ή σανίδες, ή όπως θέλετε να το φτιάξετε.

Βήμα 2: Πώς λειτουργεί

Όπως συμβαίνει με όλα τα κουμπιά τροφοδοσίας Pi, αυτό τραβά έναν καρφίτσα GPIO σε χαμηλή κατάσταση για να σηματοδοτήσει ένα αίτημα τερματισμού λειτουργίας σε ένα βοηθητικό πρόγραμμα που εκτελείται στο Pi. Χρησιμοποίησα GPIO4 (pin 7) αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο pin.

Ο μόνος τρόπος για να πείτε ότι ένα Pi έχει ολοκληρώσει τον τερματισμό λειτουργίας είναι να παρακολουθήσετε το TxD pin 8, το οποίο στη συνέχεια μειώνεται. Αυτό εξαρτάται από την ενεργοποίηση της σειριακής κονσόλας, η οποία είναι από προεπιλογή. Στην πραγματικότητα, το TxD θα ανεβοκατεβαίνει τακτικά ενώ χρησιμοποιείται ως σειριακή κονσόλα, αλλά ποτέ δεν θα πέσει χαμηλά για περισσότερα από 30mS κάθε φορά, ακόμη και με τον πιο αργό κοινό ρυθμό baud. Μπορεί ακόμα να χρησιμοποιηθεί για σειριακή κονσόλα καθώς απλώς το παρακολουθούμε παθητικά.

Για επανεκκίνηση, πρέπει να τραβήξουμε σύντομα το SCL1 (pin 5) χαμηλά. Αυτός ο πείρος χρησιμοποιείται από όλες τις συσκευές I2C (συμπεριλαμβανομένης της διεπαφής midi μου), αλλά μετά την εκκίνηση της εκκίνησης το αφήνουμε μόνο του.

Το μεγαλύτερο μέρος της πολυπλοκότητας βρίσκεται στο σκίτσο Arduino που τοποθετούμε στο ATTiny85. Αυτό υλοποιεί μια "μηχανή κατάστασης" - έναν πολύ χρήσιμο και ισχυρό τρόπο κωδικοποίησης κάθε προβλήματος που μπορεί να αναπαρασταθεί από έναν αριθμό "καταστάσεων". Το πλυντήριο λειτουργεί με τον ίδιο τρόπο. Οι καταστάσεις αντιπροσωπεύουν τα στάδια του κύκλου πλύσης και καθένα καθορίζει τι πρέπει να κάνει το μηχάνημα σε εκείνο το σημείο (κινητήρες ή αντλίες που πρέπει να λειτουργούν, βαλβίδες που ανοίγουν ή κλείνουν) και ποιες είσοδοι αισθητήρα (θερμοκρασία, στάθμη νερού, χρονοδιακόπτες) καθορίστε πότε θα μεταβείτε στην επόμενη κατάσταση και ποια επόμενη κατάσταση θα επιλέξετε.

Το σκίτσο χειρός είναι το πρώτο μου σχέδιο ενός διαγράμματος κατάστασης, που δείχνει όλες τις μεταβάσεις κατάστασης. Αυτό είναι μόνο για να σας δείξει πώς μπορείτε αρχικά να προγραμματίσετε τις καταστάσεις και τις μεταβάσεις κατάστασης - μπορεί να μην είναι απολύτως ακριβείς όπως ήταν πριν ξεκινήσω τον εντοπισμό σφαλμάτων.

Στην περίπτωσή μας, έχουμε 6 καταστάσεις τις οποίες έχω ονομάσει OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST και SHUTTING DOWN. (Μετά το κλείσιμο, μεταβαίνει ξανά στο OFF.) Αυτά προσδιορίζονται με σχόλια στο σκίτσο και για καθένα, περαιτέρω σχόλια λένε τι πρέπει να κάνει και ποια γεγονότα θα το μεταφέρουν σε άλλη κατάσταση.

Το βοηθητικό πρόγραμμα που εκτελείται στο Pi είναι λίγο πιο περίπλοκο από ό, τι για τα περισσότερα κουμπιά τερματισμού. Ανταποκρίνεται σε έναν μακρύ χαμηλό παλμό στην καρφίτσα GPIO ξεκινώντας τον τερματισμό λειτουργίας, αλλά επίσης ανταποκρίνεται σε έναν σύντομο παλμό από μόνος του τραβώντας για λίγο τον πείρο GPIO χαμηλά. Αυτός είναι ο τρόπος με τον οποίο το ATTiny85 μπορεί να πει ότι λειτουργεί και έτσι μπορεί να μετακινηθεί από το BOOTING στην κατάσταση RUNNING.

Βήμα 3: Χτίζοντας ένα Demot Prototype

Χτίζοντας ένα πρωτότυπο επίδειξης
Χτίζοντας ένα πρωτότυπο επίδειξης
Χτίζοντας ένα πρωτότυπο επίδειξης
Χτίζοντας ένα πρωτότυπο επίδειξης
Χτίζοντας ένα πρωτότυπο επίδειξης
Χτίζοντας ένα πρωτότυπο επίδειξης

Για σκοπούς επίδειξης, μπορείτε να το πρωτοτυπώσετε σε ένα breadboard χωρίς συγκόλληση όπως φαίνεται, αλλά σας έδωσα επίσης το σχηματικό σχήμα, ώστε να μπορείτε να επεξεργαστείτε τη δική σας διάταξη χρησιμοποιώντας πίνακα strip ή ένα προσαρμοσμένο PCB, ίσως μέρος ενός ευρύτερου έργου.

Βήμα 4: Προγραμματισμός του ATTiny85

Το σκίτσο Arduino και το πρόγραμμα βοήθειας επισυνάπτονται σε αυτό το βήμα. Στο φάκελο σκίτσων Arduino, δημιουργήστε ένα φάκελο που ονομάζεται PiPwr και αντιγράψτε το αρχείο PiPwr.ino σε αυτό. Ξεκινώντας το Arduino IDE θα το βρείτε τώρα στο sketchbook σας.

Υπάρχουν διάφοροι τρόποι προγραμματισμού ενός ATTiny85. Εάν το δικό σας έχει εγκατεστημένο ένα bootloader, μπορείτε να χρησιμοποιήσετε έναν πίνακα ανάπτυξης ATTiny85 που κοστίζει μόνο μερικά λίρες. Αυτό συνδέεται με τον υπολογιστή σας μέσω θύρας USB. Χρησιμοποίησα ένα Hidiot που είναι ουσιαστικά το ίδιο αλλά με μια περιοχή πρωτοτύπων.

Στο Arduino IDE στην ενότητα Αρχείο - Προτιμήσεις, προσθέστε

digistump.com/package_digistump_index.json

στις διευθύνσεις URL διευθυντών πρόσθετων πινάκων.

Στην περιοχή Εργαλεία - Πίνακας θα πρέπει τώρα να δείτε μια σειρά από επιλογές Digispark. Επιλέξτε Digispark (Προεπιλογή - 16,5MHz).

Εάν το ATTiny85 δεν διαθέτει πρόγραμμα εκκίνησης (ή δεν γνωρίζετε), τότε μπορείτε να πάρετε έναν προγραμματιστή AVR ISP για μερικά κιλά. Or μπορείτε να χρησιμοποιήσετε ένα Arduino Uno ή φθηνότερο Pro Mini ή Nano ως προγραμματιστή. Google για "arduino as isp attiny85" (χωρίς τα εισαγωγικά) για οδηγίες.

Εάν θέλετε να τροποποιήσετε το σκίτσο, θα το βρείτε πλήρως σχολιασμένο και ελπίζουμε ότι είναι εύκολο να το ακολουθήσετε. Για τον εντοπισμό σφαλμάτων είναι πολύ πιο εύκολο να χρησιμοποιήσετε Arduino Pro Mini ή Nano. Αποσυνδέστε το serial.begin () στο Setup και τις δηλώσεις εκτύπωσης στο βρόχο () για να δείτε τα βήματα που περνάει χρησιμοποιώντας τη σειριακή οθόνη. Υπάρχουν εναλλακτικοί ορισμοί pin στην πηγή, σχολιασμένοι, για Uno, Pro Mini ή Nano.

Στο Raspberry Pi, αντιγράψτε το αρχείο shutdown_helper.py στο φάκελο/etc/local/bin και ορίστε το ως εκτελέσιμο με την εντολή

sudo chmod +x /usr/local/bin/shutdown_helper.py

Τώρα επεξεργαστείτε το αρχείο /etc/rc.local με τον αγαπημένο σας επεξεργαστή. (Θα πρέπει να το κάνετε ως root.) Πριν από την τελευταία γραμμή (έξοδος 0) εισαγάγετε τη γραμμή

nohup /usr/local/bin/shutdown_helper.py &

Επανεκκινήστε και το πρόγραμμα βοήθειας θα ξεκινήσει αυτόματα.

Συνιστάται: