Πίνακας περιεχομένων:
- Βήμα 1: Τα υλικά
- Βήμα 2: Το ηλεκτρικό κύκλωμα
- Βήμα 3: Κωδικοποίηση των αισθητήρων
- Βήμα 4: Προετοιμασία και τοποθέτηση των αισθητήρων
- Βήμα 5: Προετοιμασία και τοποθέτηση της μονάδας μήτρας
- Βήμα 6: Κάνοντας το IoT
- Βήμα 7: Σύνδεση του Raspberry Pi
- Βήμα 8: Ρύθμιση της βάσης δεδομένων
- Βήμα 9: Δημιουργία του ιστότοπου
- Βήμα 10: Σύνδεση στον Παγκόσμιο Ιστό
- Βήμα 11: Φινίρισμα Απενεργοποίηση
Βίντεο: Raspberry Pi IoT Foosball Table: 11 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Καλώς ορίσατε στην έκδοση μου για ένα χακαρισμένο τραπέζι foosball, ως μέρος ενός φοιτητικού έργου για την τεχνολογία New Media and Communication. Βασικά μεγάλωσα γύρω από ποδοσφαιράκια και τραπέζια μπιλιάρδου, οπότε σκέφτηκα ότι θα ήταν υπέροχο να προσπαθήσω να συνδέσω μία από αυτές τις συσκευές στο διαδίκτυο.
Η κύρια ρύθμιση χρησιμοποιεί ένα υπάρχον τραπέζι foosball συνδεδεμένο με ένα Raspberry Pi το οποίο μπορεί να κάνει όλες τις ακόλουθες εργασίες:
- Χρησιμοποιεί καρφίτσες GPIO για να οδηγήσει το IR LED/δέκτες και τις μονάδες μήτρας 8x8 κουκκίδων
- Εκτελεί έναν ιστότοπο Flask χρησιμοποιώντας το nginx
- Εκτελεί μια βάση δεδομένων MySQL/MariaDB για αποθήκευση δεδομένων
Για να μπορέσετε να αναδημιουργήσετε αυτό το έργο θα χρειαστείτε τις ακόλουθες δεξιότητες:
Backend:
- Κατανόηση HTML/CSS/Javascript για τον πελάτη του ιστότοπου
- Κατανόηση της Python με Flask/Flask-SocketIO/Jinja2 για την πλευρά του διακομιστή του ιστότοπου
- Βασικές γνώσεις MySQL
- Μάθετε πώς να τρέχετε έναν διακομιστή ιστού
Πρωτότυπο
- Βασικές γνώσεις για τον τρόπο καλωδίωσης ενός ηλεκτρικού κυκλώματος
- Συγκόλληση
- Βασική κατανόηση για το πώς να γράψετε ένα σενάριο σε Python
- Εργασία με Linux (Raspbian)
- Έχοντας πολλή υπομονή γιατί θα εμπλακούν σε πολλά σφάλματα
Βήμα 1: Τα υλικά
Ακολουθεί η λίστα με όλα τα απαραίτητα μέρη για τον πίνακα:
- Raspberry Pi Model 3 (με περίβλημα)
- T-Cobbler για σύνδεση του Pi με το breadboard
- Τραπέζι Foosball (χρησιμοποίησα ένα πολύ παλιό τραπέζι παρόμοιο με αυτό. Πρέπει να είμαι πρόθυμος να ανοίξω τρύπες σε αυτό)
- MAX7219 Arduino Dot Matrix Module (2)
- Εκπομπές IR LED (2+ επειδή σπάνε, παρόμοια με αυτήν)
- Δέκτες IR (2+ επειδή σπάνε επίσης, παρόμοιο με αυτόν)
- Βασική σανίδα χωρίς κόλληση
- Πολλά σύρματα (εξαρτάται από το μέγεθος του τραπεζιού foosball)
- αρσενικοί σύνδεσμοι (30+)
- θηλυκές συνδέσεις (10+)
- Αντιστάσεις 100-220 Ohm (4+)
- υλικά συγκόλλησης
- ιμάντες σύρματος
- Κάτοχοι LED
- μερικά ξύλα/βίδες σε περίπτωση που θέλετε να μεταφέρετε την μπάλα στο λούκι
Το συνολικό κόστος αυτού του έργου εξαρτάται εξ ολοκλήρου από το κόστος του ποδοσφαιρικού σας τραπεζιού (ακριβό). Εκτός από τον πίνακα, τα υλικά θα είναι κατ 'ανώτατο όριο 150 ευρώ.
Βήμα 2: Το ηλεκτρικό κύκλωμα
Πριν επιχειρήσετε να κολλήσετε, συναρμολογήστε όλα τα εξαρτήματα που συνιστώ να το δοκιμάσετε πρώτα σε ένα breadboard. Είναι ευκολότερο να αντικαταστήσετε ελαττωματικά εξαρτήματα προτού περάσετε ώρες συγκόλλησης.
Στην αρχή προσπάθησα να υλοποιήσω τον πίνακα LED 8x8 με καταχωρητή αλλαγής 74HC595 (πρώτη εικόνα) και πίνακα τρανζίστορ, αλλά λόγω των πολλών καλωδίων και της πολύ χαμηλής εξόδου άλλαξα στη μονάδα MAX7219 Dot Matrix, επειδή παίρνει μόνο 5 καλώδια και οδηγείται απευθείας από ένα λεωφορείο SPI.
Το κύκλωμα που χρησιμοποίησα τελικά σχεδιάζεται με το Fritzing. Λάβετε υπόψη ότι τα IR LEDS και οι δέκτες μπορούν να συνδεθούν σε οποιαδήποτε από τις δωρεάν καρφίτσες GPIO.
Οι δέκτες IR και οι λυχνίες LED πρέπει να βρίσκονται ακριβώς μεταξύ τους και η κορυφή του LED πρέπει να είναι στραμμένη προς τον δέκτη. Επειδή θέλουμε να προσομοιώσουμε μια άμεση δέσμη που μπορεί να σπάσει από την κίνηση της μπάλας, οπότε θα υπάρξει αλλαγή κατάστασης της γραμμής DATA του δέκτη από 0 σε 1.
Βήμα 3: Κωδικοποίηση των αισθητήρων
Έχω κωδικοποιήσει το μεγαλύτερο μέρος αυτού του έργου χρησιμοποιώντας το Pycharm επειδή επιτρέπει την εύκολη ανάπτυξη SSH στο Raspberry Pi σας χρησιμοποιώντας απομακρυσμένο διερμηνέα. Δεν θα αναφερθώ λεπτομερώς στο πώς λειτουργεί αυτό το πρόγραμμα, αλλά πολλές πληροφορίες μπορούν να βρεθούν στον ιστότοπο του pycharm.
Αυτή τη στιγμή εξακολουθώ να εργάζομαι για το έργο, αλλά μόλις ολοκληρωθούν όλα το έργο θα είναι διαθέσιμο στο προφίλ μου στο github
Ο κωδικός για τους αισθητήρες αποτελείται από 3 κλάσεις που εκτελούνται σε ένα νήμα παρασκηνίου στον διακομιστή μου Flask (ο οποίος θα εξηγηθεί αργότερα):
- Η τάξη στόχου (σύνδεσμος) -Αυτό το αρχείο ξεκινά όλα τα ξεχωριστά στοιχεία, τα οποία μπορούν να κληθούν με την εισαγωγή της σωστής συσκευής SPI/διαύλου και αριθμού pin
- Η τάξη μήτρας (σύνδεσμος) -Αυτή είναι η κύρια τάξη για την ενεργοποίηση της μονάδας MAX7219
- Η κατηγορία LED και δέκτη (σύνδεσμος) - Αυτή είναι η κύρια τάξη για την ενεργοποίηση της υπέρυθρης δέσμης διακοπής χρησιμοποιώντας ξεχωριστά νήματα για τη μείωση του φορτίου της CPU του RPi
Η λυχνία LED και ο δέκτης λειτουργούν και οι δύο σε συχνότητα 38kHz και οι δέκτες αναμένουν πάντα ότι ο παλμός 50% πάνω και 50% κάτω θα λειτουργήσει σωστά.
Βήμα 4: Προετοιμασία και τοποθέτηση των αισθητήρων
Τώρα θα προετοιμάσουμε το IR LED και τον δέκτη. Στην εικόνα του πίνακα μπορείτε να βρείτε τις θέσεις για τις τοποθετήσεις του RPi και των αισθητήρων.
Αλλά πρώτα πρέπει να προετοιμάσουμε την καλωδίωση:
- Βεβαιωθείτε ότι μετρήσατε την ποσότητα καλωδίου που απαιτείται από τη θέση RPi/breadboard έως τη θέση του αισθητήρα
- Συγκολλήστε τις ακίδες του δέκτη IR στο ένα άκρο του σύρματος (COM/GND/V+)
- Συγκολλήστε τα αρσενικά κομμάτια σύνδεσης στο άλλο άκρο του σύρματος
Τώρα θα ετοιμάσουμε τον πίνακα:
- Κάντε ένα βασικό σχέδιο (με βάση την εικόνα) για το πού θα τρυπήσετε. Είναι πολύ σημαντικό οι 2 οπές να ευθυγραμμίζονται μεταξύ τους γιατί αυτή θα είναι η θέση της δέσμης.
- Τρυπήστε τις τρύπες
- Εάν έχετε κάτοχους LED (σύνδεσμος), μπορείτε να τους βάλετε μέσα στην τρύπα για να γίνει πιο στιβαρός
- Τοποθετήστε + κολλήστε τον δέκτη LED + και στις δύο πλευρές
- Κολλήστε τα καλώδια + κολλήστε τα στο ξύλο, ώστε να μην περάσουν πολύ
- Τοποθετήστε τις αρσενικές καρφίτσες στη σανίδα ψωμιού σύμφωνα με το παρεχόμενο κύκλωμα
Βήμα 5: Προετοιμασία και τοποθέτηση της μονάδας μήτρας
Στη συνέχεια θα συνδέσουμε τις 2 μονάδες μήτρας LED
Σημείωση:
Επειδή χρησιμοποίησα ένα παλιό τραπέζι για ποδόσφαιρο, υπήρχαν ήδη τρύπες που ανεβαίνουν προς το πάνω μέρος λόγω των κατόχων τσιγάρων. Εάν δεν έχετε αυτά, θα πρέπει να τα δημιουργήσετε.
Για να προετοιμάσετε τα καλώδια:
- Μετρήστε το σύρμα από το breadboard προς το επάνω μέρος του τραπεζιού
- Συγκολλήστε μερικές θηλυκές συνδέσεις στο πρώτο άκρο του σύρματος
- Συγκολλήστε μερικούς αρσενικούς συνδετήρες στο άλλο άκρο του σύρματος
Τοποθέτηση της μήτρας:
- Βγάλτε τη μήτρα μέσα από την τρύπα στην κορυφή
- Λουρί + κολλήστε τα σύρματα στο ξύλο για να αποφύγετε τη διασταύρωση
- Τοποθετήστε τις αρσενικές καρφίτσες στο breadboard σύμφωνα με το προηγούμενο circui
Κάποια στιγμή θα προσθέσω ένα μικρό βήμα DIY για να προσθέσω ένα περίβλημα για τη μονάδα μήτρας, αλλά προς το παρόν είναι γυμνοί.
Βήμα 6: Κάνοντας το IoT
Εάν θέλετε απλώς να εγγραφείτε και να εμφανίσετε τις παρτιτούρες, μπορείτε να ολοκληρώσετε το έργο γράφοντας ένα μικρό σενάριο python που τρέχει και βγαίνει μέχρι να φτάσει ένα από τα σκορ στο 9 και στη συνέχεια να μηδενιστεί.
Ωστόσο, εάν θέλετε να συνδέσετε το τραπέζι σας στο Διαδίκτυο, τα επόμενα βήματα πρέπει να φτάσουν στο δρόμο σας.
Στα επόμενα βήματα θα αντιμετωπίσουμε τα εξής:
- Διαμόρφωση του Raspberry Pi
- Δημιουργία βάσης δεδομένων για αποθήκευση
- Δημιουργία της ιστοσελίδας
- Βάζοντας το στο διαδίκτυο
Σε αυτό το σημείο, εάν είστε εξοικειωμένοι με το git, σας συνιστώ να δημιουργήσετε ένα αποθετήριο στο GitHub/GitLab για να παρακολουθείτε τα αρχεία σας. Εάν δεν είστε, μπορείτε να δημιουργήσετε ένα φάκελο με την ίδια δομή όπως στην εικόνα.
Το πλήρες έργο θα είναι διαθέσιμο σύντομα στο GitHub. Ωστόσο, είναι διαθέσιμο ένα προσωρινό αρχείο rar με όλα τα απαραίτητα αρχεία.
Βήμα 7: Σύνδεση του Raspberry Pi
Στη συνέχεια θα ρυθμίσουμε το περιβάλλον raspberry pi, για να το κάνετε αυτό πρέπει να εκτελέσετε τα ακόλουθα βήματα:
- Συνδεθείτε μέσω SSH στο Rasberry Pi σας (μπορείτε να χρησιμοποιήσετε το PuTTY)
- Δημιουργήστε ένα φάκελο (παράδειγμα mkdir project) και μεταβείτε σε αυτόν το φάκελο χρησιμοποιώντας την εντολή cd
- Δημιουργήστε ένα εικονικό περιβάλλον Python σε αυτόν τον φάκελο χρησιμοποιώντας την εντολή python3 -m venv --system-site-packages env
- Ενεργοποιήστε τον εικονικό διερμηνέα με την εντολή source/env/bin/activ
- Εγκαταστήστε τα πακέτα από τις απαιτήσεις.txt με την εντολή python -m pip install package -name
- Μεταφέρετε τα αρχεία από το παρεχόμενο στο παρελθόν αρχείο project_example.rar μέσω SSH στο φάκελο του έργου σας
Τώρα θα πρέπει να μπορείτε να εκτελέσετε ολόκληρο το έργο στο Raspberry Pi σας. Σας συμβουλεύω να χρησιμοποιήσετε ένα Python IDE όπως το PyCharm, το οποίο σας επιτρέπει να κάνετε χρήση σφαλμάτων από τον απομακρυσμένο διερμηνέα σας μέσω SSH και να ανεβάζετε απευθείας αλλαγές εάν είναι απαραίτητο.
Βήμα 8: Ρύθμιση της βάσης δεδομένων
Τώρα πρέπει να δημιουργήσετε μια πολύ βασική βάση δεδομένων, με βάση αυτό το μοντέλο.
Ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να δημιουργήσετε τη βάση δεδομένων σας στον πάγκο εργασίας MySQL, όπου μπορείτε επίσης να κάνετε κάποια δοκιμή.
Μόλις τελειώσετε, μπορείτε να εξάγετε μια χωματερή της βάσης δεδομένων σας και να την ανεβάσετε στο RPi σας και, στη συνέχεια, να την εκτελέσετε με το sudo mariadb <pathtofile/file.sql
Βήμα 9: Δημιουργία του ιστότοπου
Στη συνέχεια, μπορείτε να αναλύσετε (και να χρησιμοποιήσετε) τον κώδικα που παρέχεται στο αρχείο project_example.rar.
Το κύριο αρχείο είναι το Flask.py που είναι το ψωμί και το βούτυρο αυτού του έργου:
- Εκτελεί μια εφαρμογή Flask-SocketIO που χειρίζεται το backend του ιστότοπου
- Δημιουργεί μια σύνδεση μεταξύ της βάσης δεδομένων και του Flask
- Παρέχει επικύρωση σύνδεσης και εγγραφή χρήστη
- Παρέχει τον απαραίτητο κώδικα για τον τρόπο παιχνιδιού που χρησιμοποιεί το socketio για την ενημέρωση του ιστότοπου σε πραγματικό χρόνο κατά τη διάρκεια του παιχνιδιού
- Τοποθετεί τα αποτελέσματα του παιχνιδιού στη βάση δεδομένων
Στους φακέλους στατικών και προτύπων μπορείτε να βρείτε το HTML/CSS/JS που παρέχουν το προστιθέμενο μέρος του ιστότοπου. Μη διστάσετε να τα τροποποιήσετε σύμφωνα με τις δικές σας προτιμήσεις.
Βήμα 10: Σύνδεση στον Παγκόσμιο Ιστό
Για να συνδέσουμε τον ιστότοπό μας στον ιστό θα χρησιμοποιήσουμε nginx και uwsgi. Στο παράδειγμα του έργου μπορείτε να βρείτε τα απαραίτητα αρχεία στο φάκελο conf.
Πρώτα απ 'όλα πρέπει να ενημερώσετε τα ακόλουθα σε αυτά τα αρχεία:
- Στο uwsgi-flask.ini πρέπει να αλλάξετε τη διαδρομή της παραμέτρου virtualenv στον διερμηνέα σας
- Στην υπηρεσία project1-flask.service πρέπει να ενημερώσετε το τμήμα [Υπηρεσία] του αρχείου με τα διαπιστευτήριά σας και τις διαδρομές προς τα σχετικά αρχεία
- Στο αρχείο nginx u πρέπει να ενημερώσετε τον διακομιστή και τη θέση / διαδρομή στη σχετική πρίζα σας
Στη συνέχεια, πρέπει να αντικαταστήσετε το προεπιλεγμένο αρχείο διακομιστή nginx με τη θέση του αρχείου διαμόρφωσης nginx, παρακάτω είναι ένα παράδειγμα εντολών Linux για να το κάνετε αυτό
- me@my-rpi:/project1 $ sudo cp conf/nginx/etc/nginx/sites-available/project1
- me@my-rpi: ~/project1 $ sudo rm/etc/nginx/sites-enabled/defaul t
- me@my-rpi:/project1 $ sudo ln -s/etc/nginx/sites-available/project1/etc/nginx/sites-enabled/project1
- me@my-rpi: ~/project1 $ sudo systemctl επανεκκίνηση nginx.service
Τέλος, πρέπει να προσθέσετε τις προσαρμοσμένες υπηρεσίες στον φάκελο systemd, αυτό είναι ένα παράδειγμα για το πώς να το κάνετε:
- me@my-rpi: ~/project1 $ sudo cp conf/project1-*. service/etc/systemd/system/
- me@my-rpi: ~/project1 $ sudo systemctl daemon-reload
- me@my-rpi: ~/project1 $ sudo systemctl start project1-*
- me@my-rpi: ~/project1 $ sudo systemctl status status1-*
Εάν θέλετε ο διακομιστής ιστού να ξεκινήσει κατά την εκκίνηση του raspberry pi, πρέπει να χρησιμοποιήσετε την εντολή υπηρεσίας sudo systemctl enable project1-*.
Εάν γίνει σωστά, μετά την επανεκκίνηση του συστήματος, ο ιστότοπός σας θα πρέπει να λειτουργεί στη διεύθυνση IP σας. Εάν θέλετε να επεξεργαστείτε ένα από αυτά τα αρχεία διαμόρφωσης, πρέπει πάντα να διακόψετε την υπηρεσία, να φορτώσετε ξανά τα αρχεία και να χρησιμοποιήσετε την εντολή daemon-reload ακολουθούμενη από έναρξη, διαφορετικά οι αλλαγές δεν θα είναι αποτελεσματικές.
Βήμα 11: Φινίρισμα Απενεργοποίηση
Ενώ πληκτρολογείτε το τελευταίο μέρος αυτού του διδακτέου, αυτό το μικρό σχολικό έργο είναι ακόμα σε εξέλιξη.
Έχω περάσει αμέτρητες ώρες για να το κάνω αυτό σε 2,5 εβδομάδες. Παρόλο που όλα βιάστηκαν λίγο, είμαι ακόμα περήφανη για όσα έχω επιτύχει. Κατά τη φάση της συναρμολόγησης έχω συναντήσει αμέτρητα σφάλματα/σφάλματα/ελαττωματικούς αισθητήρες, οπότε μην αποθαρρύνεστε αν δεν λειτουργούν όλα στην πρώτη δοκιμή.
Το καλύτερο που μπορείτε να κάνετε είναι να ζητήσετε ή να αναζητήσετε βοήθεια στο διαδίκτυο, υπάρχουν πολλοί άνθρωποι με πολύ καλύτερες γνώσεις που είναι πολύ πρόθυμοι να σας βοηθήσουν.
Τέλος, θέλω να ευχαριστήσω τους καθηγητές μου από τα Νέα Μέσα και Τεχνολογία Επικοινωνίας που μου έδωσαν πολλές συμβουλές και με βοήθησαν να ολοκληρώσω αυτό το έργο.
Συνιστάται:
Arduino Interactive LED Coffee Table: 6 Βήματα (με Εικόνες)
Arduino Interactive LED Coffee Table: Έφτιαξα ένα διαδραστικό τραπεζάκι σαλονιού που ανάβει τα φώτα led κάτω από ένα αντικείμενο, όταν το αντικείμενο τοποθετείται πάνω από το τραπέζι. Μόνο τα led που βρίσκονται κάτω από αυτό το αντικείμενο θα φωτιστούν. Το κάνει αυτό χρησιμοποιώντας αποτελεσματικά αισθητήρες εγγύτητας και όταν ο εγγύς
MAME Gaming Table With Raspberry Pi: 5 βήματα
MAME Gaming Table With Raspberry Pi: Εμπνευσμένο από παρόμοια έργα στο διαδίκτυο, συνεργάζομαι με έναν γείτονα για να φτιάξω ένα ζευγάρι τραπεζιών καφέ με ρετρό τραπεζάκια με βάση το MAME. Το πιο συμπαγές είναι το δικό μου. το μεγαλύτερο με δύο σετ χειριστηρίων είναι δικό του. Οι φωτογραφίες και των δύο χρησιμοποιούνται σε αυτό το εργαλείο
WebFoos - ένα έξυπνο τραπέζι Foosball: 6 βήματα
WebFoos - Ένα έξυπνο τραπέζι Foosball: Για το σχολικό μου έργο το πρώτο έτος στο Howest, αποφάσισα να φτιάξω ένα έξυπνο τραπέζι Foosball. Ο πίνακας καταγράφει τα γκολ και αποθηκεύει αγώνες, στατιστικά αγώνων και στατιστικά χρηστών/ομάδων σε διαδικτυακό ιστότοπο
Arduino Servo Foosball: 5 Βήματα
Arduino Servo Foosball: από τους David Joy και Andrew Gothard
Αυτόνομο τραπέζι Foosball: 5 βήματα (με εικόνες)
Αυτόνομο τραπέζι Foosball: Ο κύριος στόχος του έργου ήταν να ολοκληρωθεί ένα πρωτότυπο εργασίας για ένα Αυτόνομο τραπέζι Foosball (AFT), όπου ένας παίκτης αντιμετωπίζει έναν ρομποτικό αντίπαλο. Από την ανθρώπινη οπτική γωνία του παιχνιδιού, το τραπέζι foosball μοιάζει πολύ με ένα κανονικό τραπέζι. Το παιχνίδι