- Szükséges alkatrészek
- APDS9960 RGB és gesztusérzékelő
- Kördiagramm
- Kód Magyarázat
- A kézmozdulatokkal vezérelt érintés nélküli emelés tesztelése
A Corona-járvány ebben az időszakában a liftté vált egy nagy kockázatú hely, ahol mindenki ugyanazokat a gombokat érinti. Sok helyen olyan trükköket fedeztek fel, amelyek megakadályozzák az érintkezést a lift gombjaival, például egy szivattyúpapír, fogpiszkáló vagy egészségügyi kendő használata az emelő gombok megnyomásához.
Tehát korábbi Corona biztonsági projektjeink folytatásaként, mint például az automatikus fertőtlenítő gép, az érintés nélküli hőmérséklet-figyelés és a szociális távolságérzékelő, itt egy gesztus által vezérelt lift prototípust fogunk építeni az Arduino Nano segítségével.
Ez az érintés nélküli lift Arduino Nano-t, APDS9960 gesztusérzékelőt és OLED kijelző modult használ. Ezzel a kézmozdulatokon alapuló kezelőpanellel kézmozdulattal könnyedén vezérelheti az emelőt. Az APDS9960 érzékelőt a gesztusok olvasására használják. FEL és LE mozdulatokkal állítják be a padló számát, a bal gesztus az emelőajtó bezárása és az emelet mozgatása a padló számának megfelelően, a jobb gesztus pedig az ajtó kinyitására szolgál.
Szükséges alkatrészek
- Arduino Nano
- OLED kijelző modul
- APDS9960 RGB és gesztusérzékelő
- Kenyérlemez
- Jumper huzalok
APDS9960 RGB és gesztusérzékelő
Az APDS9960 RGB & Gesture Detection Module egy kisméretű kártya, amely beépített APDS-9960 érzékelővel, UV és IR blokkoló szűrőkkel, négy különféle irányra érzékeny diódával és I2C kompatibilis interfésszel rendelkezik. Ez az érzékelő használható a környezeti fény és szín mérésére, a közelség érzékelésére és az érintés nélküli gesztusérzékelésre. A mozdulatok észlelési tartománya 10-20 cm, felhasználható mikrovezérlő, robot vezérlésére és számos más projektben.
Jellemzők:
- Működési feszültség: 2,4 V - 3,6 V
- Működési tartomány: 4-8 hüvelyk (10-20 cm).
- I2C interfész (I2C cím: 0x39).
- Környezeti fény és RGB színérzékelés, közelség
- Érzékelés és gesztusészlelés optikai modulban
- I2C-busz gyors módú kompatibilis interfész 400 kHz-ig terjedő adatsebességgel.
Kördiagramm
Az APDS9960- at használó érintés nélküli lift áramköri diagramja az alábbiakban látható.
Összekapcsoljuk az Arduino Nano-t az APDS9960 érzékelővel és az OLED kijelzővel. Az APDS9960 érzékelő és az OLED kijelző VCC és GND csatlakozói az Arduino 3,3 V-os és GND-jéhez vannak csatlakoztatva. Míg az APDS9960 érzékelő és az OLED kijelző SCL és SDA csatlakozói az Arduino A5 és A4 csatlakozóihoz kapcsolódnak.
OLED & APDS9960 tű |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Így fog kinézni a kézmozdulatokkal vezérelt lift teljes beállítása az Arduino segítségével:
Ha többet szeretne megtudni az OLED kijelzőről és annak más mikrovezérlőkhöz való kapcsolódásáról, kövesse a linket.
Kód Magyarázat
Az APDS9960- at használó érintés nélküli lift teljes kódja az oldal végén található. Itt elmagyarázzuk a kód néhány fontos részét. Ebben a programban az APDS9960 és az Adafruit_SH1106 könyvtárakat fogjuk használni. Az APDS9960 könyvtár letölthető az Arduino IDE oldalról. A könyvtár letöltéséhez lépjen a Vázlat> Könyvtárkezelő> Keresés elemre , majd írja be az Arduino APDS9960 parancsot. Míg az Adafruit_SH1106 könyvtár innen letölthető.
Tehát szokás szerint indítsa el a kódot az összes szükséges könyvtár beillesztésével. Az Adafruit_SH1106.h az eredeti Adafruit könyvtár módosított változata.
#include
A következő sorokban határozza meg a változókat, hogy tárolja az aktuális emeletet és emeletszámot, ahová a felhasználó el akar menni.
int floornum = 0; int currentfloor = 0;
Ezután adja meg az UP nyíl, a lefelé mutató nyíl, az ajtó nyitása és az ajtó bezárása képek bitképeit. A kép HEX-kódját olyan konverterrel lehet előállítani, mint az Image2cpp. Ha többet szeretne megtudni az Image2cpp használatáról , kövesse ezt az Arduino QR-kód generátor oktatóanyagot.
const aláíratlan felirat 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, ………………………… …………………………………………………………..};
A setup () függvényben hibakeresés céljából inicializálja a soros monitort 9600 baud sebességgel. Ezután a következő sorokban inicializálja az OLED kijelzőt és az APDS9960 érzékelőt a begin () módszerrel az alábbiak szerint:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Hiba az APDS9960 érzékelő inicializálásakor!"); } Serial.println ("Gesztusok észlelése…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Inicializálása után a kijelző és az érzékelő, a kijelző törléséhez puffert a clearDisplay () módszer és állítsa be a betűméretet, és színét a display.setTextSize () és display.setTextColor () módszerek.
display.setTextSize (2); display.setTextColor (FEHÉR); display.clearDisplay (); display.display ();
Bent a void loop () , folyamatosan ellenőrizze, hogy minden mozdulatot tett. Ha igen, akkor olvassa el a gesztusértékeket, ellenőrizze, hogy melyik gesztusról van szó (FEL, LE, JOBB, BAL), és nyomtassa ki a megfelelő olvasatot a soros monitoron. FEL és LE mozdulatokkal állítható be a padló száma, ahová a felhasználó el akar menni. A bal gesztus az emelőajtó bezárása és az emelet mozgatása a padló számának megfelelően, míg a Jobb gesztus az ajtó kinyitására szolgál.
if (APDS.gestureAvailable ()) {int gesztus = APDS.readGesture (); kapcsoló (gesztus) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; Otthon 1(); szünet; eset GESTURE_DOWN: Serial.println ("Detected DOWN gesture"); display.clearDisplay (); floornum -; Otthon 1(); szünet; eset GESTURE_LEFT: Serial.println ("Detected LEFT gesture"); display.clearDisplay (); Rajt(); szünet; eset GESTURE_RIGHT: Serial.println ("Detected RIGHT gesture"); display.clearDisplay (); Otthon 1(); szünet; alapértelmezett: break; }
A home1 () függvény segítségével megrajzolhatjuk a lift otthoni kijelzőjét. Ez egy felfelé mutató nyíl, lefelé mutató nyíl, nyitott ajtó, ajtó bezárása táblákból és az aktuális emelet számából áll. A drawBitmap () függvény segítségével a képek az OLED-kijelzőre rajzolhatók. A drawBitmap () függvény szintaxisa az alábbiakban található:
drawBitmap (int16_t x, int16_t y, bittérkép, int16_t w, int16_t h, szín);
Hol:
int16_t x, int16_t y az OLED kijelző X és Y koordinátái
a bitkép a bitkép neve
int16_t w, int16_t h a kép magassága és súlya.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, felfelé, 40, 18, FEHÉR); display.drawBitmap (26, 46, alsó, 40, 18, FEHÉR); display.drawBitmap (0, 15, ajtónyitás, 29, 30, FEHÉR); display.drawBitmap (60, 15, bezárt, 29, 30, FEHÉR); display.display (); }
A start () funkcióval az emelőt felfelé vagy lefelé lehet mozgatni. Ehhez az aktuális emelet nemet hasonlítják össze azzal az emeletszámmal, ahova a felhasználó el akar jutni. Ha az emelet száma nagyobb, mint a jelenlegi emelet száma. akkor a felvonó felfelé mozog, és ha a padló száma kisebb, mint a jelenlegi emelet sz. akkor a felvonó lefelé mozog. A felvonó akkor áll le, amikor a jelenlegi emelet sz. és emelet sz. ugyanazok.
void start () {while (floornum> currentfloor) {Serial.println ("felfelé"); currentfloor ++; display.drawBitmap (0, 0, fel, 100, 64, FEHÉR); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); késés (2000); } while (floornum <currentfloor) {Soros.println ("lemegy"); currentfloor--; display.drawBitmap (0, 0, lefelé, 100, 64, FEHÉR); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); késés (2000); } if (floornum == currentfloor) {Soros.println ("Elérte"); display.clearDisplay (); Otthon 1(); Soros.nyomtatás (currentfloor); }}
A kézmozdulatokkal vezérelt érintés nélküli emelés tesztelése
Miután elkészült a hardver és a kód, csatlakoztassa az Arduino Nano-t a laptophoz, és töltse fel az alább megadott teljes kódot. Amint alapértelmezés szerint láthatja, az OLED megjeleníti az Elevator UI-t.
Most intessen felfelé vagy lefelé a kezével, ahogy az alábbi videón látható, hogy beállítsa a padlót, ahová menni szeretne. Ezután tegye meg a bal kézmozdulatot, hogy nyugtázza a felvonót, hogy az emeletre menjen. Ha le akarja állítani az emelést, akkor tegye meg a megfelelő mozdulatot a kezével.
A projekt teljes munkavideóját és kódját az alábbiakban adjuk meg. Remélem, hogy élvezte a projekt felépítését. Ha bármilyen kérdése van a projekttel kapcsolatban, kérjük, hagyja őket a megjegyzés részben.