IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

capteur hall rotatif


Sujet :

Arduino

  1. #1
    Membre confirmé
    Homme Profil pro
    pompier
    Inscrit en
    Janvier 2020
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : pompier

    Informations forums :
    Inscription : Janvier 2020
    Messages : 89
    Par défaut capteur hall rotatif
    bonjour,
    je souhaite créer un collectif pour mon simulateur de vol. (manette de gaz pour hélicoptère)
    Un capteur hall rotatif semble être le matériel idéal, afin de déterminer l'angle de la manette, ce qui correspondra à la puissance moteur.
    A priori, il est capable de savoir l'angle sur lequel un aimant a pivoté en récupérant le champ magnétique.

    Est-ce que l'un d'entre vous à déjà codé un projet avec ce type de matériel?

    Si quelqu'un peut m'apporter son aide ce serait super.
    bibliothèque et exemple de code ou projet.

    Merci par avance

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    On trouve des encodeurs absolus qui ont une interface I2C pour une transmission de données d'angle en 14 bits et sont fournis avec le petit aimant qui va bien. l’aimant lui-même doit être fixé sur l’arbre ou l’axe à mesurer, exactement dans l’alignement du capteur, à une distance de l’ordre du mm.

    Vous pouvez aussi en trouver qui sortent une tension proportionnelle à l'angle 0°-360° => 0V - 5V donc un simple analogRead() et un facteur d'échelle en fonction de la résolution de votre carte (10 bits, 12 bits ?) vous donnera l'angle.

    les premiers sont moins chers que les premiers car c'est juste un PCB avec le capteur et c'est à vous de faire le montage mécanique.

    Nom : capteurs.jpg
Affichages : 43
Taille : 140,7 Ko

  3. #3
    Membre confirmé
    Homme Profil pro
    pompier
    Inscrit en
    Janvier 2020
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : pompier

    Informations forums :
    Inscription : Janvier 2020
    Messages : 89
    Par défaut
    avant ta réponse, j'ai commandé le modèle rotation à 360°.

    du coup, sur la programmation arduino, sachant que je vais faire un joystick.

    J'imagine qu'il faut brancher le hall sur un PIN particulier?

    Ma question est de savoir s'il faut convertir la valeur d'entrée dans la carte ou pas, vu que ma carte arduino est reconnue directement comme un joystick et quelle bibliothèque, il me faut.

    le code suivant est réalisé par IA, vous semble-t-il correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <Joystick.h>
     
    // Création d'un joystick HID avec 1 axe (axe Z ici, mais tu peux choisir X, Y, etc.)
    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, 
                       JOYSTICK_TYPE_JOYSTICK,
                       0, 0,                  // Pas de boutons, pas de hat switch
                       false, false, true,    // Axe X, Y désactivés, axe Z activé
                       false, false, false,   // Pas de Rx, Ry, Rz
                       false, false,          // Pas de rudder, throttle
                       false, false, false);  // Pas de accél., frein, steering
     
    // Pin analogique du capteur Hall
    const int hallPin = A0;
     
    void setup() {
      // Initialisation du joystick
      Joystick.begin();
    }
     
    void loop() {
      // Lecture de la valeur brute (0–1023 pour Pro Micro en 10 bits ADC)
      int rawValue = analogRead(hallPin);
     
      // ⚖️ Mise à l'échelle (Arduino → Joystick HID)
      // La librairie Joystick accepte 0–1023 par défaut, donc pas besoin de map()
      // Mais tu peux calibrer ici si ton capteur sort moins que 0–5V
     
      Joystick.setZAxis(rawValue);
     
      delay(5); // Petit délai pour éviter de saturer l’USB
    }
    merci par avance pour l'aide

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 655
    Par défaut
    Bonjour,

    Sauf erreur, la sortie sera d'une gamme très inférieure à 0..1023 simplement parce que le joystick ne fait pas un tour complet mais plutôt 90° ou au max 180° (soyons optimiste). Il s'ensuit que la gamme de valeurs sera en général de 256 positions (ou au max de 512).

    Il faut placer l'encodeur rotatif afin que cette gamme ne couvre pas le passage à 0 (exemple 924..155 plus difficile à gérer que 200..455). Sauf si le point neutre est pile poil au zéro (et qu'il y reste), dans ce cas x < 512 positif et x >=512 négatif (le 9e bit = bit8 = bit de signe).

    En général, il faut prévoir au moins une procédure pour le repérage du neutre voire de la gamme effective (xmin, xmax).

    La mise à l'échelle sera donc nécessaire. map() fera le travail, c'est le plus simple même si ce n'est pas le plus efficace car elle utilise des flottants.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #5
    Membre confirmé
    Homme Profil pro
    pompier
    Inscrit en
    Janvier 2020
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : pompier

    Informations forums :
    Inscription : Janvier 2020
    Messages : 89
    Par défaut
    Effectivement Guesset, tu as raison, je n'ai pas une rotation complète, comme je ne l'avais pas avec initialement mon potentiomètre.

    Je n'ai pas eu à avoir recours à la fonction map() car je me suis servi de la fonction calibration du contrôleur de jeu ce qui a permis de ne s'occuper que de la zone de débattement.
    Il n'y a pas de raison à mon sens que ce ne soit pas pareil avec le hall.

Discussions similaires

  1. Paramétrer capteur à effef Hall sur Millénium 3 Crouzet
    Par Le Dan47 dans le forum Automation
    Réponses: 0
    Dernier message: 22/12/2018, 15h29
  2. Réponses: 2
    Dernier message: 08/04/2018, 11h41
  3. Capteur InfraRouge sur port com
    Par PoOky dans le forum Composants VCL
    Réponses: 12
    Dernier message: 12/01/2006, 15h31
  4. Utiliser le C pour récuperer données d'un capteur
    Par Malek_BAKLOUTI dans le forum C
    Réponses: 12
    Dernier message: 05/10/2005, 10h40
  5. comment récupérer l'état d'un capteur?
    Par r0d dans le forum Périphériques
    Réponses: 8
    Dernier message: 17/08/2005, 20h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo