- Απαιτούμενα στοιχεία
- APDS9960 RGB & αισθητήρας χειρονομίας
- Διάγραμμα κυκλώματος
- Επεξήγηση κώδικα
- Έλεγχος της χειροκίνητης ανύψωσης χωρίς άγγιγμα
Σε αυτήν την εποχή της πανδημίας Corona, οι ανελκυστήρες έχουν γίνει ένα μέρος υψηλού κινδύνου όπου όλοι αγγίζουν τα ίδια κουμπιά. Σε πολλά μέρη, οι άνθρωποι έχουν ανακαλύψει κόλπα για να αποτρέψουν την επαφή με κουμπιά ανελκυστήρα, όπως η χρήση χαρτιού άντλησης, οδοντογλυφίδες ή υγειονομικοί ιστοί για το πάτημα των κουμπιών ανύψωσης.
Συνεχίζοντας λοιπόν τα προηγούμενα έργα ασφαλείας της Corona, όπως αυτόματο μηχάνημα απολύμανσης, παρακολούθηση θερμοκρασίας χωρίς επαφή και ανιχνευτή κοινωνικής απόστασης, εδώ πρόκειται να κατασκευάσουμε ένα πρωτότυπο ανελκυστήρα ελεγχόμενης Gesture χρησιμοποιώντας το Arduino Nano.
Αυτός ο ανελκυστήρας χωρίς επαφή χρησιμοποιεί το Arduino Nano, έναν αισθητήρα χειρονομίας APDS9960 και μια μονάδα οθόνης OLED. Με αυτόν τον πίνακα ελέγχου βάσει χειρονομίας, μπορείτε εύκολα να ελέγξετε το Lift σας κάνοντας μια χειρονομία. Ο αισθητήρας APDS9960 χρησιμοποιείται για την ανάγνωση των κινήσεων. Οι χειρονομίες Πάνω και Κάτω χρησιμοποιούνται για να ορίσετε τον αριθμό δαπέδου, η αριστερή κίνηση είναι να κλείσετε την πόρτα του ανελκυστήρα και να μετακινήσετε τον ανελκυστήρα σύμφωνα με τον αριθμό δαπέδου και η Δεξιά χειρονομία χρησιμοποιείται για το άνοιγμα της πόρτας.
Απαιτούμενα στοιχεία
- Arduino Nano
- Ενότητα οθόνης OLED
- APDS9960 RGB & αισθητήρας χειρονομίας
- Ψωμί
- Καλώδια αλτών
APDS9960 RGB & αισθητήρας χειρονομίας
Το APDS9960 RGB & Gesture Detection Module είναι ένας μικρός πίνακας ξεμπλοκαρίσματος που διαθέτει ενσωματωμένο αισθητήρα APDS-9960, φίλτρα αποκλεισμού UV και IR, τέσσερις ξεχωριστές διόδους ευαίσθητες σε διαφορετικές κατευθύνσεις και συμβατή διεπαφή I2C. Αυτός ο αισθητήρας μπορεί να χρησιμοποιηθεί για μέτρηση φωτός και χρώματος περιβάλλοντος, ανίχνευση εγγύτητας και ανίχνευση χειρονομίας χωρίς επαφή. Έχει εύρος ανίχνευσης χειρονομίας 10 έως 20 cm και μπορεί να χρησιμοποιηθεί για τον έλεγχο ενός μικροελεγκτή, ενός ρομπότ και σε πολλά άλλα έργα.
Χαρακτηριστικά:
- Λειτουργική τάση: 2.4V έως 3.6V
- Εύρος λειτουργίας: 4-8in (10-20cm).
- Διεπαφή I2C (Διεύθυνση I2C: 0x39).
- Ambient Light και RGB Color Sensing, εγγύτητα
- Ανίχνευση και ανίχνευση χειρονομίας σε μια οπτική ενότητα
- Συμβατή διεπαφή γρήγορης λειτουργίας I2C-bus με ρυθμούς δεδομένων έως 400 kHz.
Διάγραμμα κυκλώματος
Το διάγραμμα κυκλώματος για ανελκυστήρα χωρίς επαφή χρησιμοποιώντας το APDS9960 δίνεται παρακάτω.
Συνδέουμε το Arduino Nano με τον αισθητήρα APDS9960 και την οθόνη OLED. Οι ακίδες VCC και GND του αισθητήρα APDS9960 και της οθόνης OLED συνδέονται με 3.3V και GND του Arduino. Ενώ οι ακροδέκτες SCL και SDA του APDS9960 Sensor και OLED Display συνδέονται με τις ακίδες A5 και A4 του Arduino αντίστοιχα.
Καρφίτσα OLED & APDS9960 |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
Α5 |
SDA |
Α4 |
Με αυτόν τον τρόπο θα φαίνεται η πλήρης ρύθμιση για το ελεγχόμενο Gesture Elevator που χρησιμοποιεί το Arduino:
Για να μάθετε περισσότερα σχετικά με την οθόνη OLED και τη διασύνδεσή της με άλλους μικροελεγκτές, ακολουθήστε τον σύνδεσμο.
Επεξήγηση κώδικα
Ο πλήρης κωδικός για το Contactless Elevator χρησιμοποιώντας το APDS9960 δίνεται στο τέλος της σελίδας. Εδώ εξηγούμε μερικά σημαντικά μέρη του κώδικα. Σε αυτό το πρόγραμμα, θα χρησιμοποιήσουμε τις βιβλιοθήκες APDS9960 και Adafruit_SH1106. Μπορείτε να κατεβάσετε τη βιβλιοθήκη APDS9960 από το Arduino IDE. Για να κάνετε λήψη της βιβλιοθήκης, μεταβείτε στο Σκίτσο> Διαχείριση βιβλιοθήκης> Αναζήτηση και, στη συνέχεια, εισαγάγετε το Arduino APDS9960. Ενώ μπορείτε να κατεβάσετε τη βιβλιοθήκη Adafruit_SH1106 από εδώ.
Έτσι, ως συνήθως, ξεκινήστε τον κώδικα συμπεριλαμβάνοντας όλες τις απαιτούμενες βιβλιοθήκες. Το Adafruit_SH1106.h είναι η τροποποιημένη έκδοση της αρχικής βιβλιοθήκης Adafruit.
#περιλαμβάνω
Στις επόμενες γραμμές, ορίστε τις μεταβλητές για την αποθήκευση του τρέχοντος αριθμού δαπέδου και κατωφλίου όπου ο χρήστης θέλει να πάει.
int floornum = 0; int currentfloor = 0;
Μετά από αυτό, εισαγάγετε τα bitmap για εικόνες UP Arrow, Down Arrow, Open Door και Close Door. Ο κωδικός HEX για μια εικόνα μπορεί να δημιουργηθεί χρησιμοποιώντας έναν μετατροπέα όπως το Image2cpp. Για να μάθετε περισσότερα σχετικά με τον τρόπο χρήσης του Image2cpp, ακολουθήστε αυτόν τον οδηγό δημιουργίας κώδικα Arduino QR.
const unsigned char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const unsigned char down PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const unsigned char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0, ………………………… …………………………………………………………..};
Στη συνάρτηση setup () , αρχικοποιήστε το Serial Monitor με ρυθμό baud 9600 για σκοπούς εντοπισμού σφαλμάτων. Στη συνέχεια, στις επόμενες γραμμές, αρχικοποιήστε την οθόνη OLED και τον αισθητήρα APDS9960 με τη μέθοδο έναρξης () ως εξής:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Σφάλμα κατά την προετοιμασία του αισθητήρα APDS9960!"); } Serial.println ("Εντοπισμός χειρονομιών…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Αφού αρχικοποιήσετε την οθόνη και τον αισθητήρα, καθαρίστε το buffer οθόνης με τη μέθοδο clearDisplay () και ορίστε το μέγεθος και το χρώμα της γραμματοσειράς χρησιμοποιώντας τις μεθόδους display.setTextSize () και display.setTextColor () .
display.setTextSize (2); display.setTextColor (ΛΕΥΚΟ); display.clearDisplay (); display.display ();
Μέσα στον κενό βρόχο () , ελέγχετε συνεχώς αν έγινε χειρονομία. Εάν ναι, διαβάστε τις τιμές χειρονομίας και ελέγξτε ποια κίνηση είναι (ΠΑΝΩ, ΚΑΤΩ, ΔΕΞΙΑ, ΑΡΙΣΤΕΡΑ) και εκτυπώνει την αντίστοιχη ένδειξη στη σειριακή οθόνη. Οι χειρονομίες ΠΑΝΩ και ΚΑΤΩ χρησιμοποιούνται για να ορίσουν τον αριθμό κατωφλίου όπου ο χρήστης θέλει να πάει. Η αριστερή κίνηση είναι να κλείσετε την πόρτα του ανελκυστήρα και να μετακινήσετε τον ανελκυστήρα σύμφωνα με τον αριθμό του δαπέδου ενώ η Δεξιά χειρονομία χρησιμοποιείται για το άνοιγμα της πόρτας.
εάν (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); διακόπτης (χειρονομία) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; Σπίτι 1(); Διακοπή; υπόθεση GESTURE_DOWN: Serial.println ("Detected DOWN gesture"); display.clearDisplay (); floornum -; Σπίτι 1(); Διακοπή; υπόθεση GESTURE_LEFT: Serial.println ("Εντοπίστηκε αριστερή κίνηση"); display.clearDisplay (); αρχή(); Διακοπή; υπόθεση GESTURE_RIGHT: Serial.println ("Detected RIGHT gesture"); display.clearDisplay (); Σπίτι 1(); Διακοπή; προεπιλογή: break; }
Η λειτουργία home1 () χρησιμοποιείται για τη σχεδίαση της αρχικής οθόνης για ανελκυστήρα. Αυτό αποτελείται από ένα επάνω βέλος, κάτω βέλος, ανοιχτή πόρτα, πινακίδες κλειστής πόρτας και τρέχοντα αριθμό δαπέδου. Η συνάρτηση drawBitmap () χρησιμοποιείται για τη σχεδίαση των εικόνων στην οθόνη OLED. Η σύνταξη για τη συνάρτηση drawBitmap () δίνεται παρακάτω:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, χρώμα);
Οπου:
int16_t x, int16_t y είναι συντεταγμένες X και Y της οθόνης OLED
το bitmap είναι το όνομα του bitmap
int16_t w, int16_t h είναι το ύψος και το βάρος της εικόνας.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, πόρτα, 29, 30, ΛΕΥΚΟ); display.drawBitmap (60, 15, κλειστό, 29, 30, ΛΕΥΚΟ); display.display (); }
Η λειτουργία έναρξης () χρησιμοποιείται για να μετακινήσετε τον ανελκυστήρα προς τα πάνω ή προς τα κάτω. Για αυτό, το τρέχον όροφο δεν συγκρίνεται με τον αριθμό δαπέδου όπου ο χρήστης θέλει να πάει. Εάν ο αριθμός δαπέδου είναι μεγαλύτερος από τον τρέχοντα όροφο αριθ. τότε ο ανελκυστήρας θα κινηθεί προς τα πάνω και εάν ο αριθμός δαπέδου είναι μικρότερος από τον τρέχοντα όροφο αρ. τότε ο ανελκυστήρας θα κινηθεί προς τα κάτω. Ο ανελκυστήρας θα σταματήσει όταν και οι δύο ο όροφος αρ. και όροφος αρ. είναι τα ίδια.
άκυρη εκκίνηση () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, άνω, 100, 64, ΛΕΥΚΟ); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); καθυστέρηση (2000); } ενώ (floornum <currentfloor) {Serial.println ("πηγαίνει προς τα κάτω"); currentfloor--; display.drawBitmap (0, 0, down, 100, 64, WHITE); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); καθυστέρηση (2000); } εάν (floornum == currentfloor) {Serial.println ("Reached"); display.clearDisplay (); Σπίτι 1(); Serial.print (currentfloor); }}
Έλεγχος της χειροκίνητης ανύψωσης χωρίς άγγιγμα
Μόλις το υλικό και ο κωδικός είναι έτοιμοι, συνδέστε το Arduino Nano στον φορητό υπολογιστή και ανεβάστε τον πλήρη κωδικό που δίνεται παρακάτω. Όπως μπορείτε να δείτε από προεπιλογή, το OLED θα εμφανίσει το περιβάλλον εργασίας ανελκυστήρα.
Τώρα σηκώστε το χέρι σας προς τα πάνω ή προς τα κάτω, όπως φαίνεται στο παρακάτω βίντεο, για να ορίσετε το πάτωμα όπου θέλετε να πάτε. Στη συνέχεια, κάντε την αριστερή χειρονομία για να αναγνωρίσετε τον ανελκυστήρα για να πάτε σε αυτό το πάτωμα. Εάν θέλετε να σταματήσετε τον ανελκυστήρα, κάντε τη σωστή χειρονομία με το χέρι σας.
Το πλήρες βίντεο και ο κωδικός εργασίας για αυτό το έργο δίνονται παρακάτω. Ελπίζω να σας άρεσε η κατασκευή αυτού του έργου. Εάν έχετε οποιεσδήποτε ερωτήσεις σχετικά με αυτό το έργο, αφήστε τους στην ενότητα σχολίων.