- Components necessaris
- APDS9960 RGB i sensor de gest
- Esquema de connexions
- Explicació del codi
- Prova de l'elevació sense tacte controlada per gestos
En aquesta època de pandèmia Corona, els ascensors s’han convertit en un lloc d’alt risc on tothom toca els mateixos botons. En molts llocs, la gent ha descobert trucs per evitar el contacte amb els botons de l’ascensor, com ara l’ús d’un paper de bombejar, escuradents o mocadors sanitaris per prémer els botons d’elevació.
Així doncs, en continuació dels nostres anteriors projectes de seguretat Corona com la màquina desinfectant automàtica, la vigilància de la temperatura sense contacte i el detector de distància social, aquí construirem un prototip d’elevador controlat per gestos mitjançant l’Arduino Nano.
Aquest elevador sense contacte utilitza Arduino Nano, un sensor de gest APDS9960 i un mòdul de pantalla OLED. Amb aquest tauler de control basat en gestos, podeu controlar fàcilment el vostre ascensor fent un gest amb la mà. El sensor APDS9960 s’utilitza per llegir els gestos. Els gestos AMUNT i ABAIX s’utilitzen per establir el número del pis, el gest esquerre és tancar la porta de l’ascensor i moure l’ascensor segons el número del pis i el gest dret s’obre per obrir la porta.
Components necessaris
- Arduino Nano
- Mòdul de pantalla OLED
- APDS9960 RGB i sensor de gest
- Taula de pa
- Jumper Wires
APDS9960 RGB i sensor de gest
El mòdul de detecció de gestos RGB i APDS9960 és una petita placa de sortida que inclou un sensor APDS-9960 incorporat, filtres de bloqueig UV i IR, quatre díodes separats sensibles a diferents direccions i una interfície compatible I2C. Aquest sensor es pot utilitzar per mesurar la llum i el color ambient, detectar la proximitat i detectar gestos sense tacte. Té un rang de detecció de gestos de 10 a 20 cm i es pot utilitzar per controlar un microcontrolador, un robot i en molts altres projectes.

Característiques:
- Voltatge operatiu: 2,4V a 3,6V
- Rang de funcionament: 4-8in (10-20cm).
- Interfície I2C (adreça I2C: 0x39).
- Llum ambiental i detecció de color RGB, proximitat
- Detecció i detecció de gestos en un mòdul òptic
- Interfície compatible amb mode ràpid de bus I2C amb velocitats de dades de fins a 400 kHz.
Esquema de connexions
A continuació es mostra el diagrama de circuits de l’ ascensor sense contacte mitjançant APDS9960.

Estem relacionant l’Arduino Nano amb el sensor APDS9960 i la pantalla OLED. Els pins VCC i GND del sensor APDS9960 i de la pantalla OLED estan connectats a 3,3V i GND d’Arduino. Mentre que els pins SCL i SDA del sensor APDS9960 i la pantalla OLED estan connectats als pins A5 i A4 d’Arduino, respectivament.
|
Pin OLED i APDS9960 |
Pin Arduino Nano |
|
VCC |
3.3v |
|
GND |
GND |
|
SCL |
A5 |
|
SDA |
A4 |
Així serà la configuració completa de l' elevador controlat per gestos mitjançant Arduino:

Per obtenir més informació sobre la pantalla OLED i la seva interfície amb altres microcontroladors, seguiu l'enllaç.
Explicació del codi
Al final de la pàgina es dóna el codi complet de Contactless Elevator mitjançant APDS9960. Aquí expliquem algunes parts importants del codi. En aquest programa, farem servir les biblioteques APDS9960 i Adafruit_SH1106 . La biblioteca APDS9960 es pot descarregar des de Arduino IDE. Per descarregar la biblioteca, aneu a Sketch> Library Manager> Search i, a continuació, introduïu Arduino APDS9960. Tot i que la biblioteca Adafruit_SH1106 es pot descarregar des d’aquí.
Com és habitual, inicieu el codi incloent totes les biblioteques necessàries. Adafruit_SH1106.h és la versió modificada de la biblioteca original d'Adafruit.
#incloure
A les següents línies, definiu les variables per emmagatzemar el pis i el número de pis actuals on l’usuari vol anar.
int floornum = 0; int currentfloor = 0;
Després d’això, introduïu els mapes de bits de les imatges Fletxa amunt, Fletxa avall, Porta oberta i Tancar porta. El codi HEX d’una imatge es pot generar mitjançant un convertidor com Image2cpp. Per obtenir més informació sobre com utilitzar Image2cpp, seguiu aquest tutorial del generador de codi QR Arduino.
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,, ………………………… ………………………………………………………..};
A la funció setup () , inicialitzeu el monitor de sèrie a una velocitat de transmissió de 9600 a efectes de depuració. A continuació, a les següents línies, inicialitzeu la pantalla OLED i el sensor APDS9960 amb el mètode begin () de la següent manera:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Error en inicialitzar el sensor APDS9960!"); } Serial.println ("Detectant gestos…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Després d'inicialitzar la pantalla i el sensor, esborreu la memòria intermèdia de visualització amb el mètode clearDisplay () i configureu la mida i el color de la font mitjançant els mètodes display.setTextSize () i display.setTextColor () .
display.setTextSize (2); display.setTextColor (BLANC); display.clearDisplay (); display.display ();
Dins del bucle buit () , comproveu constantment si es va fer cap gest. Si és així, llegiu els valors del gest i comproveu quin és el gest (AMUNT, ABAIX, DRETA, ESQUERRA) i imprimiu la lectura corresponent al monitor sèrie. Els gestos AMUNT i ABAIX s’utilitzen per establir el número de pis on l’usuari vol anar. El gest esquerre és tancar la porta de l’ascensor i moure l’ascensor segons el número del pis, mentre que el gest dret s’utilitza per obrir la porta.
if (APDS.gestureAvailable ()) {int gest = APDS.readGesture (); commutador (gest) {case GESTURE_UP: Serial.println ("Gest UP detectat"); display.clearDisplay (); floornum ++; llar1 (); trencar; cas GESTURE_DOWN: Serial.println ("Gest detectat DOWN"); display.clearDisplay (); floornum -; llar1 (); trencar; cas GESTURE_LEFT: Serial.println ("Gest ESQUERRA detectat"); display.clearDisplay (); començar(); trencar; cas GESTURE_RIGHT: Serial.println ("Gest DRET detectat"); display.clearDisplay (); llar1 (); trencar; per defecte: trencar; }
La funció home1 () s’utilitza per dibuixar la pantalla inicial d’un ascensor. Consisteix en una fletxa amunt, fletxa avall, porta oberta, signes de porta tancada i número de pis actual. La funció drawBitmap () s’utilitza per dibuixar les imatges de la pantalla OLED. A continuació es mostra la sintaxi de la funció drawBitmap () :
drawBitmap (int16_t x, int16_t y, mapa de bits, int16_t w, int16_t h, color);
On:
int16_t x, int16_t y són les coordenades X i Y de la pantalla OLED
el mapa de bits és el nom del mapa de bits
int16_t w, int16_t h són l'alçada i el pes de la imatge.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, ascendent, 40, 18, BLANC); display.drawBitmap (26, 46, descendent, 40, 18, BLANC); display.drawBitmap (0, 15, porta oberta, 29, 30, BLANC); display.drawBitmap (60, 15, closedoor, 29, 30, BLANC); display.display (); }
La funció start () s’utilitza per moure l’ascensor cap amunt o cap avall. Per a això, el pis actual no es compara amb el número de pis on l'usuari vol anar. Si el nombre de pis és superior al pis actual núm. llavors l’ascensor es mourà cap amunt i si el número de planta és inferior al pis actual no. llavors l’ascensor es mourà cap avall. L'ascensor s'aturarà quan la planta actual núm. i pis núm. són el mateix.
void start () {while (floornum> currentfloor) {Serial.println ("pujant"); currentfloor ++; display.drawBitmap (0, 0, amunt, 100, 64, BLANC); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); endarreriment (2000); } while (floornum <currentfloor) {Serial.println ("baixant"); currentfloor--; display.drawBitmap (0, 0, avall, 100, 64, BLANC); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); endarreriment (2000); } if (floornum == currentfloor) {Serial.println ("Arribat"); display.clearDisplay (); llar1 (); Serial.print (currentfloor); }}
Prova de l'elevació sense tacte controlada per gestos
Quan el maquinari i el codi estiguin a punt, connecteu l'Arduino Nano a l'ordinador portàtil i pengeu el codi complet que es mostra a continuació. Com es pot veure per defecte, OLED mostrarà la interfície d'usuari Elevator.

Ara agiteu la mà cap amunt o cap avall, tal com es mostra al vídeo següent, per establir el terreny on voleu anar. A continuació, feu el gest esquerre per reconèixer l’ascensor per anar a aquest pis. Si voleu aturar l’ascensor, feu el gest adequat amb la mà.
A continuació es dóna el vídeo de treball complet i el codi d’aquest projecte. Espero que us hagi agradat construir aquest projecte. Si teniu cap pregunta sobre aquest projecte, deixeu-los a la secció de comentaris.
