- Componenti richiesti
- APDS9960 RGB e sensore di gesti
- Schema elettrico
- Spiegazione del codice
- Testare il sollevamento senza contatto controllato dai gesti
In questo periodo della pandemia Corona, gli ascensori sono diventati un luogo ad alto rischio in cui tutti toccano gli stessi pulsanti. In molti luoghi, le persone hanno scoperto trucchi per impedire il contatto con i pulsanti dell'ascensore come usare una carta per pompare, stuzzicadenti o fazzoletti igienici per premere i pulsanti dell'ascensore.
Quindi, in continuazione dei nostri precedenti progetti di sicurezza Corona come la macchina disinfettante automatica, il monitoraggio della temperatura senza contatto e il rilevatore di distanza sociale, qui costruiremo un prototipo di ascensore controllato tramite gesti utilizzando Arduino Nano.
Questo ascensore senza contatto utilizza Arduino Nano, un sensore di gesti APDS9960 e un modulo display OLED. Con questo pannello di controllo basato sui gesti, puoi controllare facilmente il tuo Lift facendo un gesto della mano. Il sensore APDS9960 viene utilizzato per leggere i gesti. I gesti SU e GIÙ vengono utilizzati per impostare il numero del piano, il gesto sinistro è per chiudere la porta dell'ascensore e spostare l'ascensore in base al numero del piano e il gesto destro viene utilizzato per aprire la porta.
Componenti richiesti
- Arduino Nano
- Modulo display OLED
- APDS9960 RGB e sensore di gesti
- Breadboard
- Cavi per ponticelli
APDS9960 RGB e sensore di gesti
Il modulo APDS9960 RGB & Gesture Detection è una piccola scheda breakout che viene fornita con un sensore APDS-9960 integrato, filtri di blocco UV e IR, quattro diodi separati sensibili a direzioni diverse e un'interfaccia compatibile I2C. Questo sensore può essere utilizzato per la misurazione della luce ambientale e del colore, il rilevamento di prossimità e il rilevamento dei gesti senza contatto. Ha un raggio di rilevamento dei gesti da 10 a 20 cm e può essere utilizzato per controllare un microcontrollore, un robot e in molti altri progetti.
Caratteristiche:
- Tensione operativa: da 2,4 V a 3,6 V.
- Intervallo operativo: 4-8 pollici (10-20 cm).
- Interfaccia I2C (indirizzo I2C: 0x39).
- Luce ambientale e rilevamento del colore RGB, prossimità
- Rilevamento e rilevamento dei gesti in un modulo ottico
- Interfaccia compatibile con la modalità veloce I2C-bus con velocità di trasmissione dati fino a 400 kHz.
Schema elettrico
Di seguito è riportato lo schema del circuito per l' ascensore senza contatto che utilizza APDS9960.
Stiamo interfacciando Arduino Nano con sensore APDS9960 e display OLED. I pin VCC e GND del sensore APDS9960 e del display OLED sono collegati a 3,3 V e GND di Arduino. Mentre i pin SCL e SDA del sensore APDS9960 e del display OLED sono collegati rispettivamente ai pin A5 e A4 di Arduino.
Pin OLED e APDS9960 |
Pin di Arduino Nano |
VCC |
3.3v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Ecco come apparirà la configurazione completa per l' ascensore controllato tramite gesti utilizzando Arduino:
Per saperne di più sul display OLED e sulla sua interfaccia con altri microcontrollori, segui il link.
Spiegazione del codice
Il codice completo per l' ascensore senza contatto che utilizza APDS9960 è fornito alla fine della pagina. Qui stiamo spiegando alcune parti importanti del codice. In questo programma utilizzeremo le librerie APDS9960 e Adafruit_SH1106 . La libreria APDS9960 può essere scaricata da Arduino IDE. Per scaricare la libreria, vai su Sketch> Library Manager> Cerca e quindi inserisci Arduino APDS9960. Mentre la libreria Adafruit_SH1106 può essere scaricata da qui.
Quindi come al solito avvia il codice includendo tutte le librerie richieste. Adafruit_SH1106.h è la versione modificata della libreria Adafruit originale.
#includere
Nelle righe successive, definire le variabili per memorizzare il piano corrente e il numero del piano in cui l'utente desidera andare.
int floornum = 0; int currentfloor = 0;
Successivamente, inserisci le immagini bitmap per le immagini Freccia SU, Freccia giù, Apri porta e Chiudi porta. Il codice HEX per un'immagine può essere generato utilizzando un convertitore come Image2cpp. Per saperne di più su come utilizzare Image2cpp, segui questo tutorial sul generatore di codici QR di 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,, ………………………… …………………………………………………………..};
Nella funzione setup () , inizializza Serial Monitor a una velocità di trasmissione di 9600 per scopi di debug. Quindi, nelle righe successive, inizializza il display OLED e il sensore APDS9960 con il metodo begin () come segue:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Errore di inizializzazione del sensore APDS9960!"); } Serial.println ("Rilevamento gesti…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Dopo aver inizializzato il display e il sensore, cancellare il buffer di visualizzazione con il metodo clearDisplay () e impostare la dimensione e il colore del carattere utilizzando i metodi display.setTextSize () e display.setTextColor () .
display.setTextSize (2); display.setTextColor (WHITE); display.clearDisplay (); display.display ();
All'interno del loop void () , controlla costantemente se è stato fatto qualche gesto. Se sì, allora leggi i valori del gesto e controlla quale gesto è (SU, GIÙ, DESTRA, SINISTRA) e stampa la lettura corrispondente sul monitor seriale. I gesti SU e GIÙ vengono utilizzati per impostare il numero di piano in cui l'utente desidera andare. Il gesto sinistro è quello di chiudere la porta dell'ascensore e spostare l'ascensore in base al numero di piano mentre il gesto destro viene utilizzato per aprire la porta.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (gesto) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; Casa 1(); rompere; case GESTURE_DOWN: Serial.println ("gesto GIÙ rilevato"); display.clearDisplay (); floornum:; Casa 1(); rompere; case GESTURE_LEFT: Serial.println ("Rilevato gesto SINISTRO"); display.clearDisplay (); inizio(); rompere; case GESTURE_RIGHT: Serial.println ("Rilevato gesto DESTRO"); display.clearDisplay (); Casa 1(); rompere; default: pausa; }
La funzione home1 () viene utilizzata per disegnare la schermata iniziale di un ascensore. Consiste in una freccia su, una freccia in basso, i segnali Apri porta, Chiudi porta e il numero del piano corrente. La funzione drawBitmap () viene utilizzata per disegnare le immagini sul display OLED. La sintassi per la funzione drawBitmap () è fornita di seguito:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, colore);
Dove:
int16_t x, int16_t y sono le coordinate X e Y del display OLED
la bitmap è il nome della bitmap
int16_t w, int16_t h sono l'altezza e il peso dell'immagine.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uparrow, 40, 18, WHITE); display.drawBitmap (26, 46, downarrow, 40, 18, BIANCO); display.drawBitmap (0, 15, dooropen, 29, 30, WHITE); display.drawBitmap (60, 15, closedoor, 29, 30, WHITE); display.display (); }
La funzione start () viene utilizzata per spostare il sollevatore verso l'alto o verso il basso. Per questo, il numero del piano corrente viene confrontato con il numero del piano in cui l'utente desidera andare. Se il numero del piano è maggiore del piano attuale n. poi l'ascensore si muoverà verso l'alto e se il numero del piano è inferiore al piano attuale n. quindi l'ascensore si muoverà verso il basso. L'ascensore si fermerà quando sia l'attuale piano n. e piano n. sono gli stessi.
void start () {while (floornum> currentfloor) {Serial.println ("going UP"); currentfloor ++; display.drawBitmap (0, 0, su, 100, 64, BIANCO); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); ritardo (2000); } while (floornum <currentfloor) {Serial.println ("going Down"); currentfloor--; display.drawBitmap (0, 0, giù, 100, 64, BIANCO); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); ritardo (2000); } if (floornum == currentfloor) {Serial.println ("Reached"); display.clearDisplay (); Casa 1(); Serial.print (currentfloor); }}
Testare il sollevamento senza contatto controllato dai gesti
Una volta che l'hardware e il codice sono pronti, collega Arduino Nano al laptop e carica il codice completo indicato di seguito. Come puoi vedere per impostazione predefinita, OLED mostrerà l'interfaccia utente di Elevator.
Ora agita la mano verso l'alto o verso il basso, come mostrato nel video qui sotto, per impostare il pavimento dove vuoi andare. Quindi fai il gesto a sinistra per riconoscere l'ascensore per andare a quel piano. Se vuoi fermare l'ascensore, fai il gesto giusto con la mano.
Di seguito sono riportati il video e il codice di lavoro completi per questo progetto. Spero ti sia piaciuto costruire questo progetto. Se hai domande su questo progetto, lasciale nella sezione commenti.