- Būtini komponentai
- APDS9960 RGB ir gestų jutiklis
- Grandinės schema
- Kodo paaiškinimas
- Testuojamas gestais valdomas bekontaktis keltuvas
Šiuo Koronos pandemijos metu liftai tapo didelės rizikos vieta, kur visi paliečia tuos pačius mygtukus. Daugelyje vietų žmonės atrado gudrybių, kad būtų išvengta kontakto su lifto mygtukais, pvz., Naudojant siurbiamąjį popierių, dantų krapštukus ar sanitarinius audinius kėlimo mygtukams spausti.
Taigi tęsdami ankstesnius „Corona“ saugos projektus, tokius kaip automatinis dezinfekavimo aparatas, bekontaktis temperatūros stebėjimas ir socialinio atstumo detektorius, čia mes sukursime „Gesture“ valdomo lifto prototipą naudodami „Arduino Nano“.
Šiame bekontakčiame lifte naudojamas „Arduino Nano“, gestų jutiklis APDS9960 ir OLED ekrano modulis. Naudodami šį gestais pagrįstą valdymo skydelį, galite lengvai valdyti „Lift“ atlikdami rankos gestą. Judesiams nuskaityti naudojamas jutiklis APDS9960. AUKŠTYN ir ŽEMYN gestai naudojami grindų numeriui nustatyti, kairysis gestas yra uždaryti lifto duris ir pakelti keltuvą pagal grindų numerį, o dešinysis gestas naudojamas durims atidaryti.
Būtini komponentai
- „Arduino Nano“
- OLED ekrano modulis
- APDS9960 RGB ir gestų jutiklis
- Bandomoji Lenta
- Šuolių laidai
APDS9960 RGB ir gestų jutiklis
APDS9960 RGB ir gestų aptikimo modulis yra maža pertraukiamoji plokštė, turinti įmontuotą APDS-9960 jutiklį, UV ir IR blokuojančius filtrus, keturis atskirus skirtingoms kryptims jautrius diodus ir suderinamą su I2C sąsaja. Šis jutiklis gali būti naudojamas aplinkos šviesai ir spalvoms matuoti, artumui aptikti ir bekontakčiams gestams nustatyti. Jo gestų aptikimo diapazonas yra nuo 10 iki 20 cm, jis gali būti naudojamas valdyti mikrovaldiklį, robotą ir daugelyje kitų projektų.
Funkcijos:
- Darbinė įtampa: nuo 2,4 iki 3,6 V
- Veikimo diapazonas: 4-8 colių (10-20 cm).
- „I2C“ sąsaja („I2C“ adresas: 0x39).
- Aplinkos šviesos ir RGB spalvų jutimas, artumas
- Jutimas ir gestų aptikimas optiniame modulyje
- „I2C-bus“ greito režimo suderinama sąsaja su duomenų sparta iki 400 kHz.
Grandinės schema
Bekontakčio lifto, naudojant APDS9960, grandinės schema pateikta žemiau.
Mes susiejame „Arduino Nano“ su APDS9960 jutikliu ir OLED ekranu. Tiek APDS9960 jutiklio, tiek OLED ekrano VCC ir GND kaiščiai yra prijungti prie „Arduino“ 3,3 V ir GND. Nors APDS9960 jutiklio ir OLED ekrano SCL ir SDA kaiščiai yra prijungti prie „Arduino“ atitinkamai A5 ir A4 kaiščių.
OLED & APDS9960 kaištis |
„Arduino Nano“ kaištis |
VCC |
3.3v |
BND |
BND |
SCL |
A5 |
SDA |
A4 |
Taip atrodys išsami „ Gesture“ valdomo lifto, naudojant „Arduino“, sąranka:
Norėdami sužinoti daugiau apie OLED ekraną ir jo sąsają su kitais mikrovaldikliais, spustelėkite nuorodą.
Kodo paaiškinimas
Pilnas bekontakčio lifto, naudojant APDS9960, kodas pateikiamas puslapio pabaigoje. Čia mes paaiškiname keletą svarbių kodo dalių. Šioje programoje mes ketiname naudoti APDS9960 ir Adafruit_SH1106 bibliotekas . APDS9960 biblioteką galite atsisiųsti iš „Arduino IDE“. Norėdami atsisiųsti biblioteką, eikite į „ Sketch“> „Library Manager“> „Search“ ir įveskite „ Arduino APDS9960“. Nors „ Adafruit_SH1106“ biblioteką galima atsisiųsti iš čia.
Taigi, kaip įprasta, pradėkite kodą įtraukdami visas reikalingas bibliotekas. „Adafruit_SH1106.h“ yra pakeista originalios „Adafruit“ bibliotekos versija.
# įtraukti
Kitose eilutėse apibrėžkite kintamuosius, kad išsaugotumėte dabartinį aukštą ir aukšto numerį, kur vartotojas nori eiti.
int floornum = 0; int currentfloor = 0;
Po to įveskite rodyklės „Aukštyn“, „Žemyn“, „Atidaryti duris“ ir „Uždaryti duris“ nuotraukų žemėlapius. HEX kodas atvaizdui gali būti sugeneruotas naudojant tokį keitiklį kaip „Image2cpp“. Norėdami sužinoti daugiau apie tai, kaip naudoti „ Image2cpp“, vadovaukitės šia „Arduino“ QR kodo generatoriaus pamoka.
const nepasirašytas žymėjimas PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepasirašytas simbolis PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const nepasirašytas simbolis atidaryti PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0, ………………………… …………………………………………………………..};
Naudodamiesi sąrankos () funkcija, derinimo tikslais pradėkite „Serial Monitor“ 9600 duomenų perdavimo greičiu. Tada kitose eilutėse pradėkite OLED ekraną ir APDS9960 jutiklį pradžios () metodu taip:
Serijos pradžia (9600); if (! APDS.begin ()) {Serial.println ("Klaida inicijuojant APDS9960 jutiklį!"); } Serial.println („Aptinkami gestai…“); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Inicijavę ekraną ir jutiklį, išvalykite ekrano buferį naudodami „ clearDisplay“ () metodą ir nustatydami šrifto dydį bei spalvą naudodami metodus display.setTextSize () ir display.setTextColor () .
display.setTextSize (2); display.setTextColor (BALTAS); display.clearDisplay (); display.display ();
Viduje tuščia kilpos () , nuolat tikrinti, ar bet gestas buvo. Jei taip, tada perskaitykite gestų reikšmes ir patikrinkite, koks tai gestas (AUKŠTYN, ŽEMYN, Dešinėn, Kairė) ir išspausdinkite atitinkamą rodmenį serijiniame monitoriuje. AUKŠTYN ir ŽEMYN gestai naudojami norint nustatyti aukšto numerį, į kurį vartotojas nori eiti. Kairysis gestas yra uždaryti lifto duris ir pakelti liftą pagal grindų numerį, o dešiniuoju gestu naudojamas atidaryti duris.
if (APDS.gestureAvailable ()) {int gestas = APDS.readGesture (); jungiklis (gestas) {case GESTURE_UP: Serial.println ("Aptiktas UP gestas"); display.clearDisplay (); floornum ++; namai1 (); pertrauka; atvejis GESTURE_DOWN: Serial.println („Aptiktas žemyn gestas“); display.clearDisplay (); floornum -; namai1 (); pertrauka; atvejis GESTURE_LEFT: Serial.println („Aptiktas kairysis gestas“); display.clearDisplay (); pradžia (); pertrauka; atvejis GESTURE_RIGHT: Serial.println („Aptiktas teisingas gestas“); display.clearDisplay (); namai1 (); pertrauka; numatytasis: pertrauka; }
Funkcija „ home1“ () naudojama piešti lifto namų ekraną. Tai susideda iš rodyklės aukštyn, žemyn nukreiptos rodyklės, atvirų durų, uždarytų durų ženklų ir dabartinio aukšto numerio. „drawBitmap“ () funkcija naudojama vaizdams piešti OLED ekrane. Funkcijos „drawBitmap () “ sintaksė pateikta žemiau:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, spalva);
Kur:
int16_t x, int16_t y yra X ir Y OLED ekrano koordinatės
bitmap yra bitmap pavadinimas
int16_t w, int16_t h yra vaizdo aukštis ir svoris.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, aukštyn, 40, 18, BALTAS); display.drawBitmap (26, 46, žemyn, 40, 18, BALTAS); display.drawBitmap (0, 15, durų atidarymas, 29, 30, BALTAS); display.drawBitmap (60, 15, uždaras, 29, 30, BALTAS); display.display (); }
Pradžia () funkcija yra naudojama perkelti lifto aukštyn arba žemyn. Tuo tikslu dabartinis aukšto numeris lyginamas su aukšto numeriu, į kurį vartotojas nori patekti. Jei grindų skaičius yra didesnis už dabartinį grindų Nr. tada keltuvas kils aukštyn ir jei grindų skaičius yra mažesnis nei dabartinis grindų Nr. tada keltuvas judės žemyn. Keltuvas sustos, kai tiek dabartinis aukštas Nr. ir grindų Nr. yra tas pats.
negaliojantis startas () {while (floornum> currentfloor) {Serial.println ("einant į viršų"); currentfloor ++; display.drawBitmap (0, 0, aukštyn, 100, 64, BALTAS); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); vėlavimas (2000); } while (floornum <currentfloor) {Serial.println ("eina žemyn"); currentfloor--; display.drawBitmap (0, 0, žemyn, 100, 64, BALTAS); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); vėlavimas (2000); } if (floornum == currentfloor) {Serial.println ("Pasiekta"); display.clearDisplay (); namai1 (); Serial.print (currentfloor); }}
Testuojamas gestais valdomas bekontaktis keltuvas
Kai aparatinė įranga ir kodas bus paruošti, prijunkite „Arduino Nano“ prie nešiojamojo kompiuterio ir įkelkite visą žemiau pateiktą kodą. Kaip matote pagal numatytuosius nustatymus, OLED parodys lifto vartotojo sąsają.
Dabar pamojuokite ranka aukštyn arba žemyn, kaip parodyta toliau pateiktame vaizdo įraše, kad nustatytumėte grindis ten, kur norite eiti. Tada atlikite kairįjį gestą, kad patvirtintumėte, jog keltuvas eina į tą aukštą. Jei norite sustabdyti keltuvą, atlikite reikiamą gestą ranka.
Visas šio projekto darbo vaizdo įrašas ir kodas pateikiami žemiau. Tikiuosi, kad jums patiko kurti šį projektą. Jei turite klausimų dėl šio projekto, palikite juos komentarų skiltyje.