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

Servodriver-Board Με Python-GUI και Arduino: 5 βήματα
Servodriver-Board Με Python-GUI και Arduino: 5 βήματα

Βίντεο: Servodriver-Board Με Python-GUI και Arduino: 5 βήματα

Βίντεο: Servodriver-Board Με Python-GUI και Arduino: 5 βήματα
Βίντεο: Complete guide to PCA9685 16 channel Servo controller for Arduino with code Version of 5 ( V1) 2024, Νοέμβριος
Anonim
Servodriver-Board Με Python-GUI και Arduino
Servodriver-Board Με Python-GUI και Arduino

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

Σε περίπτωση που δεν συνηθίζετε να δημιουργείτε ολόκληρο το σύστημα RC ή τη δοκιμή σας, πόσο μακριά μπορείτε να πιέσετε το σερβο ή όπου βρίσκεται η μεσαία θέση, τότε αυτός ο πίνακας είναι για εσάς! Σας επιτρέπει να μετακινήσετε το σερβο σε καθορισμένες θέσεις ή να ταξιδέψετε πίσω και πίσω.

Λειτουργεί εκπληκτικά καλά, ακόμη και με 6 σερβο που τρέχουν από τη μία θέση στην άλλη στον βρόχο.

Επίσης, είναι ένα ωραίο έργο για να μάθετε για την επικοινωνία μεταξύ Python-GUI και Arduino χρησιμοποιώντας Serial.

Βήμα 1: Τι χρειάζεστε…

Για αυτό το έργο, θα χρειαστείτε τα ακόλουθα:

Σκεύη, εξαρτήματα

  • Arduino nano με καλώδιο. Χρησιμοποίησα έναν κλώνο και ο κώδικας Python αναμένει στην πραγματικότητα ένα τσιπ CH340 ενός κλώνου
  • Ένας πίνακας πρωτοτύπων. 7x5cm είναι αρκετά
  • Κάποιες κεφαλίδες και ακίδες 2, 54 χιλιοστών
  • 1-6 μερίδες
  • Τροφοδοσία για τα servos (χρησιμοποίησα ένα πακέτο μπαταριών με 4 μπαταρίες)

Λογισμικό

  • Python 3:
  • Πρόγραμμα οδήγησης USB για τα τσιπ CH340: Απλώς κάντε google για προγράμματα οδήγησης για προγράμματα οδήγησης CH340
  • Arduino IDE:

Βήμα 2: Συγκόλληση του πίνακα

Συγκόλληση του Διοικητικού Συμβουλίου
Συγκόλληση του Διοικητικού Συμβουλίου

Η συγκόλληση είναι στην πραγματικότητα ευθεία προς τα εμπρός σύμφωνα με το Fritzing στην εικόνα. Απλά βεβαιωθείτε ότι μπορείτε να συνδέσετε εύκολα τα servos στις σειρές των 3 ακίδων.

  • Οι σειρές 3 ακίδων είναι προσαρτημένες στην ψηφιακή ακίδα 3, 5, 6, 9, 10 και 11 του Arduino nano.
  • Το κόκκινο σύρμα είναι προσαρτημένο στην ακίδα 5V του Arduino
  • Το μαύρο καλώδιο συνδέεται με τον ακροδέκτη GND του Arduino
  • Το ζεύγος των ακίδων κάτω από τις σειρές 3 ακίδων προορίζεται να συνδέσει ένα τυπικό τροφοδοτικό δέκτη RC, μπορείτε να προσθέσετε βύσματα όπως θέλετε, όπως βίδωμα ακροδεκτών, βύσματα XT, JST ή… ή…

Προσωπικά, μου αρέσουν οι σειρές γυναικείων κεφαλίδων για να βάλω το Arduino, αλλά αυτό εξαρτάται από εσάς.

Λάβετε υπόψη ότι οι κοντές γυναικείες κεφαλίδες είναι jumper, που σας επιτρέπουν να παρέχετε το σερβο χρησιμοποιώντας την πηγή 5V του Arduino για σκοπούς δοκιμής. Εάν το καταπονήσετε πάρα πολύ, το Arduino θα επαναρυθμιστεί και θα χάσει τον σωστό ρυθμό. ΠΡΕΠΕΙ να αφαιρεθούν, πριν συνδέσετε άλλο τροφοδοτικό.

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

Εγκαταστήστε το Arduino IDE και αναβοσβήστε το Arduino nano με το συνημμένο σκίτσο.

Βήμα 4: Ρύθμιση της Python

Ρύθμιση Python
Ρύθμιση Python

Εγκαταστήστε το Python 3 μετά τη λήψη του. Βεβαιωθείτε ότι έχετε ελέγξει την επιλογή δημιουργίας μεταβλητής "PATH".

Πρέπει να εγκαταστήσετε δύο ακόμη πακέτα χρησιμοποιώντας pip. Για αυτό, πατήστε το πλήκτρο "Windows", πληκτρολογήστε "cmd" και πατήστε "enter". Στη γραμμή εντολών πληκτρολογήστε τις ακόλουθες εντολές:

  • σειριακή εγκατάσταση pip
  • piip install pyserial
  • pip εγκατάσταση tkinter

Όπως μπορείτε να δείτε, χρειάζομαι τα modules σειριακά καθώς και pyserial, το οποίο πιθανότατα δεν είναι το πιο αποτελεσματικό, αφού το pyserial πρέπει να αντικαταστήσει το σειριακό. Παρ 'όλα αυτά λειτουργεί και μόλις αρχίζω να μαθαίνω;).

Ανοίξτε το Python-Script στο IDE και εκτελέστε το ή εκτελέστε το απευθείας από το τερματικό.

Στο αναπτυσσόμενο μενού, μπορείτε να επιλέξετε μεταξύ δύο λειτουργιών, "Go Straight" και "Ping Pong":

  • Go Straight: Εισαγάγετε μια θέση σερβο σε δευτερόλεπτα στην πρώτη στήλη και πατήστε "Έναρξη" για να μετακινήσετε το σερβο στην καθορισμένη θέση.
  • Πινγκ πονγκ: Εισάγετε ένα κάτω όριο και ένα ανώτερο όριο στη δεύτερη και την τρίτη στήλη. Αυτή είναι η κάτω και η πάνω θέση, μεταξύ των οποίων το σερβο θα πηγαίνει πίσω και πίσω. Στη στήλη "Χρόνος πινγκ πονγκ" μπορείτε να καθορίσετε έναν χρόνο σε χιλιοστά του δευτερολέπτου, για να περιμένει το σερβο όταν φτάσει στην άνω ή στην κάτω θέση. Πατήστε "Έναρξη" και το σερβο θα αρχίσει να κινείται προς τα πίσω, πατήστε "Διακοπή" και το σερβο θα σταματήσει.

Βήμα 5: Πού συμβαίνει η μαγεία

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

Τώρα, τι συμβαίνει στο πρόγραμμα Python;

Πρώτα απ 'όλα, το πρόγραμμα ελέγχει τι είναι προσαρτημένο στις θύρες COM σε αυτήν τη γραμμή και το αποθηκεύει σε μια λίστα:

self. COMPortsList = λίστα (serial.tools.list_ports.comports ())

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

for p in self. COMPortsList: if "CH340" in p [1]: # Looking for a Arduino Clone self. COMPort = p [0] break other: pass self. Ser = serial. Serial (self. COMPort, 57600)

Η σειριακή σύνδεση πραγματοποιείται με τη θύρα COM με baudrate 57600.

Και τι κάνει ο κώδικας Arduino; Λοιπόν, δεδομένου ότι το Arduino έχει μόνο μία θύρα COM, η σειριακή σύνδεση είναι μόνο μία γραμμή:

Serial.begin (57600);

Τώρα, μπορούμε να χρησιμοποιήσουμε και τις δύο θύρες για επικοινωνία. Σε αυτήν την περίπτωση, μόνο μηνύματα από την Python στο Arduino. Τα μηνύματα αποστέλλονται εδώ από την Python. Η σειριακή σύνδεση μεταδίδει bytes ως προεπιλογή. Αυτός είναι επίσης ο γρηγορότερος τρόπος αποστολής δεδομένων και, από όσο γνωρίζω, ακόμα αρκετά διαδεδομένος. Έτσι, τα int για τον αριθμό του σερβο (έτσι το Arduino γνωρίζει ποιο σερβο θα μετακινηθεί) και η θέση σε μικροδευτερόλεπτα μετατρέπονται σε byte.

Command = struct.pack ('> B', self. Place) # Η int-μεταβλητή "self. Place" μετατρέπεται σε byte

self. Ser. > B ', Command) # Γυρίζοντας το int σε ένα byte self. Ser.write (Command) # Γράφοντας το byte στο Serial-Port

Επίσης, η ανάλυση δεδομένων απαιτεί χρόνο (για παράδειγμα, η ερμηνεία τεσσάρων byte "1", "2", "3" και "0" ως int 1230, όχι ως τέσσερις διαφορετικοί χαρακτήρες) και είναι καλύτερο να το κάνετε αυτό όχι στο Arduino.

Από την πλευρά του Arduino, οι πληροφορίες που αποστέλλονται συλλέγονται ως εξής:

εάν (Serial.available ()> 1) {// Εάν είναι διαθέσιμα σειριακά δεδομένα, τότε ο βρόχος εισάγεται c = Serial.read (); // Το πρώτο byte (αριθμός σερβο) αποθηκεύεται σε μια μεταβλητή Micros = Serial.read (); // Η θέση του σερβο αποθηκεύεται εδώ Micros = Micros * 10; }

Συνιστάται: