1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

DRO DRO avec Arduino et PAC chinois

Discussion dans 'Arduino' créé par scrachi, 6 Juin 2016.

  1. scrachi

    scrachi Apprenti

    Messages:
    165
    Inscrit:
    20 Novembre 2014
    Localité:
    06
    DRO avec Arduino et PAC chinois
    Bonjour à tous,

    On ma demande dans un autre poste de faire une petite présentation de mon projet de DRO sur base de PAC chinois et d'Arduino.

    Le projet étant toujours en cours et non abouti j'étofferais ce poste au fur et a mesure avec explication ,schémas de câblages, fichier d'impression 3D pour le/les boîtiers...

    Tout d'abord une contrainte que je me suis fixer est un coût le plus bas possible (je suis un radin assumé :mrgreen:), et la seconde contrainte (ça c'est une déformation professionnel...) avoir un projet qui peut à tout moment évoluer (ajouter des axes un système de mesure de vitesse ...)

    Enfin si vous avez des questions ou besoin d'une précision n’hésitez surtout pas!

    Pour ce qui est de la présentation j’éditerais ce premier poste a chaque mise à jour pour ne pas avoir la présentation qui se perd.

    1. Liste du matériel


    • Tout d’abord un Arduino, je pars sur un Nano qui est tout petit donc un super gain de place pour mes petite machines et qui me permettra de gérer jusque à 4 axes avec ces 12 I/O (il me faut 6 entrées pour l'écran LCD et 2 par axe). Si vous avez besoin de plus d'axe, d'un second LCD... vous pouvez prendre d'autre Arduino ça fonctionnera exactement de la même manière (avec un MEGA + un écran LCD, vous pourrez gérer 23 axes...)
    • Un PAC digital par axe, qui dispose d'un port DATA
    • (Optionnel) un cable avec connecteur DATA par PAC, on pourra également venir souder nos fils directement.
    • 2 résistance de 10K par axe
    • 2 transistor type NPN par axe
    • 2 résistance de 10K pour gérer l’alimentation des PACS
    • Un écran LCD (j'ai prix un LCD-BLUE-I2C qui a une taille de 4x20 caractère mais ça peut également fonctionné avec un 2x19
    • Un potentiomètre de 10K (pour régler le contraste du LCD)
    • Une résistance de 220 ohms pour le rétroéclairage de l'écran LCD
    • Une alimentation de 5V pour alimenter tout ça
    • Un tas de fil et de quoi souder
    Tout cela se trouve pour pas grand chose sur Ebay ou chez un fournisseur d’électronique (Conrad, selectronic, go tronic...


    2. Câblage


    Voila le schéma de câblage, je l'ai fait en deux version, schématique et en version "graphique" pour que ça parle au plus grand nombre. Le LCD est un 2x19 sur les schémas, mais le câblage est exactement le même pour un 4x20.

    En plus des schémas, je met également à votre disposition le fichier Fritzing.

    Pour le câblage sur les PAC, l'ordre est le suivant :
    [​IMG]


    Avec la correspondance suivante:
    GND = GND
    DATA = SDA
    CLOCK = CLK
    +1.5V = VCC

    Le schéma graphique :

    [​IMG]


    Et le schéma traditionnel :

    [​IMG]


    Et enfin voila le schéma pour le câblage sur une platine de 24x18 :

    [​IMG]


    Et enfin vous pouvez télécharger le fichier Fritzing des shémas ici : =>ICI<=
    Et le fichier Fritzing du schéma platine ici : =>ICI<=

    Les PAC sont alimenter directement par le circuit via le 3.3V qui est abaissé à 1.5V par un pont diviseur de tension constitué de 2 résistance de 10K, il est donc nécessaire de retirer leur pile

    Les circuit de résistances et transistor sont utilisé car la encore les PACs utilisant un signal de 1.5V, ce n'est pas suffisant pour être lu par l'Arduino, il faut donc le "convertir" à minimum 3V.
    Si vous désirez rajouter des axes, il suffit de répéter le petit circuit constituer de deux transistor NPN et 4 résistance de 10K par axe.


    Une fois le tout câblé, on devrai avoir quelque chose qui ressemble à ça :
    [​IMG]

    [​IMG]

    [​IMG]


    Les PAC vont venir se connecter sur les pins de gauche (X à gauche, Y au milieu et Z à droite),
    et pour plus de flexibilité , j'ai également mis une rangé de pins pour pouvoir connecter l'écran, et non pas souder directement.

    L'écran et chacune des entrées data ont été teste indépendamment avec un petit programme.

    On peut maintenant passer au code.


    3. Programme


    Voila un premier code fonctionnel, il est susceptible d'évoluer :
    Code:
    /*************************************************************************************************/
    // DRO.ino
    /*************************************************************************************************/
    // AUTHORS :  Scrachi
    // CREATED :  2016-06-10
    // INSPIRED BY :martin's useless ans useful creations
    //  < https://sites.google.com/site/marthalprojects/home/arduino/arduino-reads-digital-caliper >
    /*************************************************************************************************/
    // Recuperation de donnees depuis des pieds a coulisse "chinois"
    // pour affichage sur LCD 20*4
    /*************************************************************************************************/
    
    #include <LiquidCrystal.h>
    
    int sign;
    long value;
    float resu;
    int resuTmp;
    char msg[20];
    
    
    
    int datapinX = 8;
    int clockpinX = 7;
    unsigned long tempmicrosX;
    
    int datapinY = 10;
    int clockpinY = 9;
    unsigned long tempmicrosY;
    
    int datapinZ = 12;
    int clockpinZ = 11;
    unsigned long tempmicrosZ;
    
    LiquidCrystal lcd(6,5,4,3,2,1);
    
    
    void setup() {
    
      lcd.begin(20, 4);
      pinMode(clockpinX, INPUT_PULLUP);
      pinMode(datapinX, INPUT_PULLUP);
    
      pinMode(clockpinY, INPUT_PULLUP);
      pinMode(datapinY, INPUT_PULLUP);
    
      pinMode(clockpinZ, INPUT_PULLUP);
      pinMode(datapinZ, INPUT_PULLUP);
    
    }
    
    
    void loop () {
    
      //PAC X
      traitement(clockpinX, datapinX, tempmicrosX, 1);
      //PAC Y
      traitement(clockpinY, datapinY, tempmicrosY, 2);
      //PAC Z
      traitement(clockpinZ, datapinZ, tempmicrosZ, 3);
    }
    
    
    /***********************************************************/
    /**************FONCTIONS ET PROCEDURES UTILS****************/
    /***********************************************************/
    
    //procedure de traitement des donnees d'un PAC /!\ IL FAUT IMPERATIVEMENT QUE TOUS LES PACS SOIT ALLUME SINON CA BLOQUERA
    void traitement(int clockpin, int datapin, unsigned long temps, int axe){
      while (digitalRead(clockpin)==HIGH) {} // Si clock et LOW on attend qu'il devienne HIGH
      temps=micros();
      while (digitalRead(clockpin)==LOW) {} //On attend la fin  wait for the end of the HIGH pulse
      if ((micros()-temps)>500) // Si l'impulsion HIGH est plus longue que 500 millis secondes on demmare une nouvelle sequence
      decode(clockpin, datapin, axe); //On decode la sequence et on l'affiche
    }
    
    
    //procedure pour decoder et afficher le retour d'un PAC
    void decode(int clockpin, int datapin, int axe) {
      sign=1;
      value=0;
      for (int i=0;i<23;i++) {
      while (digitalRead(clockpin)==HIGH) {}
      while (digitalRead(clockpin)==LOW) {}
      if (digitalRead(datapin)==HIGH) {
      if (i<20) {
      value|= 1<<i;
      }
      if (i==20) {
      sign=-1;
      }
      }
      }
    
      resu=(value*sign)/100.00;
      //On affiche le resultat de l'axe correspondant
    
      switch (axe) {
      case 1:
      lcd.setCursor(0, 0);
      // On est oblige de traduire le float en 2 int car sprintf ne supporte pas les float sur Arduino...
      resuTmp = ((int)resu - resu) * 100;
      sprintf(msg,"X : %d.%d  ", (int)resu, abs(resuTmp));
      lcd.print(msg);
      break;
      case 2:
      lcd.setCursor(0, 1);
      resuTmp = ((int)resu - resu) * 100;
      sprintf(msg,"Y : %d.%d  ", (int)resu, abs(resuTmp));
      lcd.print(msg);
      break;
      case 3:
      lcd.setCursor(0, 2);
      resuTmp = ((int)resu - resu) * 100;
      sprintf(msg,"Z : %d.%d  ", (int)resu, abs(resuTmp));
      lcd.print(msg);
      break;
    
      }
    }
    

    4. Boîtier


    J'ai réaliser un boîtier à imprimer pour enfermer tout ça. Le boîtier comporte à droite le potentiomètre pour régler le contraste du lcd et un bouton à bascule pour allumer ou éteindre la DRO. Sur le haut l'entré de l'alimentation, a gauche les PACs et enfin les trois bouton en facade sont pour la remise à zéro des PACs.

    J'ai également fixer à l'arrière un élément de flexible d’arrosage pour avoir une DRO que l'on peut placer comme on veut.

    Vous trouverez dans l'archive suivante les fichiers SolidWorks et STL du boîtier et de son couvercle :
    BoitierDRO.zip

    Voila en image ce que cela donne :

    [​IMG]


    [​IMG]


    Mickaël
     
    Dernière édition: 10 Juillet 2016
  2. Fran

    Fran Compagnon

    Messages:
    813
    Inscrit:
    19 Octobre 2012
    Localité:
    Arbois jura
  3. vibram

    vibram Compagnon

    Messages:
    786
    Inscrit:
    15 Mars 2014
    DRO avec Arduino et PAC chinois
    génial !
    j'allais justement y songer pour ma F3 ... :)
    je vais suivre avec grand interet
     
  4. pinou29

    pinou29 Compagnon

    Messages:
    1 006
    Inscrit:
    18 Mars 2009
    Localité:
    Toulon ( Var )
    DRO avec Arduino et PAC chinois
    Bonjour.
    Comme beaucoup, je vais suivre ce post avec beaucoup d’intérêt.
    Merci.
    Bernard.
     
  5. metalux

    metalux Compagnon

    Messages:
    2 245
    Inscrit:
    11 Janvier 2009
    Localité:
    nord
    DRO avec Arduino et PAC chinois
    bonjour
    bonne initiative :smt023
    il y a quelques réalisations ici dont certaines classées sans suites ou mortes dans l'œuf comme on dit..

    a suivre donc!
     
  6. scrachi

    scrachi Apprenti

    Messages:
    165
    Inscrit:
    20 Novembre 2014
    Localité:
    06
    DRO avec Arduino et PAC chinois
    Merci à tous pour votre soutien :wink:!

    Je viens de poster une première version des schémas.

    Encore une fois si vous avez la moindre question, n’hésitez pas!

    Mickaël
     
  7. vibram

    vibram Compagnon

    Messages:
    786
    Inscrit:
    15 Mars 2014
    DRO avec Arduino et PAC chinois
    Pourrais-tu mettre un lien sur les Pac que tu as choisi stp ?
    Tu peux aussi abaisser de 3.3v à 1.5v, mais bon ça ne doit pas faire de grosse différence par rapport à 5v vers 1.5v
    Cela semble prometteur en tout cas
     
    Dernière édition: 6 Juin 2016
  8. gégé62

    gégé62 Compagnon

    Messages:
    1 390
    Inscrit:
    26 Février 2013
    Localité:
    Harnes (Pas de Calais)
    Département:
    62440
    DRO avec Arduino et PAC chinois
    bonjour
    j'avais déjà posé la question je crois, mais ça ne veut pas rentrer...:smt021

    c'est quoi DRO ?
     
  9. scrachi

    scrachi Apprenti

    Messages:
    165
    Inscrit:
    20 Novembre 2014
    Localité:
    06
    DRO avec Arduino et PAC chinois
    Oui effectivement je peut également récupérer le 3.3V de l'Arduino, mais le principe reste le même. :wink:

    DRO : Digital ReadOut, c'est une visu digital en français.

    Mickaël
     
  10. gégé62

    gégé62 Compagnon

    Messages:
    1 390
    Inscrit:
    26 Février 2013
    Localité:
    Harnes (Pas de Calais)
    Département:
    62440
    DRO avec Arduino et PAC chinois
    @scrachi merci de toutes ces infos très détaillées....par contre, je ne comprends pas grand-chose parce que n'étant pas familier des machines 3D nje ne comprends pas de quoi il est question au départ. Ça me gêne d'être largué dès le départ sur un projet arduino, car j'aime bien ça....

    - quel est le rôle d'arduino dans le projet (mesurer la position en x, y et z, avec les PAC, et transmettre sur l'écran come une visu ?)
    - quel est le rôle des transistors ?

    merci !
     
  11. wika58

    wika58 Modérateur

    Messages:
    10 369
    Inscrit:
    17 Décembre 2006
    Localité:
    F-54560 / Lorraine
    DRO avec Arduino et PAC chinois
    - OUI
    - Adapter les niveaux de tensions entre les signaux PAC (1.5 V) et les E/S Arduino (5V)
     
  12. metalux

    metalux Compagnon

    Messages:
    2 245
    Inscrit:
    11 Janvier 2009
    Localité:
    nord
    DRO avec Arduino et PAC chinois
    HUMM..:smt017 sans vouloir casser la baraque c'est le schéma classique maintes fois rencontré :wink:
     
  13. scrachi

    scrachi Apprenti

    Messages:
    165
    Inscrit:
    20 Novembre 2014
    Localité:
    06
    DRO avec Arduino et PAC chinois
    Alors si je peut me permettre je vais faire une petite précision par rapport à la réponse de Wika. Le rôle de l'Arduino n'est pas vraiment de mesurer la position car c'est les PAC qui s'en occupe. Le rôle est d'interprété le signal des pacs, et de le convertir pour un affichage "lisible" par un oeuil humain, dans notre cas, un affichage sur LCD.

    Pour les transistor, Wika à parfaitement répondu.


    Mickaël
     
  14. scrachi

    scrachi Apprenti

    Messages:
    165
    Inscrit:
    20 Novembre 2014
    Localité:
    06
    DRO avec Arduino et PAC chinois
    Effectivement, c'est un schéma basic, la fonction de conversion est également basic, donc on peut retrouver ce schéma pour plein de montage différent. :wink:

    Mickaël
     
  15. Precis84

    Precis84 Compagnon

    Messages:
    836
    Inscrit:
    7 Décembre 2008
    DRO avec Arduino et PAC chinois
    Bonsoir
    Merci pour le schéma graphique :-D pour le coup c'est parlant pour les nuls ....tel que moi .
    (tu as marqué 2 fois PACZ ). Je vais essayer de suivre.
    claude
     
Chargement...
Articles en relation
  1. nopxor
    Réponses:
    54
    Affichages:
    1 477
  2. jpbbricole
    Réponses:
    3
    Affichages:
    610
  3. jpbbricole
    Réponses:
    9
    Affichages:
    383
  4. gégé62
    Réponses:
    7
    Affichages:
    987
  5. seb31
    Réponses:
    2
    Affichages:
    166

Partager cette page