- Προαπαιτούμενα:
- Έννοια πίσω από το έργο:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός του Arduino:
- Προγραμματισμός του Python σας:
- Υπολογιστής ελεγχόμενης χειρονομίας σε δράση:
Πρόσφατα, οι φορητοί υπολογιστές ή οι υπολογιστές με έλεγχο Gesture γίνονται πολύ διάσημοι. Αυτή η τεχνική ονομάζεται Leap motion που μας επιτρέπει να ελέγχουμε ορισμένες λειτουργίες στον υπολογιστή / φορητό υπολογιστή μας απλώς κουνώντας το χέρι μπροστά μας. Είναι πολύ δροσερό και διασκεδαστικό να το κάνεις, αλλά αυτοί οι φορητοί υπολογιστές έχουν πολύ υψηλή τιμή. Έτσι, σε αυτό το έργο ας προσπαθήσουμε να φτιάξουμε τον δικό μας φορητό υπολογιστή / Gesture control συνδυάζοντας το Power of Arduino και το Python.
Θα χρησιμοποιήσουμε δύο αισθητήρες υπερήχων για να προσδιορίσουμε τη θέση του χεριού μας και να ελέγξουμε μια συσκευή αναπαραγωγής πολυμέσων (VLC) με βάση τη θέση. Το έχω χρησιμοποιήσει για επίδειξη, αλλά μόλις καταλάβετε το έργο, μπορείτε να κάνετε οτιδήποτε αλλάζοντας λίγες γραμμές κώδικα και να ελέγξετε την αγαπημένη σας εφαρμογή με τον αγαπημένο σας τρόπο.
Προαπαιτούμενα:
Έχουμε ήδη καλύψει λίγα έργα που συνδυάζουν το Arduino με το Python. Υποθέτω λοιπόν ότι έχετε ήδη εγκαταστήσει το Python και τη σειριακή βιβλιοθήκη του και έχετε δοκιμάσει με επιτυχία λίγα βασικά έργα όπως το LED που αναβοσβήνει. Εάν όχι, μην ανησυχείτε, μπορείτε να επιστρέψετε σε αυτό το σεμινάριο Arduino-Python Led Controlling και να το ακολουθήσετε. Επομένως, βεβαιωθείτε ότι έχετε εγκαταστήσει τη βιβλιοθήκη Python και pyserial πριν συνεχίσετε.
Έννοια πίσω από το έργο:
Η ιδέα πίσω από το έργο είναι πολύ απλή. Θα τοποθετήσουμε δύο αισθητήρες υπερήχων (ΗΠΑ) πάνω από την οθόνη μας και θα διαβάσουμε την απόσταση μεταξύ της οθόνης και του χεριού μας χρησιμοποιώντας το Arduino, με βάση αυτήν την τιμή της απόστασης θα εκτελέσουμε συγκεκριμένες ενέργειες. Για να εκτελέσουμε ενέργειες στον υπολογιστή μας, χρησιμοποιούμε τη βιβλιοθήκη Python pyautogui. Οι εντολές από το Arduino αποστέλλονται στον υπολογιστή μέσω σειριακής θύρας (USB). Αυτά τα δεδομένα θα διαβαστούν στη συνέχεια από το python που εκτελείται στον υπολογιστή και με βάση τα δεδομένα ανάγνωσης θα εκτελεστεί μια ενέργεια.
Διάγραμμα κυκλώματος:
Για τον έλεγχο του υπολογιστή με χειρονομίες, απλώς συνδέστε τους δύο αισθητήρες υπερήχων με το Arduino. Γνωρίζουμε ότι ο αισθητήρας των ΗΠΑ λειτουργεί με 5V και ως εκ τούτου τροφοδοτούνται από τον ενσωματωμένο ρυθμιστή τάσης του Arduino. Το Arduino μπορεί να συνδεθεί στον υπολογιστή / φορητό υπολογιστή για τροφοδοσία της μονάδας και επίσης για σειριακή επικοινωνία. Μόλις ολοκληρωθούν οι συνδέσεις, τοποθετήστε τις στην οθόνη σας όπως φαίνεται παρακάτω. Έχω χρησιμοποιήσει μια ταινία διπλής όψης για να την κολλήσω στην οθόνη μου, αλλά μπορείτε να χρησιμοποιήσετε τη δική σας δημιουργικότητα. Αφού το ασφαλίσουμε σε ένα μέρος μπορούμε να προχωρήσουμε στον Προγραμματισμό
Προγραμματισμός του Arduino:
Το Arduino πρέπει να προγραμματιστεί για να διαβάσει την απόσταση του χεριού από τον αισθητήρα των ΗΠΑ. Το πλήρες πρόγραμμα δίνεται στο τέλος αυτής της σελίδας. ακριβώς κάτω έχω δώσει την εξήγηση για το πρόγραμμα. Εάν είστε νέοι στον αισθητήρα υπερήχων, απλώς περάστε από τη μέτρηση απόστασης με βάση αισθητήρες Arduino & υπερήχων.
Διαβάζοντας την αξία της απόστασης μπορούμε να φτάσουμε σε συγκεκριμένες ενέργειες που θα ελέγχονται με χειρονομίες, για παράδειγμα σε αυτό το πρόγραμμα έχω προγραμματίσει 5 δράσεις ως επίδειξη.
Ενέργεια 1: Όταν και τα δύο χέρια είναι τοποθετημένα μπροστά από τον αισθητήρα σε μια συγκεκριμένη απόσταση, τότε το βίντεο στη συσκευή αναπαραγωγής VLC πρέπει να παίζει / παύση.
Δράση 2: Όταν το δεξί χέρι είναι τοποθετημένο μπροστά στον αισθητήρα σε μια συγκεκριμένη απόσταση, τότε το βίντεο πρέπει να προχωρήσει γρήγορα.
Δράση 3: Όταν το αριστερό χέρι είναι τοποθετημένο μπροστά από τον αισθητήρα σε μια συγκεκριμένη απόσταση, τότε το βίντεο θα πρέπει να επιστρέψει ένα βήμα.
Ενέργεια 4: Όταν το δεξί χέρι είναι τοποθετημένο μπροστά από τον αισθητήρα σε μια συγκεκριμένη κοντινή απόσταση και, στη συνέχεια, εάν μετακινηθεί προς τον αισθητήρα, το βίντεο θα πρέπει να προχωρήσει γρήγορα και εάν μετακινηθεί το βίντεο θα πρέπει να γυρίσει προς τα πίσω.
Ενέργεια 5: Όταν το αριστερό χέρι είναι τοποθετημένο πάνω από τον αισθητήρα σε μια συγκεκριμένη κοντινή απόσταση και, στη συνέχεια, εάν μετακινηθεί προς τον αισθητήρα, η ένταση του βίντεο θα αυξηθεί και εάν μετακινηθεί μακριά, η ένταση θα πρέπει να μειωθεί.
Ας δούμε πώς γράφεται το πρόγραμμα για την εκτέλεση των παραπάνω ενεργειών. Έτσι, όπως όλα τα προγράμματα ξεκινάμε με τον καθορισμό των καρφιτσών I / O όπως φαίνεται παρακάτω. Οι δύο αισθητήρες των ΗΠΑ είναι συνδεδεμένοι σε ψηφιακές ακίδες 2,3,4 και 5 και τροφοδοτούνται από + 5V ακίδα. Οι ακίδες πινέζας είναι πείρος εξόδου και οι πείροι ηχούς είναι ακροδέκτες εισόδου.
Η σειριακή επικοινωνία μεταξύ Arduino και python πραγματοποιείται με ρυθμό baud 9600.
const int trigger1 = 2; // Καρφίτσα σκανδάλης του 1ου Sesnor const int echo1 = 3; // Καρφίτσα ηχούς του 1st Sesnor const int trigger2 = 4; // Καρφίτσα σκανδάλης του 2ου Sesnor const int echo2 = 5; // Πείρος ηχούς του 2ου κενού Sesnor ρύθμιση κενού () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Πρέπει να υπολογίσουμε την απόσταση μεταξύ του αισθητήρα και του χεριού κάθε φορά πριν καταλήξουμε σε οποιαδήποτε ενέργεια. Πρέπει λοιπόν να το κάνουμε πολλές φορές, πράγμα που σημαίνει ότι αυτός ο κώδικας πρέπει να χρησιμοποιείται ως συνάρτηση. Έχουμε γράψει μια συνάρτηση που ονομάζεται calcul_distance () που θα μας επιστρέψει την απόσταση μεταξύ του αισθητήρα και του χεριού.
/ * ### Λειτουργία για τον υπολογισμό της απόστασης ### * / void calcul_distance (int trigger, int echo) {digitalWrite (trigger, LOW); καθυστέρηση Μικροδευτερόλεπτα (2); digitalWrite (σκανδάλη, ΥΨΗΛΗ); καθυστέρηση Μικροδευτερόλεπτα (10); digitalWrite (σκανδάλη, LOW); time_taken = pulseIn (ηχώ, ΥΨΗΛΗ); dist = time_taken * 0,034 / 2; εάν (dist> 50) dist = 50; }
Μέσα στον κύριο βρόχο μας ελέγχουμε την τιμή της απόστασης και εκτελούμε τις ενέργειες που αναφέρονται παραπάνω. Πριν από αυτό χρησιμοποιούμε δύο μεταβλητές distL και distR που ενημερώνονται με την τρέχουσα τιμή απόστασης.
calcul_distance (trigger1, echo1); distL = διανομή; // λάβετε απόσταση αριστερού αισθητήρα calcul_distance (trigger2, echo2); distR = διανομή; // λάβετε απόσταση από τον δεξιό αισθητήρα
Εφόσον γνωρίζουμε την απόσταση μεταξύ των δύο αισθητήρων, μπορούμε τώρα να τη συγκρίνουμε με προκαθορισμένες τιμές και να φτάσουμε σε συγκεκριμένες ενέργειες. Για παράδειγμα, εάν και τα δύο χέρια τοποθετηθούν σε απόσταση 40 mc τότε παίζουμε / παύσουμε το βίντεο. Εδώ θα σταλεί η λέξη «Αναπαραγωγή / Παύση» μέσω σειριακής θύρας
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Εντοπισμός και των δύο χεριών {Serial.println ("Αναπαραγωγή / Παύση"); καθυστέρηση (500);}
Εάν το δεξί χέρι μόνο τοποθετηθεί πριν από τη μονάδα, προωθούμε γρήγορα το βίντεο με ένα βήμα και αν είναι αριστερό, γυρνάμε προς τα πίσω με ένα βήμα. Με βάση τη δράση, εδώ η λέξη "Rewind" ή "Forward" θα σταλεί μέσω σειριακής θύρας
if ((distL> 40 && distL <50) && (distR == 50)) // Εντοπισμός αριστερού χεριού {Serial.println ("Rewind"); καθυστέρηση (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Εντοπισμός δεξιού χεριού {Serial.println ("Forward"); καθυστέρηση (500);}
Αναλυτικός έλεγχος του όγκου και του κομματιού χρησιμοποιούμε μια διαφορετική μεθοδολογία για να αποτρέψουμε ψευδείς ενεργοποιήσεις. Για τον έλεγχο της έντασης πρέπει να τοποθετήσουμε το αριστερό χέρι περίπου Σε απόσταση 15 cm, τότε μπορείτε είτε να το μετακινήσετε προς τον αισθητήρα για να μειώσετε την ένταση και να το απομακρύνετε από τον αισθητήρα για να αυξήσετε την ένταση. Ο κωδικός για το ίδιο φαίνεται παρακάτω. Με βάση τη δράση, εδώ η λέξη "Vup" ή "Vdown" θα σταλεί μέσω σειριακής θύρας
// Κλείδωμα αριστερά - Λειτουργία ελέγχου εάν (distL> = 13 && distL <= 17) {καθυστέρηση (100); // Χρόνος λαβής χεριού calcul_distance (trigger1, echo1); distL = διανομή; if (distL> = 13 && distL <= 17) {Serial.println ("Αριστερά κλειδωμένο"); ενώ (distL <= 40) {calcul_distance (trigger1, echo1); distL = διανομή; if (distL <10) // Χειροκίνητο στο {Serial.println ("Vup"); καθυστέρηση (300);} if (distL> 20) // Χέρι τραβήχτηκε {Serial.println ("Vdown"); καθυστέρηση (300);}}}}
Μπορούμε επίσης να χρησιμοποιήσουμε την ίδια μέθοδο για τον αισθητήρα δεξιάς πλευράς, για τον έλεγχο του κομματιού του βίντεο. Δηλαδή αν κινήσουμε το δεξί χέρι προς τον αισθητήρα, θα προωθήσει γρήγορα την ταινία και αν την απομακρύνετε από τον αισθητήρα, θα γυρίσει προς τα πίσω την ταινία. Με βάση την ενέργεια, εδώ η λέξη "Rewind" ή "Forward" θα σταλεί μέσω σειριακής θύρας
Τώρα μπορείτε να διαβάσετε ολόκληρο τον κωδικό για αυτόν τον ελεγχόμενο με χειρονομία υπολογιστή που παρέχεται στο τέλος της σελίδας και να δοκιμάσετε να τον υποτιμήσετε στο σύνολό του και στη συνέχεια να τον αντιγράψετε στο Arduino IDE σας.
Προγραμματισμός του Python σας:
Το πρόγραμμα python για αυτό το έργο είναι πολύ απλό. Πρέπει απλώς να δημιουργήσουμε μια σειριακή επικοινωνία με τον Arduino μέσω του σωστού ρυθμού baud και, στη συνέχεια, να εκτελέσουμε ορισμένες βασικές ενέργειες πληκτρολογίου. Το πρώτο βήμα με το python θα ήταν η εγκατάσταση της μονάδας p yautogui . Βεβαιωθείτε ότι ακολουθείτε αυτό το βήμα, επειδή το πρόγραμμα δεν θα λειτουργήσει χωρίς μονάδα pyautogui.
Εγκατάσταση μονάδας pyautogui για παράθυρα:
Ακολουθήστε τα παρακάτω βήματα για να εγκαταστήσετε το pyautogui για windows. Εάν χρησιμοποιείτε άλλες πλατφόρμες, τα βήματα θα είναι επίσης λίγο πολύ παρόμοια. Βεβαιωθείτε ότι ο υπολογιστής / φορητός υπολογιστής σας είναι συνδεδεμένος στο διαδίκτυο και συνεχίστε με τα παρακάτω βήματα
Βήμα 1: Ανοίξτε τη γραμμή εντολών των Windows και αλλάξτε τον κατάλογο στον φάκελο στον οποίο έχετε εγκαταστήσει το python. Από προεπιλογή, η εντολή πρέπει να είναι
cd C: \ Python27
Βήμα 2: Μέσα στον κατάλογο python χρησιμοποιήστε την εντολή python –m pip install –upgrade pip για να αναβαθμίσετε το pip σας. Το Pip είναι ένα εργαλείο στο python που μας βοηθά να εγκαταστήσουμε εύκολα τις μονάδες python. Μόλις αναβαθμιστεί αυτή η ενότητα (όπως φαίνεται στην παρακάτω εικόνα) προχωρήστε στο επόμενο βήμα.
python –m pip εγκατάσταση –αναβάθμιση pip
Βήμα 3: Χρησιμοποιήστε την εντολή " python –m pip install pyautogui " για να εγκαταστήσετε τη μονάδα pyautogui. Μόλις η διαδικασία είναι επιτυχής, θα πρέπει να δείτε μια οθόνη κάτι παρόμοιο με αυτό παρακάτω.
python –m pip εγκατάσταση –αναβάθμιση pip
Τώρα που η μονάδα pyautogui και η μονάδα pyserial (εγκατεστημένα στο προηγούμενο σεμινάριο) έχουν εγκατασταθεί επιτυχώς με το python, μπορούμε να προχωρήσουμε με το πρόγραμμα python. Ο πλήρης κώδικας python δίνεται στο τέλος του σεμιναρίου, αλλά η εξήγηση για το ίδιο έχει ως εξής.
Ας εισαγάγουμε και τις τρεις απαιτούμενες ενότητες για αυτό το έργο. Είναι pyautogui, σειριακός πύθωνας και χρόνος.
εισαγωγή σειριακού #Serial που εισάγεται για σειριακή επικοινωνία χρόνος εισαγωγής # Απαιτείται για χρήση καθυστερήσεων εισαγωγής pyautogui
Στη συνέχεια δημιουργούμε σύνδεση με το Arduino μέσω θύρας COM. Στον υπολογιστή μου το Arduino είναι συνδεδεμένο στο COM 18. Χρησιμοποιήστε τη διαχείριση συσκευών για να βρείτε σε ποια θύρα COM είναι συνδεδεμένο το Arduino και διορθώστε ανάλογα την ακόλουθη γραμμή.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Σειριακή θύρα αντικείμενο που ονομάζεται arduinoSerialData time.sleep (2) #wait για 2 δευτερόλεπτα για να καθιερωθεί η επικοινωνία
Μέσα στο άπειρο , ενώ βρόχο, έχουμε κατ 'επανάληψη να ακούσετε την θύρα COM και συγκρίνετε τις λέξεις-κλειδιά με τις προ-αψήφησαν τα έργα και να πατήματα των πλήκτρων του σκάφους ανάλογα.
ενώ 1: incoming = str (ArduinoSerial.readline ()) # διαβάστε τα σειριακά δεδομένα και εκτυπώστε τα ως γραμμή εκτύπωσης εισερχόμενα εάν 'Play / Pause' στα εισερχόμενα: pyautogui.typewrite (, 0.2) εάν 'Rewind' in εισερχόμενα: pyautogui. hotkey ('ctrl', 'left') εάν 'Forward' in εισερχόμενα: pyautogui.hotkey ('ctrl', 'right') if 'Vup' in εισερχόμενα: pyautogui.hotkey ('ctrl', 'down') if ' Vdown 'in εισερχόμενα: pyautogui.hotkey (' ctrl ',' up ')
Όπως μπορείτε να δείτε, για να πατήσετε ένα πλήκτρο απλά πρέπει να χρησιμοποιήσουμε την εντολή "pyautogui.typewrite (, 0,2)" η οποία θα πατήσει το πλήκτρο για 0,2 δευτερόλεπτα. Εάν χρειάζεστε πλήκτρα συντόμευσης όπως ctrl + S, τότε μπορείτε να χρησιμοποιήσετε την εντολή hot key "pyautogui.hotkey ('ctrl', 's')".
Έχω χρησιμοποιήσει αυτούς τους συνδυασμούς επειδή λειτουργούν στο πρόγραμμα αναπαραγωγής πολυμέσων VLC, μπορείτε να τους τροποποιήσετε με οποιονδήποτε τρόπο θέλετε να δημιουργήσετε τις δικές σας εφαρμογές για τον έλεγχο οτιδήποτε στον υπολογιστή με χειρονομίες.
Υπολογιστής ελεγχόμενης χειρονομίας σε δράση:
Κάντε τις συνδέσεις όπως ορίζονται παραπάνω και ανεβάστε τον κωδικό Arduino στον πίνακα Arduino. Στη συνέχεια, χρησιμοποιήστε το παρακάτω σενάριο python και ξεκινήστε το πρόγραμμα στον φορητό / υπολογιστή σας.
Τώρα μπορείτε να παίξετε οποιαδήποτε ταινία στον υπολογιστή σας χρησιμοποιώντας τη συσκευή αναπαραγωγής πολυμέσων VLC και να χρησιμοποιήσετε το χέρι σας για να ελέγξετε την ταινία όπως φαίνεται στο παρακάτω βίντεο.
Ελπίζω να καταλάβατε το έργο και να απολαύσατε το παιχνίδι. Αυτό είναι απλώς μια επίδειξη και μπορείτε να χρησιμοποιήσετε τη δημιουργικότητά σας για να δημιουργήσετε πολύ πιο ωραία πράγματα που ελέγχονται από χειρονομίες γύρω από αυτό. Επιτρέψτε μου να ξέρω αν αυτό ήταν χρήσιμο και τι θα δημιουργήσετε χρησιμοποιώντας αυτό στην ενότητα σχολίων και θα χαρώ να το γνωρίζω.