Gesture Slider Swiper avec Arduino

Gesture Slider Swiper avec Arduino

Dans cet article, vous allez apprendre à configurer une carte Arduino UNO en tant que clavier USB HID et à utiliser des gestes pour faire glisser des diapositives lors d’une présentation.

Comment ça fonctionne

Voici une figure qui décrit exactement comment tout fonctionne ensemble :

Gesture Slider Swiper avec Arduino

Si vous aimez les projets Arduino et que vous souhaitez en construire davantage, nous vous recommandons de suivre le cours Projets étape par étape Arduino – Construire 25 projets.

Arduino UNO ou Mega comme clavier USB HID

L’Arduino peut être configuré pour émuler un clavier et effectuer des tâches utiles. En attachant un bouton-poussoir à une broche numérique Arduino et en appuyant sur un bouton, vous pouvez écrire un mot de passe, copier + coller, augmenter/diminuer le volume, augmenter/diminuer la luminosité de l’écran, etc…

Bien que des cartes comme l’Arduino UNO ne puissent pas le faire par défaut si vous flashez un nouveau chargeur de démarrage, vous pouvez transformer la carte Arduino UNO en un clavier USB HID.

Un Arduino Uno/Mega possède deux microcontrôleurs : ATmega328 et 16u2. Le 16u2 est normalement utilisé pour la communication USB vers série. Nous pouvons également l’utiliser comme microcontrôleur AVR autonome avec (ou sans) fonctions USB.

Gesture Slider Swiper avec Arduino

HoodLoader2 vous donne la possibilité de reprogrammer le 16u2 d’un Arduino Uno/Mega R3 normal avec des croquis personnalisés. Cela signifie que vous pouvez utiliser le 16u2 comme un AVR USB normal comme une carte Arduino Leonardo. Vous disposez d’un noyau USB-HID entièrement compatible.

Vous pouvez préparer votre Arduino UNO ou Arduino Mega pour qu’il agisse comme un clavier avec le HoodLoader2 bootloader en suivant les instructions de leur page wiki officielle.

Cartes Arduino prises en charge utilisant Arduino IDE 1.6.7 ou supérieur :

  • Uno (nécessite le chargeur de démarrage HoodLoader2)
  • Mega (nécessite le chargeur de démarrage HoodLoader2)
  • Léonard
  • (Pro) Micro

Pièces nécessaires

Voici une liste complète des composants dont vous avez besoin pour ce projet :

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1642566963 818 Gesture Slider Swiper avec Arduino

1642566963 44 Gesture Slider Swiper avec Arduino

Télécharger le code

Pour utiliser votre Arduino comme clavier, vous devez installer la bibliothèque HID.

Installation de la bibliothèque HID

  1. Cliquez ici pour télécharger le HID bibliothèque. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir HID-maître dossier
  3. Renommez votre dossier de HID-maître à CACHÉ
  4. Bouge le CACHÉ dossier dans le dossier des bibliothèques d’installation de votre IDE Arduino
  5. Enfin, rouvrez votre IDE Arduino

Copiez le code suivant dans votre IDE Arduino et chargez-le sur votre carte Arduino :

 /*
  * Author: Emmanuel Odunlade 
  * Complete Project Details https://www.raspberryme.com
  */
 
#include <HID.h>// include the library 

int swipe = 0;//slide
boolean left = false;
boolean right = false;
int maxD = 5;//(in cm) maximum distance from ultrasonic at which the obstruction will be considered a gesture
long int lastTouch = -1;
int resetAfter = 1000;//ms
int afterslideDelay = 500;//
int slideleft_Begin = -1;
int slideNone = 0;
int slideright_Begin =1;

//Declaring the connected pins
int lLed = 7;
int rLed = 6;
const int lEcho = 2;
const int lTrig = 3;
const int rEcho = 4;
const int rTrig = 5;

void setup(){
  pinMode(lLed,OUTPUT);
  pinMode(rLed,OUTPUT);
  pinMode(rEcho,INPUT);  
  pinMode(rTrig,OUTPUT);
  pinMode(lEcho,INPUT);
  pinMode(lTrig,OUTPUT);
  
  Serial.begin(9600);
    // Sends a clean report to the host. This is important because
  // the 16u2 of the Uno/Mega is not turned off while programming
  // so you want to start with a clean report to avoid strange bugs after reset.
  pressRawKeyboard(0, 0);
}

//get distance
//echo is input, trigger is output
unsigned long measureD(int input, int output){
  digitalWrite(output, HIGH);
  delayMicroseconds(10); 
  digitalWrite(output, LOW);
  long range= pulseIn(input, HIGH);
  int distance= range / 29 / 2;// to get distance in cm
  return distance;
}

//
boolean act (int input, int output, int led){
  int d = measureD(input,output);
  boolean pinActivated = false;
  if (d < maxD){
    digitalWrite(led,HIGH);
    pinActivated = true;
  }
  else{
    digitalWrite(led,LOW);
    pinActivated = false;
  }
  return pinActivated;
}

void slideNow(char directn){
  if ('R' == directn)
  {
    // press the right rrow key
    //Serial.println("F");
    pressRawKeyboard(0,RAW_KEYBOARD_RIGHT_ARROW); //modifiers + key
    pressRawKeyboard(0, 0); // release! Important
  }
  if ('L' == directn)
  {
    //press the left arrow key
    //Serial.println("B"); for debug
    pressRawKeyboard(0,RAW_KEYBOARD_LEFT_ARROW); // //modifiers + key
    pressRawKeyboard(0, 0); // release! Important
  }
  delay(afterslideDelay);
  swipe = slideNone;
}

void pressRawKeyboard(uint8_t modifiers, uint8_t key){
  uint8_t keys[8] = { 
    modifiers, 0, key, 0, 0, 0, 0, 0    }; //modifiers, reserved, key[0]
  HID_SendReport(HID_REPORTID_KeyboardReport, keys, sizeof(keys));
}


void loop(){
    left = act(lEcho,lTrig,lLed);
    right = act(rEcho,rTrig,rLed);
    if (left || right){
        lastTouch = millis();
    }
    if (millis() - lastTouch > resetAfter){
      swipe = 0;
      //serial.println(@reset slide& timer);
    }
    if (swipe >= slideNone){
      if ((left)&&(!right)){
        swipe = slideright_Begin;
      }
      if ((right)&&(swipe == slideright_Begin)){
        slideNow('R');
      }
    }
    if (swipe <= slideNone ){
      if ((right)&&(!left)){
        swipe = slideleft_Begin;
      }
      if ((left) && (swipe == slideleft_Begin)){
        slideNow('L');
      }
    }
    delay(50);
 }
 

Afficher le code brut

Schémas

Câblez votre circuit conformément au schéma ci-dessous :

1642566964 234 Gesture Slider Swiper avec Arduino

Maintenant, si vous déplacez une main devant le capteur à ultrasons gauche, votre Arduino envoie une commande clavier gauche entraînant le déplacement de la présentation vers la diapositive précédente.

Conclusion

J’ai toujours été fasciné par les interfaces utilisateur naturelles, l’idée de choses comme le sixième sens (sur lequel j’espère partager un tutoriel un jour) et généralement toutes les choses qui font de la télékinésie une possibilité.

Ainsi, je pense que plusieurs mises à jour pourraient être apportées à ce projet. Au lieu d’utiliser des capteurs à ultrasons et de contrôler les côtés, que se passe-t-il si nous attachons un casque d’électroencéphalogramme (EEG), puis faisons des choses plus complexes comme dessiner des formes et réaliser tout cela dans le cadre de simplicité fourni par Arduino.

Les possibilités sont donc infinies. Hackez-le !