- Componentes requeridos
- APDS9960 RGB y sensor de gestos
- Diagrama de circuito
- Explicación del código
- Prueba del elevador sin contacto controlado por gestos
En este momento de la pandemia de Corona, los ascensores se han convertido en un lugar de alto riesgo donde todos tocan los mismos botones. En muchos lugares, las personas han descubierto trucos para evitar el contacto con los botones del elevador, como usar papel para bombear, palillos de dientes o pañuelos higiénicos para presionar los botones del elevador.
Entonces, como continuación de nuestros proyectos de seguridad Corona anteriores, como la máquina desinfectante automática, el monitoreo de temperatura sin contacto y el detector de distancia social, aquí vamos a construir un prototipo de elevador controlado por gestos utilizando el Arduino Nano.
Este elevador sin contacto utiliza Arduino Nano, un sensor de gestos APDS9960 y un módulo de pantalla OLED. Con este panel de control basado en gestos, puede controlar fácilmente su ascensor haciendo un gesto con la mano. El sensor APDS9960 se utiliza para leer los gestos. Los gestos ARRIBA y ABAJO se utilizan para establecer el número de piso, el gesto de la izquierda es cerrar la puerta del ascensor y mover el ascensor de acuerdo con el número de piso y el gesto de la derecha se utiliza para abrir la puerta.
Componentes requeridos
- Arduino Nano
- Módulo de pantalla OLED
- APDS9960 RGB y sensor de gestos
- Tablero de circuitos
- Cables de puente
APDS9960 RGB y sensor de gestos
El módulo de detección de gestos y RGB APDS9960 es una pequeña placa de conexión que viene con un sensor APDS-9960 incorporado, filtros de bloqueo de rayos UV e IR, cuatro diodos separados sensibles a diferentes direcciones y una interfaz compatible con I2C. Este sensor se puede utilizar para medir la luz ambiental y el color, la detección de proximidad y la detección de gestos sin contacto. Tiene un rango de detección de gestos de 10 a 20 cm y se puede utilizar para controlar un microcontrolador, un robot y en muchos otros proyectos.
caracteristicas:
- Voltaje operativo: 2,4 V a 3,6 V
- Rango de funcionamiento: 4-8 pulgadas (10-20 cm).
- Interfaz I2C (Dirección I2C: 0x39).
- Detección de luz ambiental y color RGB, proximidad
- Detección y detección de gestos en un módulo óptico
- Interfaz compatible con modo rápido I2C-bus con velocidades de datos de hasta 400 kHz.
Diagrama de circuito
A continuación se muestra el diagrama de circuito para el elevador sin contacto que usa APDS9960.
Estamos conectando el Arduino Nano con el sensor APDS9960 y la pantalla OLED. Los pines VCC y GND del sensor APDS9960 y la pantalla OLED están conectados a 3.3V y GND de Arduino. Mientras que los pines SCL y SDA del sensor APDS9960 y la pantalla OLED están conectados a los pines A5 y A4 de Arduino respectivamente.
OLED y APDS9960 Pin |
Pin Nano Arduino |
VCC |
3,3 V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Así es como se verá la configuración completa para Elevator controlado por gestos usando Arduino:
Para obtener más información sobre la pantalla OLED y su interfaz con otros microcontroladores, siga el enlace.
Explicación del código
El código completo para el elevador sin contacto que usa APDS9960 se encuentra al final de la página. Aquí explicamos algunas partes importantes del código. En este programa, vamos a utilizar las bibliotecas APDS9960 y Adafruit_SH1106 . La biblioteca APDS9960 se puede descargar desde Arduino IDE. Para descargar la biblioteca, vaya a Sketch> Administrador de bibliotecas> Buscar y luego ingrese para Arduino APDS9960. Mientras que la biblioteca Adafruit_SH1106 se puede descargar desde aquí.
Entonces, como de costumbre, inicie el código incluyendo todas las bibliotecas requeridas. Adafruit_SH1106.h es la versión modificada de la biblioteca Adafruit original.
#incluir
En las siguientes líneas, defina las variables para almacenar el piso actual y el número de piso donde el usuario quiere ir.
int floornum = 0; int currentfloor = 0;
Después de eso, ingrese los mapas de bits para las imágenes de Flecha hacia arriba, Flecha hacia abajo, Abrir puerta y Cerrar puerta. El código HEX para una imagen se puede generar usando un convertidor como Image2cpp. Para obtener más información sobre cómo usar Image2cpp, siga este tutorial del generador de códigos QR de 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,, ………………………… …………………………………………………………..};
En la función setup () , inicialice Serial Monitor a una velocidad en baudios de 9600 para fines de depuración. Luego, en las siguientes líneas, inicialice la pantalla OLED y el sensor APDS9960 con el método begin () de la siguiente manera:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("¡Error al inicializar el sensor APDS9960!"); } Serial.println ("Detectando gestos…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Después de inicializar la pantalla y el sensor, borre el búfer de pantalla con el método clearDisplay () y establezca el tamaño y el color de la fuente usando los métodos display.setTextSize () y display.setTextColor () .
display.setTextSize (2); display.setTextColor (BLANCO); display.clearDisplay (); display.display ();
Dentro del bucle vacío () , compruebe constantemente si se hizo algún gesto. En caso afirmativo, lea los valores de los gestos y compruebe qué gesto es (ARRIBA, ABAJO, DERECHA, IZQUIERDA) e imprime la lectura correspondiente en el monitor de serie. Los gestos ARRIBA y ABAJO se utilizan para establecer el número de piso al que desea ir el usuario. El gesto de la izquierda es cerrar la puerta del ascensor y mover el ascensor de acuerdo con el número de piso, mientras que el gesto de la derecha se utiliza para abrir la puerta.
if (APDS.gestureAvailable ()) {int gesto = APDS.readGesture (); switch (gesto) {case GESTURE_UP: Serial.println ("Gesto UP detectado"); display.clearDisplay (); floornum ++; Casa 1(); romper; case GESTURE_DOWN: Serial.println ("Gesto detectado DOWN"); display.clearDisplay (); floornum -; Casa 1(); romper; case GESTURE_LEFT: Serial.println ("Gesto IZQUIERDO detectado"); display.clearDisplay (); comienzo(); romper; case GESTURE_RIGHT: Serial.println ("Gesto DERECHO detectado"); display.clearDisplay (); Casa 1(); romper; predeterminado: descanso; }
La función home1 () se utiliza para dibujar la pantalla de inicio de un ascensor. Consiste en una flecha hacia arriba, flecha hacia abajo, letreros de puerta abierta, puerta cerrada y número de piso actual. La función drawBitmap () se utiliza para dibujar las imágenes en la pantalla OLED. La sintaxis de la función drawBitmap () se proporciona a continuación:
drawBitmap (int16_t x, int16_t y, mapa de bits, int16_t w, int16_t h, color);
Dónde:
int16_t x, int16_t y son las coordenadas X e Y de la pantalla OLED
el mapa de bits es el nombre del mapa de bits
int16_t w, int16_t h son la altura y el peso de la imagen.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, uprrow, 40, 18, BLANCO); display.drawBitmap (26, 46, flecha hacia abajo, 40, 18, BLANCO); display.drawBitmap (0, 15, puerta abierta, 29, 30, BLANCO); display.drawBitmap (60, 15, puerta cerrada, 29, 30, BLANCO); display.display (); }
La función start () se utiliza para mover el elevador hacia arriba o hacia abajo. Para eso, el número de piso actual se compara con el número de piso donde el usuario quiere ir. Si el número de piso es mayor que el número de piso actual. entonces el ascensor se moverá hacia arriba y si el número de piso es menor que el piso actual no. entonces el elevador se moverá hacia abajo. El ascensor se detendrá cuando tanto el piso actual no. y piso no. son lo mismo.
void start () {while (floornum> currentfloor) {Serial.println ("subiendo"); currentfloor ++; display.drawBitmap (0, 0, arriba, 100, 64, BLANCO); display.setCursor (101,23); display.println (piso actual); display.display (); display.clearDisplay (); retraso (2000); } while (floornum <currentfloor) {Serial.println ("bajando"); currentfloor--; display.drawBitmap (0, 0, abajo, 100, 64, BLANCO); display.setCursor (101,23); display.println (piso actual); display.display (); display.clearDisplay (); retraso (2000); } if (floornum == currentfloor) {Serial.println ("Alcanzado"); display.clearDisplay (); Casa 1(); Serial.print (piso actual); }}
Prueba del elevador sin contacto controlado por gestos
Una vez que el hardware y el código estén listos, conecte el Arduino Nano a la computadora portátil y cargue el código completo que se proporciona a continuación. Como puede ver, por defecto, OLED mostrará la IU del elevador.
Ahora mueva la mano hacia arriba o hacia abajo, como se muestra en el video a continuación, para colocar el piso donde desea ir. Luego haga el gesto de la izquierda para reconocer el ascensor para ir a ese piso. Si desea detener el ascensor, haga el gesto correcto con la mano.
El video de trabajo completo y el código para este proyecto se dan a continuación. Espero que hayas disfrutado construyendo este proyecto. Si tiene alguna pregunta sobre este proyecto, déjela en la sección de comentarios.