- Προαπαιτούμενα
- Διάγραμμα κυκλώματος
- Διαδικασία ροής για το ποντίκι αέρα
- Προγραμματισμός του Arduino για Air Mouse
- Σενάριο προγράμματος οδήγησης Python
- Δοκιμή του ποντικιού Arduino Air
Αναρωτηθήκατε ποτέ πώς ο κόσμος μας κινείται προς τη συναρπαστική πραγματικότητα. Βρίσκουμε συνεχώς νέους τρόπους και μεθόδους για να αλληλεπιδρούμε με τον περιβάλλοντα χώρο μας χρησιμοποιώντας εικονική πραγματικότητα, μικτή πραγματικότητα, επαυξημένη πραγματικότητα κ.λπ. Νέες συσκευές βγαίνουν καθημερινά με αυτές τις τεχνολογίες γρήγορου ρυθμού για να μας εντυπωσιάσουν από τις νέες διαδραστικές τεχνολογίες τους.
Αυτές οι συναρπαστικές τεχνολογίες χρησιμοποιούνται σε παιχνίδια, διαδραστικές δραστηριότητες, ψυχαγωγία και πολλές άλλες εφαρμογές. Σε αυτό το σεμινάριο, θα μάθουμε για μια τέτοια διαδραστική μέθοδο που σας δίνει έναν νέο τρόπο αλληλεπίδρασης με το σύστημά σας αντί να χρησιμοποιήσετε ένα βαρετό ποντίκι. Οι geeks παιχνιδιών μας πρέπει να γνωρίζουν ότι μερικά χρόνια πριν, η Nintendo μια εταιρεία τυχερών παιχνιδιών πουλά μια ιδέα μιας 3D διαδραστικής μεθόδου για να αλληλεπιδράσει με τις κονσόλες τους με τη βοήθεια ενός χειριστηρίου χειρός γνωστού ως Wii controller. Χρησιμοποιεί το επιταχυνσιόμετρο για να εντοπίσει τις κινήσεις σας για ένα παιχνίδι και να το στείλει στο σύστημα ασύρματα. Αν θέλετε να μάθετε περισσότερα για αυτήν την τεχνολογία, μπορείτε να δείτε το δίπλωμα ευρεσιτεχνίας EP1854518B1, αυτό θα σας δώσει μια πλήρη ιδέα για το πώς λειτουργεί αυτή η τεχνολογία.
Εμπνευσμένοι από αυτήν την ιδέα πρόκειται να φτιάξουμε ένα "Air ποντίκι", να αλληλεπιδράσουμε με συστήματα απλά μετακινώντας την κονσόλα στον αέρα, αλλά αντί να χρησιμοποιούμε τρισδιάστατες αναφορές συντεταγμένων, θα χρησιμοποιήσουμε μόνο 2-διαστατικές αναφορές συντεταγμένων μπορούμε να μιμηθούμε τις ενέργειες του ποντικιού του υπολογιστή αφού το ποντίκι λειτουργεί σε δύο διαστάσεις Χ και Υ.
Η ιδέα πίσω από αυτό το ασύρματο τρισδιάστατο ποντίκι αέρα είναι πολύ απλή, θα χρησιμοποιήσουμε ένα επιταχυνσιόμετρο για να πάρουμε την τιμή της επιτάχυνσης των ενεργειών και των κινήσεων του "ποντικιού αέρα" κατά μήκος του άξονα x και y και στη συνέχεια με βάση τις τιμές του το επιταχυνσιόμετρο θα ελέγξουμε τον κέρσορα του ποντικιού και θα εκτελέσουμε ορισμένες ενέργειες με τη βοήθεια των προγραμμάτων οδήγησης λογισμικού python που εκτελούνται στον υπολογιστή.
Προαπαιτούμενα
- Arduino Nano (οποιοδήποτε μοντέλο)
- Μονάδα επιταχυνσιόμετρου ADXL335
- Ενότητα Bluetooth HC-05
- Πιέστε τα κουμπιά
- Εγκατεστημένος υπολογιστής Python
Για να μάθετε περισσότερα σχετικά με την εγκατάσταση του python στον υπολογιστή, ακολουθήστε το προηγούμενο σεμινάριο σχετικά με το Arduino-Python LED Controlling.
Διάγραμμα κυκλώματος
Για τον έλεγχο του υπολογιστή σας με τις κινήσεις του χεριού σας, χρειάζεστε ένα επιταχυνσιόμετρο που δίνει την επιτάχυνση κατά μήκος του άξονα X και Y και για να κάνετε ασύρματο ολόκληρο το σύστημα χρησιμοποιείται μια μονάδα Bluetooth για τη μεταφορά ασύρματου σήματος στο σύστημά σας.
Εδώ χρησιμοποιείται ένα επιταχυνσιόμετρο ADXL335, είναι μια μονάδα τριπλού άξονα με βάση το MEMS που εξάγει την επιτάχυνση κατά μήκος του άξονα X, Y και Z, αλλά όπως ειπώθηκε προηγουμένως για τον έλεγχο του ποντικιού θα χρειαζόμασταν μόνο την επιτάχυνση μόνο κατά μήκος του άξονα X και Y. Μάθετε περισσότερα σχετικά με τη χρήση του επιταχυνσιόμετρου ADXL335 με το Arduino με τα προηγούμενα έργα μας:
- Σύστημα ειδοποίησης ατυχήματος με βάση το Arduino χρησιμοποιώντας GPS, GSM και Accelerometer
- Παιχνίδι Ping Pong χρησιμοποιώντας Arduino και Accelerometer
- Ρομπότ ελεγχόμενης χειρονομίας με βάση το επιταχυνσιόμετρο χρησιμοποιώντας το Arduino
- Συναγερμός ανιχνευτή σεισμού χρησιμοποιώντας το Arduino
Εδώ ο ακροδέκτης Xout και Yout του επιταχυνσιόμετρου συνδέεται με τις αναλογικές ακίδες A0 και A1 του Arduino και για τη μετάδοση των σημάτων από το Arduino στο σύστημα Bluetooth HC-05 χρησιμοποιείται εδώ, καθώς το Bluetooth λειτουργεί πάνω από τα Tx και Rx συνδέσεις καρφιτσών, επομένως χρησιμοποιούμε σειριακές καρφίτσες λογισμικού D2 και D3. Συνδέεται με τη χρήση σειριακού λογισμικού, επειδή εάν συνδέσουμε το Bluetooth με σειριακό υλικό και αρχίσουμε να λαμβάνουμε τις αναγνώσεις μέσω της κονσόλας python, θα εμφανίσει σφάλματα για την αναντιστοιχία ρυθμού baud καθώς το Bluetooth θα επικοινωνούσε με τον πύθωνα με τον δικό του ρυθμό baud. Μάθετε περισσότερα σχετικά με τη χρήση της μονάδας Bluetooth, περνώντας από διάφορα έργα που βασίζονται σε Bluetooth χρησιμοποιώντας διαφορετικούς μικροελεγκτές, συμπεριλαμβανομένου του Arduino.
Εδώ έχουμε χρησιμοποιήσει τρία κουμπιά - ένα για ενεργοποίηση του ποντικιού Air και άλλα δύο για αριστερό και δεξί κλικ όπως φαίνεται στην παρακάτω εικόνα:
Διαδικασία ροής για το ποντίκι αέρα
Το διάγραμμα ροής δείχνει τη ροή διαδικασίας του Air Mouse με βάση το Arduino:
1. Το σύστημα ελέγχει συνεχώς τη μηχανική σκανδάλη που θα πατηθεί έως ότου δεν πατηθεί, μπορούμε να εργαστούμε κανονικά με το ποντίκι των υπολογιστών.
2. Όταν το σύστημα εντοπίσει το πάτημα του κουμπιού, ο έλεγχος για το ποντίκι μεταφέρεται στο ποντίκι αέρα.
3. Καθώς πατάτε το κουμπί ενεργοποίησης, το σύστημα αρχίζει να μεταφέρει τις αναγνώσεις του ποντικιού στον υπολογιστή. Η ανάγνωση του συστήματος αποτελείται από τις μετρήσεις του επιταχυνσιόμετρου και τις ενδείξεις για το αριστερό και το δεξί κλικ.
4. Οι αναγνώσεις συστήματος αποτελούνται από τη ροή δεδομένων 1 byte ή 8 bit, στην οποία τα πρώτα τρία bit αποτελούνται από τις συντεταγμένες X, τα δεύτερα τρία bit αποτελούνται από τις συντεταγμένες Y, το δεύτερο τελευταίο bit είναι το bit κατάστασης για λήψη η κατάσταση του αριστερού κλικ του ποντικιού και το τελευταίο bit είναι το bit κατάστασης για τη λήψη της κατάστασης του δεξιού κλικ.
5. Η τιμή των πρώτων τριών bit, δηλαδή η συντεταγμένη X μπορεί να κυμαίνεται από 100 <= Xcord <= 999, ενώ η τιμή για τη συντεταγμένη Y μπορεί να κυμαίνεται από το 100 <= Ycord <= 800. Οι τιμές για το δεξί και το αριστερό κλικ είναι οι δυαδικές τιμές είτε 0 είτε 1 στις οποίες 1 υποδηλώνει ότι το κλικ έγινε και 0 ότι το κλικ δεν πραγματοποιείται από τον χρήστη.
6. Για να μην αφήσει την αναπήδηση του κουμπιού να επηρεάσει τη θέση του δρομέα, διατηρείται γνωστή καθυστέρηση 4 δευτερολέπτων μετά από κάθε κλικ του κουμπιού ενεργοποίησης του ποντικιού.
7. Για το δεξί και το αριστερό κλικ στο ποντίκι αέρα, πρέπει πρώτα να πατήσουμε είτε το αριστερό είτε το δεξί κουμπί, και μετά από αυτό, πρέπει να πατήσουμε το κουμπί ενεργοποίησης για να μετακινηθούμε στη θέση του ποντικιού αέρα όπου θέλουμε.
Προγραμματισμός του Arduino για Air Mouse
Το Arduino πρέπει να προγραμματιστεί για να διαβάσει τις τιμές επιτάχυνσης στον άξονα X και Y. Το πλήρες πρόγραμμα δίνεται στο τέλος, παρακάτω είναι τα σημαντικά αποσπάσματα από τον κώδικα.
Ρύθμιση των καθολικών μεταβλητών
Όπως είπαμε προηγουμένως, θα συνδέσουμε τη μονάδα Bluetooth με τις σειριακές ακίδες του λογισμικού. Επομένως, για να ρυθμίσουμε το σειριακό λογισμικό πρέπει να δηλώσουμε τη βιβλιοθήκη του σειριακού λογισμικού και να ρυθμίσουμε τις ακίδες για Tx και Rx. Στο Arduino Nano και Uno Pin 2 και 3 μπορούν να λειτουργήσουν ως σειριακό λογισμικό. Στη συνέχεια, δηλώνουμε το αντικείμενο Bluetooth από τη σειριακή βιβλιοθήκη λογισμικού για να ρυθμίσουμε τον πείρο για τα Tx και Rx.
#περιλαμβάνω
Άκυρη ρύθμιση ()
Στη λειτουργία εγκατάστασης , πρόκειται να ορίσουμε τις μεταβλητές για να πούμε στο πρόγραμμα εάν θα λειτουργήσουν ως είσοδος ή έξοδος. Το κουμπί ενεργοποίησης θα ρυθμιστεί ως pull-up εισόδου και τα αριστερά και δεξιά κλικ θα δηλωθούν ως είσοδος και θα ρυθμιστούν ως High για να τα κάνουν να λειτουργούν ως pullups εισόδου.
Επίσης, ορίστε το ρυθμό baud για τη σειριακή επικοινωνία και την επικοινωνία Bluetooth σε 9600.
άκυρη ρύθμιση () { pinMode (x, INPUT); pinMode (y, ΕΙΣΟΔΟΣ); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, ΥΨΗΛΟΣ); digitalWrite (rclick, ΥΨΗΛΟΣ); Serial.begin (9600); bluetooth.begin (9600); }
Κενός βρόχος ()
Όπως θα πρέπει κουμπί ενεργοποίησης για να πει πότε πρέπει να στείλουμε το σύστημα το ρεύμα δεδομένων, έτσι ώστε να δημιουργηθεί το σύνολο του κώδικα στο εσωτερικό του , ενώ βρόχου που θα παρακολουθεί συνεχώς την ψηφιακή κατάσταση του pull-up σκανδάλη, καθώς πηγαίνει χαμηλά θα περάστε το περαιτέρω για την επεξεργασία.
Όπως έχουμε επισυνάψει ένα LED για να μας ενημερώσετε την κατάσταση του συστήματος όταν το κουμπί ενεργοποίησης πιέζεται, που αρχικά το οδήγησε σε χαμηλή εκτός του ενώ βρόχο όπως είναι προεπιλεγμένη κατάσταση και υψηλή στο εσωτερικό του , ενώ βρόχου που θα ανάψει η λυχνία LED όποτε πατηθεί το κουμπί ενεργοποίησης.
Για να διαβάσετε την κατάσταση του κουμπιού αριστερού και δεξιού κλικ, έχουμε δηλώσει παγκοσμίως δύο μεταβλητές lclick και rclick των οποίων οι τιμές αρχικά ορίστηκαν στο 0.
Και στο βρόχο , ορίστε την τιμή αυτών των μεταβλητών σύμφωνα με την ψηφιακή κατάσταση του κουμπιού αριστερού και δεξιού κλικ για να ελέγξετε εάν τα κουμπιά πατιούνται ή όχι.
Θα διαβάζαμε τις τιμές των ακίδων X και Y του επιταχυνσιόμετρου χρησιμοποιώντας τη λειτουργία analogRead και θα αντιστοιχίζουμε αυτές τις τιμές στο μέγεθος της οθόνης για να μετακινήσουμε το δείκτη του ποντικιού σε ολόκληρη την οθόνη. Δεδομένου ότι το μέγεθος της οθόνης είναι τα pixel στην οθόνη, πρέπει να το ρυθμίσουμε αναλόγως και καθώς χρειαζόμαστε την τιμή εξόδου να είναι τρία ψηφία, έχουμε ρυθμίσει σκόπιμα το εύρος για το X ως 100 <= X <= 999 και παρόμοια τιμή για το Υ ως 100 <= Y <= 800. Θυμηθείτε, τα pixel διαβάζονται από την επάνω αριστερή γωνία, δηλ. Η επάνω αριστερή γωνία έχει την τιμή (0,0), αλλά αφού έχουμε δηλώσει τρία ψηφία για τα x και y οι τιμές μας θα διαβάζονται από το σημείο (100,100).
Επιπλέον, εκτυπώστε την τιμή των συντεταγμένων και την κατάσταση του κλικ πάνω στο σειριακό και το Bluetooth με τη βοήθεια των λειτουργιών Serial.print και bluetooth.print που βοηθούν στη λήψη των τιμών στη σειριακή οθόνη και στο σύστημά σας μέσω Bluetooth.
Επιτέλους, λόγω του αναπήδησης ενός κουμπιού μπορεί να επαναληφθεί μία μόνο τιμή, η οποία θα προκαλούσε τον κέρσορα του ποντικιού να παραμείνει σε μία θέση, οπότε για να απαλλαγούμε από αυτό πρέπει να προσθέσουμε αυτήν την καθυστέρηση.
void loop () { digitalWrite (led, LOW). ενώ (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = χάρτης (xh, 286,429,100,999); ycord = χάρτης (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); αλλιώς Serial.print (0); if (rstate == LOW) Serial.print (1); αλλιώς Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); εάν (lstate == LOW) bluetooth.print (1); αλλού bluetooth.print (0); εάν (rstate == LOW) bluetooth.print (1); αλλιώς bluetooth.print (0); καθυστέρηση (4000) }}
Σενάριο προγράμματος οδήγησης Python
Από τώρα, έχουμε ολοκληρώσει με το υλικό και το τμήμα του υλικολογισμικού, τώρα για να λειτουργήσει το ποντίκι αέρα, πρέπει να έχουμε ένα σενάριο προγράμματος οδήγησης που θα μπορούσε να αποκωδικοποιήσει τα σήματα από το ποντίκι αέρα στις κινήσεις του δρομέα, οπότε γι 'αυτό επιλέξαμε Πύθων. Η Python είναι μια γλώσσα δέσμης ενεργειών και με το scripting εδώ εννοούμε ότι μας βοηθά να πάρουμε τον έλεγχο του άλλου προγράμματος, καθώς εδώ ελέγχουμε τον κέρσορα του ποντικιού.
Ανοίξτε λοιπόν το κέλυφος python και εγκαταστήστε τις ακόλουθες βιβλιοθήκες χρησιμοποιώντας τις παρακάτω εντολές:
pip install serial pip εγκατάσταση pyautogui
Το σειριακό είναι μια βιβλιοθήκη για το python που μας βοηθά να λαμβάνουμε τα δεδομένα από σειριακές διεπαφές, όπως com ports και μας επιτρέπει επίσης να το χειριστούμε, ενώ το pyautogui είναι βιβλιοθήκη για το python για να πάρει τον έλεγχο των δυνατοτήτων GUI, σε αυτήν την περίπτωση, του ποντικιού.
Τώρα ας φτάσουμε στον κώδικα για τα προγράμματα οδήγησης, το πρώτο πράγμα που πρέπει να κάνουμε είναι η εισαγωγή των σειριακών και pyautogui βιβλιοθηκών και, στη συνέχεια, από τη σειριακή βιβλιοθήκη, πρέπει να ορίσουμε τη θύρα για την επικοινωνία με ρυθμό baud 9600, όπως το Bluetooth.serial λειτουργεί στο. Για αυτό πρέπει να συνδέσετε τη μονάδα Bluetooth στο σύστημά σας και, στη συνέχεια, στις ρυθμίσεις συστήματος πρέπει να ελέγξετε σε ποια θύρα είναι συνδεδεμένη.
Το επόμενο πράγμα είναι να διαβάσετε τη σειριακή επικοινωνία από το Bluetooth στο σύστημα και να συνεχίσετε να συνεχίζετε να διατηρείτε τον υπόλοιπο κώδικα σε έναν συνεχή βρόχο με τη βοήθεια του 1.
Όπως είπαμε προηγουμένως ότι ο Arduino στέλνει 8 bit, τα πρώτα 6 για τις συντεταγμένες και τα δύο τελευταία για την κατάσταση των κουμπιών κλικ. Διαβάστε λοιπόν όλα τα κομμάτια με τη βοήθεια του ser.read και ρυθμίστε το μήκος του σε 8 bit.
Στη συνέχεια, διαιρέστε τα δυαδικά ψηφία για τις συντεταγμένες του δρομέα και κάντε κλικ περνώντας τα και, στη συνέχεια, κόψτε περαιτέρω τα κομμάτια του δρομέα σε συντεταγμένες X και Y ξεχωριστά Το ίδιο ισχύει και για το αριστερό και το δεξί κλικ.
Τώρα από την επικοινωνία, λαμβάνουμε μια συμβολοσειρά byte και πρέπει να τη μετατρέψουμε σε ακέραιο, ώστε να ταιριάζουν με τις συντεταγμένες, το κάνουμε αποκωδικοποιώντας τους και στη συνέχεια πληκτρολογώντας τους σε ακέραιους αριθμούς.
Τώρα για να μετακινήσουμε τον κέρσορα χρησιμοποιούμε τη συνάρτηση pyautogui moveto , η οποία παίρνει ως επιχειρήματα αυτές τις ακέραιες συντεταγμένες και μετακινεί τον κέρσορα σε αυτήν τη θέση.
Επόμενος έλεγχος για τα κλικ, το κάνουμε αυτό χρησιμοποιώντας τα δύο τελευταία bit και τη λειτουργία κλικ του pyautogui, το προεπιλεγμένο κλικ είναι αριστερό, ωστόσο μπορούμε να το ρυθμίσουμε προς τα δεξιά, δηλώνοντας την τιμή του κουμπιού προς τα δεξιά, μπορούμε επίσης να καθορίσουμε τον αριθμό των κλικ προς ορίστε το σε διπλό κλικ ρυθμίζοντας την παράμετρο κλικ σε 2.
Παρακάτω είναι ο πλήρης κωδικός Python που θα εκτελεστεί στον υπολογιστή:
εισαγωγή σειριακής εισαγωγής pyautogui ser = serial.Serial ('com3', 9600) ενώ 1: k = ser.read (8) κέρσορας = k κλικ = k x = δρομέας y = δρομέας l = κλικ r = κλικ xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (κλικ = 2) elif r = = 49: pyautogui.click (κουμπί = "δεξιά", κλικ = 2)
Δοκιμή του ποντικιού Arduino Air
Έτσι για τη λειτουργία του Air Mouse συνδέστε μια πηγή ενέργειας σε αυτό. Μπορεί να προέρχεται από την υποδοχή USB Arduino Nano ή από την τροφοδοσία 5V με χρήση 7805 IC. Στη συνέχεια, εκτελέστε το σενάριο του προγράμματος οδήγησης python ρυθμίζοντας τη θύρα στην οποία είναι συνδεδεμένο το Bluetooth σας. Καθώς το σενάριο εκτελείται, θα δείτε μια καθυστέρηση στην αναλαμπή του Bluetooth που σημαίνει ότι είναι συνδεδεμένο στο σύστημά σας. Στη συνέχεια, για να κάνετε κλικ, κάντε κλικ στο κουμπί σκανδάλης και θα δείτε ότι η θέση των συντεταγμένων θα άλλαζε και αν θέλετε το αριστερό ή το δεξί κλικ, τότε πρώτα πατήστε το αριστερό ή το δεξί κουμπί και το κουμπί σκανδάλης μαζί, θα δείτε τη δράση του κλικ στο μια αλλαγμένη θέση του δρομέα.
Δείτε το λεπτομερές βίντεο εργασίας παρακάτω.