- Необходими компоненти
- APDS9960 RGB и сензор за жестове
- Електрическа схема
- Обяснение на кода
- Тестване на безконтактен лифт с контролиран жест
По това време на пандемията на короната асансьорите се превърнаха в място с висок риск, където всички докосват едни и същи бутони. На много места хората са открили трикове за предотвратяване на контакт с бутоните на асансьора като използване на помпена хартия, клечки за зъби или санитарни кърпички за натискане на бутоните за повдигане.
Така че в продължение на предишните ни проекти за безопасност на Corona като автоматична дезинфекцираща машина, безконтактно наблюдение на температурата и социален детектор за разстояние, тук ще изградим прототип на елеватор, контролиран от жеста, използвайки Arduino Nano.
Този безконтактен асансьор използва Arduino Nano, сензор за жестове APDS9960 и OLED дисплеен модул. С този контролен панел, базиран на жестове, можете лесно да контролирате вашия асансьор, като направите жест с ръка. Сензорът APDS9960 се използва за четене на жестовете. Жестовете НАГОРЕ и НАДОЛУ се използват за задаване на номера на пода, левият жест е за затваряне на вратата на асансьора и преместване на асансьора според номера на етажа, а десният жест се използва за отваряне на вратата.
Необходими компоненти
- Arduino Nano
- OLED дисплеен модул
- APDS9960 RGB и сензор за жестове
- Макет
- Джъмперни проводници
APDS9960 RGB и сензор за жестове
APDS9960 RGB & Gesture Detection Module е малка платка за разбиване, която се предлага с вграден APDS-9960 сензор, UV и IR блокиращи филтри, четири отделни диода, чувствителни към различни посоки, и I2C съвместим интерфейс. Този сензор може да се използва за измерване на околната светлина и цвят, разпознаване на близост и безконтактно засичане на жестове. Той има обхват за откриване на жестове от 10 до 20 см и може да се използва за управление на микроконтролер, робот и в много други проекти.
Характеристика:
- Работно напрежение: 2.4V до 3.6V
- Работен обхват: 4-8in (10-20cm).
- I2C интерфейс (I2C адрес: 0x39).
- Сензор за околна светлина и RGB цвят, близост
- Засичане и откриване на жестове в оптичен модул
- I2C-bus Съвместим интерфейс за бърз режим със скорости на данни до 400 kHz.
Електрическа схема
Електрическа схема за безконтактен асансьор с използване на APDS9960 е дадена по-долу.
Ние свързваме Arduino Nano с APDS9960 сензор и OLED дисплей. VCC и GND щифтовете на APDS9960 сензора и OLED дисплея са свързани към 3.3V и GND на Arduino. Докато SCL и SDA щифтовете на APDS9960 Sensor и OLED дисплеят са свързани към A5 и A4 щифтове на Arduino съответно.
ПИН OLED & APDS9960 |
Arduino Nano Pin |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Ето как ще изглежда пълната настройка за контролиран с жестове асансьор, използващ Arduino:
За да научите повече за OLED дисплея и взаимодействието му с други микроконтролери, следвайте връзката.
Обяснение на кода
Пълният код за безконтактен асансьор, използващ APDS9960, е даден в края на страницата. Тук обясняваме някои важни части на кода. В тази програма ще използваме библиотеките APDS9960 и Adafruit_SH1106 . Библиотеката APDS9960 може да бъде изтеглена от Arduino IDE. За да изтеглите библиотеката, отидете на Скица> Мениджър на библиотеки> Търсене и след това въведете Arduino APDS9960. Докато библиотеката Adafruit_SH1106 може да бъде изтеглена от тук.
Така както обикновено стартирайте кода, като включите всички необходими библиотеки. Adafruit_SH1106.h е модифицираната версия на оригиналната библиотека на Adafruit.
#include
В следващите редове дефинирайте променливите за съхраняване на текущия етаж и номера на етажа, където потребителят иска да отиде.
int floornum = 0; int currentfloor = 0;
След това въведете растерните изображения за снимките със стрелка нагоре, стрелка надолу, отворена врата и затворена врата. HEX код за изображение може да се генерира с помощта на конвертор като Image2cpp. За да научите повече за това как да използвате Image2cpp, следвайте този урок за генериране на QR кодове на Arduino.
const неподписан знак нагоре PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const неподписан знак надолу PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, …………………………… ………………………………………………………..}; const неподписан char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
Във функцията setup () инициализирайте Serial Monitor със скорост на предаване 9600 за целите на отстраняване на грешки. След това в следващите редове инициализирайте OLED дисплея и сензора APDS9960 с метода begin () , както следва:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Грешка при инициализиране на APDS9960 сензор!"); } Serial.println ("Откриване на жестове…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
След инициализиране на дисплея и сензора изчистете буфера на дисплея с метода clearDisplay () и задайте размера и цвета на шрифта с помощта на методите display.setTextSize () и display.setTextColor () .
display.setTextSize (2); display.setTextColor (БЯЛ); display.clearDisplay (); display.display ();
Вътре в празнота контур () , постоянно се провери дали е направено всеки жест. Ако отговорът е да, тогава прочетете стойностите на жеста и проверете кой жест е (НАГОРЕ, НАДОЛУ, НАДЯСНО, НАЛЯВО) и отпечатва съответното четене на серийния монитор. Жестовете НАГОРЕ и НАДОЛУ се използват за задаване на номера на етажа, където потребителят иска да отиде. Левият жест е да затворите вратата на асансьора и да преместите асансьора според номера на пода, докато десният жест се използва за отваряне на вратата.
ако (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); превключвател (жест) {случай GESTURE_UP: Serial.println ("Открит жест НАГОРЕ"); display.clearDisplay (); floornum ++; home1 (); почивка; случай GESTURE_DOWN: Serial.println ("Открит жест НАДОЛУ"); display.clearDisplay (); floornum -; home1 (); почивка; случай GESTURE_LEFT: Serial.println ("Открит ЛЯВ жест"); display.clearDisplay (); старт (); почивка; случай GESTURE_RIGHT: Serial.println ("Открит ДЯСЕН жест"); display.clearDisplay (); home1 (); почивка; по подразбиране: почивка; }
Функцията home1 () се използва за изчертаване на домашния дисплей за асансьор. Състои се от стрелка нагоре, стрелка надолу, отворена врата, знаци за затваряне на вратата и номер на текущия етаж. Функцията drawBitmap () се използва за изчертаване на изображенията на OLED дисплея. Синтаксисът на функцията drawBitmap () е даден по-долу:
drawBitmap (int16_t x, int16_t y, растерно изображение, int16_t w, int16_t h, цвят);
Където:
int16_t x, int16_t y са координатите X и Y на OLED дисплея
растерното изображение е името на растерното изображение
int16_t w, int16_t h са височината и теглото на изображението.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, нагоре, 40, 18, БЯЛО); display.drawBitmap (26, 46, надолу, 40, 18, БЯЛ); display.drawBitmap (0, 15, dooropen, 29, 30, БЯЛ); display.drawBitmap (60, 15, затворено, 29, 30, БЯЛО); display.display (); }
Функцията старт () се използва за преместване на асансьора нагоре или надолу. За това текущият етаж № се сравнява с номера на етажа, където потребителят иска да отиде. Ако номерът на етажа е по-голям от текущия номер на етаж. тогава асансьорът ще се движи нагоре и ако номерът на етажа е по-малък от текущия номер на етаж. тогава асансьорът ще се движи надолу. Асансьорът ще спре, когато и текущият етаж No. и етаж бр. са същите.
void start () {while (floornum> currentfloor) {Serial.println ("върви нагоре"); currentfloor ++; display.drawBitmap (0, 0, нагоре, 100, 64, БЯЛ); display.setCursor (101,23); display.println (текущ етаж); display.display (); display.clearDisplay (); забавяне (2000); } while (floornum <currentfloor) {Serial.println ("слизане"); текущ етаж--; display.drawBitmap (0, 0, надолу, 100, 64, БЯЛ); display.setCursor (101,23); display.println (текущ етаж); display.display (); display.clearDisplay (); забавяне (2000); } if (floornum == currentfloor) {Serial.println ("Достигнато"); display.clearDisplay (); home1 (); Serial.print (currentfloor); }}
Тестване на безконтактен лифт с контролиран жест
След като хардуерът и кодът са готови, свържете Arduino Nano към лаптопа и качете пълния код, даден по-долу. Както можете да видите по подразбиране OLED ще покаже потребителския интерфейс на асансьора.
Сега махнете с ръка нагоре или надолу, както е показано във видеото по-долу, за да поставите пода, където искате да отидете. След това направете левия жест за потвърждаване на лифта, за да отидете на този етаж. Ако искате да спрете асансьора, направете правилния жест с ръка.
Пълното работещо видео и код за този проект са дадени по-долу. Надявам се, че ви е харесало да изградите този проект. Ако имате някакви въпроси относно този проект, моля, оставете ги в раздела за коментари.