Quel encodeur rotatif

Bonjour à tous,

oui, il y a plusieurs discussions sur les encodeurs rotatifs.
J'arrive avec une question matérielle afin de bien comprendre.
Quelques modèles m'intéressent, mais les conceptions me déconcertent un peu.
J'observe deux types:

Selon ce que je lis, EC-12 et EC-16 ont - comme les deux autres - la fonction du bouton-poussoir incluse.

Alors, comment est-il possible d'obtenir le même résultat avec 3 connexion qu'avec 5 ?

Le KY-040 est le modèle donné dans tous les tutos (comme celui-ci).
Le format du EC-12 m'intéresse davantage. J'irais bien avec un EC-12 si j'étais sûr de pouvoir exploiter les fonctions d'avant/arrière et le bouton poussoir.

Quant au EDR-11, il semble allumer les pattes 1, 2, 4, 8 pour composer des nombres. Le connaissez-vous?

Pouvez-vous m'éclairer ?

Bonjour,

Je ne vois pas pourquoi tu dis ça. Les KY-040 et EC-11 ont 5 broches.

Ou as tu vu que le EC12 avait 5 broches?

Bonsoir

l' EDR-11 est ce totalement différent , ce n'est pas un encodeur incrémental comme les autres
Autre usage.
En permanence on a sur 4 bits la valeur du nombre sélectionné (en binaire naturel ou en code Gray selon les modèles) . C'es assimilable à une roue codeuse décimale , ou hexadécimale selon le nombre de crans

Existe également pour les faces avants :

Bonsoir Patriboom

Seuls les KY-40 et EC-11 ont un bouton poussoir.

Pour lire ces codeurs rotatifs en avant et en arrière, il y a la bibliothèque Encoder.h:
image

Pour lire le bouton, OneButton.h ou JC_Button.h

Cordialement
jpbbricole

Ou as tu vu que le EC12 avait 5 broches?

Euh ...j'ai tout mis à l'envers.

Je corrige mon premier message afin de mettre les bonnes valeurs.

Oh, merci. vous confirmez ici ce que j'avais compris à partir de l'image.

Chez un distributeur de composants 'pro' comme Farnell c'est catalogué comme
Commutateur codé rotatif chaque modèle en vente ayant notice technique téléchargeable

Il existe aussi les encodeurs rotatifs absolus qui donnent également une info sur plusieurs bits mais n'ont pas de crans

Bonsoir tous,

merci pour toutes ces réponses.
Je confirme que la plupart des fiches techniques relatives à EC16 décrivent un bouton-poussoir (par exemple:

Rotational life: 30,000 cycles Min;
Push operating life: 20,000 cycles Min;

Mon défi est d'avoir 4 encodeurs rotatifs pour gérer RVB sur plusieurs bandes DEL, en plus de gérer quelques relais; tout cela dans un câble réseau à 8 brins. Je n'ai pas à me soucier de l'alimentation, ayant accès à une source locale.

Si je comprends bien, je pourrais mettre en commun les broches CLK de mes encodeurs, 4 CLK sur un brin; 4 brins distincts; un par encodeur pour les données et 3 brins pour la sélection de l'appareil contrôlé avec EDR-11
Ça occuperait mes 8 brins, sans me donner la chance d'exploiter les fonctions bouton-poussoir.

C'est la naissance d'un projet, je n'ai pas encore de code, mais la description ci-haut pourrait être gérée par quelque chose du genre:

#include <Encoder.h>

//Définition des broches
EDR11_pinA = 1;
EDR11_pinB = 2;
EDR11_pinC = 3;
Encodeur_R = 4;
Encodeur_V = 5;
Encodeur_B = 6;
Encodeur_T = 7;
Encodeur_CLK = 8;

long posiRouge  = -999;
long posiVert = -999;
long posiBleu = -999;
long posiTout = -999;


Encoder rouge(Encodeur_CLK, Encodeur_R);
Encoder vert(Encodeur_CLK, Encodeur_V);
Encoder bleu(Encodeur_CLK, Encodeur_B);
Encoder tout(Encodeur_CLK, Encodeur_T);

void setup() {
  Serial.begin(115400);
  delay(50);

 pinMode(EDR11_pinA, INPUT);
 pinMode(EDR11_pinB, INPUT);
 pinMode(EDR11_pinC, INPUT);
}

void loop() {
  long nouvRouge, nouvVert, nouvBleu, nouvTout;
  nouvRouge = rouge.read();
  nouvVert = vert.read();
  nouvBleu = bleu.read();
  nouvTout = tout.read();

 //On a changé au moins une des valeurs d'encodeur 
 if (nouvRouge != posiRouge || nouvVert != posiVert || nouvBleu != posiBleu || nouvTout != posiTout) {

if (EDR11_pinA == HIGH && EDR11_pinB == HIGH && EDR11_pinC == HIGH ) {
    ///Agissons selon les règles de la situation 7
} else if (EDR11_pinA == HIGH && EDR11_pinB == HIGH && EDR11_pinC == LOW)  {
    ///Agissons selon les règles de la situation 7
} else if (EDR11_pinA == HIGH && EDR11_pinB == LOW && EDR11_pinC == HIGH)  {
    ///Agissons selon les règles de la situation 6
} else if (EDR11_pinA == HIGH && EDR11_pinB == LOW && EDR11_pinC == LOW)  {
    ///Agissons selon les règles de la situation 5
} else if (EDR11_pinA == LOW && EDR11_pinB == HIGH && EDR11_pinC == HIGH)  {
    ///Agissons selon les règles de la situation 4
} else if (EDR11_pinA == LOW && EDR11_pinB == HIGH && EDR11_pinC == LOW)  {
    ///Agissons selon les règles de la situation 3
} else if (EDR11_pinA == LOW && EDR11_pinB == LOW && EDR11_pinC == HIGH)  {
    ///Agissons selon les règles de la situation 2
} else if (EDR11_pinA == LOW && EDR11_pinB == LOW && EDR11_pinC == LOW)  {
    ///Agissons selon les règles de la situation 1
}

}

}

Bonjour Patriboom

Dans ton lien, seul une partie ont un bouton poussoir:

Avec la bibliothèque Encoder.h, je doute que cela fonctionne, à essayer avant.

Cordialement
jpbbricole

Oh, merci. Je n'avais pas remarqué cela.

Je ne sais plus trop où, mais il me semble avoir vu que la pulsation CLK est générée par le composant et non par le micro-contrôleur. Je serais donc, dans ce cas, forcé d'abandonner cette économie de fil! Ouille! Il faut vraiment que j'entre toutes les informations dans 8 conducteurs! Beau défi!

A mon humble avis, tu peut mettre en commun le CLK et une broche du SW pour tous tes encodeurs
-Ca fait 1 fil pour tous
Ensuite, pour 4 encodeurs, il y a
-4 voies A
-4 voies B
-4 voies SW

Ca fait 13 fils.

Les voies A et B sont nécessaires pour déterminer le sens de rotation, dans 1 sens, tu incrémente, dans l'autre tu décremente par exemple, si tu t'en fous du sens tu peux économiser 4 fils, on passe à 9.

Si tu fais un décodeur 4 to 3 pour les SW, tu économises 1 fil
000 pas de SW
001 SW1
010 SW2
011 SW3
100 SW4

...

Non ce n'est pas possible. Si tous les CLK sont reliés comment sauras-tu lequel a bougé?

Éventuellement câbler les encodeurs en matrice comme pour les claviers mais là je ne crois pas qu'il existe une librairie qui fasse cela il va falloir la créer. Il faudra mettre des diodes en série avec les sorties des encodeurs car il y a toujours un contact fermé lorsque l'encodeur est statique.

Quel est la longueur du câble ?

Sur les encodeurs, il y a 3 broches souvent repérées C, A, B.
C : ce n'est pas le CLK c'est le commun de l'encodeur
A et B : 2 signaux déphasés (normalement) de 90°.

Certains modules présentent CLK et Data mais c'est un abus de langage cela correspond aux sorties A et B.

abus de langage et/ou 'habitude prise'........

Le A des encodeurs DT11ou EC11 'nus' est souvent renommé CLK par les fabricants de modules
Le B renommé DT

L'auteur de la bibliothèque Encoder les nomme Pin1 et PIn2 .......

A priori j'ai un doute sur le rendu de la bibliothèque Encoder avec une série de connections/déconnections à un encodeur, mais bon il y a peut être une combine acceptable...

Effectivement, j'ai fais une erreur dans les noms

C c'est le commun
CLK, une voie
DT l'autre voie

Voilà où je me suis fait prendre. J'ai pensé que CLK était comme dans d'autres composants: une pulsation.

J'avais vu cela dans le code Encoder.h et dans les exemples, mais je ne comprenais pas.

Là, tout s'explique.

Bref: des encodeurs comme EC11 ont besoin de deux brins chacun en plus du commun.
Le commun pourrait être commun à plusieurs encodeurs; puisque le commun n'apparaît sur aucune description de broche, je suppose que c'est le VCC.

Même si je réduis de 4 à 3 mon nombre d'encodeurs, j'ai encore besoin de 7 brins pour eux. Il ne m'en reste donc qu'un brin pour le sélecteur.

Matière à réflexion !
Ça vaut la peine d'en parler ici. Merci à tous.

Bonjour Patriboom

Sur ces codeurs ainsi que sur les boutons, le commun est en général le GND.
Dans les bibliothèques, en général, c'est en mode PULLUP, par défaut, qu'elles sont paramétrées, comme les bibliothèque pour le traitement de boutons par ailleur.

Quelle est la longueur de ton câble?

A+
Cordialement
jpbbricole

Merci jpbbricole

mon câble aura environ 8 mètres

Bonsoir Patriboom

Tu pourrais envisager un Arduino slave comme récepteur des données de l'Arduino master qui lui aurait les encodeurs et transmettrai par RS485.

Bonne soirée
jpbbricole