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

EWEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση: 7 βήματα (με εικόνες)
EWEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση: 7 βήματα (με εικόνες)

Βίντεο: EWEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση: 7 βήματα (με εικόνες)

Βίντεο: EWEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση: 7 βήματα (με εικόνες)
Βίντεο: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, Ιούλιος
Anonim
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση
☠WEEDINATOR☠ Μέρος 2: Δορυφορική πλοήγηση

Γεννήθηκε το σύστημα πλοήγησης Weedinator!

Ένα αγροτικό ρομπότ που περιφέρεται και μπορεί να ελεγχθεί από ένα έξυπνο τηλέφωνο.

… Και αντί να περάσω απλώς την κανονική διαδικασία για το πώς συνδυάζεται, σκέφτηκα να προσπαθήσω να εξηγήσω πώς λειτουργεί στην πραγματικότητα - προφανώς όχι ΟΛΑ, αλλά τα πιο σημαντικά και ενδιαφέροντα κομμάτια. Παρακαλώ συγχωρέστε το λογοπαίγνιο, αλλά είναι το πώς τα δεδομένα ρέουν μεταξύ των επιμέρους ενοτήτων που βρίσκω ενδιαφέροντα και αναλύονται στον χαμηλότερο παρονομαστή τους, καταλήγουμε στα πραγματικά "bits" - μηδενικά και ένα. Αν έχετε μπερδευτεί ποτέ με κομμάτια, byte, χαρακτήρες και συμβολοσειρές, τότε ίσως είναι η ώρα να μην μπερδευτείτε; Θα προσπαθήσω επίσης να ξεμπερδέψω μια ελαφρώς αφηρημένη έννοια που ονομάζεται "Error Cancelling".

Το ίδιο το σύστημα διαθέτει:

  • GPS/GNSS: Ublox C94 M8M (Rover and Base)
  • Digitalηφιακή πυξίδα 9DOF Razor IMU MO
  • Fona 800H 2G GPRS κυψελοειδές
  • Οθόνη TFT 2,2"
  • Arduino Due 'Master'
  • Διάφορα «Σκλάβοι» του Arduino.

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

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

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

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

Το GPRS fona χρησιμοποιείται για πρόσβαση σε μια ηλεκτρονική βάση δεδομένων μέσω του κυψελοειδούς δικτύου 2G και λήψη και μετάδοση των συντεταγμένων στο Arduino Due μέσω ενός Arduino Nano. Το Due είναι το Master και ελέγχει μια σειρά από άλλα Arduinos ως Slaves μέσω του I2C και των σειριακών λεωφορείων. Το Due μπορεί να αλληλεπιδράσει με ζωντανά δεδομένα από το Ublox και το Razor και να εμφανίζει μια επικεφαλίδα που υπολογίζεται από έναν από τους σκλάβους του Arduino.

Ο δορυφορικός ιχνηλάτης Ublox είναι ιδιαίτερα έξυπνος καθώς χρησιμοποιεί την ακύρωση σφαλμάτων για να λάβει πολύ ακριβείς διορθώσεις - μια τελική ονομαστική ολική απόκλιση περίπου 40 mm. Η ενότητα αποτελείται από ένα πανομοιότυπο ζεύγος, το ένα από τα οποία, το «rover», κινείται με το Weedinator και το άλλο, η «βάση» είναι στερεωμένη σε έναν πόλο κάπου έξω. Η ακύρωση σφαλμάτων επιτυγχάνεται με τη δυνατότητα της βάσης να επιτύχει μια πραγματικά ακριβή διόρθωση χρησιμοποιώντας μεγάλη ποσότητα δειγμάτων με την πάροδο του χρόνου. Αυτά τα δείγματα στη συνέχεια υπολογίζονται κατά μέσο όρο για να αντισταθμίσουν τις μεταβαλλόμενες ατμοσφαιρικές συνθήκες. Εάν η συσκευή κινούνταν, προφανώς δεν θα ήταν σε θέση να λάβει κανένα μέσο όρο και θα βρισκόταν στο απόλυτο έλεος ενός μεταβαλλόμενου περιβάλλοντος. Ωστόσο, εάν μια στατική και κινούμενη συσκευή συνεργαστούν, εφόσον μπορούν να επικοινωνούν μεταξύ τους, μπορούν να επωφεληθούν και από τα δύο. Σε οποιαδήποτε δεδομένη στιγμή, η μονάδα βάσης εξακολουθεί να έχει ένα σφάλμα, αλλά έχει επίσης μια προηγουμένως υπολογισμένη εξαιρετικά ακριβή διόρθωση, ώστε να μπορεί να υπολογίσει το πραγματικό σφάλμα αφαιρώντας ένα σύνολο συντεταγμένων από ένα άλλο. Στη συνέχεια, αποστέλλει το υπολογισμένο σφάλμα στο rover μέσω ραδιοφωνικής σύνδεσης, το οποίο στη συνέχεια προσθέτει το σφάλμα στις δικές του συντεταγμένες και, λοιπόν, έχουμε σφάλμα κατά την ακύρωση! Από πρακτική άποψη, η ακύρωση σφαλμάτων κάνει τη διαφορά μεταξύ 3 μέτρων και ολικής απόκλισης 40 χιλιοστών.

Το πλήρες σύστημα φαίνεται περίπλοκο, αλλά στην πραγματικότητα είναι αρκετά εύκολο να κατασκευαστεί, είτε χαλαρό σε μη αγώγιμη επιφάνεια είτε χρησιμοποιώντας το PCB που σχεδίασα, το οποίο επιτρέπει σε όλες τις μονάδες να ασφαλίζονται με ασφάλεια. Η μελλοντική ανάπτυξη βασίζεται στο PCB, επιτρέποντας μια μεγάλη ποικιλία Arduinos να ενσωματωθεί για τον έλεγχο κινητήρων διεύθυνσης, κίνησης προς τα εμπρός και ενσωματωμένου μηχανήματος CNC. Η πλοήγηση θα βοηθηθεί επίσης από τουλάχιστον ένα σύστημα αναγνώρισης αντικειμένων που χρησιμοποιεί κάμερες για την ανίχνευση χρωματισμένων αντικειμένων, για παράδειγμα φθορίζοντες μπάλες γκολφ, οι οποίες είναι τοποθετημένες προσεκτικά σε κάποιο είδος πλέγματος - Προσέξτε αυτόν τον χώρο!

Βήμα 2: Συστατικά

Συστατικά
Συστατικά
Συστατικά
Συστατικά
Συστατικά
Συστατικά
  • Ublox C94 M8M (Rover and Base) x 2 από
  • Digitalηφιακή πυξίδα 9DOF Razor IMU MO
  • Fona 800H 2G GPRS κυψελοειδές 1946
  • Arduino Due
  • Arduino Nano x 2 από
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (βλ. Συνημμένα αρχεία Gerber) x 2 από
  • 1206 SMD αντιστάσεις μηδενικού ωμ x 12 από
  • 1206 LEDs x 24 του

Το αρχείο PCB ανοίγει με το λογισμικό "Design Spark".

Βήμα 3: Καλωδίωση των ενοτήτων

Καλωδίωση των ενοτήτων
Καλωδίωση των ενοτήτων

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

Βήμα 4: Κωδικός

Κώδικας
Κώδικας

Το μεγαλύτερο μέρος του κώδικα αφορά το να κινούνται τα δεδομένα γύρω από το σύστημα με τακτικό τρόπο και πολύ συχνά υπάρχει ανάγκη μετατροπής μορφών δεδομένων από ακέραιους σε πλωτήρες σε συμβολοσειρές και χαρακτήρες, κάτι που μπορεί να προκαλέσει σύγχυση! Το πρωτόκολλο "Serial" θα χειρίζεται μόνο χαρακτήρες και ενώ το I2Το πρωτόκολλο C θα χειρίζεται πολύ μικρούς ακέραιους αριθμούς, βρήκα καλύτερα να τους μετατρέψω σε χαρακτήρες και μετά να τον μετατρέψω ξανά σε ακέραιους αριθμούς στο άλλο άκρο της γραμμής μετάδοσης.

Ο ελεγκτής Weedinator είναι βασικά ένα σύστημα 8 bit με πολλά μεμονωμένα Arduinos ή «MCU». Όταν το 8 bit περιγράφεται ως πραγματικό δυαδικό μηδέν και ένα μπορεί να μοιάζει με αυτό: B01100101 που θα ισούται με:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

Δεκαδική ψηφιακή αξία 128 64 32 16 8 4 2 1
Δυαδική ψηφιακή αξία 0 1 1 0 0 1 0 1

= 101

Και η μέγιστη δυνατή τιμή είναι 255…. Έτσι, το μέγιστο ακέραιο 'byte' μπορούμε να μεταδώσουμε πάνω από το I2Το C είναι 255, το οποίο είναι πολύ περιοριστικό!

Σε ένα Arduino μπορούμε να μεταδώσουμε έως 32 χαρακτήρες ASCII, ή byte, κάθε φορά χρησιμοποιώντας το I2C, το οποίο είναι πολύ πιο χρήσιμο και το σύνολο χαρακτήρων περιλαμβάνει αριθμούς, γράμματα και χαρακτήρες ελέγχου σε μορφή 7 bit όπως παρακάτω:

Εικόνα
Εικόνα

Ευτυχώς, ο μεταγλωττιστής Arduino κάνει όλη τη δουλειά της μετατροπής από χαρακτήρα σε δυαδικό στο παρασκήνιο, αλλά εξακολουθεί να περιμένει τον σωστό τύπο χαρακτήρα για τη μετάδοση δεδομένων και δεν δέχεται «Χορδές».

Τώρα είναι όταν τα πράγματα μπορούν να μπερδευτούν. Οι χαρακτήρες μπορούν να εκφραστούν ως μεμονωμένοι χαρακτήρες χρησιμοποιώντας τον ορισμό του χαρακτήρα ή ως μια μονοδιάστατη συστοιχία 20 χαρακτήρων με τη χρήση του χαρακτήρα [20]. Το Arduino String μοιάζει πολύ με μια συστοιχία χαρακτήρων και είναι κυριολεκτικά μια σειρά χαρακτήρων που συχνά ερμηνεύονται από τον ανθρώπινο εγκέφαλο ως «λέξεις».

// Χτίζει τον χαρακτήρα "distanceCharacter":

Ενεργοποιητής συμβολοσειράς = ""; distanceString = εκκινητής + distanceString; int n = distanceString.length (); για (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Ο παραπάνω κώδικας μπορεί να μετατρέψει μια μακρά σειρά χαρακτήρων σε μια σειρά χαρακτήρων που στη συνέχεια μπορεί να μεταδοθεί μέσω του I2C ή σειριακό.

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

distanceString = distanceString + c; // string = string + χαρακτήρας

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

int αποτέλεσμα = (distanceString).toInt ();

int distanceMetres = αποτέλεσμα;

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

float distanceMetres = απόστασηMm / 1000;

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

// Εδώ συγκεντρώνονται τα δεδομένα σε έναν χαρακτήρα:

dataString = εκκινητής + "BEAR" + zbearing + "DIST" + zdistance; // Περιορίζεται σε 32 χαρακτήρες // String = συμβολοσειρά + χαρακτήρες + ακέραιος + χαρακτήρες + ακέραιος.

Ο υπόλοιπος κώδικας είναι τυπικό υλικό Arduino που μπορεί να βρεθεί στα διάφορα παραδείγματα στις βιβλιοθήκες Arduino. Ελέγξτε το παράδειγμα «παραδείγματα >>>> Χορδές» και τα παραδείγματα βιβλιοθήκης «σύρματος».

Ακολουθεί ολόκληρη η διαδικασία μετάδοσης και λήψης float:

Μετατροπή Float ➜ Integer ➜ String ➜ Character array….. στη συνέχεια TRANSMIT array array from Master

ΛΗΗ μεμονωμένων χαρακτήρων στο Slave…. στη συνέχεια μετατρέψτε χαρακτήρα ➜ συμβολοσειρά ➜ ακέραιος πλωτήρας

Βήμα 5: Βάση δεδομένων και ιστοσελίδα

Βάση δεδομένων και ιστοσελίδα
Βάση δεδομένων και ιστοσελίδα
Βάση δεδομένων και ιστοσελίδα
Βάση δεδομένων και ιστοσελίδα

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

Βήμα 6: Δοκιμές πλοήγησης

Δοκιμές πλοήγησης
Δοκιμές πλοήγησης
Δοκιμές πλοήγησης
Δοκιμές πλοήγησης
Δοκιμές πλοήγησης
Δοκιμές πλοήγησης

Κατάφερα να συνδέσω έναν καταγραφικό δεδομένων στον πίνακα ελέγχου Weedinator μέσω I2C και να πάρω μια ιδέα για την απόδοση του δορυφορικού εντοπισμού Ublox M8M:

Στο «Cold Start», που εμφανίζεται με το πράσινο γράφημα, η μονάδα ξεκίνησε με πολλά σφάλματα, παρόμοια με ένα «κανονικό» GPS και σταδιακά το σφάλμα μειώθηκε έως ότου, μετά από περίπου 2 ώρες, επιδιορθώθηκε το RTK μεταξύ του rover και βάση (εμφανίζεται ως ο κόκκινος σταυρός). Κατά τη διάρκεια αυτής της περιόδου 2 ωρών, η βασική μονάδα αναπτύσσεται συνεχώς και ενημερώνει μια μέση τιμή γεωγραφικού πλάτους και γεωγραφικού μήκους και αφού το προκαθορισμένο χρονικό διάστημα αποφασίσει ότι έχει διορθωθεί σωστά. Τα επόμενα 2 γραφήματα δείχνουν τη συμπεριφορά μετά από μια «καυτή εκκίνηση» όπου η βασική μονάδα έχει ήδη υπολογίσει έναν καλό μέσο όρο. Το επάνω γράφημα είναι πάνω από 200 λεπτά και μερικές φορές η διόρθωση χάνεται και το rover στέλνει ένα μήνυμα NMEA στον Weedinator ότι η επιδιόρθωση έχει γίνει προσωρινά αναξιόπιστη.

Το κατώτερο μπλε γράφημα είναι ένα «zoom in» στο κόκκινο πλαίσιο στο επάνω γράφημα και δείχνει μια καλή αντιπροσωπευτική λήψη στιγμιότυπου της απόδοσης του Ublox, με συνολική απόκλιση 40 mm, η οποία είναι κάτι παραπάνω από καλή για να καθοδηγήσει τον Weedinator στην κατάρρευση., αλλά πιθανώς όχι αρκετά καλό για να καλλιεργήσετε το χώμα γύρω από μεμονωμένα φυτά;

Το τρίτο γράφημα δείχνει δεδομένα που συλλέχθηκαν με το Rover και τη Βάση σε απόσταση 100 μέτρων - Δεν εντοπίστηκε επιπλέον σφάλμα - η απόσταση διαχωρισμού δεν έκανε καμία διαφορά στην ακρίβεια.

Βήμα 7: Τελικό

Συνιστάται: