- Súčasti sú povinné
- APDS9960 RGB a snímač gest
- Schéma zapojenia
- Vysvetlenie kódu
- Testovanie bezdotykového ovládania gestami
V tejto dobe pandémie Corona sa výťahy stali vysoko rizikovým miestom, kde sa každý dotýka rovnakých tlačidiel. Na mnohých miestach ľudia objavili triky, ktoré zabraňujú kontaktu s gombíkmi výťahu, ako napríklad stlačenie tlačidiel na zdvíhanie pomocou napumpovacieho papiera, špáradiel alebo hygienických vreckoviek.
Takže v pokračovaní našich predchádzajúcich bezpečnostných projektov v Corone, ako je automatický dezinfekčný prístroj, bezkontaktné sledovanie teploty a sociálny detektor vzdialenosti, tu postavíme prototyp výťahu riadeného gestami pomocou Arduino Nano.
Tento bezkontaktný výťah používa Arduino Nano, snímač gest APDS9960 a modul OLED displeja. Pomocou tohto ovládacieho panela založeného na gestách môžete svoj výťah ľahko ovládať gestom ruky. Senzor APDS9960 sa používa na čítanie gest. Gestá HORE a DOLE sa používajú na nastavenie čísla poschodia, ľavé gesto znamená zatvorenie dverí výťahu a presun výťahu podľa čísla poschodia a gesto Doprava sa používa na otvorenie dverí.
Súčasti sú povinné
- Arduino Nano
- OLED displejový modul
- APDS9960 RGB a snímač gest
- Nepál
- Prepojovacie drôty
APDS9960 RGB a snímač gest
Modul detekcie RGB a gest APDS9960 je malá odpočinková doska, ktorá je dodávaná so zabudovaným snímačom APDS-9960, UV a IR blokujúcimi filtrami, štyrmi samostatnými diódami citlivými na rôzne smery a rozhraním kompatibilným s I2C. Tento snímač je možné použiť na meranie okolitého svetla a farieb, detekciu blízkosti a bezdotykové snímanie gest. Má rozsah detekcie gest od 10 do 20 cm a dá sa použiť na ovládanie mikrokontroléra, robota a v mnohých ďalších projektoch.
Vlastnosti:
- Prevádzkové napätie: 2,4 V až 3,6 V
- Prevádzkový rozsah: 4 - 8 palcov (10 - 20 cm).
- Rozhranie I2C (adresa I2C: 0x39).
- Okolité svetlo a snímanie farieb RGB, blízkosť
- Snímanie a detekcia gest v optickom module
- Kompatibilné rozhranie I2C-bus kompatibilné s rýchlym režimom s dátovými rýchlosťami až 400 kHz.
Schéma zapojenia
Schéma zapojenia bezkontaktného výťahu pomocou APDS9960 je uvedená nižšie.
Prepojujeme Arduino Nano so senzorom APDS9960 a OLED displejom. Kolíky VCC a GND senzora APDS9960 aj OLED displeja sú pripojené k 3,3 V a GND Arduina. Zatiaľ čo SCL a SDA piny APDS9960 senzora a OLED displeja sú pripojené k A5 a A4 pinom Arduino Respektíve.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3,3 v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Takto bude vyzerať kompletné nastavenie výťahu ovládaného gestami pomocou Arduina:
Ak sa chcete dozvedieť viac informácií o OLED displeji a jeho prepojení s inými mikrokontrolérmi, kliknite na odkaz.
Vysvetlenie kódu
Celý kód pre bezkontaktný výťah pomocou APDS9960 je uvedený na konci stránky. Tu vysvetľujeme niektoré dôležité časti kódu. V tomto programe budeme používať knižnice APDS9960 a Adafruit_SH1106 . Knižnicu APDS9960 je možné stiahnuť z IDE Arduino. Ak chcete stiahnuť knižnicu, prejdite na Skica> Správca knižnice> Hľadať a potom zadajte Arduino APDS9960. Zatiaľ čo knižnicu Adafruit_SH1106 si môžete stiahnuť odtiaľto.
Takže ako obvykle začnite kód zahrnutím všetkých požadovaných knižníc. Adafruit_SH1106.h je upravená verzia pôvodnej knižnice Adafruit.
#include
V ďalších riadkoch definujte premenné, do ktorých sa má uložiť aktuálne poschodie a číslo poschodia, kam sa chce používateľ dostať.
int floornum = 0; int currentfloor = 0;
Potom zadajte bitmapy pre obrázky Šípka HORE, Šípka nadol, Otvorené dvere a Zatvoriť dvere. HEX kód pre obrázok je možné vygenerovať pomocou prevodníka ako Image2cpp. Ak sa chcete dozvedieť viac o tom, ako používať Image2cpp, postupujte podľa tohto tutoriálu pre generátor QR kódov Arduino.
const nepodpísané char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; konštantný nepodpísaný znak dole PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; konštantný nepodpísaný znak dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
Vo funkcii setup () inicializujte Serial Monitor s prenosovou rýchlosťou 9600 na účely ladenia. Potom v ďalších riadkoch inicializujte OLED displej a senzor APDS9960 metódou start () nasledovne:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Chyba pri inicializácii senzora APDS9960!"); } Serial.println ("Zisťovanie gest…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Po inicializácii displeja a snímača vyčistite vyrovnávaciu pamäť displeja metódou clearDisplay () a pomocou metód display.setTextSize () a display.setTextColor () nastavte veľkosť a farbu písma.
display.setTextSize (2); display.setTextColor (BIELA); display.clearDisplay (); display.display ();
Vnútri void slučky () , neustále kontrolovať prípadné gesto bolo vykonané. Ak áno, potom si prečítajte hodnoty gesta a skontrolujte, o ktoré gesto ide (HORE, DOLE, VPRAVO, VĽAVO) a vytlačí príslušné hodnoty na sériový monitor. Gestá HORE a DOLE sa používajú na nastavenie čísla poschodia, kam chce používateľ prejsť. Gesto doľava je zavrieť dvere výťahu a posunúť výťah podľa čísla poschodia, zatiaľ čo gesto doprava sa používa na otvorenie dverí.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (gesto) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; home1 (); prestávka; prípad GESTURE_DOWN: Serial.println ("Zistené gesto DOLU"); display.clearDisplay (); floornum -; home1 (); prestávka; prípad GESTURE_LEFT: Serial.println ("Zistené LEVÉ gesto"); display.clearDisplay (); štart (); prestávka; prípad GESTURE_RIGHT: Serial.println ("Zistené PRAVÉ gesto"); display.clearDisplay (); home1 (); prestávka; predvolené: break; }
Funkcia home1 () sa používa na nakreslenie domovského displeja výťahu. Pozostáva zo šípky nahor, šípky nadol, značiek Open Door, Close Door a aktuálneho čísla poschodia. funkcia drawBitmap () slúži na kreslenie obrázkov na OLED displeji. Syntax funkcie drawBitmap () je uvedená nižšie:
drawBitmap (int16_t x, int16_t y, bitmapa, int16_t w, int16_t h, farba);
Kde:
int16_t x, int16_t y sú X a Y súradnice OLED displeja
bitmapa je názov bitmapy
int16_t w, int16_t h sú výška a váha obrázka.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, hore, 40, 18, BIELA); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Funkcia start () sa používa na pohyb výťahu nahor alebo nadol. Preto sa súčasné poschodie č porovnáva s číslom poschodia, kam chce používateľ ísť. Ak je číslo poschodia väčšie ako súčasné poschodie č. potom sa výťah presunie nahor a ak je číslo poschodia menšie ako súčasné poschodie č. potom sa výťah presunie nadol. Výťah sa zastaví, keď bude na súčasnom poschodí č. a poschodie č. sú rovnaké.
void start () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, hore, 100, 64, BIELA); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); meškanie (2000); } while (floornum <currentfloor) {Serial.println ("ísť dole"); currentfloor--; display.drawBitmap (0, 0, nadol, 100, 64, BIELY); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); meškanie (2000); } if (floornum == currentfloor) {Serial.println ("dosiahol"); display.clearDisplay (); home1 (); Serial.print (currentfloor); }}
Testovanie bezdotykového ovládania gestami
Keď sú hardvér a kód pripravené, pripojte Arduino Nano k notebooku a nahrajte kompletný kód uvedený nižšie. Ako vidíte, v predvolenom nastavení sa na OLED zobrazí používateľské rozhranie Elevator.
Teraz mávnite rukou hore alebo dole, ako je to znázornené vo videu nižšie, a nastavte tak podlahu, kam chcete ísť. Potom gestom doľava potvrďte zdvihnutie a choďte na dané poschodie. Ak chcete výťah zastaviť, rukou urobte správne gesto.
Kompletné pracovné video a kód tohto projektu sú uvedené nižšie. Dúfam, že sa vám tento projekt páčil. Ak máte akékoľvek otázky týkajúce sa tohto projektu, zanechajte ich v sekcii komentárov.