- Componente necesare
- APDS9960 RGB și senzor de gesturi
- Diagrama circuitului
- Explicarea codului
- Testarea ridicării fără atingere controlată prin gesturi
În acest timp al pandemiei Corona, lifturile au devenit un loc cu risc ridicat în care toată lumea atinge aceleași butoane. În multe locuri, oamenii au descoperit trucuri pentru a preveni contactul cu butoanele liftului, cum ar fi utilizarea unei hârtii de pompare, scobitori sau țesuturi sanitare pentru apăsarea butoanelor de ridicare.
Deci, în continuarea proiectelor noastre anterioare de siguranță Corona, cum ar fi mașina de dezinfectare automată, monitorizarea temperaturii fără contact și detectorul de distanță socială, aici vom construi un prototip de ascensor controlat prin gesturi folosind Arduino Nano.
Acest lift fără contact folosește Arduino Nano, un senzor de gest APDS9960 și un modul de afișare OLED. Cu acest panou de control bazat pe gesturi, vă puteți controla cu ușurință Liftul făcând un gest de mână. Senzorul APDS9960 este folosit pentru a citi gesturile. Gesturile SUS și JOS sunt folosite pentru a seta numărul podelei, gestul din stânga este de a închide ușa liftului și de a muta liftul în funcție de numărul podelei, iar gestul din dreapta este folosit pentru a deschide ușa.
Componente necesare
- Arduino Nano
- Modul de afișare OLED
- APDS9960 RGB și senzor de gesturi
- Breadboard
- Sârme jumper
APDS9960 RGB și senzor de gesturi
APDS9960 RGB și modul de detecție a gesturilor este o placă mică care vine cu un senzor APDS-9960 încorporat, filtre de blocare UV și IR, patru diode separate sensibile la direcții diferite și o interfață compatibilă I2C. Acest senzor poate fi utilizat pentru măsurarea luminii și culorii ambientale, pentru detectarea proximității și pentru detectarea gesturilor fără atingere. Are un domeniu de detectare a gesturilor de la 10 la 20 cm și poate fi utilizat pentru a controla un microcontroler, un robot și în multe alte proiecte.
Caracteristici:
- Tensiune operațională: 2.4V la 3.6V
- Gama de operare: 4-8in (10-20cm).
- Interfață I2C (Adresă I2C: 0x39).
- Lumina ambientală și detectarea culorilor RGB, proximitate
- Detectarea și detectarea gesturilor într-un modul optic
- Interfață compatibilă cu modul rapid I2C-bus cu viteze de date de până la 400 kHz.
Diagrama circuitului
Diagrama circuitului pentru ascensorul fără contact folosind APDS9960 este prezentată mai jos.
Interfacem Arduino Nano cu senzorul APDS9960 și afișajul OLED. Pinii VCC și GND atât ai senzorului APDS9960, cât și ai afișajului OLED sunt conectați la 3,3V și GND din Arduino. În timp ce pinii SCL și SDA ai senzorului APDS9960 și afișajul OLED sunt conectați la pinii A5 și A4 ai Arduino, respectiv.
OLED și APDS9960 Pin |
Pinul Arduino Nano |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Acesta este modul în care va arăta configurarea completă pentru ascensorul controlat prin gesturi folosind Arduino:
Pentru a afla mai multe despre afișajul OLED și interfața acestuia cu alte microcontrolere, urmați linkul.
Explicarea codului
Codul complet pentru contactless lift folosind APDS9960 este dat la sfârșitul paginii. Aici explicăm câteva părți importante ale codului. În acest program, vom folosi bibliotecile APDS9960 și Adafruit_SH1106 . Biblioteca APDS9960 poate fi descărcată de pe Arduino IDE. Pentru a descărca biblioteca, accesați Schiță> Manager bibliotecă> Căutare și apoi introduceți pentru Arduino APDS9960. În timp ce biblioteca Adafruit_SH1106 poate fi descărcată de aici.
Deci, ca de obicei, începeți codul prin includerea tuturor bibliotecilor necesare. Adafruit_SH1106.h este versiunea modificată a bibliotecii originale Adafruit.
#include
În rândurile următoare, definiți variabilele pentru a stoca nivelul curent și numărul etajului unde utilizatorul dorește să meargă.
int floornum = 0; int currentfloor = 0;
După aceea, introduceți bitmap-urile pentru imaginile Săgeată sus, Săgeată jos, Deschidere ușă și Închidere ușă. Codul HEX pentru o imagine poate fi generat utilizând un convertor precum Image2cpp. Pentru a afla mai multe despre cum să utilizați Image2cpp, urmați acest tutorial Arduino cu generatorul de cod QR.
const unsigned char up PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………..}; const unsigned char down PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ……………………………… ……………………………………………………..}; const unsigned char dooropen PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xe0,, ………………………… …………………………………………………………..};
În funcția setup () , inițializați Serial Monitor la o rată de transmisie de 9600 în scopuri de depanare. Apoi, în rândurile următoare, inițializați afișajul OLED și senzorul APDS9960 cu metoda begin () după cum urmează:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Eroare la inițializarea senzorului APDS9960!"); } Serial.println („Detectarea gesturilor…”); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
După inițializarea afișajului și a senzorului, ștergeți memoria tampon cu metoda clearDisplay () și setați dimensiunea și culoarea fontului folosind metodele display.setTextSize () și display.setTextColor () .
display.setTextSize (2); display.setTextColor (ALB); display.clearDisplay (); display.display ();
În interiorul buclei de gol () , verificați în mod constant dacă a fost făcut vreun gest. Dacă da, citiți valorile gestului și verificați ce gest este (SUS, JOS, DREAPTA, STÂNGA) și tipăriți lectura corespunzătoare pe monitorul serial. Gesturile SUS și JOS sunt folosite pentru a seta numărul etajului unde utilizatorul dorește să meargă. Gestul din stânga este închiderea ușii liftului și deplasarea ascensorului în funcție de numărul etajului, în timp ce gestul din dreapta este utilizat pentru a deschide ușa.
if (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); switch (gest) {case GESTURE_UP: Serial.println ("Gest detectat UP"); display.clearDisplay (); floornum ++; casa 1(); pauză; caz GESTURE_DOWN: Serial.println ("Gest detectat DOWN"); display.clearDisplay (); floornum -; casa 1(); pauză; caz GESTURE_LEFT: Serial.println ("Gestul stânga detectat"); display.clearDisplay (); start(); pauză; caz GESTURE_RIGHT: Serial.println ("Gestul DREPT detectat"); display.clearDisplay (); casa 1(); pauză; implicit: pauză; }
Funcția home1 () este utilizată pentru a desena afișajul acasă pentru un lift. Aceasta constă dintr-o săgeată sus, o săgeată în jos, o ușă deschisă, semne de închidere ușă și numărul curent de etaj. Funcția drawBitmap () este utilizată pentru a desena imaginile de pe afișajul OLED. Sintaxa pentru funcția drawBitmap () este dată mai jos:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, culoare);
Unde:
int16_t x, int16_t y sunt coordonatele X și Y ale afișajului OLED
bitmap-ul este numele bitmap-ului
int16_t w, int16_t h sunt înălțimea și greutatea imaginii.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, sus, 40, 18, ALB); display.drawBitmap (26, 46, downarrow, 40, 18, WHITE); display.drawBitmap (0, 15, ușă deschisă, 29, 30, ALB); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
Funcția start () este utilizată pentru a deplasa liftul în sus sau în jos. Pentru aceasta, etajul actual nu este comparat cu numărul etajului în care dorește să meargă utilizatorul. Dacă numărul etajului este mai mare decât etajul actual nr. atunci liftul se va deplasa în sus și dacă numărul etajului este mai mic decât etajul actual nr. atunci liftul se va deplasa în jos. Ascensorul se va opri când atât etajul actual nr. și etajul nr. sunt la fel.
void start () {while (floornum> currentfloor) {Serial.println ("merge sus"); currentfloor ++; display.drawBitmap (0, 0, sus, 100, 64, ALB); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); întârziere (2000); } while (floornum <currentfloor) {Serial.println ("merge în jos"); currentfloor--; display.drawBitmap (0, 0, jos, 100, 64, ALB); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); întârziere (2000); } if (floornum == currentfloor) {Serial.println ("Atins"); display.clearDisplay (); casa 1(); Serial.print (currentfloor); }}
Testarea ridicării fără atingere controlată prin gesturi
Odată ce hardware-ul și codul sunt gata, conectați Arduino Nano la laptop și încărcați codul complet dat mai jos. După cum puteți vedea în mod implicit, OLED va afișa UI Elevator.
Acum flutură mâna în sus sau în jos, așa cum se arată în videoclipul de mai jos, pentru a seta podeaua unde vrei să mergi. Apoi faceți gestul din stânga pentru a recunoaște ascensorul pentru a merge la acel etaj. Dacă doriți să opriți ascensorul, atunci faceți gestul corect cu mâna.
Videoclipul complet de lucru și codul pentru acest proiect sunt date mai jos. Sper că ți-a plăcut să construiești acest proiect. Dacă aveți întrebări cu privire la acest proiect, vă rugăm să le lăsați în secțiunea de comentarii.