- Kinakailangan ang Mga Bahagi
- APDS9960 RGB & Sensor ng Kilos
- Diagram ng Circuit
- Paliwanag sa Code
- Pagsubok sa Kinokontrol ng Gesture na Touchless Lift
Sa oras na ito ng pandemikong Corona, ang mga elevator ay naging isang mataas na peligro na lugar kung saan hawakan ng lahat ang parehong mga pindutan. Sa maraming mga lugar, natuklasan ng mga tao ang mga trick upang maiwasan ang pakikipag-ugnay sa mga pindutan ng elevator tulad ng paggamit ng isang pumping paper, mga toothpick, o mga sanitary tissue para sa pagpindot sa mga pindutan ng pag-angat.
Kaya't sa pagpapatuloy ng aming nakaraang mga proyekto sa kaligtasan ng Corona tulad ng Awtomatikong sanitizer machine, pagsubaybay sa temperatura na walang contact, at detektor ng distansya ng Social, dito magtatayo kami ng isang protesta ng Elevator na kinokontrol ng Gesture gamit ang Arduino Nano.
Ang Contactless Elevator na ito ay gumagamit ng Arduino Nano, isang APDS9960 Gesture Sensor, at isang OLED display module. Gamit ang control panel na batay sa kilos, madali mong makokontrol ang iyong Angat sa pamamagitan ng paggawa ng kilos ng kamay. Ginagamit ang APDS9960 Sensor upang basahin ang mga kilos. Ginagamit ang mga kilos ng UP at Down upang itakda ang numero ng sahig, ang kaliwang kilos ay upang isara ang pinto ng angat at ilipat ang angat ayon sa numero ng sahig at ang Tamang kilos ay ginagamit upang buksan ang pinto.
Kinakailangan ang Mga Bahagi
- Arduino Nano
- OLED Display Module
- APDS9960 RGB & Sensor ng Kilos
- Breadboard
- Jumper Wires
APDS9960 RGB & Sensor ng Kilos
Ang Module ng APDS9960 RGB & Gesture Detection ay isang maliit na breakout board na kasama ng built-in na APDS-9960 sensor, UV at IR na mga pag-block ng filter, apat na magkakahiwalay na diode na sensitibo sa iba't ibang direksyon, at isang interface na katugma ng I2C. Maaaring gamitin ang sensor na ito para sa sukat sa ilaw at pagsukat ng kulay, pagtuklas ng kalapitan, at pag-sensing walang kilos na kilos. Mayroon itong saklaw na pagtuklas ng kilos na 10 hanggang 20 cm at maaaring magamit upang makontrol ang isang microcontroller, robot, at sa maraming iba pang mga proyekto.
Mga Tampok:
- Operational Boltahe: 2.4V hanggang 3.6V
- Saklaw ng Operating: 4-8in (10-20cm).
- I2C Interface (I2C Address: 0x39).
- Ambient Light at RGB Color Sensing, kalapitan
- Sensing, at Pagtuklas ng Kilos sa isang Optical Module
- I2C-bus Fast Mode Compatible Interface na may Mga Rate ng Data hanggang sa 400 kHz.
Diagram ng Circuit
Ang Circuit Diagram para sa contactless Elevator na gumagamit ng APDS9960 ay ibinibigay sa ibaba.
Kinokonekta namin ang Arduino Nano sa APDS9960 Sensor at OLED Display. Ang mga VCC at GND na pin ng parehong APDS9960 Sensor at OLED Display ay konektado sa 3.3V at GND ng Arduino. Habang ang mga pin ng SCL at SDA ng APDS9960 Sensor at OLED Display ay konektado sa A5 at A4 na mga pin ng Arduino nang may paggalang.
OLED & APDS9960 Pin |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Ito ang hitsura ng kumpletong pag-set up para sa Gesture na kinokontrol na Elevator gamit ang Arduino:
Upang matuto nang higit pa tungkol sa pagpapakita ng OLED at ang pakikipag-ugnay nito sa iba pang mga microcontroller, sundin ang link.
Paliwanag sa Code
Ang kumpletong code para sa Contactless Elevator na gumagamit ng APDS9960 ay ibinibigay sa dulo ng pahina. Narito ipinapaliwanag namin ang ilang mahahalagang bahagi ng code. Sa program na ito, gagamitin namin ang mga aklatan ng APDS9960 at Adafruit_SH1106 . Ang APDS9960 library ay maaaring ma-download sa pamamagitan ng mula sa Arduino IDE. Upang i-download ang library, pumunta sa Sketch> Library Manager> Paghahanap at pagkatapos ay ipasok ang Arduino APDS9960. Habang ang Adafruit_SH1106 library ay maaaring ma-download mula dito.
Kaya't tulad ng dati simulan ang code sa pamamagitan ng pagsasama ng lahat ng mga kinakailangang aklatan. Ang Adafruit_SH1106.h ay ang nabagong bersyon ng orihinal na aklatan ng Adafruit.
# isama
Sa mga susunod na linya, tukuyin ang mga variable upang maiimbak ang kasalukuyang numero ng sahig at sahig kung saan nais puntahan ng gumagamit.
int floornum = 0; int currentfloor = 0;
Pagkatapos nito, ipasok ang mga bitmap para sa mga larawan ng UP Arrow, Down Arrow, Open Door, at Close Door. Ang HEX code para sa isang imahe ay maaaring mabuo sa pamamagitan ng paggamit ng isang converter tulad ng Image2cpp. Upang matuto nang higit pa tungkol sa kung paano gamitin ang Image2cpp, sundin ang tutorial ng generator ng Arduino QR code na ito.
uns unsigned char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; uns unsigned char down PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; uns unsigned char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, …………………………… …………………………………………………………..};
Sa pagpapaandar na setup () , simulan ang Serial Monitor sa baud rate na 9600 para sa mga layuning pag-debug. Pagkatapos sa mga susunod na linya, simulan ang pagpapakita ng OLED at APDS9960 sensor na may simulang () pamamaraan tulad ng sumusunod:
Serial.begin (9600); kung (! APDS.begin ()) {Serial.println ("Error sa pagsisimula ng sensor ng APDS9960!"); } Serial.println ("Pagtuklas ng mga kilos…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Matapos ang pagpapasimula ng display at sensor, i-clear ang buffer ng display gamit ang malinaw naDisplay () na pamamaraan at itakda ang laki at kulay ng font gamit ang display.setTextSize () at display.setTextColor () na mga pamamaraan.
display.setTextSize (2); display.setTextColor (PUTI); display.clearDisplay (); display.display ();
Sa loob ng void loop () , patuloy na suriin kung may kilos na ginawa. Kung oo, pagkatapos basahin ang mga halaga ng kilos at suriin kung aling kilos ito (Pataas, Pababa, KANAN, KALIWA) at i-print ang kaukulang pagbabasa sa serial monitor. Ginagamit ang mga galaw na UP at Down upang itakda ang numero ng sahig kung saan nais puntahan ng gumagamit. Ang kaliwang kilos ay upang isara ang pinto ng pag-angat at ilipat ang angat ayon sa numero ng sahig habang ginagamit ang Tamang kilos upang buksan ang pinto.
kung (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (kilos) {case GESTURE_UP: Serial.println ("Detected UP kilos"); display.clearDisplay (); floornum ++; Home 1(); pahinga; kaso GESTURE_DOWN: Serial.println ("Nakita ang kilos na Pababa"); display.clearDisplay (); floornum -; Home 1(); pahinga; case GESTURE_LEFT: Serial.println ("Nakita ang kilos na LEFT"); display.clearDisplay (); simulan (); pahinga; case GESTURE_RIGHT: Serial.println ("Detected RIGHT na kilos"); display.clearDisplay (); Home 1(); pahinga; default: masira; }
Ang pagpapaandar ng home1 () ay ginagamit upang iguhit ang display sa bahay para sa isang elevator. Binubuo ito ng isang pataas na arrow, pababang arrow, Open Door, Close Door sign, at kasalukuyang numero ng sahig. Ang function na drawBitmap () ay ginagamit upang iguhit ang mga imahe sa OLED display. Ang syntax para sa drawBitmap () na pagpapaandar ay ibinibigay sa ibaba:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, kulay);
Kung saan:
Ang int16_t x, int16_t y ay mga coordinate ng X at Y ng pagpapakita ng OLED
ang bitmap ay ang pangalan ng bitmap
int16_t w, int16_t h ang taas at bigat ng imahe.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Ang simula () function ay ginagamit upang ilipat ang elevator pataas o pababa. Para doon, ang kasalukuyang palapag na hindi ay inihambing sa bilang ng sahig kung saan nais puntahan ng gumagamit. Kung ang bilang ng sahig ay mas malaki kaysa sa kasalukuyang palapag blg. pagkatapos ang pag-angat ay lilipat paitaas at kung ang numero ng sahig ay mas mababa kaysa sa kasalukuyang sahig na hindi. pagkatapos ay ang paggalaw ay ilipat pababa. Ang pag-angat ay hihinto kapag ang parehong kasalukuyang palapag No. at sahig blg. ay pareho.
walang bisa ang pagsisimula () {habang (floornum> currentfloor) {Serial.println ("pagpunta UP"); currentfloor ++; display.drawBitmap (0, 0, pataas, 100, 64, PUTI); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); pagkaantala (2000); } habang (floornum <currentfloor) {Serial.println ("pababa"); kasalukuyangfloor--; display.drawBitmap (0, 0, pababa, 100, 64, PUTI); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); pagkaantala (2000); } kung (floornum == currentfloor) {Serial.println ("Naabot"); display.clearDisplay (); Home 1(); Serial.print (currentfloor); }}
Pagsubok sa Kinokontrol ng Gesture na Touchless Lift
Kapag handa na ang hardware at code, ikonekta ang Arduino Nano sa laptop at i-upload ang kumpletong code na ibinigay sa ibaba. Tulad ng nakikita mo sa pamamagitan ng default ay ipapakita ng OLED ang Elevator UI.
Iwagayway pataas o pababa ang iyong kamay, tulad ng ipinakita sa video sa ibaba, upang maitakda ang sahig kung saan mo nais pumunta. Pagkatapos ay gawin ang kaliwang kilos para sa pagkilala sa pag-angat upang pumunta sa sahig na iyon. Kung nais mong ihinto ang pag-angat, pagkatapos ay gumawa ng tamang kilos gamit ang iyong kamay.
Ang kumpletong gumaganang video at code para sa proyektong ito ay ibinibigay sa ibaba. Inaasahan kong nasiyahan ka sa pagbuo ng proyektong ito. Kung mayroon kang anumang mga katanungan tungkol sa proyektong ito, mangyaring iwanan ang mga ito sa seksyon ng komento.