- Komponente potrebne
- APDS9960 RGB i senzor gesta
- Kružni dijagram
- Objašnjenje koda
- Testiranje beskontaktnog dizanja kontroliranim gestama
U ovo vrijeme pandemije Corona dizala su postala mjesto s visokim rizikom gdje svi dodiruju iste gumbe. Na mnogim su mjestima ljudi otkrili trikove kako bi spriječili kontakt s gumbima dizala, poput upotrebe papira za pumpanje, čačkalica ili higijenskih maramica za pritiskanje gumba za podizanje.
Dakle, u nastavku naših prethodnih sigurnosnih projekata Corona poput automatskog uređaja za dezinfekciju, beskontaktnog nadzora temperature i socijalnog detektora udaljenosti, ovdje ćemo izgraditi prototip dizala kontroliranog gestama koristeći Arduino Nano.
Ovo beskontaktno dizalo koristi Arduino Nano, senzor geste APDS9960 i OLED modul zaslona. Pomoću ove upravljačke ploče temeljene na gestama, lako možete upravljati svojim Liftom pokretom ruke. Senzor APDS9960 koristi se za čitanje gesta. Gesta GORE i DOLJE koristi se za postavljanje broja poda, lijeva gesta je zatvaranje vrata dizala i pomicanje dizala prema broju poda, a Desna gesta služi za otvaranje vrata.
Komponente potrebne
- Arduino Nano
- OLED modul zaslona
- APDS9960 RGB i senzor gesta
- Breadboard
- Jumper žice
APDS9960 RGB i senzor gesta
APDS9960 RGB & Gesture Detection Module mala je probojna ploča koja dolazi s ugrađenim APDS-9960 senzorom, UV i IR filtrima za blokiranje, četiri odvojene diode osjetljive na različite smjerove i I2C kompatibilnim sučeljem. Ovaj senzor može se koristiti za mjerenje ambijentalnog svjetla i boja, otkrivanje blizine i dodirivanje gesta. Ima raspon detekcije gesta od 10 do 20 cm i može se koristiti za upravljanje mikrokontrolerom, robotom i u mnogim drugim projektima.

Značajke:
- Radni napon: 2,4 V do 3,6 V
- Područje rada: 4-8in (10-20cm).
- I2C sučelje (I2C adresa: 0x39).
- Ambijentalno svjetlo i RGB osjetljivost boja, blizina
- Otkrivanje i otkrivanje gesta u optičkom modulu
- I2C-bus kompatibilno sučelje s brzim načinom rada sa brzinama podataka do 400 kHz.
Kružni dijagram
Dijagram kruga za beskontaktno dizalo pomoću APDS9960 dan je u nastavku.

Povezujemo Arduino Nano s APDS9960 senzorom i OLED zaslonom. VCC i GND pinovi i APDS9960 senzora i OLED zaslona povezani su na 3.3V i GND Arduina. Dok su SCL i SDA pribadače APDS9960 senzora i OLED zaslon povezani s A5 i A4 pribadačama Arduino-a.
|
OLED i APDS9960 Pribadača |
Arduino Nano pin |
|
VCC |
3.3v |
|
GND |
GND |
|
SCL |
A5 |
|
SDA |
A4 |
Evo kako će izgledati cjelovita postavka dizala kontroliranog gestama pomoću Arduina:

Da biste saznali više o OLED zaslonu i njegovom međusobnom povezivanju s drugim mikrokontrolerima, slijedite vezu.
Objašnjenje koda
Kompletni kod za beskontaktno dizalo koji koristi APDS9960 dan je na kraju stranice. Ovdje objašnjavamo neke važne dijelove koda. U ovom programu koristit ćemo knjižnice APDS9960 i Adafruit_SH1106 . Biblioteku APDS9960 može preuzeti Arduino IDE. Da biste preuzeli knjižnicu, idite na Skica> Upravitelj knjižnice> Pretraživanje, a zatim unesite Arduino APDS9960. Iako se knjižnica Adafruit_SH1106 može preuzeti ovdje.
Kao i obično, započnite kod uključivanjem svih potrebnih knjižnica. Adafruit_SH1106.h izmijenjena je verzija izvorne knjižnice Adafruit.
#include
U sljedećim redovima definirajte varijable za pohranu trenutačnog poda i broja poda gdje korisnik želi ići.
int podbroj = 0; int trenutni pod = 0;
Nakon toga unesite bitmape za slike strelice gore, strelice dolje, otvorenih vrata i zatvorenih vrata. HEX kod za sliku može se generirati pomoću pretvarača poput Image2cpp. Da biste saznali više o tome kako koristiti Image2cpp, slijedite ovaj vodič Arduino QR generatora koda.
const nepotpisani char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepotpisani znak prema dolje PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepotpisani char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
U funkciji setup () , inicijalizirajte serijski monitor brzinom prijenosa od 9600 u svrhu uklanjanja pogrešaka. Zatim u sljedećim redovima inicijalizirajte OLED zaslon i APDS9960 senzor metodom begin () kako slijedi:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Pogreška pri inicijalizaciji senzora APDS9960!"); } Serial.println ("Otkrivanje gesta…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Nakon inicijalizacije zaslona i senzora, očistite međuspremnik zaslona metodom clearDisplay () i postavite veličinu i boju fonta pomoću metoda display.setTextSize () i display.setTextColor () .
display.setTextSize (2); display.setTextColor (BIJELO); display.clearDisplay (); display.display ();
Unutar petlje void () , neprestano provjeravajte je li napravljena bilo kakva gesta. Ako je odgovor da, pročitajte vrijednosti geste i provjerite koja je to gesta (GORE, DOLJE, DESNO, LIJEVO) i ispisuje odgovarajuće očitanje na serijski monitor. Geste GORE i DOLJE koriste se za postavljanje broja poda na koji korisnik želi ići. Lijeva gesta je zatvaranje vrata dizala i pomicanje dizala prema broju poda, dok se desna gesta koristi za otvaranje vrata.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); prekidač (gesta) {case GESTURE_UP: Serial.println ("Otkrivena gesta UP"); display.clearDisplay (); podni broj ++; home1 (); pauza; slučaj GESTURE_DOWN: Serial.println ("Otkrivena gesta DOL"); display.clearDisplay (); floornum -; home1 (); pauza; slučaj GESTURE_LEFT: Serial.println ("Otkrivena LIJEVA gesta"); display.clearDisplay (); početak(); pauza; slučaj GESTURE_RIGHT: Serial.println ("Otkrivena DESNA gesta"); display.clearDisplay (); home1 (); pauza; zadano: prekid; }
Funkcija home1 () koristi se za crtanje početnog zaslona dizala. Sastoji se od strelice prema gore, dolje, otvorenih vrata, znakova za zatvorena vrata i trenutnog broja poda. funkcija drawBitmap () koristi se za crtanje slika na OLED zaslonu. Sintaksa funkcije drawBitmap () dana je u nastavku:
drawBitmap (int16_t x, int16_t y, bitmapa, int16_t w, int16_t h, boja);
Gdje:
int16_t x, int16_t y su X i Y koordinate OLED zaslona
bitmapa je naziv bitmape
int16_t w, int16_t h su visina i težina slike.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, gore, 40, 18, BIJELO); display.drawBitmap (26, 46, downarrow, 40, 18, BIJELO); display.drawBitmap (0, 15, dooropen, 29, 30, BIJELO); display.drawBitmap (60, 15, zatvorena, 29, 30, BIJELA); display.display (); }
Funkcija start () koristi se za pomicanje dizala prema gore ili prema dolje. Zbog toga se trenutni kat br uspoređuje s brojem poda na koji korisnik želi ići. Ako je broj poda veći od trenutnog kata br. tada će se lift pomaknuti prema gore i ako je broj poda manji od trenutnog kata br. tada će se lift pomaknuti prema dolje. Lift će se zaustaviti kada se obje trenutne etaže br. i kat br. isti su.
void start () {while (floornum> currentfloor) {Serial.println ("ide prema gore"); trenutni pod ++; display.drawBitmap (0, 0, gore, 100, 64, BIJELO); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); kašnjenje (2000); } while (floornum <currentfloor) {Serial.println ("ide prema dolje"); trenutni pod--; display.drawBitmap (0, 0, dolje, 100, 64, BIJELO); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); kašnjenje (2000); } if (floornum == currentfloor) {Serial.println ("Dostignuto"); display.clearDisplay (); home1 (); Serial.print (currentfloor); }}
Testiranje beskontaktnog dizanja kontroliranim gestama
Nakon što su hardver i kôd spremni, spojite Arduino Nano na prijenosno računalo i prenesite kompletni kod dan u nastavku. Kao što vidite, prema zadanim postavkama OLED će prikazati korisničko sučelje dizala.

Sada mahnite rukom gore ili dolje, kao što je prikazano na videozapisu ispod, kako biste postavili pod kamo želite ići. Zatim napravite lijevu gestu kojom potvrđujete da se lift podiže na taj kat. Ako želite zaustaviti dizalo, napravite pravu gestu rukom.
Kompletni radni video i kôd za ovaj projekt dati su u nastavku. Nadam se da ste uživali u izgradnji ovog projekta. Ako imate bilo kakvih pitanja u vezi s ovim projektom, ostavite ih u odjeljku za komentare.
