- Požadované komponenty
- APDS9960 RGB a snímač gest
- Kruhový diagram
- Vysvětlení kódu
- Testování bezdotykového zvedání ovládaného gesty
V této době pandemie v Coroně se výtahy staly vysoce rizikovým místem, kde se každý dotýká stejných tlačítek. Na mnoha místech lidé objevili triky, které zabraňují kontaktu s knoflíky výtahu, jako je použití stlačovacího papíru, párátka nebo hygienických ubrousků pro stisknutí knoflíků výtahu.
Takže v pokračování našich předchozích bezpečnostních projektů Corona, jako je automatický dezinfekční stroj, bezkontaktní monitorování teploty a detektor sociální vzdálenosti, zde budeme stavět prototyp výtahu řízeného gesty pomocí Arduino Nano.
Tento bezkontaktní výtah používá Arduino Nano, snímač gest APDS9960 a modul displeje OLED. S tímto ovládacím panelem založeným na gestech můžete svůj zvedák snadno ovládat gestem ruky. Senzor APDS9960 se používá ke čtení gest. Gesta NAHORU a DOLŮ se používají k nastavení čísla podlahy, levé gesto je zavření dveří výtahu a posunutí výtahu podle čísla podlahy a gesto doprava se používá k otevření dveří.
Požadované komponenty
- Arduino Nano
- OLED displejový modul
- APDS9960 RGB a snímač gest
- Nepájivá deska
- Propojovací dráty
APDS9960 RGB a snímač gest
Modul detekce RGB a gesta APDS9960 je malá průlomová deska, která je dodávána s integrovaným senzorem APDS-9960, UV a IR blokovacími filtry, čtyřmi samostatnými diodami citlivými na různé směry a rozhraním kompatibilním s I2C. Tento senzor lze použít pro měření okolního světla a barev, detekci blízkosti a bezdotykové snímání gest. Má rozsah detekce gest od 10 do 20 cm a lze jej použít k ovládání mikrokontroléru, robota a v mnoha dalších projektech.
Funkce:
- Provozní napětí: 2,4 V až 3,6 V
- Provozní rozsah: 4–8 palců (10–20 cm).
- Rozhraní I2C (adresa I2C: 0x39).
- Okolní světlo a snímání barev RGB, blízkost
- Snímání a detekce gest v optickém modulu
- Kompatibilní rozhraní I2C-bus s rychlým režimem a datovými rychlostmi až 400 kHz.
Kruhový diagram
Schéma zapojení bezkontaktního výtahu pomocí APDS9960 je uvedeno níže.
Propojujeme Arduino Nano se senzorem APDS9960 a OLED displejem. Kolíky VCC a GND senzoru APDS9960 a OLED displeje jsou připojeny k 3,3 V a GND Arduina. Zatímco piny SCL a SDA senzoru APDS9960 a OLED displeje jsou připojeny k pinům A5 a A4 Arduino.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3,3 v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Takto bude vypadat kompletní nastavení výtahu řízeného gesty pomocí Arduina:
Chcete-li se dozvědět více o OLED displeji a jeho propojení s jinými mikrokontroléry, klikněte na odkaz.
Vysvětlení kódu
Celý kód pro bezkontaktní výtah pomocí APDS9960 je uveden na konci stránky. Zde vysvětlujeme některé důležité části kódu. V tomto programu budeme používat knihovny APDS9960 a Adafruit_SH1106 . Knihovnu APDS9960 lze stáhnout z Arduino IDE. Chcete-li stáhnout knihovnu, přejděte do části Skica> Správce knihovny> Hledat a poté zadejte Arduino APDS9960. Zatímco knihovna Adafruit_SH1106 lze stáhnout zde.
Jako obvykle tedy spusťte kód zahrnutím všech požadovaných knihoven. Adafruit_SH1106.h je upravená verze původní knihovny Adafruit.
#zahrnout
V následujících řádcích definujte proměnné pro uložení aktuálního patra a čísla patra, kam chce uživatel přejít.
int floornum = 0; int currentfloor = 0;
Poté zadejte bitmapy pro obrázky Šipka nahoru, Šipka dolů, Otevřít dveře a Zavřít dveře. HEX kód pro obrázek lze vygenerovat pomocí převaděče jako Image2cpp. Chcete-li se dozvědět více o tom, jak používat Image2cpp, postupujte podle tohoto výukového programu pro generování QR kódu Arduino.
const nepodepsané char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepodepsaný znak dolů PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepodepsaný znak dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
Ve funkci setup () inicializujte Serial Monitor s přenosovou rychlostí 9600 pro účely ladění. Poté v následujících řádcích inicializujte OLED displej a senzor APDS9960 metodou begin () následujícím způsobem:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Chyba při inicializaci senzoru APDS9960!"); } Serial.println ("Detekování gest…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Po inicializaci displeje a senzoru vymažte vyrovnávací paměť displeje metodou clearDisplay () a pomocí metod display.setTextSize () a display.setTextColor () nastavte velikost a barvu písma.
display.setTextSize (2); display.setTextColor (BÍLÁ); display.clearDisplay (); display.display ();
Uvnitř void smyčky () , neustále kontrolovat případné gesto bylo provedeno. Pokud ano, přečtěte hodnoty gesta a zkontrolujte, o jaké gesto se jedná (NAHORU, DOLŮ, VPRAVO, VLEVO) a vytiskne odpovídající čtení na sériovém monitoru. Gesta NAHORU a DOLŮ se používají k nastavení čísla patra, kam chce uživatel přejít. Gesto vlevo znamená zavřít dveře výtahu a pohybovat výtahem podle čísla podlahy, zatímco gesto doprava slouží k otevření dveří.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (gesto) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; home1 (); přestávka; případ GESTURE_DOWN: Serial.println ("Zjištěno gesto DOWN"); display.clearDisplay (); floornum -; home1 (); přestávka; případ GESTURE_LEFT: Serial.println ("Zjištěno LEVÉ gesto"); display.clearDisplay (); Start(); přestávka; case GESTURE_RIGHT: Serial.println ("Detected RIGHT gesture"); display.clearDisplay (); home1 (); přestávka; výchozí: konec; }
Funkce home1 () se používá k nakreslení domovského displeje výtahu. Skládá se ze šipky nahoru, šipky dolů, otevřených dveří, značek zavřít dveře a čísla aktuálního podlaží. Funkce drawBitmap () se používá k kreslení obrázků na OLED displeji. Syntaxe funkce drawBitmap () je uvedena níže:
drawBitmap (int16_t x, int16_t y, bitmapa, int16_t w, int16_t h, barva);
Kde:
int16_t x, int16_t y jsou souřadnice X a Y OLED displeje
bitmapa je název bitmapy
int16_t w, int16_t h jsou výška a hmotnost obrázku.
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, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, uzavřený, 29, 30, BÍLÝ); display.display (); }
Funkce start () slouží k pohybu výtahu nahoru nebo dolů. Za tímto účelem se aktuální číslo podlahy porovnává s číslem podlaží, kam chce uživatel přejít. Pokud je číslo patra větší než aktuální číslo patra. pak se výtah posune nahoru a pokud je počet podlaží menší než aktuální číslo podlaží. pak se výtah pohne dolů. Výtah se zastaví, když se objeví i aktuální podlaží č. a podlaží č. jsou stejní.
void start () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, nahoru, 100, 64, BÍLÁ); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); zpoždění (2000); } while (floornum <currentfloor) {Serial.println ("jít dolů"); currentfloor--; display.drawBitmap (0, 0, dolů, 100, 64, BÍLÁ); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); zpoždění (2000); } if (floornum == currentfloor) {Serial.println ("Dosaženo"); display.clearDisplay (); home1 (); Serial.print (currentfloor); }}
Testování bezdotykového zvedání ovládaného gesty
Jakmile je hardware a kód připraven, připojte Arduino Nano k notebooku a nahrajte kompletní kód uvedený níže. Jak ve výchozím nastavení vidíte, OLED zobrazí uživatelské rozhraní Elevator.
Nyní mávněte rukou nahoru nebo dolů, jak ukazuje video níže, a nastavte podlahu tam, kam chcete. Poté proveďte gesto doleva pro potvrzení výtahu a přejděte do tohoto patra. Pokud chcete výtah zastavit, udělejte rukou správné gesto.
Kompletní pracovní video a kód pro tento projekt jsou uvedeny níže. Doufám, že se vám tento projekt líbil. Máte-li jakékoli dotazy týkající se tohoto projektu, nechte je prosím v sekci komentářů.