- Komponenter, der kræves
- APDS9960 RGB & gestus sensor
- Kredsløbsdiagram
- Kode Forklaring
- Test af den gestusstyrede berøringsfri lift
I denne tid af Corona-pandemien er elevatorer blevet et højrisikosted, hvor alle rører ved de samme knapper. Mange steder har folk opdaget tricks til at forhindre kontakt med elevatorknapper som at bruge et pumpepapir, tandstikkere eller hygiejnevæv til at trykke på liftknapperne.
Så i forlængelse af vores tidligere Corona-sikkerhedsprojekter som automatisk desinficeringsmaskine, kontaktløs temperaturovervågning og social afstandsdetektor, her skal vi bygge en gestusstyret elevatoprototype ved hjælp af Arduino Nano.
Denne kontaktløse elevator bruger Arduino Nano, en APDS9960 gestusføler og et OLED-skærmmodul. Med dette gestusbaserede kontrolpanel kan du nemt styre din Lift ved at lave en håndbevægelse. APDS9960-sensoren bruges til at læse bevægelserne. OP og NED-bevægelser bruges til at indstille gulvnummeret, den venstre bevægelse er at lukke liftdøren og flytte liften i henhold til gulvnummeret, og den højre gestus bruges til at åbne døren.
Komponenter, der kræves
- Arduino Nano
- OLED-skærmmodul
- APDS9960 RGB & gestus sensor
- Brødbræt
- Jumper Wires
APDS9960 RGB & gestus sensor
APDS9960 RGB & Gesture Detection Module er et lille breakout-kort, der leveres med en indbygget APDS-9960-sensor, UV- og IR-blokeringsfiltre, fire separate dioder, der er følsomme over for forskellige retninger og en I2C-kompatibel grænseflade. Denne sensor kan bruges til måling af omgivende lys og farver, detektering af nærhed og berøringsfri bevægelsesregistrering. Den har et bevægelsesdetekteringsområde på 10 til 20 cm og kan bruges til at styre en mikrokontroller, robot og i mange andre projekter.
Funktioner:
- Driftsspænding: 2,4V til 3,6V
- Driftsområde: 4-8in (10-20cm).
- I2C-interface (I2C-adresse: 0x39).
- Omgivende lys og RGB-farvesensor, nærhed
- Registrering og bevægelsesdetektion i et optisk modul
- I2C-bus hurtig tilstandskompatibel grænseflade med datahastigheder op til 400 kHz.
Kredsløbsdiagram
Circuit Diagram for Contactless Elevator using APDS9960 er angivet nedenfor.
Vi grænseflader Arduino Nano med APDS9960-sensor og OLED-skærm. VCC og GND-stifter på begge APDS9960-sensoren og OLED-skærmen er forbundet til 3,3 V og GND af Arduino. Mens SCL- og SDA-stifter på APDS9960-sensoren og OLED-skærmen er tilsluttet henholdsvis A5- og A4-stifter på Arduino.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Sådan ser den komplette opsætning af gestikstyret elevator ved hjælp af Arduino ud:
Hvis du vil vide mere om OLED-skærm og dens grænseflade til andre mikrokontrollere, skal du følge linket.
Kode Forklaring
Den komplette kode til kontaktløs elevator ved hjælp af APDS9960 findes i slutningen af siden. Her forklarer vi nogle vigtige dele af koden. I dette program skal vi bruge bibliotekerne APDS9960 og Adafruit_SH1106 . APDS9960-biblioteket kan downloades fra Arduino IDE. For at downloade biblioteket skal du gå til Skitse> Biblioteksmanager> Søg og derefter indtaste Arduino APDS9960. Mens Adafruit_SH1106-biblioteket kan downloades herfra.
Så start som normalt koden ved at inkludere alle de nødvendige biblioteker. Adafruit_SH1106.h er den ændrede version af det originale Adafruit-bibliotek.
#omfatte
I de næste linjer skal du definere variablerne til at gemme det aktuelle gulv- og gulvnummer, hvor brugeren ønsker at gå.
int floornum = 0; int strømgulv = 0;
Derefter skal du indtaste bitmaps for UP-pil, Pil ned, Åbn dør og Luk dør-billeder. HEX-kode til et billede kan genereres ved hjælp af en konverter som Image2cpp. For at lære mere om, hvordan du bruger Image2cpp, skal du følge denne Arduino QR-kodegeneratorvejledning.
const usigneret char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………………..}; const usigneret char ned PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………………..}; const usigneret char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… ………………………………………………………………….;
I opsætningsfunktionen () initialiser du den serielle skærm med en baudhastighed på 9600 til fejlfindingsformål. Initialiser derefter OLED-skærmen og APDS9960-sensoren i de næste linjer med start () -metoden som følger:
Serial.begin (9600); hvis (! APDS.begin ()) {Serial.println ("Fejl ved initialisering af APDS9960-sensor!"); } Serial.println ("Registrering af bevægelser…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Efter initialisering af skærmen og sensoren skal du rydde skærmbufferen med clearDisplay () -metoden og indstille skriftstørrelse og farve ved hjælp af metoderne display.setTextSize () og display.setTextColor () .
display.setTextSize (2); display.setTextColor (HVID); display.clearDisplay (); display.display ();
Inde i hulrummet () skal du konstant kontrollere, om der blev foretaget en gest. Hvis ja, skal du læse bevægelsesværdierne og kontrollere, hvilken bevægelse det er (OP, NED, HØJRE, VENSTRE) og udskriver den tilsvarende måling på den serielle skærm. OP- og NED-bevægelser bruges til at indstille gulvnummeret, hvor brugeren ønsker at gå. Den venstre gestus er at lukke liftdøren og flytte liften i henhold til gulvnummeret, mens den højre gestus bruges til at åbne døren.
hvis (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (gestus) {case GESTURE_UP: Serial.println ("Opdaget UP-gestus"); display.clearDisplay (); floornum ++; hjem1 (); pause; sag GESTURE_DOWN: Serial.println ("Opdaget NED-gestus"); display.clearDisplay (); gulvnummer -; hjem1 (); pause; sag GESTURE_LEFT: Serial.println ("Registreret VENSTRE gestus"); display.clearDisplay (); Start(); pause; sag GESTURE_RIGHT: Serial.println ("Registreret RIGHT gestus"); display.clearDisplay (); hjem1 (); pause; standard: pause; }
Funktionen home1 () bruges til at tegne startskærmen for en elevator. Dette består af en pil op, pil ned, Åben dør, Luk dørskilte og nuværende gulvnummer. drawBitmap () - funktionen bruges til at tegne billederne på OLED-skærmen. Syntaksen for drawBitmap () -funktionen er angivet nedenfor:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, farve);
Hvor:
int16_t x, int16_t y er X- og Y-koordinater for OLED-display
bitmap er navnet på bitmap
int16_t w, int16_t h er billedets højde og vægt.
ugyldigt hjem1 () {display.setCursor (101,23); display.println (gulvnummer); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, HVID); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Den start () funktion anvendes til at bevæge elevatoren opad eller nedad. Til dette sammenlignes det aktuelle etage nr. Med det gulvnummer, hvor brugeren ønsker at gå. Hvis etagenummeret er større end det aktuelle etage nr. så bevæger liften sig opad, og hvis etagenummeret er mindre end det nuværende etage nr. så bevæger liften sig nedad. Elevatoren stopper, når både nuværende etage nr. og etage nr. er det samme.
ugyldig start () {while (floornum> currentfloor) {Serial.println ("going UP"); strømgulv ++; display.drawBitmap (0, 0, op, 100, 64, HVID); display.setCursor (101,23); display.println (nuværende gulv); display.display (); display.clearDisplay (); forsinkelse (2000); } mens (floornum <currentfloor) {Serial.println ("går ned"); strømgulv--; display.drawBitmap (0, 0, ned, 100, 64, HVID); display.setCursor (101,23); display.println (nuværende gulv); display.display (); display.clearDisplay (); forsinkelse (2000); } if (floornum == currentfloor) {Serial.println ("Nået"); display.clearDisplay (); hjem1 (); Serial.print (nuværende gulv); }}
Test af den gestusstyrede berøringsfri lift
Når hardware og kode er klar, skal du slutte Arduino Nano til den bærbare computer og uploade den komplette kode, der er angivet nedenfor. Som du kan se som standard, viser OLED Elevator UI.
Bøj nu din hånd op eller ned, som vist i videoen nedenfor, for at indstille gulvet, hvor du vil hen. Foretag derefter den venstre bevægelse for at anerkende liften for at gå til den etage. Hvis du vil stoppe liften, skal du gøre den rigtige gest med din hånd.
Den komplette arbejdsvideo og kode for dette projekt er angivet nedenfor. Håber du nød at bygge dette projekt. Hvis du har spørgsmål vedrørende dette projekt, skal du lade dem være i kommentarfeltet.