- Composants requis
- Capteur RVB et gestuel APDS9960
- Schéma
- Explication du code
- Test de l'ascenseur sans contact contrôlé par gestes
En cette période de pandémie Corona, les ascenseurs sont devenus un endroit à haut risque où tout le monde touche les mêmes boutons. À de nombreux endroits, les gens ont découvert des astuces pour empêcher le contact avec les boutons d'ascenseur, comme l'utilisation d'un papier à pompe, de cure-dents ou de mouchoirs hygiéniques pour appuyer sur les boutons d'ascenseur.
Donc, dans la continuité de nos précédents projets de sécurité Corona tels que la machine de désinfection automatique, la surveillance de la température sans contact et le détecteur de distance sociale, nous allons ici construire un prototype d'ascenseur à commande gestuelle utilisant l'Arduino Nano.
Cet ascenseur sans contact utilise Arduino Nano, un capteur de mouvement APDS9960 et un module d'affichage OLED. Avec ce panneau de commande basé sur les gestes, vous pouvez facilement contrôler votre ascenseur en faisant un geste de la main. Le capteur APDS9960 est utilisé pour lire les gestes. Les gestes HAUT et BAS sont utilisés pour définir le numéro d'étage, le geste gauche est de fermer la porte de l'ascenseur et de déplacer l'ascenseur en fonction du numéro d'étage et le geste droit est utilisé pour ouvrir la porte.
Composants requis
- Arduino Nano
- Module d'affichage OLED
- Capteur RVB et gestuel APDS9960
- Planche à pain
- Fils de cavalier
Capteur RVB et gestuel APDS9960
Le module de détection RVB et gestuel APDS9960 est une petite carte de dérivation qui est livrée avec un capteur APDS-9960 intégré, des filtres de blocage UV et IR, quatre diodes séparées sensibles à différentes directions et une interface compatible I2C. Ce capteur peut être utilisé pour la mesure de la lumière ambiante et des couleurs, la détection de proximité et la détection de gestes sans contact. Il a une plage de détection de gestes de 10 à 20 cm et peut être utilisé pour contrôler un microcontrôleur, un robot et dans de nombreux autres projets.
Traits:
- Tension de fonctionnement: 2,4 V à 3,6 V
- Plage de fonctionnement: 10 à 20 cm (4-8 pouces).
- Interface I2C (adresse I2C: 0x39).
- Lumière ambiante et détection des couleurs RVB, proximité
- Détection et détection de gestes dans un module optique
- Interface compatible avec le mode rapide du bus I2C avec des débits de données jusqu'à 400 kHz.
Schéma
Le schéma de circuit pour ascenseur sans contact utilisant APDS9960 est donné ci-dessous.
Nous interfaçons l'Arduino Nano avec le capteur APDS9960 et l'écran OLED. Les broches VCC et GND du capteur APDS9960 et de l'écran OLED sont connectées à 3,3 V et GND d'Arduino. Alors que les broches SCL et SDA du capteur APDS9960 et de l'écran OLED sont respectivement connectées aux broches A5 et A4 d'Arduino.
Broche OLED et APDS9960 |
Arduino Nano Pin |
VCC |
3,3 v |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Voici à quoi ressemblera la configuration complète de l' ascenseur contrôlé par gestes utilisant Arduino:
Pour en savoir plus sur l'écran OLED et son interface avec d'autres microcontrôleurs, suivez le lien.
Explication du code
Le code complet de l' ascenseur sans contact utilisant APDS9960 est donné en fin de page. Ici, nous expliquons certaines parties importantes du code. Dans ce programme, nous allons utiliser les bibliothèques APDS9960 et Adafruit_SH1106 . La bibliothèque APDS9960 peut être téléchargée depuis Arduino IDE. Pour télécharger la bibliothèque, allez dans Sketch> Library Manager> Search , puis entrez pour Arduino APDS9960. Alors que la bibliothèque Adafruit_SH1106 peut être téléchargée à partir d'ici.
Donc, comme d'habitude, démarrez le code en incluant toutes les bibliothèques requises. Adafruit_SH1106.h est la version modifiée de la bibliothèque Adafruit d'origine.
#comprendre
Dans les lignes suivantes, définissez les variables pour stocker l'étage actuel et le numéro d'étage où l'utilisateur veut aller.
int floornum = 0; int currentfloor = 0;
Après cela, entrez les images bitmap pour les images Flèche vers le haut, Flèche vers le bas, Ouvrir la porte et Fermer la porte. Le code HEX d'une image peut être généré à l'aide d'un convertisseur tel que Image2cpp. Pour en savoir plus sur l'utilisation d' Image2cpp, suivez ce tutoriel sur le générateur de code 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,, ………………………… …………………………………………………………..};
Dans la fonction setup () , initialisez le moniteur série à une vitesse de transmission de 9600 à des fins de débogage. Ensuite, dans les lignes suivantes, initialisez l'écran OLED et le capteur APDS9960 avec la méthode begin () comme suit:
Serial.begin (9600); if (! APDS.begin ()) {Serial.println ("Erreur lors de l'initialisation du capteur APDS9960!"); } Serial.println ("Détection des gestes…"); display.begin (SH1106_SWITCHCAPVCC, 0x3C);
Après avoir initialisé l'affichage et le capteur, effacez le tampon d'affichage avec la méthode clearDisplay () et définissez la taille et la couleur de la police à l'aide des méthodes display.setTextSize () et display.setTextColor () .
display.setTextSize (2); display.setTextColor (BLANC); display.clearDisplay (); display.display ();
À l'intérieur de la boucle vide () , vérifiez constamment si un geste a été fait. Si oui, lisez les valeurs de geste et vérifiez de quel geste il s'agit (HAUT, BAS, DROITE, GAUCHE) et imprime la lecture correspondante sur le moniteur série. Les gestes HAUT et BAS sont utilisés pour définir le numéro de l'étage où l'utilisateur souhaite se rendre. Le geste de gauche consiste à fermer la porte de l'ascenseur et à déplacer l'ascenseur en fonction du numéro d'étage tandis que le geste de droite est utilisé pour ouvrir la porte.
if (APDS.gestureAvailable ()) {int gesture = APDS.readGesture (); switch (geste) {case GESTURE_UP: Serial.println ("Detected UP gesture"); display.clearDisplay (); floornum ++; Maison 1(); Pause; case GESTURE_DOWN: Serial.println ("Détecter le geste DOWN"); display.clearDisplay (); floornum -; Maison 1(); Pause; case GESTURE_LEFT: Serial.println ("Geste GAUCHE détecté"); display.clearDisplay (); début(); Pause; case GESTURE_RIGHT: Serial.println ("Geste détecté à DROITE"); display.clearDisplay (); Maison 1(); Pause; par défaut: break; }
La fonction home1 () est utilisée pour dessiner l'affichage d'accueil pour un ascenseur. Cela comprend une flèche vers le haut, une flèche vers le bas, des panneaux Ouvrir la porte, Fermer la porte et le numéro d'étage actuel. La fonction drawBitmap () est utilisée pour dessiner les images sur l'écran OLED. La syntaxe de la fonction drawBitmap () est donnée ci-dessous:
drawBitmap (int16_t x, int16_t y, bitmap, int16_t w, int16_t h, couleur);
Où:
int16_t x, int16_t y sont les coordonnées X et Y de l'affichage OLED
le bitmap est le nom du bitmap
int16_t w, int16_t h sont la hauteur et le poids de l'image.
void home1 () {display.setCursor (101,23); display.println (floornum); display.drawBitmap (23, 0, flèche vers le haut, 40, 18, BLANC); display.drawBitmap (26, 46, flèche vers le bas, 40, 18, BLANC); display.drawBitmap (0, 15, porte ouverte, 29, 30, BLANC); display.drawBitmap (60, 15, porte fermée, 29, 30, BLANC); display.display (); }
La fonction start () permet de déplacer l'ascenseur vers le haut ou vers le bas. Pour cela, le numéro d'étage actuel est comparé au numéro d'étage où l'utilisateur souhaite se rendre. Si le numéro d'étage est supérieur au numéro d'étage actuel. alors l'ascenseur se déplacera vers le haut et si le numéro d'étage est inférieur au numéro d'étage actuel. puis l'ascenseur se déplacera vers le bas. L'ascenseur s'arrêtera lorsque l'étage actuel no. et étage no. sont identiques.
void start () {while (floornum> currentfloor) {Serial.println ("monter"); currentfloor ++; display.drawBitmap (0, 0, haut, 100, 64, BLANC); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); retard (2000); } while (floornum <currentfloor) {Serial.println ("va vers le bas"); currentfloor--; display.drawBitmap (0, 0, bas, 100, 64, BLANC); display.setCursor (101,23); display.println (currentfloor); display.display (); display.clearDisplay (); retard (2000); } if (floornum == currentfloor) {Serial.println ("Atteint"); display.clearDisplay (); Maison 1(); Serial.print (currentfloor); }}
Test de l'ascenseur sans contact contrôlé par gestes
Une fois que le matériel et le code sont prêts, connectez l'Arduino Nano à l'ordinateur portable et téléchargez le code complet ci-dessous. Comme vous pouvez le voir par défaut, OLED affichera l'interface utilisateur de l'ascenseur.
Maintenant, agitez votre main vers le haut ou vers le bas, comme indiqué dans la vidéo ci-dessous, pour définir le sol où vous voulez aller. Ensuite, faites le geste de gauche pour confirmer que l'ascenseur se rend à cet étage. Si vous souhaitez arrêter l'ascenseur, faites le bon geste avec votre main.
La vidéo de travail complète et le code pour ce projet sont donnés ci-dessous. J'espère que vous avez apprécié la construction de ce projet. Si vous avez des questions concernant ce projet, veuillez les laisser dans la section commentaires.