- Nepieciešamās sastāvdaļas
- APDS9960 RGB un žestu sensors
- Ķēdes shēma
- Kods Paskaidrojums
- Ar žestu kontrolēta bezkontakta lifta pārbaude
Šajā Koronas pandēmijas laikā lifti ir kļuvuši par augsta riska vietu, kur visi pieskaras vienām un tām pašām pogām. Daudzās vietās cilvēki ir atklājuši trikus, lai novērstu kontaktu ar lifta pogām, piemēram, izmantojot papīra sūkšanu, zobu bakstāmos vai sanitāros salvetes, lai nospiestu pacelšanas pogas.
Tātad, turpinot mūsu iepriekšējos Corona drošības projektus, piemēram, Automātiskā attīrīšanas mašīna, Bezkontakta temperatūras kontrole un Sociālā attāluma detektors, šeit mēs izveidosim ar žestu kontrolētu lifta prototipu, izmantojot Arduino Nano.
Šajā bezkontakta liftā tiek izmantots Arduino Nano, žestu sensors APDS9960 un OLED displeja modulis. Izmantojot šo uz žestiem balstīto vadības paneli, jūs viegli kontrolējat pacēlāju, veicot rokas žestu. Sensoru APDS9960 izmanto, lai lasītu žestus. UP un DOWN žesti tiek izmantoti, lai iestatītu grīdas numuru, kreisais žests ir lifta durvju aizvēršana un pacēlāja pārvietošana atbilstoši grīdas numuram, un durvju atvēršanai tiek izmantots Labais žests.
Nepieciešamās sastāvdaļas
- Arduino Nano
- OLED displeja modulis
- APDS9960 RGB un žestu sensors
- Maizes dēlis
- Džemperu vadi
APDS9960 RGB un žestu sensors
APDS9960 RGB un žestu noteikšanas modulis ir maza izmēra plāksne, kas aprīkota ar iebūvētu APDS-9960 sensoru, UV un IR bloķējošiem filtriem, četrām atsevišķām diodēm, kas ir jutīgas pret dažādiem virzieniem, un ar I2C saderīgu saskarni. Šo sensoru var izmantot apkārtējās gaismas un krāsu mērīšanai, tuvuma noteikšanai un bezkontakta žestu noteikšanai. Tam ir žestu noteikšanas diapazons no 10 līdz 20 cm, un to var izmantot mikrokontrollera, robota vadīšanai un daudzos citos projektos.
Iespējas:
- Darba spriegums: no 2.4V līdz 3.6V
- Darbības diapazons: 4-8 collas (10-20 cm).
- I2C saskarne (I2C adrese: 0x39).
- Apkārtējās gaismas un RGB krāsu noteikšana, tuvums
- Sensēšana un žestu noteikšana optiskajā modulī
- I2C kopnes ātrā režīma saderīga saskarne ar datu ātrumu līdz 400 kHz.
Ķēdes shēma
Circuit diagramma par Bezkontakta lifts izmantojot APDS9960 ir norādīts zemāk.
Mēs mijiedarbojamies ar Arduino Nano ar APDS9960 sensoru un OLED displeju. Gan APDS9960 sensora, gan OLED displeja VCC un GND tapas ir savienotas ar Arduino 3.3V un GND. Kamēr APDS9960 sensora un OLED displeja SCL un SDA tapas ir savienotas ar attiecīgi Arduino A5 un A4 tapām.
OLED & APDS9960 tapa |
Arduino Nano tapa |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Šādi izskatīsies pilnīgs ar žestu vadāmā lifta iestatīšana, izmantojot Arduino:
Lai uzzinātu vairāk par OLED displeju un tā saskarni ar citiem mikrokontrolleriem, sekojiet saitei.
Kods Paskaidrojums
Pilns bezkontakta lifta kods, izmantojot APDS9960, ir norādīts lapas beigās. Šeit mēs izskaidrojam dažas svarīgas koda daļas. Šajā programmā mēs izmantosim bibliotēkas APDS9960 un Adafruit_SH1106 . APDS9960 bibliotēku var lejupielādēt no vietnes Arduino IDE. Lai lejupielādētu bibliotēku, dodieties uz Skice> Bibliotēkas pārvaldnieks> Meklēt un pēc tam ievadiet Arduino APDS9960. Kamēr Adafruit_SH1106 bibliotēku var lejupielādēt šeit.
Tātad, kā parasti, sāciet kodu, iekļaujot visas nepieciešamās bibliotēkas. Adafruit_SH1106.h ir sākotnējās Adafruit bibliotēkas modificētā versija.
# iekļaut
Nākamajās rindās definējiet mainīgos, lai saglabātu pašreizējo grīdu un grīdas numuru, kur lietotājs vēlas doties.
int floornum = 0; int pašreizējā grīda = 0;
Pēc tam ievadiet bultkartes augšupvērstās bultiņas, lejupvērstās bultiņas, atvērto durvju un aizvērto durvju attēliem. HEX kodu attēlam var ģenerēt, izmantojot tādu pārveidotāju kā Image2cpp. Lai uzzinātu vairāk par to, kā izmantot Image2cpp, izpildiet šo Arduino QR kodu ģeneratora apmācību.
const neparakstīts apzīmējums PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const neparakstīts apzīmējums PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const neparakstīts char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0, ………………………… …………………………………………………………..};
Jo uzstādīšana () funkciju, inicializēt Sērijas Monitor ar datu pārraides ātrumu 9600 atkļūdošanas vajadzībām. Pēc tam nākamajās rindās inicializējiet OLED displeju un APDS9960 sensoru ar sākuma () metodi šādi:
Sērijas sākums (9600); if (! APDS.begin ()) {Serial.println ("Kļūda inicializējot APDS9960 sensoru!"); } Serial.println ("Žestu noteikšana…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Pēc displeja un sensora inicializēšanas notīriet displeja buferi ar clearDisplay () metodi un iestatiet fonta lielumu un krāsu, izmantojot metodes display.setTextSize () un display.setTextColor () .
display.setTextSize (2); display.setTextColor (BALTS); display.clearDisplay (); display.display ();
Inside spēkā neesošu cilpas () , pastāvīgi pārbauda, vai kāds žests tika veikts. Ja jā, tad izlasiet žestu vērtības un pārbaudiet, kurš žests tas ir (UZ AUGŠU, LEJU, PA labi, LEFT) un izdrukājiet atbilstošo rādījumu seriālajā monitorā. Žesti UP un DOWN tiek izmantoti, lai iestatītu grīdas numuru, uz kuru lietotājs vēlas doties. Kreisais žests ir aizvērt lifta durvis un pārvietot pacēlāju atbilstoši grīdas numuram, kamēr durvju atvēršanai tiek izmantots Labais žests.
if (APDS.gestureAvailable ()) {int žests = APDS.readGesture (); slēdzis (žests) {gadījums GESTURE_UP: Serial.println ("Noteiktais UP žests"); display.clearDisplay (); floornum ++; mājas1 (); pārtraukums; gadījums GESTURE_DOWN: Serial.println ("Detected DOWN žests"); display.clearDisplay (); floornum -; mājas1 (); pārtraukums; gadījums GESTURE_LEFT: Serial.println ("Noteiktais kreisais žests"); display.clearDisplay (); sākt(); pārtraukums; gadījums GESTURE_RIGHT: Serial.println ("Detected RIGHT gesture"); display.clearDisplay (); mājas1 (); pārtraukums; noklusējums: pārtraukums; }
Funkcija home1 () tiek izmantota, lai uzzīmētu mājas displeju liftam. Tas sastāv no bultiņas augšup, lejupvērstās bultiņas, atvērto durvju, aizvērto durvju zīmēm un pašreizējā grīdas numura. funkciju drawBitmap () izmanto, lai zīmētu attēlus OLED displejā. Funkcijas drawBitmap () sintakse ir sniegta zemāk:
drawBitmap (int16_t x, int16_t y, bitkarte, int16_t w, int16_t h, krāsa);
Kur:
int16_t x, int16_t y ir OLED displeja X un Y koordinātas
bitkarte ir bitkartes nosaukums
int16_t w, int16_t h ir attēla augstums un svars.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, augšupvērsts, 40, 18, BALTS); display.drawBitmap (26, 46, lejup, 40, 18, BALTS); display.drawBitmap (0, 15, durvju atvēršana, 29, 30, BALTS); display.drawBitmap (60, 15, slēgts, 29, 30, BALTS); display.display (); }
Sākums () funkcija tiek izmantota, lai pārvietotu liftu uz augšu vai uz leju. Šim nolūkam pašreizējais grīdas numurs tiek salīdzināts ar grīdas numuru, uz kuru lietotājs vēlas doties. Ja grīdas numurs ir lielāks par pašreizējo grīdas nr. tad lifts virzīsies uz augšu un, ja grīdas numurs ir mazāks nekā pašreizējais grīdas nr. tad pacēlājs pārvietosies uz leju. Pacēlājs apstāsies, kad gan pašreizējais stāvs Nr. un grīdas nr. ir vienādi.
void start () {while (floornum> currentfloor) {Serial.println ("iet uz augšu"); currentfloor ++; display.drawBitmap (0, 0, uz augšu, 100, 64, BALTS); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); kavēšanās (2000); } while (floornum <currentfloor) {Serial.println ("iet uz leju"); currentfloor--; display.drawBitmap (0, 0, uz leju, 100, 64, BALTS); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); kavēšanās (2000); } if (floornum == currentfloor) {Serial.println ("Sasniegts"); display.clearDisplay (); mājas1 (); Serial.print (currentfloor); }}
Ar žestu kontrolēta bezkontakta lifta pārbaude
Kad aparatūra un kods ir gatavi, pievienojiet Arduino Nano klēpjdatoram un augšupielādējiet visu tālāk norādīto kodu. Kā redzams pēc noklusējuma, OLED parādīs lifta lietotāja interfeisu.
Tagad pamāj ar roku uz augšu vai uz leju, kā parādīts zemāk esošajā videoklipā, lai iestatītu grīdu, kurp vēlaties doties. Pēc tam veiciet kreiso žestu, lai apstiprinātu pacēlāju, lai dotos uz šo stāvu. Ja vēlaties apturēt pacēlāju, veiciet pareizo žestu ar roku.
Pilns šī projekta darba video un kods ir sniegts zemāk. Ceru, ka jums patika veidot šo projektu. Ja jums ir kādi jautājumi par šo projektu, lūdzu, atstājiet tos komentāru sadaļā.