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

Σιντριβάνι χωρίς επαφή: 9 βήματα (με εικόνες)
Σιντριβάνι χωρίς επαφή: 9 βήματα (με εικόνες)

Βίντεο: Σιντριβάνι χωρίς επαφή: 9 βήματα (με εικόνες)

Βίντεο: Σιντριβάνι χωρίς επαφή: 9 βήματα (με εικόνες)
Βίντεο: Οι 7 ΚΑΛΥΤΕΡΕΣ Online Δουλειές | Χωρίς Εμπειρία 2024, Ιούλιος
Anonim
Σιντριβάνι χωρίς επαφή
Σιντριβάνι χωρίς επαφή

Στο τέλος του πρώτου έτους μου ως φοιτητής MCT μου ανατέθηκε να φτιάξω ένα έργο που θα περιείχε όλες τις δεξιότητες που είχα πάρει από τα μαθήματα όλο το χρόνο.

Έψαχνα για ένα έργο που θα έλεγχε όλες τις απαιτήσεις που έθεσαν οι καθηγητές μου και ταυτόχρονα θα ήταν διασκεδαστικό για μένα. Όταν έψαχνα για ένα θέμα, δεν μπορούσα παρά να νιώσω εμπνευσμένος από τον Covid-19 (αυτό ήταν ακριβώς πριν ξεσπάσει σε παγκόσμιο ξέσπασμα.) Διάλεξα για μια επαφή λιγότερο σιντριβάνι/διανομέα νερού, καθώς θα προσέφερε έναν τρόπο πόσιμο νερό χωρίς να αγγίξετε μερικά κουμπιά πριν βγει νερό.

Αυτό το έργο χρησιμοποιεί έναν αισθητήρα απόστασης για να ανιχνεύσει εάν ένα φλιτζάνι ή ένα ποτήρι έχει τοποθετηθεί κάτω από την έξοδο νερού, το σιντριβάνι θα προχωρήσει στην έξοδο νερού για 60 δευτερόλεπτα (100ml / λεπτό). Αυτό γίνεται για να είναι πιο συνεπής επειδή η ανίχνευση εάν το γυαλί έχει απομακρυνθεί αποδείχθηκε πολύ δύσκολη/αργή σε μια εργασία, γι 'αυτό και τοποθετήθηκε ένα χρονόμετρο. Αφού γεμίσετε το ποτήρι σας με 100 ml νερό, μπορείτε να περιμένετε για 5 δευτερόλεπτα και αν το ποτήρι βρίσκεται ακόμα μπροστά από τον αισθητήρα απόστασης, θα γεμίσει άλλη φορά (αυτό σημαίνει επίσης ότι υπάρχει ένα χρονικό όριο 5 δευτερολέπτων μεταξύ της πλήρωσης δύο διαφορετικών αντικείμενα).

Προμήθειες

Συστατικά

- 1x RaspberryPi (χρησιμοποίησα την 4η έκδοση αλλά μπορεί να λειτουργήσουν και παλαιότερες εκδόσεις)- 1x τρανζίστορ S8050 ή 1x τρανζίστορ PN2222 μπορεί επίσης να λειτουργήσει- 1x Φωτοαντίσταση- 1x HC-SR04 (Υπερηχητικός αισθητήρας απόστασης)- 1x RFID-RC522- 3x Διαφορετικά χρώματα LED (μπλε, κίτρινο, κόκκινο)- 1x LCD1602- 1x Active Buzzer- 1x PCF8574- 1x MCP3008- 1x Αντλία νερού (χρησιμοποιήθηκε περισταλτική αντλία 12v, σύνδεσμος σε αυτό το στοιχείο)

- 1x τροφοδοτικό DC (12v, 600mAh)- 1x τούβλο τροφοδοσίας με 3 κηλίδες- 3x breadboards (πιθανότατα θα μπορούσατε να χρησιμοποιήσετε λιγότερο)- T-cobbler για καρφίτσες RaspberryPi GPIO- T-cobbler καλώδιο (για σύνδεση μεταξύ pi και cobbler)

Υλικά και εργαλεία που χρησιμοποιούνται

- Τρυπάνι με τα ακόλουθα τρυπάνια:

- 4mm (για να τρυπήσετε τρύπες για τις βίδες) - 15mm (για να ανοίξετε τρύπες για τον αισθητήρα απόστασης)

- Οποιοδήποτε κατσαβίδι- 30 βίδες μήκους 45mm- 6 βίδες 20mm- 2 μεντεσέδες για την πόρτα- Μια πλάκα από MDF περίπου 130εκ επί 80εκ

Βήμα 1: Συναρμολόγηση του κυκλώματος

Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος

Για το κύκλωμα έχουμε 2 αισθητήρες, έναν αισθητήρα απόστασης και ένα φωτοαντίσταση. Ο αισθητήρας απόστασης χρησιμοποιείται για να ανιχνεύσει εάν ένα κύπελλο έχει τοποθετηθεί στην περιοχή της βρύσης και προαιρετικά πρόσθεσα μια φωτοαντίσταση, αυτή χρησιμοποιείται για να ανιχνεύσει εάν το περίβλημα έχει ανοίξει από κάποιον που δεν υποτίθεται ότι θα το ανοίξει. Επιπλέον, έχουμε έναν αναγνώστη RFID που μπορεί να χρησιμοποιηθεί για τον έλεγχο ταυτότητας ενός μηχανικού που πρέπει να ανοίξει τη θήκη για να ξαναγεμίσει τη δεξαμενή νερού ή για κάποιο άλλο μηχανικό ζήτημα.

Για τα ενεργά στοιχεία έχουμε το LCD1602, τον ενεργό βομβητή και μια περισταλτική αντλία, η οθόνη LCD χρησιμοποιείται για την εμφάνιση κατάστασης όπως εάν η θήκη είναι ανοιχτή ή η αντλία λειτουργεί καθώς και η διεύθυνση IP της συσκευής θα εμφανιστεί, ο βομβητής είναι χρησιμοποιείται για να κάνει έναν ανησυχητικό ήχο όταν η θήκη έχει ανοίξει χωρίς κάποιος να την εξουσιοδοτήσει.

Έχω προσθέσει το breadboard και τις σχηματικές όψεις του κυκλώματος παρακάτω.

Βήμα 2: Ρύθμιση του RaspberryPi μας

Για να ρυθμίσετε το RaspberryPi, θα κατεβάσουμε το λογισμικό απεικόνισης από τον ιστότοπο Raspberry, με αυτό μπορείτε να κατεβάσετε την έκδοση του Raspbian που θέλετε και να απεικονίσετε την SDCARD σας για εσάς. Αφού αυτό το εργαλείο έχει κάνει τη δουλειά του, μπορείτε να ανοίξετε την SDCARD στην Εξερεύνηση των Windows, θα μπορείτε να δείτε το διαμέρισμα εκκίνησης του RaspberryPi σας. Εδώ θα βρούμε ένα αρχείο που ονομάζεται cmdline.txt (μην ανοίξετε αυτό το αρχείο στο σημειωματάριο, ανοίξτε το στο Σημειωματάριο ++ ή σε οποιοδήποτε άλλο IDE). Θα προσθέσουμε ip = 169.254.10.1 στο τέλος αυτού του αρχείου για να βεβαιωθούμε ότι μπορούμε να συνδεθούμε στη συσκευή μας μέσω ethernet (βεβαιωθείτε ότι δεν προσθέτετε κανένα ENTERS στο τέλος του αρχείου σας, διαφορετικά θα έχετε πρόβλημα).

Τώρα μπορείτε να τοποθετήσετε την κάρτα SDC στο RaspberryPi και να την εκκινήσετε, να συνδέσετε το Pi στον υπολογιστή σας και να χρησιμοποιήσετε το Putty για να συνδεθείτε στο Pi σας μέσω SSH. Χρησιμοποιώ την ακόλουθη εντολή για να συνδεθώ στο Pi μου αντί να χρησιμοποιήσω Putty. "ssh [email protected]" αυτό μπορεί να λήξει, οπότε κάντε υπομονή και περιμένετε να ξεκινήσει το Pi. Μόλις σας ζητηθεί κωδικός πρόσβασης, θα συμπληρώσουμε τον προεπιλεγμένο κωδικό πρόσβασης "βατόμουρο". Βεβαιωθείτε ότι έχετε αλλάξει αυτόν τον κωδικό πρόσβασης μετά τη σύνδεση, για να αποτρέψετε οποιονδήποτε με κακή πρόθεση να έχει πρόσβαση στο Raspberry Pi σας.

Τώρα θα διαμορφώσουμε το Pi μας για να παρέχει την απαραίτητη λειτουργικότητα για τον κωδικό μας. Χρησιμοποιήστε το "sudo raspi-config" για να ανοίξετε το μενού διαμόρφωσης και εδώ θα μεταβείτε στις Επιλογές διασύνδεσης.

Κάτω εδώ θα ενεργοποιήσουμε τις ακόλουθες επιλογές ON:- SPI- I2C

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

Πακέτα: (εκτελέστε τις εντολές με τη σειρά όπως σημειώνονται εδώ)

Τα παρακάτω για να λάβετε τις πιο πρόσφατες ενημερώσεις για την ενημέρωση && apt αναβάθμισης a -Pi

Εγκαταστήστε τον διακομιστή MySQL και τον διακομιστή ιστού- sudo apt install mariadb-server apache2

Θα χρησιμοποιήσω το MySQL Workbench για να ρυθμίσω τη βάση δεδομένων αργότερα σε αυτόν τον οδηγό, αν δεν το χρησιμοποιήσετε και προτιμάτε το phpmyadmin, μπορείτε να το εγκαταστήσετε με την ακόλουθη εντολή, είστε ελεύθεροι να χρησιμοποιήσετε οποιοδήποτε άλλο MySQL Client, αρκεί να Είμαι σε θέση να εισάγω σωστά τη βάση δεδομένων.- sudo apt install phpmyadmin

Αφού κάνετε όλα τα παραπάνω, πρέπει να δημιουργήσουμε έναν χρήστη για τη βάση δεδομένων μας. Χρησιμοποιήστε "sudo mysql -u root" για να συνδεθείτε στον διακομιστή MySQL, εδώ θα δημιουργήσουμε έναν χρήστη που ονομάζεται db_admin με τον αντίστοιχο κωδικό πρόσβασής του, κρατήστε αυτός ο κωδικός πρόσβασης σημειώθηκε κάπου αργότερα στις οδηγίες. ΒΑΘΜΙΣΤΕ ΟΛΕΣ ΤΙΣ ΠΡΟΤΙΜΗΣΕΙΣ *. * ΣΤΟ "db_admin"@"%" ΤΑΥΤΟΠΟΙΗΘΗΚΕ ΑΠΟ "yourPasswordHere" ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ.

Χρησιμοποιήστε την εντολή "\ q" για έξοδο από το τερματικό MySQL.

Πακέτα Python: Πρέπει ακόμη να εγκαταστήσουμε κάποια πακέτα python πριν προχωρήσουμε, εκτελέστε την παρακάτω εντολή για να βεβαιωθείτε ότι όλα είναι εκεί για μια άψογη εμπειρία.

sudo pip3 install Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Καθώς και τα ακόλουθα MySQL connect python packagesudo apt install python3 -mysql.connector -y

Εάν όλα έγιναν σωστά, μπορείτε τώρα να επισκεφτείτε το Pi σας στο πρόγραμμα περιήγησής σας με την ακόλουθη διεύθυνση

Βήμα 3: Ρύθμιση του Backend

Ρύθμιση του Backend
Ρύθμιση του Backend

Εδώ θα εξηγήσω πώς μπορείτε να ρυθμίσετε μόνοι σας το backend, πρώτα να κατεβάσετε το αρχείο rar από κάτω, να το καταργήσετε σε κάποιο προσωρινό κατάλογο. Συνδεθείτε στο RaspberryPi με το FileZilla ή το WinSCP με τα ακόλουθα διαπιστευτήρια:

IP: 169.254.10.1 Χρήστης: piPassword: βατόμουρο (αν αλλάξατε τον κωδικό πρόσβασης κάντε το και εδώ)

Στη συνέχεια, μπορείτε να προχωρήσετε στη μεταφορά των αρχείων που καταργήσατε σε οποιονδήποτε κατάλογο θέλετε στον αρχικό κατάλογο του χρήστη pi. Για λόγους απλότητας, θα υποθέσουμε σε αυτήν τη ρύθμιση ότι έχουμε ανεβάσει όλα τα αρχεία μας στον κατάλογο εγγράφων.

Κρατήστε το πρόγραμμα FTP ανοιχτό για το επόμενο βήμα!

Τώρα ανοίξτε ξανά τη γραμμή εντολών με τη σύνδεση SSH, επειδή θα χρειαστεί να κάνουμε κάποιες αλλαγές στον διακομιστή ιστού, ώστε το frontend να μπορεί να επικοινωνεί με το backend. Θα ανοίξουμε το προεπιλεγμένο αρχείο ρυθμίσεων Apache2 και θα το τροποποιήσουμε ελαφρώς: sudo nano /etc/apache2/sites-available/000-default.conf

Προσθέστε τις ακόλουθες γραμμές παρακάτω DocumentRoot στο αρχείο ρυθμίσεων που μόλις ανοίξαμε: ProxyPass/api/https://127.0.0.1:5000/api/ProxyPassReverse/api/https://127.0.0.1:5000/api/

Μπορείτε να ρίξετε μια ματιά στην εικόνα που επισυνάπτεται για παράδειγμα.

Βήμα 4: Ρύθμιση του Frontend

Πριν από τη μεταφορά των αρχείων μας, θα πρέπει να κάνουμε κάτι πριν ξεκινήσουμε τη μεταφορά των αρχείων μας. Ανοίξτε τη γραμμή εντολών με τη σύνδεση SSH που κάνατε προηγουμένως και χρησιμοποιήστε την παρακάτω εντολή για να μεταβείτε στον ριζικό χρήστη του RaspberryPi: "sudo su -"

Μετά από αυτό, μπορούμε να αλλάξουμε τον κωδικό πρόσβασης του root χρήστη μας με την ακόλουθη εντολή: "passwd" Αυτό θα σας ζητήσει να εισαγάγετε έναν νέο κωδικό πρόσβασης, αφού το κάνετε αυτό, μπορείτε να επιστρέψετε στο πρόγραμμα FTP και να συνδεθείτε με τα διαπιστευτήριά σας root:

IP: 169.254.10.1 Χρήστης: root Κωδικός πρόσβασης:

Κατεβάστε το αρχείο rar από κάτω και καταργήστε την κατάργησή του σε έναν προσωρινό φάκελο, μπορείτε να μετακινήσετε αυτά τα αρχεία στο RaspberryPi στον ακόλουθο κατάλογο/var/www/html/, αφού το κάνετε αυτό, μπορείτε να επισκεφθείτε το frontend στο http:/ /169.254.10.1, δεν μπορείτε να αλληλεπιδράσετε ακόμη επειδή το backend δεν εκτελείται ακόμη, θα σας δείξω αργότερα σε αυτόν τον οδηγό πώς να το κάνετε αυτό.

Βήμα 5: Εισαγωγή της βάσης δεδομένων για το έργο μας

Εισαγωγή της βάσης δεδομένων για το έργο μας
Εισαγωγή της βάσης δεδομένων για το έργο μας
Εισαγωγή της βάσης δεδομένων για το έργο μας
Εισαγωγή της βάσης δεδομένων για το έργο μας

Ανοίξτε το αγαπημένο σας πρόγραμμα διαχείρισης διακομιστή MySQL και συνδεθείτε στο Raspberry Pi με τα διαπιστευτήρια που δημιουργήσαμε στο Βήμα 2.

Κατεβάστε την ένδειξη βάσης δεδομένων από κάτω και εισαγάγετε την κανονικά, MySQL workbench θα μεταβείτε στο Αρχείο> Άνοιγμα SQL Script και θα επιλέξετε την χωματερή βάσης δεδομένων που κατεβάσατε. Στη συνέχεια, πατήστε CTRL + SHIFT + ENTER και το σενάριο SQL πρέπει να εκτελεστεί και η δομή για τη βάση δεδομένων θα πρέπει να δημιουργηθεί.

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

Βήμα 6: Έναρξη του έργου μας

Έναρξη του έργου μας
Έναρξη του έργου μας
Έναρξη του έργου μας
Έναρξη του έργου μας

Πριν ξεκινήσουμε το έργο μας, πρέπει να αλλάξουμε τα διαπιστευτήρια της βάσης δεδομένων στο αρχείο config.py, αν ακολουθήσατε τις οδηγίες ακριβώς όπως είπε αυτός ο οδηγός, μπορείτε να τα βρείτε στο /home/pi/Documents/Backend/src/config.py εδώ πρέπει να αλλάξετε τα διαπιστευτήρια της μεταβλητής db_config για να ταιριάζει με αυτά που δημιουργήσαμε νωρίτερα για τη βάση δεδομένων μας. Έχω προσθέσει ένα παράδειγμα αυτού που θα δείτε σε αυτό το αρχείο παρακάτω.

Μετά από αυτό, θα προσθέσουμε ένα αρχείο.service, το οποίο θα βεβαιωθεί ότι το έργο μας ξεκινά όταν ξεκινήσει το RaspberryPi, βεβαιωθείτε ότι έχετε αλλάξει τον κατάλογο κατάλληλα από το σημείο που εγκαταστήσατε τα αρχεία backend. Χρησιμοποιήστε την ακόλουθη εντολή για να δημιουργήσετε το αρχείο υπηρεσίας: sudo nano /etc/systemd/system/dispenser.serviceΑυτό θα δημιουργήσει ένα αρχείο υπηρεσίας και θα αντιγράψει επικολλήστε τον παρακάτω κώδικα σε αυτό το αρχείο.

[Μονάδα] Περιγραφή = Διανομέας νερού Μετά = mysql.service

[Service] Type = simpleRestart = alwaysRestartSec = 1User = piExecStart =/usr/bin/python3 /home/pi/Documents/Backend/index.py

[Εγκατάσταση] WantedBy = multi-user.target

Τροποποιήστε τη γραμμή όπου γράφει /home/pi/Documents/Backend/index.py όπου εγκαταστήσατε τα αρχεία backend, εάν δεν το κάνετε σωστά, το έργο δεν θα ξεκινήσει σωστά! Θα προσθέσω ένα παράδειγμα αρχείου παρακάτω.

Αφού το κάνετε αυτό και βγείτε από τον επεξεργαστή κειμένου, μπορούμε να ενεργοποιήσουμε την υπηρεσία με τις ακόλουθες εντολές:- sudo systemctl daemon-reload- sudo systemctl ενεργοποίηση διανομέας- sudo systemctl εκκίνηση

Και ως επιπλέον μπορούμε να εκτελέσουμε: διανομέα κατάστασης sudo systemctl Αυτό θα εμφανίσει ορισμένες πληροφορίες σχετικά με την υπηρεσία μας, εάν είναι ενεργές ή όχι,…

Βήμα 7: Η υπόθεση

Η υπόθεση
Η υπόθεση
Η υπόθεση
Η υπόθεση
Η υπόθεση
Η υπόθεση
Η υπόθεση
Η υπόθεση

Συγχαρητήρια είμαστε σχεδόν εκεί, θα προσθέσω μερικές εικόνες που θα δείχνουν με ακρίβεια τις διαστάσεις που χρησιμοποίησα για το έργο μου, χρησιμοποίησα πλάκες MDF πάχους 18mm, προαιρετικά μπορείτε να χρησιμοποιήσετε διαφορετικό πάχος. Το περίβλημα μου μπορεί να χρησιμοποιηθεί ως οδηγός για να σχεδιάσετε το δικό σας ή μπορείτε να αναδημιουργήσετε αυτό που έφτιαξα. (Εάν χρησιμοποιείτε διαφορετικό πάχος MDF, τα σχέδιά μου δεν θα σας επιτρέπουν πλέον να κάνετε το σχέδιό μου, φροντίστε να το προσαρμόσετε!) 32cm (κάτω πλάκα)- 2 πάνελ 16cm επί 24cm (μπροστινή πλάκα όπου μένει η LCD και γειτονική πλάκα)- 1 πάνελ 28cm επί 24cm (μεσαία πλάκα φαίνεται από μπροστά)- 1 πάνελ 30cm επί 24cm (επάνω πλάκα)

Βήμα 8: Θαυμάστε το Τελικό Προϊόν

Θαυμάστε το Τελικό Προϊόν
Θαυμάστε το Τελικό Προϊόν
Θαυμάστε το Τελικό Προϊόν
Θαυμάστε το Τελικό Προϊόν

Έχετε φτάσει στο τέλος και μέχρι τώρα ελπίζετε ότι έχετε καταφέρει να κάνετε το όλο πράγμα πραγματικότητα. Εάν είστε απλώς ένας περαστικός που διαβάζει, επίσης καλώς ήρθατε, σας ευχαριστώ που διαβάσατε μέχρι το τελευταίο βήμα!

Ξόδεψα πολύ αίμα, ιδρώτα και δάκρυα σε αυτό το έργο, οπότε θα το εκτιμούσα αν αφήνατε ένα σχόλιο, οποιαδήποτε κριτική για τη βελτίωσή του είναι ευπρόσδεκτη!

Βήμα 9: Τα προβλήματα

Θα έβαζα το έργο στην τρέχουσα κατάσταση ως ένα πρωτότυπο εργασίας που μπορεί να δει πολύ περισσότερες βελτιώσεις.

Η βάση κώδικα του backend είναι δομημένη με τέτοιο τρόπο ώστε να μπορεί να δημιουργηθεί τέλεια μια βασική σχέση slave όπου ένα σιντριβάνι θα λειτουργούσε ως το κύριο προβάδισμα και όλα τα άλλα συντριβάνια θα προωθούσαν δεδομένα και αλλαγές στο API REST του master. Υπάρχουν επίσης υπολείμματα ενός συστήματος συμβόλων API στον κώδικα καθώς αυτό προοριζόταν να εφαρμοστεί, αλλά κόπηκε αργότερα λόγω χρονικών περιορισμών.

Έχω ανεβάσει τον κωδικό μου στον διακομιστή Gitlab και εκεί μπορείτε να ρίξετε μια ματιά στον κώδικα ως σύνολο:

Συνιστάται: