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

CleanBot από τον Guillaume Meurillon: 8 βήματα
CleanBot από τον Guillaume Meurillon: 8 βήματα

Βίντεο: CleanBot από τον Guillaume Meurillon: 8 βήματα

Βίντεο: CleanBot από τον Guillaume Meurillon: 8 βήματα
Βίντεο: Cleanbot Νέας Σμύρνης 2024, Ιούλιος
Anonim
CleanBot από τον Guillaume Meurillon
CleanBot από τον Guillaume Meurillon
CleanBot από τον Guillaume Meurillon
CleanBot από τον Guillaume Meurillon

Αυτός είναι ένας οδηγός για ένα έργο που έφτιαξα για το σχολείο. Ο στόχος ήταν να δημιουργηθεί μια συσκευή με το Raspberry Pi που ήταν συνδεδεμένη στο διαδίκτυο, ενώ συλλέγει δεδομένα από αισθητήρες. Αυτά τα δεδομένα έπρεπε να αποθηκευτούν σε μια βάση δεδομένων (MySQL). Τα δεδομένα έπρεπε να απεικονιστούν με έναν ιστότοπο, κωδικοποιημένο σε Python με το πακέτο webapp Flask και πρότυπο Jinja2.

Η ιδέα μου ήταν να δημιουργήσω ένα «χακαρισμένο» κενό ρομπότ, χρησιμοποιώντας ένα Raspberry Pi, ένα Arduino, ένα ήδη σπασμένο κενό ρομπότ και ένα σωρό αισθητήρες.

Βήμα 1: Συλλογή των τμημάτων

Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών
Συλλογή των μερών

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

Η λίστα με τα μέρη θα συμπεριληφθεί ως αρχείο, έτσι ώστε να μπορείτε εύκολα να αναζητήσετε τα μέρη που θα χρειαστείτε.

Αποφάσισα να χρησιμοποιήσω ένα Arduino Uno δίπλα στο Raspberry Pi, έτσι ώστε να μπορώ να διαβάζω αποτελεσματικά τους αισθητήρες μου χωρίς να τονίζω το Raspberry Pi. Επίσης επέλεξα για το Uno επειδή έχει ωραία ταχύτητα ρολογιού και λόγω των αναλογικών ακίδων. Θα μπορούσα να είχα χρησιμοποιήσει ένα ADC (π.

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

Λίστα μερών:

  • Raspberry Pi 3 με τουλάχιστον 8 GB MicroSD κλάσης 10 και θήκη.
  • Raspberry Pi T-τσαγκάρης και ψωμί
  • Arduino Uno ή παρόμοιο (κατά προτίμηση μια μη κινέζικη έκδοση με αξιοπρεπή ADC, ορισμένα κινέζικα έχουν θέματα AREF) με κάποιο είδος θήκης.
  • Καλώδιο ethernet?
  • Ένα (σπασμένο) κενό ρομπότ.
  • 3x μονάδες υπερήχων HC-SR04.
  • 1x μονάδα αισθητήρα αίθουσας.
  • Αρκετές αντιστάσεις σε διαφορετικές τιμές.
  • Ένα LDR?
  • 6x 18650 μπαταρίες ιόντων λιθίου + θήκες 3 κυψελών για 12v (κατά προτίμηση θα πρέπει να χρησιμοποιείτε νέες μπαταρίες ή ακόμα καλύτερα να χρησιμοποιείτε μπαταρίες LiPo, αυτές θα διαρκέσουν περισσότερο).
  • 18650 (ή όποιος τύπος μπαταρίας θα χρησιμοποιήσετε) 12v 3κύτταρο φόρτισης pcb.
  • Ορισμένες πλακέτες DIB για συγκόλληση των εξαρτημάτων σας.
  • Ένα φύλλο πλαστικού πολυουρεθάνης.
  • Φορητός υπολογιστής / επιτραπέζιος υπολογιστής.

Λίστα εργαλείων:

  • Ένα τρυπάνι με πολλά τρυπάνια?
  • Ένας γωνιακός μύλος (μην τον χρησιμοποιείτε αν δεν έχετε εμπειρία) ή κάτι σαν Dremel.
  • Ένα κομμάτι χαρτί λείανσης.
  • Αρκετά κατσαβίδια.
  • Σούπερ κόλλα, κόλλα στερέωσης,…?
  • Συγκολλητικό σίδερο (χρησιμοποιήστε γράσο για να κολλήσετε ευκολότερα τα καλώδια σας).
  • Ένα ζευγάρι κοπτών σύρματος και ένα εργαλείο απογύμνωσης.

Λίστα λογισμικού (προαιρετικό):

  • Adobe XD: συρμάτωση και δημιουργία πρωτότυπου.
  • Fritzing: δημιουργία ηλεκτρικού σχήματος.
  • PyCharm Professional: Python IDE με δυνατότητες χρήσης ανάπτυξης & απομακρυσμένου διερμηνέα.
  • Στόκος: γρήγορη και εύκολη σύνδεση ssh με Pi.
  • Etcher.io: εύκολο εργαλείο για να αναβοσβήνει μια εικόνα Raspbian σε μια κάρτα SD.
  • Win32DiskImager: εύκολο εργαλείο για τη δημιουργία εικόνας από υπάρχουσα εγκατάσταση Raspbian.
  • Προγραμματιστές Σημειωματάριο: απλό εργαλείο που μπορείτε να χρησιμοποιήσετε για την ασφαλή επεξεργασία του αρχείου /boot/cmdline.txt.

Βήμα 2: Βαφή με σπρέι & Σχεδιασμός της διεπαφής

Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface
Spray-painting & Designing the Interface

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

Αφού άφησα το σπρέι να στεγνώσει, αναζήτησα τον ακριβή εξάγωνο χρωματικό κωδικό για το χρώμα που χρησιμοποίησα, έτσι ώστε να ταιριάξω τέλεια τη διεπαφή ιστού με τη συσκευή μου. Η εύρεση αυτού του δεκαεξαδικού κώδικα ήταν αρκετά εύκολη, αφού χρησιμοποίησα γκράφιτι Montana 94 και οι κωδικοί hex & RGB ήταν στον ιστότοπό τους.

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

Βήμα 3: Δημιουργία βάσης δεδομένων

Δημιουργία βάσης δεδομένων
Δημιουργία βάσης δεδομένων

Το επόμενο λογικό βήμα ήταν να αρχίσω να σκέφτομαι ποια δεδομένα θέλω να αποθηκεύσω στη βάση δεδομένων MySQL. Δεν υπάρχουν τόσοι πολλοί που θέλουν να γνωρίζουν για το κενό τους, έτσι πήγα με πίνακες για τους χρήστες και τα δεδομένα σύνδεσής τους, καθώς και πίνακες για αισθητήρες (μπαταρία, απόσταση και κοντέινερ σκόνης).

Η εικόνα σας δείχνει τη διάταξη των πινάκων μου, σχεδιασμένη στο MySQL Workbench, με όλες τις σχέσεις μεταξύ των πινάκων.

Για τους χρήστες μου, ήθελα να παρακολουθώ το όνομα και το επώνυμό τους για να εξατομικεύσω τη διεπαφή και τα μηνύματα ηλεκτρονικού ταχυδρομείου. Φυσικά για να στείλω e-mail, χρειαζόμουν και τη διεύθυνση e-mail τους. Πρόσθεσα επίσης έναν πίνακα για να παρακολουθώ τις προτιμήσεις e-mail των χρηστών μου (αν θα ήθελαν ή όχι να λαμβάνουν μηνύματα ηλεκτρονικού ταχυδρομείου). Το τελευταίο πράγμα που ήθελα να αποθηκεύσω στους χρήστες, είναι ο ρόλος τους για τη συσκευή. Χωρίζω τους χρήστες ως διαχειριστές & κανονικούς χρήστες. Οι διαχειριστές έχουν το δικαίωμα να προσθέτουν, να αφαιρούν και να διαχειρίζονται χρήστες στο σύστημα, ενώ οι κανονικοί χρήστες δεν μπορούν να έχουν πρόσβαση σε αυτά τα εργαλεία.

Ο επόμενος πίνακας περιέχει "deviceruns", οι οποίες είναι οι πραγματικές λειτουργίες που έχει κάνει η συσκευή. Τα deviceruns ανήκουν σε έναν συγκεκριμένο χρήστη (το άτομο που ξεκίνησε το τρέξιμο) και έχουν ένα χρόνο έναρξης και λήξης, για τον υπολογισμό του χρόνου εκτέλεσης.

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

Βήμα 4: Σύνδεση των εξαρτημάτων μαζί

Συνδέοντας τα μέρη μαζί
Συνδέοντας τα μέρη μαζί
Συνδέοντας τα μέρη μαζί
Συνδέοντας τα μέρη μαζί

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

Βήμα 5: Ρύθμιση του Raspberry Pi

Ρύθμιση του Raspberry Pi
Ρύθμιση του Raspberry Pi

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

Για να εγκαταστήσετε το λειτουργικό σύστημα, απλώς κατεβάστε το Etcher, είναι ένα εργαλείο GUI για να γράψετε την εικόνα στην κάρτα micro SD γρήγορα και εύκολα.

Για να ενεργοποιήσετε τη λειτουργία χωρίς κεφάλι, ώστε να έχετε πρόσβαση στο pi, θα πρέπει να εγκαταστήσετε το Putty στον υπολογιστή σας. Το επόμενο βήμα είναι να μεταβείτε στο φάκελο εκκίνησης που δημιουργήθηκε από τον Etcher και να ανοίξετε το αρχείο cmdline.txt με τον αγαπημένο σας επεξεργαστή κειμένου, πρώην Σημειωματάριο προγραμματιστών. Προσθέστε αυτό το κείμενο στο τέλος του αρχείου:

ip = 169.254.10.1

Απλά βεβαιωθείτε ότι δεν δημιουργείτε μια νέα γραμμή, προσθέστε την στο τέλος της γραμμής!

Στη συνέχεια, επιστρέψτε στη ρίζα του φακέλου εκκίνησης και δημιουργήστε ένα αρχείο με το όνομα ssh. Μην προσθέσετε καμία επέκταση, αυτό θα διασφαλίσει ότι ο διακομιστής SSH ξεκινά κάθε φορά που ξεκινά το Pi σας. Τώρα βάλτε απλά την κάρτα SD στο Pi σας, συνδέστε μια επαρκή πηγή ενέργειας στο Pi σας και προσθέστε ένα καλώδιο ethernet μεταξύ του Pi και του υπολογιστή σας.

Ανοίξτε στόκο και πληκτρολογήστε τη διεύθυνση IP: 169.254.10.1. Τώρα κάντε κλικ στο ΝΑΙ και συνδεθείτε, το προεπιλεγμένο όνομα χρήστη είναι pi και ο κωδικός πρόσβασης είναι βατόμουρο.

Στη συνέχεια, εκτελέστε την ακόλουθη εντολή για να ενημερωθείτε:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Το τελευταίο βήμα είναι να δημιουργήσετε έναν εικονικό διερμηνέα Python στο Raspberry Pi σας. Αυτό θα εκτελέσει τον κώδικά σας. Για να το κάνετε αυτό, απλώς ανοίξτε το στόκο και πληκτρολογήστε τα ακόλουθα:

sudo mkdir project1

cd project1 python3 -m pip install -upgrade pip setuptools wheel virtualenv python3 -m venv --system -site -packages venv

Βήμα 6: Γράψιμο της διαδικτυακής εφαρμογής

Σύνταξη της διαδικτυακής εφαρμογής
Σύνταξη της διαδικτυακής εφαρμογής

Μετά τη σύνδεση κάθε μέρους και τη ρύθμιση του Raspberry Pi, άρχισα να γράφω την κύρια εφαρμογή μου στο διαδίκτυο χρησιμοποιώντας το Flask και το Jinja2. Το Flask είναι ένα εύχρηστο πλαίσιο υποστήριξης για την Python και το Jinja2 είναι η γλώσσα πρότυπου που χρησιμοποίησα. Με το Jinja, μπορείτε να δημιουργήσετε κανονικά αρχεία HTML με βρόχους, εάν δομές και ούτω καθεξής.

Κατά την κωδικοποίηση του backend, έγραψα επίσης το μπροστινό μέρος για την εφαρμογή, συμπεριλαμβανομένων των HTML, CSS και JavaScript για ορισμένα στοιχεία. Χρησιμοποίησα τη μέθοδο ITCSS και τη σημειογραφία BEM για τα φύλλα στυλ μου.

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

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

Η εφαρμογή ιστού είναι συνδεδεμένη στη κύρια λειτουργία της συσκευής με Python Threading. Όταν ένας χρήστης κάνει κλικ στο κουμπί έναρξης, δημιουργείται ένα νήμα για την εκτέλεση της συσκευής στο παρασκήνιο. Εν τω μεταξύ, ο χρήστης μπορεί να περιηγηθεί τέλεια στην εφαρμογή. Όταν κάνετε κλικ στο διακοπή, αυτό το νήμα σταματά και έτσι η συσκευή σταματά.

Βήμα 7: Δημιουργία κομματιών για να τελειώσετε το περίβλημα

Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα
Δημιουργία κομματιών για να τελειώσετε το περίβλημα

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

Ο πρώτος βραχίονας είναι φτιαγμένος για να γεμίζει μια τρύπα στο επάνω μέρος, όπου κάθονταν μια οθόνη. Αντικατέστησα την οθόνη με διακόπτη on/off, έτσι ώστε οι μπαταρίες να μπορούν πραγματικά να απενεργοποιηθούν.

Το άλλο στήριγμα είναι υποστήριξη για τους υπερηχητικούς αισθητήρες HC-SR04 που είναι τοποθετημένοι στο μπροστινό μέρος της συσκευής.

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

Αφού τελείωσα αυτά τα στηρίγματα, τα έβαψα επίσης με σπρέι με το χρώμα που μου είχε μείνει, για να ταιριάζει στο σχέδιο.

Βήμα 8: Ο κώδικας

Για να εγκαταστήσετε το πρόγραμμα, κατεβάστε το αρχείο code.zip και αποσυμπιέστε το στον κατάλογο project1.

Στη συνέχεια, εκτελέστε αυτήν την εντολή σε ένα τερματικό στο Raspbian ή στο Putty:

sudo cp project1/conf/project-1*/etc/systemd/system/

sudo cp project1/conf/project1-*/etc/systemd/system/sudo systemctl δαίμονας-επαναφόρτωση sudo systemctl ενεργοποίηση project-1* sudo systemctl ενεργοποίηση project1* sudo systemctl επανεκκίνηση nginx

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

Απολαμβάνω!

Συνιστάται: