- Potrebne komponente
- APDS9960 RGB in gesta senzor
- Shema vezja
- Razlaga kode
- Testiranje brezžičnega brezžičnega dviga
V tem času pandemije Corona so dvigala postala mesto z visokim tveganjem, kjer se vsi dotikajo istih gumbov. Ljudje so marsikje odkrili trike, s katerimi preprečujejo stik z gumbi na dvigalu, kot je uporaba črpalnega papirja, zobotrebcev ali sanitarnih robčkov za pritiskanje gumbov za dviganje.
V nadaljevanju naših prejšnjih varnostnih projektov Corona, kot so samodejni razkuževalni stroj, brezkontaktno spremljanje temperature in detektor socialne razdalje, bomo tukaj izdelali prototip dvigala, ki ga nadzorujemo z uporabo Arduino Nano
To brezkontaktno dvigalo uporablja Arduino Nano, senzor kretnje APDS9960 in zaslon OLED. S to nadzorno ploščo, ki temelji na kretnjah, lahko z dvigom roke enostavno upravljate svoj dvig. Senzor APDS9960 se uporablja za branje kretenj. Geste GOR in DOL se uporabljajo za nastavitev številke nadstropja, leva poteza je zapiranje vrat dvigala in premikanje dvigala glede na številko nadstropja, desna kretnja pa za odpiranje vrat.
Potrebne komponente
- Arduino Nano
- Zaslonski modul OLED
- APDS9960 RGB in gesta senzor
- Breadboard
- Jumper žice
APDS9960 RGB in gesta senzor
Modul za zaznavanje RGB & gesta APDS9960 je majhna prelomna plošča, ki ima vgrajen senzor APDS-9960, UV in IR blokirne filtre, štiri ločene diode, občutljive na različne smeri, in vmesnik, združljiv z I2C. Ta senzor se lahko uporablja za merjenje svetlobe in barv okolice, zaznavanje bližine in zaznavanje gibov brez dotika. Ima zaznavanje gibov od 10 do 20 cm in se lahko uporablja za nadzor mikrokrmilnika, robota in v številnih drugih projektih.
Lastnosti:
- Delovna napetost: 2,4 V do 3,6 V
- Območje delovanja: 4-8in (10-20cm).
- Vmesnik I2C (naslov I2C: 0x39).
- Okoljska svetloba in zaznavanje barv RGB, bližina
- Zaznavanje in zaznavanje gibov v optičnem modulu
- Vmesnik, združljiv s hitrim načinom I2C-bus, s hitrostjo prenosa podatkov do 400 kHz.
Shema vezja
Shema vezja za brezkontaktno dvigalo z uporabo APDS9960 je podana spodaj.
Arduino Nano povezujemo s senzorjem APDS9960 in zaslonom OLED. Zatiči VCC in GND senzorja APDS9960 in zaslona OLED so priključeni na 3.3V in GND Arduina. Medtem ko sta zatiča SCL in SDA senzorja APDS9960 in OLED zaslona povezana z zatiči A5 in A4 Arduino Resporti.
Pin OLED & APDS9960 |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Tako bo videti popolna nastavitev dvigala, ki ga nadzorujemo z uporabo Arduina:
Če želite izvedeti več o OLED zaslonu in njegovem povezovanju z drugimi mikrokrmilniki, sledite povezavi.
Razlaga kode
Popolna koda za brezkontaktno dvigalo z uporabo APDS9960 je podana na koncu strani. Tukaj razlagamo nekaj pomembnih delov kode. V tem programu bomo uporabili knjižnici APDS9960 in Adafruit_SH1106 . Knjižnico APDS9960 lahko prenese Arduino IDE. Če želite prenesti knjižnico, pojdite na Sketch> Library Manager> Search in nato vnesite Arduino APDS9960. Medtem ko je knjižnico Adafruit_SH1106 mogoče prenesti od tukaj.
Kot običajno začnite s kodo tako, da vključite vse zahtevane knjižnice. Adafruit_SH1106.h je spremenjena različica izvirne knjižnice Adafruit.
#include
V naslednjih vrsticah določite spremenljivke za shranjevanje trenutne nadstropne in nadstropne številke, kamor želi uporabnik.
int nadstropje = 0; int trenutna tla = 0;
Po tem vnesite bitne slike za puščico GOR, puščico dol, Odpri vrata in Zapri vrata. Kodo HEX za sliko je mogoče ustvariti s pretvornikom, kot je Image2cpp. Če želite izvedeti več o uporabi Image2cpp, sledite tej vadnici za Arduino QR generator kode.
const nepodpisan znak up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepodpisani znak dol PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepodpisani char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
V funkciji setup () inicializirajte serijski monitor s hitrostjo prenosa 9600 za namene odpravljanja napak. Nato v naslednjih vrsticah inicializirajte zaslon OLED in senzor APDS9960 z metodo start (), kot sledi:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Napaka pri inicializaciji senzorja APDS9960!"); } Serial.println ("Zaznavanje potez…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Po inicializaciji zaslona in senzorja zbrišite medpomnilnik zaslona z metodo clearDisplay () in nastavite velikost in barvo pisave z metodama display.setTextSize () in display.setTextColor () .
display.setTextSize (2); display.setTextColor (BELA); display.clearDisplay (); display.display ();
Znotraj void loop () , vedno preverite, če je bila katera koli gesta. Če je odgovor pritrdilen, preberite vrednosti kretnje in preverite, za katero potezo gre (GOR, DOL, DESNO, LEVO) in na serijski monitor natisnite ustrezen odčitek. S kretnjama GOR in DOL se nastavi številka nadstropja, kamor uporabnik želi iti. Leva gesta je zapiranje vrat dvigala in premikanje dvigala glede na številko nadstropja, medtem ko se z desno potezo odprejo vrata.
if (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); stikalo (gesta) {case GESTURE_UP: Serial.println ("Zaznana gesta UP"); display.clearDisplay (); nadstropje ++; home1 (); odmor; zadeva GESTURE_DOWN: Serial.println ("Zaznana gesta DOL"); display.clearDisplay (); nadstropje -; home1 (); odmor; zadeva GESTURE_LEFT: Serial.println ("Odkrita GESTA LEVO"); display.clearDisplay (); start (); odmor; primer GESTURE_RIGHT: Serial.println ("Zaznana DESNA gesta"); display.clearDisplay (); home1 (); odmor; privzeto: odmor; }
Funkcija home1 () se uporablja za risanje domačega zaslona za dvigalo. Ta je sestavljena iz puščice navzgor, puščice dol, odprtih vrat, znakov za zapiranje vrat in trenutne številke nadstropja. Funkcija drawBitmap () se uporablja za risanje slik na zaslonu OLED. Sintaksa funkcije drawBitmap () je podana spodaj:
drawBitmap (int16_t x, int16_t y, bitna slika, int16_t w, int16_t h, barva);
Kje:
int16_t x, int16_t y so koordinate X in Y prikaza OLED
bitna slika je ime bitne slike
int16_t w, int16_t h so višina in teža slike.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, BELA); display.drawBitmap (26, 46, navzdol, 40, 18, BELA); display.drawBitmap (0, 15, dooropen, 29, 30, BELA); display.drawBitmap (60, 15, zaprto, 29, 30, BELO); display.display (); }
Funkcija start () se uporablja za premikanje dvigala navzgor ali navzdol. Za to se trenutna nadstropje št primerja s številko nadstropja, kamor želi uporabnik. Če je nadstropje večje od trenutnega nadstropja št. potem se dvigalo premakne navzgor in če je številka nadstropja manjša od trenutne nadstropne št. nato se dvigalo premakne navzdol. Dvigalo se bo ustavilo, ko bosta trenutno nadstropje št. in nadstropje št. so enaki.
void start () {while (floornum> currentfloor) {Serial.println ("gre navzgor"); currentfloor ++; display.drawBitmap (0, 0, gor, 100, 64, BELA); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); zamuda (2000); } while (floornum <currentfloor) {Serial.println ("gre navzdol"); trenutna tla--; display.drawBitmap (0, 0, dol, 100, 64, BELA); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); zamuda (2000); } if (floornum == currentfloor) {Serial.println ("Doseženo"); display.clearDisplay (); home1 (); Serial.print (trenutna tla); }}
Testiranje brezžičnega brezžičnega dviga
Ko sta strojna oprema in koda pripravljeni, priključite Arduino Nano na prenosni računalnik in naložite celotno kodo, navedeno spodaj. Kot lahko vidite privzeto, bo OLED prikazal uporabniški vmesnik dvigala.
Zdaj zamahnite z roko gor ali dol, kot je prikazano na spodnjem videoposnetku, da nastavite tla, kamor želite iti. Nato naredite levo gesto za potrditev dvigala, da greste v to nadstropje. Če želite ustaviti dvigalo, naredite pravo kretnjo z roko.
Celoten delujoči video in koda za ta projekt so navedeni spodaj. Upam, da ste uživali pri gradnji tega projekta. Če imate kakršna koli vprašanja v zvezi s tem projektom, jih pustite v oddelku za komentarje.